Skip to content

Commit ef7f97f

Browse files
author
Krish
committed
fix tests
1 parent bb31d9f commit ef7f97f

File tree

3 files changed

+44
-93
lines changed

3 files changed

+44
-93
lines changed

tests/s3_mock_server_tests.c

Lines changed: 42 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,18 @@ static int s_validate_time_metrics(struct aws_s3_request_metrics *metrics, bool
2828
bool is_success = (error_code == AWS_ERROR_SUCCESS);
2929

3030
/* Always available */
31-
aws_s3_request_metrics_get_request_start_timestamp_ns(metrics, &start);
31+
aws_s3_request_metrics_get_s3_request_first_attempt_start_timestamp_ns(metrics, &start);
3232
ASSERT_TRUE(start > 0);
3333
/* Available on last attempt only */
3434
if (is_last_attempt) {
35-
ASSERT_SUCCESS(aws_s3_request_metrics_get_request_end_timestamp_ns(metrics, &end));
35+
ASSERT_SUCCESS(aws_s3_request_metrics_get_s3_request_last_attempt_end_timestamp_ns(metrics, &end));
3636
ASSERT_TRUE(end > 0);
37-
ASSERT_SUCCESS(aws_s3_request_metrics_get_request_duration_ns(metrics, &duration));
37+
ASSERT_SUCCESS(aws_s3_request_metrics_get_s3_request_total_duration_ns(metrics, &duration));
3838
ASSERT_TRUE(duration > 0);
3939
ASSERT_UINT_EQUALS(end - start, duration);
4040
} else {
41-
ASSERT_FAILS(aws_s3_request_metrics_get_request_end_timestamp_ns(metrics, &end));
42-
ASSERT_FAILS(aws_s3_request_metrics_get_request_duration_ns(metrics, &end));
41+
ASSERT_FAILS(aws_s3_request_metrics_get_s3_request_last_attempt_end_timestamp_ns(metrics, &end));
42+
ASSERT_FAILS(aws_s3_request_metrics_get_s3_request_total_duration_ns(metrics, &end));
4343
}
4444

4545
aws_s3_request_metrics_get_start_timestamp_ns(metrics, &start);
@@ -87,8 +87,7 @@ static int s_validate_time_metrics(struct aws_s3_request_metrics *metrics, bool
8787
ASSERT_TRUE(duration > 0);
8888
ASSERT_UINT_EQUALS(end - start, duration);
8989

90-
if (metrics->req_resp_info_metrics.request_type == AWS_S3_REQUEST_TYPE_GET_OBJECT &&
91-
metrics->crt_info_metrics.part_number > 0) {
90+
if (metrics->req_resp_info_metrics.request_type == AWS_S3_REQUEST_TYPE_GET_OBJECT) {
9291
ASSERT_SUCCESS(aws_s3_request_metrics_get_delivery_start_timestamp_ns(metrics, &start));
9392
ASSERT_TRUE(start > 0);
9493
ASSERT_SUCCESS(aws_s3_request_metrics_get_delivery_end_timestamp_ns(metrics, &end));
@@ -99,14 +98,18 @@ static int s_validate_time_metrics(struct aws_s3_request_metrics *metrics, bool
9998
}
10099
}
101100

102-
if (!is_last_attempt) {
101+
if (metrics->crt_info_metrics.retry_attempt > 0) {
103102
ASSERT_SUCCESS(aws_s3_request_metrics_get_retry_delay_start_timestamp_ns(metrics, &start));
104103
ASSERT_TRUE(start > 0);
105104
ASSERT_SUCCESS(aws_s3_request_metrics_get_retry_delay_end_timestamp_ns(metrics, &end));
106105
ASSERT_TRUE(end > 0);
107106
ASSERT_SUCCESS(aws_s3_request_metrics_get_retry_delay_duration_ns(metrics, &duration));
108107
ASSERT_TRUE(duration > 0);
109108
ASSERT_UINT_EQUALS(end - start, duration);
109+
} else {
110+
ASSERT_FAILS(aws_s3_request_metrics_get_retry_delay_start_timestamp_ns(metrics, &start));
111+
ASSERT_FAILS(aws_s3_request_metrics_get_retry_delay_end_timestamp_ns(metrics, &end));
112+
ASSERT_FAILS(aws_s3_request_metrics_get_retry_delay_duration_ns(metrics, &duration));
110113
}
111114

112115
return AWS_OP_SUCCESS;
@@ -141,51 +144,8 @@ static int s_validate_create_multipart_upload_metrics(struct aws_s3_request_metr
141144
ASSERT_UINT_EQUALS(AWS_ERROR_SUCCESS, aws_s3_request_metrics_get_error_code(metrics));
142145

143146
/* Get all those time stamp */
144-
uint64_t time_stamp = 0;
145-
146-
aws_s3_request_metrics_get_request_start_timestamp_ns(metrics, &time_stamp);
147-
ASSERT_FALSE(time_stamp == 0);
148-
time_stamp = 0;
149-
aws_s3_request_metrics_get_request_end_timestamp_ns(metrics, &time_stamp);
150-
ASSERT_FALSE(time_stamp == 0);
151-
time_stamp = 0;
152-
aws_s3_request_metrics_get_request_duration_ns(metrics, &time_stamp);
153-
ASSERT_FALSE(time_stamp == 0);
154-
time_stamp = 0;
155-
156-
aws_s3_request_metrics_get_start_timestamp_ns(metrics, &time_stamp);
157-
ASSERT_FALSE(time_stamp == 0);
158-
time_stamp = 0;
159-
aws_s3_request_metrics_get_end_timestamp_ns(metrics, &time_stamp);
160-
ASSERT_FALSE(time_stamp == 0);
161-
time_stamp = 0;
162-
aws_s3_request_metrics_get_total_duration_ns(metrics, &time_stamp);
163-
ASSERT_FALSE(time_stamp == 0);
164-
time_stamp = 0;
165-
166-
ASSERT_SUCCESS(aws_s3_request_metrics_get_send_start_timestamp_ns(metrics, &time_stamp));
167-
ASSERT_FALSE(time_stamp == 0);
168-
time_stamp = 0;
169-
ASSERT_SUCCESS(aws_s3_request_metrics_get_send_end_timestamp_ns(metrics, &time_stamp));
170-
ASSERT_FALSE(time_stamp == 0);
171-
time_stamp = 0;
172-
ASSERT_SUCCESS(aws_s3_request_metrics_get_sending_duration_ns(metrics, &time_stamp));
173-
ASSERT_FALSE(time_stamp == 0);
174-
time_stamp = 0;
175-
176-
ASSERT_SUCCESS(aws_s3_request_metrics_get_receive_start_timestamp_ns(metrics, &time_stamp));
177-
ASSERT_FALSE(time_stamp == 0);
178-
time_stamp = 0;
179-
ASSERT_SUCCESS(aws_s3_request_metrics_get_receive_end_timestamp_ns(metrics, &time_stamp));
180-
ASSERT_FALSE(time_stamp == 0);
181-
time_stamp = 0;
182-
ASSERT_SUCCESS(aws_s3_request_metrics_get_receiving_duration_ns(metrics, &time_stamp));
183-
ASSERT_FALSE(time_stamp == 0);
184-
time_stamp = 0;
185-
186-
ASSERT_SUCCESS(aws_s3_request_metrics_get_service_call_duration_ns(metrics, &time_stamp));
187-
ASSERT_FALSE(time_stamp == 0);
188-
time_stamp = 0;
147+
ASSERT_SUCCESS(s_validate_time_metrics(metrics, true));
148+
189149
enum aws_s3_request_type request_type = 0;
190150
aws_s3_request_metrics_get_request_type(metrics, &request_type);
191151
ASSERT_UINT_EQUALS(AWS_S3_REQUEST_TYPE_CREATE_MULTIPART_UPLOAD, request_type);
@@ -197,7 +157,7 @@ static int s_validate_create_multipart_upload_metrics(struct aws_s3_request_metr
197157
return AWS_OP_SUCCESS;
198158
}
199159

200-
static int s_validate_upload_part_metrics(struct aws_s3_request_metrics *metrics) {
160+
static int s_validate_upload_part_metrics(struct aws_s3_request_metrics *metrics, bool is_last_attempt) {
201161
struct aws_http_headers *response_headers = NULL;
202162
struct aws_byte_cursor header_value;
203163
enum aws_s3_request_type request_type = 0;
@@ -216,6 +176,8 @@ static int s_validate_upload_part_metrics(struct aws_s3_request_metrics *metrics
216176
ASSERT_SUCCESS(aws_s3_request_metrics_get_operation_name(metrics, &operation_name));
217177
ASSERT_STR_EQUALS("UploadPart", aws_string_c_str(operation_name));
218178

179+
ASSERT_SUCCESS(s_validate_time_metrics(metrics, is_last_attempt));
180+
219181
return AWS_OP_SUCCESS;
220182
}
221183

@@ -228,6 +190,8 @@ static int s_validate_complete_multipart_upload_metrics(struct aws_s3_request_me
228190
ASSERT_SUCCESS(aws_s3_request_metrics_get_operation_name(metrics, &operation_name));
229191
ASSERT_STR_EQUALS("CompleteMultipartUpload", aws_string_c_str(operation_name));
230192

193+
ASSERT_SUCCESS(s_validate_time_metrics(metrics, true));
194+
231195
return AWS_OP_SUCCESS;
232196
}
233197

@@ -245,7 +209,7 @@ static int s_validate_mpu_mock_server_metrics(struct aws_array_list *metrics_lis
245209
for (size_t i = 1; i < aws_array_list_length(metrics_list) - 1; i++) {
246210
metrics = NULL;
247211
aws_array_list_get_at(metrics_list, (void **)&metrics, i);
248-
ASSERT_SUCCESS(s_validate_upload_part_metrics(metrics));
212+
ASSERT_SUCCESS(s_validate_upload_part_metrics(metrics, true)); /* assuming all requests were success */
249213
}
250214

251215
/* Last metrics should be CompleteMPU*/
@@ -262,48 +226,36 @@ static int s_validate_retry_metrics(
262226
uint32_t parts,
263227
struct aws_allocator *allocator) {
264228
struct aws_s3_request_metrics *metrics = NULL, *metrics2 = NULL;
265-
size_t failed_count = 0;
266-
267-
for (size_t i = 1; i < aws_array_list_length(metrics_list) - 1; i++) {
268-
metrics = NULL;
269-
aws_array_list_get_at(metrics_list, (void **)&metrics, i);
270-
if (aws_s3_request_metrics_get_error_code(metrics) != AWS_ERROR_SUCCESS) {
271-
failed_count++;
272-
}
273-
if (metrics->crt_info_metrics.part_number != 0) {
274-
for (size_t j = i + 1; j < aws_array_list_length(metrics_list); j++) {
275-
metrics2 = NULL;
276-
aws_array_list_get_at(metrics_list, (void **)&metrics2, j);
277-
if (metrics2->crt_info_metrics.part_number == metrics->crt_info_metrics.part_number) {
278-
ASSERT_INT_EQUALS(
279-
metrics2->time_metrics.request_start_timestamp_ns,
280-
metrics->time_metrics.request_start_timestamp_ns);
281-
}
282-
}
283-
}
284-
}
285229

286-
// verify time metrics
287-
struct aws_hash_table hash_table;
230+
/* First metrics should be the CreateMPU */
231+
aws_array_list_get_at(metrics_list, (void **)&metrics, 0);
232+
ASSERT_SUCCESS(s_validate_create_multipart_upload_metrics(metrics));
288233

289-
aws_hash_table_init(&hash_table, allocator, parts, aws_hash_ptr, aws_ptr_eq, NULL, NULL);
290234

291-
for (size_t i = (aws_array_list_length(metrics_list)); i-- > 0;) {
292-
metrics = NULL;
293-
aws_array_list_get_at(metrics_list, (void **)&metrics, i);
294-
int was_created = -1;
295-
aws_hash_table_put(
296-
&hash_table, (void *)(uintptr_t)metrics->crt_info_metrics.part_number, (void *)(uintptr_t)1, &was_created);
297-
if (was_created == 1 || metrics->crt_info_metrics.part_number == 0) {
298-
ASSERT_SUCCESS(s_validate_time_metrics(metrics, true));
299-
} else {
300-
ASSERT_SUCCESS(s_validate_time_metrics(metrics, false));
235+
/* All of the middle should be Upload Parts*/
236+
size_t failed_count = 0;
237+
for(size_t i = 1; i < aws_array_list_length(metrics_list) - 1; i = i + expected_failures + 1){
238+
aws_array_list_get_at(metrics_list, &metrics, i);
239+
for(size_t j = i; j < i + expected_failures; j++){
240+
aws_array_list_get_at(metrics_list, &metrics2, j+1);
241+
ASSERT_TRUE(metrics->crt_info_metrics.error_code != AWS_ERROR_SUCCESS);
242+
failed_count++;
243+
aws_array_list_get_at(metrics_list, (void **)&metrics, j);
244+
ASSERT_SUCCESS(s_validate_upload_part_metrics(metrics, false));
245+
ASSERT_INT_EQUALS(metrics->time_metrics.s3_request_first_attempt_start_timestamp_ns, metrics2->time_metrics.s3_request_first_attempt_start_timestamp_ns);
246+
ASSERT_INT_EQUALS(metrics->crt_info_metrics.retry_attempt + 1, metrics2->crt_info_metrics.retry_attempt);
247+
metrics = metrics2;
301248
}
249+
ASSERT_SUCCESS(s_validate_upload_part_metrics(metrics, true));
302250
}
303251

304-
aws_hash_table_clean_up(&hash_table);
305-
306252
ASSERT_UINT_EQUALS(expected_failures * parts, failed_count);
253+
254+
/* Last metrics should be CompleteMPU*/
255+
metrics = NULL;
256+
aws_array_list_get_at(metrics_list, (void **)&metrics, aws_array_list_length(metrics_list) - 1);
257+
ASSERT_SUCCESS(s_validate_complete_multipart_upload_metrics(metrics));
258+
307259
return AWS_OP_SUCCESS;
308260
}
309261

@@ -409,9 +361,6 @@ TEST_CASE(multipart_upload_with_n_retries_mock_server) {
409361
// check if number of metrics received for each part is n
410362
aws_s3_meta_request_test_results_init(&meta_request_test_results, allocator);
411363
ASSERT_SUCCESS(aws_s3_tester_send_meta_request_with_options(&tester, &put_options, &meta_request_test_results));
412-
ASSERT_SUCCESS(s_validate_mpu_mock_server_metrics(
413-
&meta_request_test_results.synced_data.metrics,
414-
parts * 2 + (parts > 1 ? 2 : 0) /*1 create, 1 complete, 2 parts with 4 retries each*/));
415364
uint32_t expected_failures = (uint32_t)(uintptr_t)tester.user_data - 1;
416365
ASSERT_SUCCESS(s_validate_retry_metrics(
417366
&meta_request_test_results.synced_data.metrics, expected_failures, parts, allocator));

tests/s3_tester.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1411,6 +1411,7 @@ int aws_s3_tester_client_new(
14111411
.max_part_size = options->max_part_size,
14121412
.s3express_provider_override_factory = options->s3express_provider_override_factory,
14131413
.factory_user_data = options->factory_user_data,
1414+
.max_active_connections_override = options->max_active_connections_override,
14141415
.enable_s3express = options->s3express_provider_override_factory != NULL,
14151416
};
14161417
struct aws_http_proxy_options proxy_options = {

tests/s3_tester.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ struct aws_s3_tester_client_options {
141141
uint32_t setup_region : 1;
142142
uint32_t use_proxy : 1;
143143
aws_s3express_provider_factory_fn *s3express_provider_override_factory;
144+
size_t max_active_connections_override;
144145
void *factory_user_data;
145146
};
146147

0 commit comments

Comments
 (0)