@@ -47,6 +47,77 @@ static int s_test_s3_client_create_destroy(struct aws_allocator *allocator, void
4747 return 0 ;
4848}
4949
50+ AWS_TEST_CASE (test_s3_client_max_active_connections_override , s_test_s3_client_max_active_connections_override )
51+ static int s_test_s3_client_max_active_connections_override (struct aws_allocator * allocator , void * ctx ) {
52+ (void )allocator ;
53+ (void )ctx ;
54+
55+ struct aws_s3_tester tester ;
56+ AWS_ZERO_STRUCT (tester );
57+ ASSERT_SUCCESS (aws_s3_tester_init (allocator , & tester ));
58+
59+ struct aws_s3_client_config client_config = {
60+ .max_active_connections_override = 10 ,
61+ };
62+
63+ ASSERT_SUCCESS (aws_s3_tester_bind_client (& tester , & client_config , 0 ));
64+
65+ struct aws_s3_client * client = aws_s3_client_new (allocator , & client_config );
66+
67+ ASSERT_TRUE (client -> max_active_connections_override == client_config .max_active_connections_override );
68+
69+ aws_s3_client_release (client );
70+ aws_s3_tester_clean_up (& tester );
71+
72+ return 0 ;
73+ }
74+
75+ AWS_TEST_CASE (test_s3_client_get_max_active_connections , s_test_s3_client_get_max_active_connections )
76+ static int s_test_s3_client_get_max_active_connections (struct aws_allocator * allocator , void * ctx ) {
77+ (void )ctx ;
78+
79+ struct aws_s3_tester tester ;
80+ AWS_ZERO_STRUCT (tester );
81+ ASSERT_SUCCESS (aws_s3_tester_init (allocator , & tester ));
82+
83+ const uint32_t num_connections_per_vip_override = 5 ;
84+
85+ struct aws_s3_client * mock_client = aws_s3_tester_mock_client_new (& tester );
86+ * ((uint32_t * )& mock_client -> ideal_vip_count ) = 5 ;
87+ * ((uint32_t * )& mock_client -> max_active_connections_override ) = 0 ;
88+
89+ /* Behavior should not be affected by max_active_connections_override since it is 0. */
90+ ASSERT_TRUE (
91+ aws_s3_client_get_max_active_connections (mock_client , 0 ) ==
92+ mock_client -> ideal_vip_count * g_max_num_connections_per_vip );
93+ ASSERT_TRUE (
94+ aws_s3_client_get_max_active_connections (mock_client , num_connections_per_vip_override ) ==
95+ mock_client -> ideal_vip_count * num_connections_per_vip_override );
96+
97+ * ((uint32_t * )& mock_client -> max_active_connections_override ) = 3 ;
98+
99+ /* Max active connections override should now cap the calculated amount of active connections. */
100+ ASSERT_TRUE (
101+ aws_s3_client_get_max_active_connections (mock_client , 0 ) == mock_client -> max_active_connections_override );
102+ ASSERT_TRUE (
103+ aws_s3_client_get_max_active_connections (mock_client , num_connections_per_vip_override ) ==
104+ mock_client -> max_active_connections_override );
105+
106+ /* Max active connections override should be ignored since the calculated amount of connections is less. */
107+ * ((uint32_t * )& mock_client -> max_active_connections_override ) = 100 ;
108+ ASSERT_TRUE (
109+ aws_s3_client_get_max_active_connections (mock_client , 0 ) ==
110+ mock_client -> ideal_vip_count * g_max_num_connections_per_vip );
111+ ASSERT_TRUE (
112+ aws_s3_client_get_max_active_connections (mock_client , num_connections_per_vip_override ) ==
113+ mock_client -> ideal_vip_count * num_connections_per_vip_override );
114+
115+ aws_s3_client_release (mock_client );
116+ aws_s3_tester_clean_up (& tester );
117+
118+ return 0 ;
119+ }
120+
50121AWS_TEST_CASE (test_s3_request_create_destroy , s_test_s3_request_create_destroy )
51122static int s_test_s3_request_create_destroy (struct aws_allocator * allocator , void * ctx ) {
52123 (void )ctx ;
0 commit comments