diff --git a/source/credentials_provider_sts_web_identity.c b/source/credentials_provider_sts_web_identity.c index 229304f6..f96b38ee 100644 --- a/source/credentials_provider_sts_web_identity.c +++ b/source/credentials_provider_sts_web_identity.c @@ -527,9 +527,7 @@ static void s_on_stream_complete_fn(struct aws_http_stream *stream, int error_co struct sts_web_identity_user_data *user_data = data; struct aws_credentials_provider_sts_web_identity_impl *impl = user_data->sts_web_identity_provider->impl; - struct aws_http_connection *connection = impl->function_table->aws_http_stream_get_connection(stream); impl->function_table->aws_http_stream_release(stream); - impl->function_table->aws_http_connection_manager_release_connection(impl->connection_manager, connection); /* * On anything other than a 200, if we can retry the request based on diff --git a/tests/credentials_provider_sts_web_identity_tests.c b/tests/credentials_provider_sts_web_identity_tests.c index 066d2615..332e8651 100644 --- a/tests/credentials_provider_sts_web_identity_tests.c +++ b/tests/credentials_provider_sts_web_identity_tests.c @@ -71,6 +71,8 @@ struct mock_connection_manager { struct aws_allocator *allocator; aws_http_connection_manager_shutdown_complete_fn *shutdown_complete_callback; void *shutdown_complete_user_data; + + int count; }; static struct aws_http_connection_manager *s_aws_http_connection_manager_new_mock( @@ -86,6 +88,7 @@ static struct aws_http_connection_manager *s_aws_http_connection_manager_new_moc static void s_aws_http_connection_manager_release_mock(struct aws_http_connection_manager *manager) { struct mock_connection_manager *mock_manager = (struct mock_connection_manager *)manager; + AWS_FATAL_ASSERT(mock_manager->count == 0 && "count should dropped to zero when the manager is gone."); mock_manager->shutdown_complete_callback(mock_manager->shutdown_complete_user_data); aws_mem_release(mock_manager->allocator, mock_manager); } @@ -94,12 +97,10 @@ static void s_aws_http_connection_manager_acquire_connection_mock( struct aws_http_connection_manager *manager, aws_http_connection_manager_on_connection_setup_fn *callback, void *user_data) { - - (void)manager; - (void)callback; - (void)user_data; + struct mock_connection_manager *mock_manager = (struct mock_connection_manager *)manager; if (s_tester.is_connection_acquire_successful) { + mock_manager->count++; callback((struct aws_http_connection *)1, AWS_OP_SUCCESS, user_data); } else { aws_raise_error(AWS_ERROR_HTTP_UNKNOWN); @@ -111,8 +112,11 @@ static int s_aws_http_connection_manager_release_connection_mock( struct aws_http_connection_manager *manager, struct aws_http_connection *connection) { - (void)manager; - (void)connection; + struct mock_connection_manager *mock_manager = (struct mock_connection_manager *)manager; + mock_manager->count--; + ASSERT_TRUE( + connection == (struct aws_http_connection *)1 && "the released connection should be the same as vended one"); + ASSERT_TRUE(mock_manager->count >= 0 && "count should always be positive"); return AWS_OP_SUCCESS; }