Skip to content

Commit 9833d18

Browse files
committed
stream manager fix
1 parent acf3139 commit 9833d18

3 files changed

Lines changed: 50 additions & 0 deletions

File tree

source/connection_manager.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -982,6 +982,7 @@ struct aws_http_connection_manager *aws_http_connection_manager_new(
982982
manager->initial_settings->data,
983983
options->initial_settings_array,
984984
options->num_initial_settings * sizeof(struct aws_http2_setting));
985+
manager->initial_settings->length = options->num_initial_settings;
985986
}
986987
manager->max_closed_streams = options->max_closed_streams;
987988
manager->http2_conn_manual_window_management = options->http2_conn_manual_window_management;

tests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,7 @@ add_net_test_case(h2_sm_mock_ideal_num_streams)
692692
add_net_test_case(h2_sm_mock_large_ideal_num_streams)
693693
add_net_test_case(h2_sm_mock_goaway)
694694
add_net_test_case(h2_sm_connection_ping)
695+
add_net_test_case(h2_sm_with_initial_settings)
695696

696697
# Tests against real world server
697698
add_net_test_case(h2_sm_acquire_stream)

tests/test_stream_manager.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ struct sm_tester_options {
5555
bool close_connection_on_server_error;
5656
size_t connection_ping_period_ms;
5757
size_t connection_ping_timeout_ms;
58+
59+
/* HTTP/2 initial settings */
60+
const struct aws_http2_setting *initial_settings_array;
61+
size_t num_initial_settings;
5862
};
5963

6064
static struct aws_logger s_logger;
@@ -290,6 +294,8 @@ static int s_tester_init(struct sm_tester_options *options) {
290294
.connection_ping_period_ms = options->connection_ping_period_ms,
291295
.connection_ping_timeout_ms = options->connection_ping_timeout_ms,
292296
.http2_prior_knowledge = options->prior_knowledge,
297+
.initial_settings_array = options->initial_settings_array,
298+
.num_initial_settings = options->num_initial_settings,
293299
};
294300
s_tester.stream_manager = aws_http2_stream_manager_new(alloc, &sm_options);
295301

@@ -1516,3 +1522,45 @@ TEST_CASE(localhost_integ_h2_sm_connection_monitor_kill_slow_connection) {
15161522

15171523
return s_tester_clean_up();
15181524
}
1525+
1526+
/* Test that stream manager can be created with initial_settings_array configured */
1527+
TEST_CASE(h2_sm_with_initial_settings) {
1528+
(void)ctx;
1529+
/* TODO: VALIDATE from the peer that those settings received. */
1530+
/* Configure custom HTTP/2 initial settings */
1531+
struct aws_http2_setting initial_settings[] = {
1532+
{
1533+
.id = AWS_HTTP2_SETTINGS_HEADER_TABLE_SIZE,
1534+
.value = 8192,
1535+
},
1536+
{
1537+
.id = AWS_HTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
1538+
.value = 128,
1539+
},
1540+
{
1541+
.id = AWS_HTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
1542+
.value = 65536,
1543+
},
1544+
};
1545+
1546+
struct sm_tester_options options = {
1547+
.max_connections = 5,
1548+
.alloc = allocator,
1549+
.initial_settings_array = initial_settings,
1550+
.num_initial_settings = AWS_ARRAY_SIZE(initial_settings),
1551+
};
1552+
1553+
ASSERT_SUCCESS(s_tester_init(&options));
1554+
ASSERT_NOT_NULL(s_tester.stream_manager);
1555+
1556+
/* Verify stream manager works with initial settings */
1557+
s_override_cm_connect_function(s_aws_http_connection_manager_create_connection_sync_mock);
1558+
int num_to_acquire = 1;
1559+
ASSERT_SUCCESS(s_sm_stream_acquiring(num_to_acquire));
1560+
ASSERT_SUCCESS(s_wait_on_fake_connection_count(1));
1561+
s_drain_all_fake_connection_testing_channel();
1562+
ASSERT_SUCCESS(s_wait_on_streams_acquired_count(num_to_acquire));
1563+
ASSERT_SUCCESS(s_complete_all_fake_connection_streams());
1564+
1565+
return s_tester_clean_up();
1566+
}

0 commit comments

Comments
 (0)