From 16e90ddd357f9c7c06045f29132d369d13028e71 Mon Sep 17 00:00:00 2001 From: Michael Li Date: Mon, 17 Oct 2022 10:27:35 -0400 Subject: [PATCH] fix(bats): Fix flakiness in sessions.bats tests (#2537) The sessions.bats tests were seeing some flaky behavior when listing sessions but not getting the expected amount back. This is due to the connect_nc command that is currently used, which will immediately set the session to be "canceled" once it returns. This can cause subsequent operations to get unexpected results (sometimes, listing sessions would return an empty list if the created sessions go to a "terminated" state). --- internal/tests/cli/boundary/_connect.bash | 1 + internal/tests/cli/boundary/_sessions.bash | 8 +++---- internal/tests/cli/boundary/sessions.bats | 25 ++++++++++++++-------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/internal/tests/cli/boundary/_connect.bash b/internal/tests/cli/boundary/_connect.bash index efc1faf2c..5c4a36a02 100644 --- a/internal/tests/cli/boundary/_connect.bash +++ b/internal/tests/cli/boundary/_connect.bash @@ -1,4 +1,5 @@ function connect_nc() { local id=$1 + # Note: When this command returns, the session immediately goes into a "canceling" state echo "foo" | boundary connect -exec nc -target-id $id -- {{boundary.ip}} {{boundary.port}} } diff --git a/internal/tests/cli/boundary/_sessions.bash b/internal/tests/cli/boundary/_sessions.bash index 176fc53ff..b31dacd36 100644 --- a/internal/tests/cli/boundary/_sessions.bash +++ b/internal/tests/cli/boundary/_sessions.bash @@ -1,11 +1,11 @@ load _authorized_actions -function list_sessions() { - boundary sessions list -scope-id $1 -format json +function list_sessions_include_terminated() { + boundary sessions list -scope-id $1 -include-terminated -format json } -function count_sessions() { - list_sessions $1 | jq '.items | length' +function count_sessions_include_terminated() { + list_sessions_include_terminated $1 | jq '.items | length' } function cancel_session() { diff --git a/internal/tests/cli/boundary/sessions.bats b/internal/tests/cli/boundary/sessions.bats index bcdb14272..fd4f3bfe9 100644 --- a/internal/tests/cli/boundary/sessions.bats +++ b/internal/tests/cli/boundary/sessions.bats @@ -7,6 +7,7 @@ load _helpers @test "boundary/session: admin user can connect to default target" { run login $DEFAULT_LOGIN + echo "$output" [ "$status" -eq 0 ] run connect_nc $DEFAULT_TARGET @@ -21,11 +22,11 @@ load _helpers @test "boundary/session/connect: unpriv user can connect to default target" { run login $DEFAULT_UNPRIVILEGED_LOGIN - echo $output + echo "$output" [ "$status" -eq 0 ] run connect_nc $DEFAULT_TARGET - echo $output + echo "$output" [ "$status" -eq 0 ] # Run twice so we have two values for later testing @@ -39,15 +40,18 @@ load _helpers # So for now, verify they're not the same. @test "boundary/session: verify admin and unpriv user see different counts" { run login $DEFAULT_UNPRIVILEGED_LOGIN + echo "$output" [ "$status" -eq 0 ] - run count_sessions $DEFAULT_P_ID + run count_sessions_include_terminated $DEFAULT_P_ID + echo "Number of sessions (unpriv): $output" [ "$status" -eq 0 ] unpriv_sessions="$output" run login $DEFAULT_LOGIN [ "$status" -eq 0 ] - run count_sessions $DEFAULT_P_ID + run count_sessions_include_terminated $DEFAULT_P_ID + echo "Number of sessions (admin): $output" [ "$status" -eq 0 ] admin_sessions="$output" @@ -57,8 +61,10 @@ load _helpers @test "boundary/session: verify read and cancellation permissions on admin session" { # Find an admin session run login $DEFAULT_LOGIN + echo "$output" [ "$status" -eq 0 ] - run list_sessions $DEFAULT_P_ID + run list_sessions_include_terminated $DEFAULT_P_ID + echo "$output" [ "$status" -eq 0 ] id=$(echo "$output" | jq -r "[.items[]|select(.user_id == \"$DEFAULT_USER\")][0].id") @@ -74,19 +80,20 @@ load _helpers run login $DEFAULT_LOGIN [ "$status" -eq 0 ] run read_session $id + echo "$output" [ "$status" -eq 0 ] - echo $output + echo "$output" run cancel_session $id [ "$status" -eq 0 ] - echo $output + echo "$output" } @test "boundary/session: verify read and cancellation permissions on unpriv session" { # Find an unpriv session run login $DEFAULT_UNPRIVILEGED_LOGIN [ "$status" -eq 0 ] - run list_sessions $DEFAULT_P_ID - echo $output + run list_sessions_include_terminated $DEFAULT_P_ID + echo "$output" [ "$status" -eq 0 ] id=$(echo "$output" | jq -r "[.items[]|select(.user_id == \"$DEFAULT_UNPRIVILEGED_USER\")][0].id")