2013-07-12 17:19:03 +02:00
|
|
|
/*
|
2014-03-30 12:09:21 +02:00
|
|
|
* nghttp2 - HTTP/2 C Library
|
2013-07-12 17:19:03 +02:00
|
|
|
*
|
|
|
|
* Copyright (c) 2012 Tatsuhiro Tsujikawa
|
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
|
|
* a copy of this software and associated documentation files (the
|
|
|
|
* "Software"), to deal in the Software without restriction, including
|
|
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
|
|
* permit persons to whom the Software is furnished to do so, subject to
|
|
|
|
* the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be
|
|
|
|
* included in all copies or substantial portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
|
|
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
|
|
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
|
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
*/
|
|
|
|
#ifndef NGHTTP2_SESSION_TEST_H
|
|
|
|
#define NGHTTP2_SESSION_TEST_H
|
|
|
|
|
2016-03-19 03:46:49 +01:00
|
|
|
#ifdef HAVE_CONFIG_H
|
2018-06-09 09:21:30 +02:00
|
|
|
# include <config.h>
|
2016-03-19 03:46:49 +01:00
|
|
|
#endif /* HAVE_CONFIG_H */
|
|
|
|
|
2013-07-12 17:19:03 +02:00
|
|
|
void test_nghttp2_session_recv(void);
|
|
|
|
void test_nghttp2_session_recv_invalid_stream_id(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_session_recv_invalid_frame(void);
|
|
|
|
void test_nghttp2_session_recv_eof(void);
|
|
|
|
void test_nghttp2_session_recv_data(void);
|
2015-06-11 16:34:30 +02:00
|
|
|
void test_nghttp2_session_recv_data_no_auto_flow_control(void);
|
2014-01-26 12:31:28 +01:00
|
|
|
void test_nghttp2_session_recv_continuation(void);
|
2014-03-25 18:04:24 +01:00
|
|
|
void test_nghttp2_session_recv_headers_with_priority(void);
|
2018-04-22 05:00:55 +02:00
|
|
|
void test_nghttp2_session_recv_headers_with_padding(void);
|
2015-11-27 14:50:13 +01:00
|
|
|
void test_nghttp2_session_recv_headers_early_response(void);
|
2019-04-11 03:14:52 +02:00
|
|
|
void test_nghttp2_session_recv_headers_for_closed_stream(void);
|
2015-12-10 16:18:27 +01:00
|
|
|
void test_nghttp2_session_server_recv_push_response(void);
|
2014-02-11 08:00:59 +01:00
|
|
|
void test_nghttp2_session_recv_premature_headers(void);
|
2014-06-07 09:30:55 +02:00
|
|
|
void test_nghttp2_session_recv_unknown_frame(void);
|
|
|
|
void test_nghttp2_session_recv_unexpected_continuation(void);
|
2014-07-14 17:25:31 +02:00
|
|
|
void test_nghttp2_session_recv_settings_header_table_size(void);
|
2014-07-27 09:58:04 +02:00
|
|
|
void test_nghttp2_session_recv_too_large_frame_length(void);
|
2015-10-11 10:23:01 +02:00
|
|
|
void test_nghttp2_session_recv_extension(void);
|
2016-04-09 12:14:15 +02:00
|
|
|
void test_nghttp2_session_recv_altsvc(void);
|
2018-05-10 03:57:02 +02:00
|
|
|
void test_nghttp2_session_recv_origin(void);
|
2013-09-28 10:59:24 +02:00
|
|
|
void test_nghttp2_session_continue(void);
|
2013-07-12 17:19:03 +02:00
|
|
|
void test_nghttp2_session_add_frame(void);
|
2013-07-25 14:07:38 +02:00
|
|
|
void test_nghttp2_session_on_request_headers_received(void);
|
|
|
|
void test_nghttp2_session_on_response_headers_received(void);
|
2013-07-12 17:19:03 +02:00
|
|
|
void test_nghttp2_session_on_headers_received(void);
|
2013-07-25 14:07:38 +02:00
|
|
|
void test_nghttp2_session_on_push_response_headers_received(void);
|
2013-07-22 17:11:39 +02:00
|
|
|
void test_nghttp2_session_on_priority_received(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_session_on_rst_stream_received(void);
|
|
|
|
void test_nghttp2_session_on_settings_received(void);
|
2013-07-24 18:49:05 +02:00
|
|
|
void test_nghttp2_session_on_push_promise_received(void);
|
2013-07-12 17:19:03 +02:00
|
|
|
void test_nghttp2_session_on_ping_received(void);
|
|
|
|
void test_nghttp2_session_on_goaway_received(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_session_on_window_update_received(void);
|
2013-07-12 17:19:03 +02:00
|
|
|
void test_nghttp2_session_on_data_received(void);
|
2015-12-17 13:30:30 +01:00
|
|
|
void test_nghttp2_session_on_data_received_fail_fast(void);
|
2016-04-09 12:14:15 +02:00
|
|
|
void test_nghttp2_session_on_altsvc_received(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_session_send_headers_start_stream(void);
|
|
|
|
void test_nghttp2_session_send_headers_reply(void);
|
2014-07-02 15:45:38 +02:00
|
|
|
void test_nghttp2_session_send_headers_frame_size_error(void);
|
2013-07-24 18:49:05 +02:00
|
|
|
void test_nghttp2_session_send_headers_push_reply(void);
|
2013-07-12 17:19:03 +02:00
|
|
|
void test_nghttp2_session_send_rst_stream(void);
|
2013-07-24 18:49:05 +02:00
|
|
|
void test_nghttp2_session_send_push_promise(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_session_is_my_stream_id(void);
|
2015-11-07 03:30:15 +01:00
|
|
|
void test_nghttp2_session_upgrade2(void);
|
2013-08-09 16:40:41 +02:00
|
|
|
void test_nghttp2_session_reprioritize_stream(void);
|
2014-12-12 16:03:19 +01:00
|
|
|
void test_nghttp2_session_reprioritize_stream_with_idle_stream_dep(void);
|
2014-03-05 16:19:02 +01:00
|
|
|
void test_nghttp2_submit_data(void);
|
2014-08-24 17:32:44 +02:00
|
|
|
void test_nghttp2_submit_data_read_length_too_large(void);
|
|
|
|
void test_nghttp2_submit_data_read_length_smallest(void);
|
2014-08-25 16:46:17 +02:00
|
|
|
void test_nghttp2_submit_data_twice(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_submit_request_with_data(void);
|
|
|
|
void test_nghttp2_submit_request_without_data(void);
|
2013-12-08 13:19:33 +01:00
|
|
|
void test_nghttp2_submit_response_with_data(void);
|
|
|
|
void test_nghttp2_submit_response_without_data(void);
|
2015-11-16 14:47:12 +01:00
|
|
|
void test_nghttp2_submit_response_push_response(void);
|
2015-03-07 09:02:00 +01:00
|
|
|
void test_nghttp2_submit_trailer(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_submit_headers_start_stream(void);
|
|
|
|
void test_nghttp2_submit_headers_reply(void);
|
2013-07-24 18:49:05 +02:00
|
|
|
void test_nghttp2_submit_headers_push_reply(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_submit_headers(void);
|
2014-01-26 14:01:27 +01:00
|
|
|
void test_nghttp2_submit_headers_continuation(void);
|
2016-06-14 17:00:30 +02:00
|
|
|
void test_nghttp2_submit_headers_continuation_extra_large(void);
|
2013-07-22 17:11:39 +02:00
|
|
|
void test_nghttp2_submit_priority(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_submit_settings(void);
|
2013-08-08 17:58:52 +02:00
|
|
|
void test_nghttp2_submit_settings_update_local_window_size(void);
|
2015-07-22 17:36:00 +02:00
|
|
|
void test_nghttp2_submit_settings_multiple_times(void);
|
2013-07-24 18:49:05 +02:00
|
|
|
void test_nghttp2_submit_push_promise(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_submit_window_update(void);
|
2013-08-08 17:58:52 +02:00
|
|
|
void test_nghttp2_submit_window_update_local_window_size(void);
|
2015-01-21 17:43:56 +01:00
|
|
|
void test_nghttp2_submit_shutdown_notice(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_submit_invalid_nv(void);
|
2015-10-11 10:23:01 +02:00
|
|
|
void test_nghttp2_submit_extension(void);
|
2016-04-03 12:07:46 +02:00
|
|
|
void test_nghttp2_submit_altsvc(void);
|
2018-05-10 03:57:02 +02:00
|
|
|
void test_nghttp2_submit_origin(void);
|
2020-06-10 13:55:30 +02:00
|
|
|
void test_nghttp2_submit_rst_stream(void);
|
2013-07-24 18:49:05 +02:00
|
|
|
void test_nghttp2_session_open_stream(void);
|
2014-12-12 16:03:19 +01:00
|
|
|
void test_nghttp2_session_open_stream_with_idle_stream_dep(void);
|
2013-07-12 17:19:03 +02:00
|
|
|
void test_nghttp2_session_get_next_ob_item(void);
|
|
|
|
void test_nghttp2_session_pop_next_ob_item(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_session_reply_fail(void);
|
2013-07-12 17:19:03 +02:00
|
|
|
void test_nghttp2_session_max_concurrent_streams(void);
|
|
|
|
void test_nghttp2_session_stop_data_with_rst_stream(void);
|
|
|
|
void test_nghttp2_session_defer_data(void);
|
|
|
|
void test_nghttp2_session_flow_control(void);
|
2013-08-07 15:02:30 +02:00
|
|
|
void test_nghttp2_session_flow_control_data_recv(void);
|
2014-02-11 13:30:44 +01:00
|
|
|
void test_nghttp2_session_flow_control_data_with_padding_recv(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_session_data_read_temporal_failure(void);
|
|
|
|
void test_nghttp2_session_on_stream_close(void);
|
2013-07-12 17:19:03 +02:00
|
|
|
void test_nghttp2_session_on_ctrl_not_send(void);
|
|
|
|
void test_nghttp2_session_get_outbound_queue_size(void);
|
2013-10-29 17:58:38 +01:00
|
|
|
void test_nghttp2_session_get_effective_local_window_size(void);
|
2013-07-12 17:19:03 +02:00
|
|
|
void test_nghttp2_session_set_option(void);
|
2013-07-15 14:45:59 +02:00
|
|
|
void test_nghttp2_session_data_backoff_by_high_pri_frame(void);
|
2014-02-07 15:22:17 +01:00
|
|
|
void test_nghttp2_session_pack_data_with_padding(void);
|
2014-02-14 17:34:04 +01:00
|
|
|
void test_nghttp2_session_pack_headers_with_padding(void);
|
2013-08-03 11:05:14 +02:00
|
|
|
void test_nghttp2_pack_settings_payload(void);
|
2014-03-25 18:04:24 +01:00
|
|
|
void test_nghttp2_session_stream_dep_add(void);
|
|
|
|
void test_nghttp2_session_stream_dep_remove(void);
|
|
|
|
void test_nghttp2_session_stream_dep_add_subtree(void);
|
|
|
|
void test_nghttp2_session_stream_dep_remove_subtree(void);
|
2014-04-17 14:15:14 +02:00
|
|
|
void test_nghttp2_session_stream_dep_all_your_stream_are_belong_to_us(void);
|
2014-12-20 11:53:57 +01:00
|
|
|
void test_nghttp2_session_stream_attach_item(void);
|
|
|
|
void test_nghttp2_session_stream_attach_item_subtree(void);
|
2015-08-18 15:41:50 +02:00
|
|
|
void test_nghttp2_session_stream_get_state(void);
|
|
|
|
void test_nghttp2_session_stream_get_something(void);
|
2015-11-24 14:30:12 +01:00
|
|
|
void test_nghttp2_session_find_stream(void);
|
2014-03-30 10:41:54 +02:00
|
|
|
void test_nghttp2_session_keep_closed_stream(void);
|
2014-12-12 16:03:19 +01:00
|
|
|
void test_nghttp2_session_keep_idle_stream(void);
|
|
|
|
void test_nghttp2_session_detach_idle_stream(void);
|
2014-11-04 16:32:16 +01:00
|
|
|
void test_nghttp2_session_large_dep_tree(void);
|
2014-06-18 05:08:12 +02:00
|
|
|
void test_nghttp2_session_graceful_shutdown(void);
|
2014-08-23 17:50:55 +02:00
|
|
|
void test_nghttp2_session_on_header_temporal_failure(void);
|
2015-04-05 15:35:40 +02:00
|
|
|
void test_nghttp2_session_recv_client_magic(void);
|
2014-09-17 16:16:00 +02:00
|
|
|
void test_nghttp2_session_delete_data_item(void);
|
2014-11-07 16:36:47 +01:00
|
|
|
void test_nghttp2_session_open_idle_stream(void);
|
2015-02-09 13:45:55 +01:00
|
|
|
void test_nghttp2_session_cancel_reserved_remote(void);
|
2015-02-12 13:28:20 +01:00
|
|
|
void test_nghttp2_session_reset_pending_headers(void);
|
2015-04-03 16:10:51 +02:00
|
|
|
void test_nghttp2_session_send_data_callback(void);
|
2015-04-23 16:43:30 +02:00
|
|
|
void test_nghttp2_session_on_begin_headers_temporal_failure(void);
|
2015-06-23 16:03:54 +02:00
|
|
|
void test_nghttp2_session_defer_then_close(void);
|
2015-07-31 14:11:16 +02:00
|
|
|
void test_nghttp2_session_detach_item_from_closed_stream(void);
|
2015-09-29 17:44:08 +02:00
|
|
|
void test_nghttp2_session_flooding(void);
|
2015-11-23 11:48:51 +01:00
|
|
|
void test_nghttp2_session_change_stream_priority(void);
|
2015-11-28 07:04:39 +01:00
|
|
|
void test_nghttp2_session_create_idle_stream(void);
|
2015-12-23 09:07:39 +01:00
|
|
|
void test_nghttp2_session_repeated_priority_change(void);
|
2015-12-24 12:53:08 +01:00
|
|
|
void test_nghttp2_session_repeated_priority_submission(void);
|
2016-05-29 16:13:11 +02:00
|
|
|
void test_nghttp2_session_set_local_window_size(void);
|
2016-07-02 12:21:08 +02:00
|
|
|
void test_nghttp2_session_cancel_from_before_frame_send(void);
|
2020-04-18 01:53:51 +02:00
|
|
|
void test_nghttp2_session_too_many_settings(void);
|
More strict stream state handling
Previously, in server side, we used closed streams to detect the error
that the misbehaving client sends a frame on the incoming stream it
explicitly closed. With this commit, we make a further step, and
detect one more error case. Since we retain closed streams as long as
the sum of its size and the number of opened streams are equal or less
than max concurrent streams, we can safely say that if we get a frame
which is sent on the stream that is not found in either closed or
opened stream, it is already closed or has not existed. Then we can
send GOAWAY.
The previous code shrinks closed streams when we closed another
stream, but now it is removed. It is enough to adjust closed streams
when new incoming stream is created.
While creating this commit, we noticed that
NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS is defined as INT32_MAX. But
since SETTINGS can contain value up to UINT32_MAX, it is not enough.
However, since the stream ID space is limited to INT32_MAX, it is high
enough. We could keep this value, but this time we deprecate
NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS macro. While it is in public
header, the effect of deprecating it is negligible because of the
reason we wrote above, and usually application sets much smaller value
(say, 100) as SETTINGS_MAX_CONCURRENT_STREAMS.
2016-08-07 07:34:13 +02:00
|
|
|
void test_nghttp2_session_removed_closed_stream(void);
|
2016-08-28 11:50:19 +02:00
|
|
|
void test_nghttp2_session_pause_data(void);
|
2017-02-13 14:15:42 +01:00
|
|
|
void test_nghttp2_session_no_closed_streams(void);
|
2018-08-18 10:38:58 +02:00
|
|
|
void test_nghttp2_session_set_stream_user_data(void);
|
2015-02-19 16:01:15 +01:00
|
|
|
void test_nghttp2_http_mandatory_headers(void);
|
|
|
|
void test_nghttp2_http_content_length(void);
|
2020-09-15 14:34:36 +02:00
|
|
|
void test_nghttp2_http_content_length_close(void);
|
2015-02-19 16:01:15 +01:00
|
|
|
void test_nghttp2_http_content_length_mismatch(void);
|
|
|
|
void test_nghttp2_http_non_final_response(void);
|
|
|
|
void test_nghttp2_http_trailer_headers(void);
|
2015-02-22 15:13:27 +01:00
|
|
|
void test_nghttp2_http_ignore_regular_header(void);
|
2015-02-19 16:01:15 +01:00
|
|
|
void test_nghttp2_http_ignore_content_length(void);
|
|
|
|
void test_nghttp2_http_record_request_method(void);
|
|
|
|
void test_nghttp2_http_push_promise(void);
|
2015-11-07 02:56:40 +01:00
|
|
|
void test_nghttp2_http_head_method_upgrade_workaround(void);
|
2013-07-12 17:19:03 +02:00
|
|
|
|
|
|
|
#endif /* NGHTTP2_SESSION_TEST_H */
|