@@ -45,6 +45,8 @@ struct aws_s3express_provider_tester {
4545 struct aws_uri mock_server ;
4646 struct aws_s3_client * client ;
4747
48+ aws_simple_completion_callback * on_provider_shutdown_callback ;
49+ void * shutdown_user_data ;
4850 int error_code ;
4951};
5052
@@ -252,6 +254,87 @@ TEST_CASE(s3express_provider_get_credentials_mock_server) {
252254 return AWS_OP_SUCCESS ;
253255}
254256
257+ struct aws_s3express_credentials_provider * s_s3express_credentials_provider_factory (
258+ struct aws_allocator * allocator ,
259+ struct aws_s3_client * client ,
260+ aws_simple_completion_callback on_provider_shutdown_callback ,
261+ void * shutdown_user_data ,
262+ void * factory_user_data ) {
263+ (void )allocator ;
264+ (void )client ;
265+ (void )on_provider_shutdown_callback ;
266+ (void )shutdown_user_data ;
267+ (void )factory_user_data ;
268+ s_s3express_tester .on_provider_shutdown_callback = on_provider_shutdown_callback ;
269+ s_s3express_tester .shutdown_user_data = shutdown_user_data ;
270+ struct aws_s3express_credentials_provider_default_options options = {
271+ .client = client ,
272+ // .shutdown_complete_callback = s_on_shutdown_complete,
273+ // .shutdown_user_data = &s_s3express_tester,
274+ .mock_test .bg_refresh_secs_override = s_bg_refresh_secs_override ,
275+ };
276+ struct aws_s3express_credentials_provider * provider =
277+ aws_s3express_credentials_provider_new_default (allocator , & options );
278+ struct aws_s3express_credentials_provider_impl * impl = provider -> impl ;
279+ impl -> mock_test .endpoint_override = & s_s3express_tester .mock_server ;
280+ impl -> mock_test .s3express_session_is_valid_override = s_s3express_session_always_true ;
281+
282+ return provider ;
283+ }
284+
285+ TEST_CASE (s3express_provider_get_credentials_kms_headers_mock_server ) {
286+ (void )ctx ;
287+
288+ struct aws_s3_tester tester ;
289+ ASSERT_SUCCESS (aws_s3_tester_init (allocator , & tester ));
290+ ASSERT_SUCCESS (s_s3express_tester_init (allocator ));
291+
292+ struct aws_s3_tester_client_options client_options = {
293+ .part_size = MB_TO_BYTES (5 ),
294+ .tls_usage = AWS_S3_TLS_DISABLED ,
295+ .s3express_provider_override_factory = s_s3express_credentials_provider_factory ,
296+ .factory_user_data = NULL ,
297+ };
298+
299+ struct aws_s3_client * client = NULL ;
300+ ASSERT_SUCCESS (aws_s3_tester_client_new (& tester , & client_options , & client ));
301+
302+ struct aws_byte_cursor object_path = aws_byte_cursor_from_c_str ("/sse_kms" );
303+ char uri [1024 ] = {'\0' };
304+ snprintf (uri , sizeof (uri ), "" PRInSTR "sse_kms?session=" , AWS_BYTE_CURSOR_PRI (g_mock_server_uri ));
305+ struct aws_byte_cursor uri_cursor = aws_byte_cursor_from_c_str (uri );
306+ aws_uri_clean_up (& s_s3express_tester .mock_server );
307+ ASSERT_SUCCESS (aws_uri_init_parse (& s_s3express_tester .mock_server , allocator , & uri_cursor ));
308+
309+ struct aws_s3_tester_meta_request_options put_options = {
310+ .allocator = allocator ,
311+ .meta_request_type = AWS_S3_META_REQUEST_TYPE_PUT_OBJECT ,
312+ .client = client ,
313+ .checksum_algorithm = AWS_SCA_CRC32 ,
314+ .validate_get_response_checksum = false,
315+ .put_options =
316+ {
317+ .object_size_mb = 10 ,
318+ .object_path_override = object_path ,
319+ },
320+ .mock_server = true,
321+ .use_s3express_signing = true,
322+ .sse_type = AWS_S3_TESTER_SSE_KMS ,
323+ };
324+ struct aws_s3_meta_request_test_results out_results ;
325+ aws_s3_meta_request_test_results_init (& out_results , allocator );
326+ ASSERT_SUCCESS (aws_s3_tester_send_meta_request_with_options (& tester , & put_options , & out_results ));
327+ aws_s3_meta_request_test_results_clean_up (& out_results );
328+ aws_s3_client_release (client );
329+
330+ /* Call the provider shutdown callback to finish cleanup */
331+ s_s3express_tester .on_provider_shutdown_callback (s_s3express_tester .shutdown_user_data );
332+ ASSERT_SUCCESS (s_s3express_tester_cleanup ());
333+ aws_s3_tester_clean_up (& tester );
334+
335+ return AWS_OP_SUCCESS ;
336+ }
337+
255338TEST_CASE (s3express_provider_get_credentials_multiple_mock_server ) {
256339 (void )ctx ;
257340
0 commit comments