@@ -3273,7 +3273,8 @@ H1_CLIENT_TEST_CASE(h1_client_request_chunks_cancelled_by_channel_shutdown) {
3273
3273
return AWS_OP_SUCCESS ;
3274
3274
}
3275
3275
3276
- H1_CLIENT_TEST_CASE (h1_client_request_cancelled_by_channel_shutdown ) {
3276
+ /* If channel shuts down before any response is received, the request should complete with an error */
3277
+ H1_CLIENT_TEST_CASE (h1_client_request_cancelled_by_channel_shutdown_before_response ) {
3277
3278
(void )ctx ;
3278
3279
struct tester tester ;
3279
3280
ASSERT_SUCCESS (s_tester_init (& tester , allocator ));
@@ -3311,6 +3312,45 @@ H1_CLIENT_TEST_CASE(h1_client_request_cancelled_by_channel_shutdown) {
3311
3312
return AWS_OP_SUCCESS ;
3312
3313
}
3313
3314
3315
+ /* If channel shuts down in the middle of a response, the request should complete with an error */
3316
+ H1_CLIENT_TEST_CASE (h1_client_request_cancelled_by_channel_shutdown_mid_response ) {
3317
+ (void )ctx ;
3318
+ struct tester tester ;
3319
+ ASSERT_SUCCESS (s_tester_init (& tester , allocator ));
3320
+
3321
+ /* send request */
3322
+ struct aws_http_message * request = s_new_default_get_request (allocator );
3323
+
3324
+ struct client_stream_tester stream_tester ;
3325
+ ASSERT_SUCCESS (s_stream_tester_init (& stream_tester , & tester , request ));
3326
+
3327
+ testing_channel_drain_queued_tasks (& tester .testing_channel );
3328
+
3329
+ /* Ensure the request can be destroyed after request is sent */
3330
+ aws_http_message_destroy (request );
3331
+
3332
+ /* send response that is 1 byte short of being complete */
3333
+ const char * response_str = "HTTP/1.1 200 OK\r\n"
3334
+ "Content-Length: 4\r\n"
3335
+ "\r\n"
3336
+ "123" ;
3337
+ ASSERT_SUCCESS (testing_channel_push_read_str (& tester .testing_channel , response_str ));
3338
+
3339
+ /* shutdown channel while response is 1 byte short of being complete */
3340
+ aws_channel_shutdown (tester .testing_channel .channel , AWS_ERROR_SUCCESS );
3341
+ testing_channel_drain_queued_tasks (& tester .testing_channel );
3342
+
3343
+ /* the request should complete with error, having only received a partial response */
3344
+ ASSERT_TRUE (stream_tester .complete );
3345
+ ASSERT_INT_EQUALS (AWS_ERROR_HTTP_CONNECTION_CLOSED , stream_tester .on_complete_error_code );
3346
+ ASSERT_UINT_EQUALS (3 , stream_tester .response_body .len );
3347
+
3348
+ /* clean up */
3349
+ client_stream_tester_clean_up (& stream_tester );
3350
+ ASSERT_SUCCESS (s_tester_clean_up (& tester ));
3351
+ return AWS_OP_SUCCESS ;
3352
+ }
3353
+
3314
3354
H1_CLIENT_TEST_CASE (h1_client_multiple_requests_cancelled_by_channel_shutdown ) {
3315
3355
(void )ctx ;
3316
3356
struct tester tester ;
0 commit comments