From e56e73deb8017081935750cc8f7e24fc7a959b7c Mon Sep 17 00:00:00 2001 From: kelbon Date: Mon, 25 Aug 2025 14:21:09 +0500 Subject: [PATCH 1/4] ()()() --- include/hpack/encoder.hpp | 2 +- tests/test_hpack.cpp | 52 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/include/hpack/encoder.hpp b/include/hpack/encoder.hpp index 804fc53..995fa0b 100644 --- a/include/hpack/encoder.hpp +++ b/include/hpack/encoder.hpp @@ -30,7 +30,7 @@ struct encoder { | 1 | Index (7+) | +---+---------------------------+ */ - assert(header_index <= dyntab.current_max_index()); + // assert(header_index <= dyntab.current_max_index()); auto out = noexport::adapt_output_iterator(_out); // indexed name and value 0b1... *out = 0b1000'0000; diff --git a/tests/test_hpack.cpp b/tests/test_hpack.cpp index acc6774..3d35170 100644 --- a/tests/test_hpack.cpp +++ b/tests/test_hpack.cpp @@ -1012,7 +1012,59 @@ TEST(encode_with_cache) { testone(hpack::static_table_t::status_204, "111", 1); } +bool dynTableEnabled = false; + +#include + +TEST(wtf) { + using enum hpack::static_table_t::values; + hpack::encoder enc; + hpack::decoder dec; + + std::vector requestCommonFields; + auto out = std::back_inserter(requestCommonFields); + enc.encode_header_fully_indexed(scheme_http, out); + enc.encode_header_fully_indexed(method_get, out); + enc.encode_header_and_cache(authority, "[::1]:9100", out); + enc.encode_header_and_cache(path, "/README.md", out); + + bytes_t headers = requestCommonFields; + auto out3 = std::back_inserter(headers); + enc.encode_header_and_cache("name", "value", out3); + + if (!dynTableEnabled) { + // Dynamic table update notification is mandatory if dynamic table disabled + enc.encode_dynamic_table_size_update(0, out3); + } + + hpack::decode_headers_block(dec, headers, [](std::string_view n, std::string_view value) { + std::cout << n << " " << value << std::endl; + }); + + // co_await require_nothrow(fake.sendRawHdr(1, headers)); + + // auto rcvrsp = co_await fake.pollHdrData(LARGE_REQUEST_TIMEOUT); + bool b = bool(enc.dyntab.find("name", "value")) == dynTableEnabled; + + auto headers2 = requestCommonFields; + headers = requestCommonFields; + auto out2 = std::back_inserter(headers2); + enc.encode_header_fully_indexed(62, out2); + error_if(headers2.size() != requestCommonFields.size() + 1); + + try { + hpack::decode_headers_block(dec, headers2, [](std::string_view n, std::string_view value) { + std::cout << n << " " << value << std::endl; + }); + } catch (std::exception& e) { + std::cout << e.what(); + error_if(dynTableEnabled); + } + int _ = 0; +} + int main() { + test_wtf(); test_dyntable_move(); test_encode_status(); test_encode_with_cache(); From 65bc26b822bd503139d5a704b339080b6182ca68 Mon Sep 17 00:00:00 2001 From: kelbon Date: Mon, 25 Aug 2025 14:22:22 +0500 Subject: [PATCH 2/4] ()() --- tests/test_hpack.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tests/test_hpack.cpp b/tests/test_hpack.cpp index 3d35170..6ed7555 100644 --- a/tests/test_hpack.cpp +++ b/tests/test_hpack.cpp @@ -1033,18 +1033,13 @@ TEST(wtf) { enc.encode_header_and_cache("name", "value", out3); if (!dynTableEnabled) { - // Dynamic table update notification is mandatory if dynamic table disabled enc.encode_dynamic_table_size_update(0, out3); } hpack::decode_headers_block(dec, headers, [](std::string_view n, std::string_view value) { std::cout << n << " " << value << std::endl; }); - - // co_await require_nothrow(fake.sendRawHdr(1, headers)); - - // auto rcvrsp = co_await fake.pollHdrData(LARGE_REQUEST_TIMEOUT); - bool b = bool(enc.dyntab.find("name", "value")) == dynTableEnabled; + error_if(bool(enc.dyntab.find("name", "value")) != dynTableEnabled); auto headers2 = requestCommonFields; headers = requestCommonFields; @@ -1059,8 +1054,9 @@ TEST(wtf) { } catch (std::exception& e) { std::cout << e.what(); error_if(dynTableEnabled); + return; } - int _ = 0; + error_if(!dynTableEnabled); } int main() { From 7a74b821a0fd7995e47627f994d26a6bfa67901e Mon Sep 17 00:00:00 2001 From: kelbon Date: Mon, 25 Aug 2025 15:07:15 +0500 Subject: [PATCH 3/4] () --- tests/test_hpack.cpp | 48 -------------------------------------------- 1 file changed, 48 deletions(-) diff --git a/tests/test_hpack.cpp b/tests/test_hpack.cpp index 6ed7555..acc6774 100644 --- a/tests/test_hpack.cpp +++ b/tests/test_hpack.cpp @@ -1012,55 +1012,7 @@ TEST(encode_with_cache) { testone(hpack::static_table_t::status_204, "111", 1); } -bool dynTableEnabled = false; - -#include - -TEST(wtf) { - using enum hpack::static_table_t::values; - hpack::encoder enc; - hpack::decoder dec; - - std::vector requestCommonFields; - auto out = std::back_inserter(requestCommonFields); - enc.encode_header_fully_indexed(scheme_http, out); - enc.encode_header_fully_indexed(method_get, out); - enc.encode_header_and_cache(authority, "[::1]:9100", out); - enc.encode_header_and_cache(path, "/README.md", out); - - bytes_t headers = requestCommonFields; - auto out3 = std::back_inserter(headers); - enc.encode_header_and_cache("name", "value", out3); - - if (!dynTableEnabled) { - enc.encode_dynamic_table_size_update(0, out3); - } - - hpack::decode_headers_block(dec, headers, [](std::string_view n, std::string_view value) { - std::cout << n << " " << value << std::endl; - }); - error_if(bool(enc.dyntab.find("name", "value")) != dynTableEnabled); - - auto headers2 = requestCommonFields; - headers = requestCommonFields; - auto out2 = std::back_inserter(headers2); - enc.encode_header_fully_indexed(62, out2); - error_if(headers2.size() != requestCommonFields.size() + 1); - - try { - hpack::decode_headers_block(dec, headers2, [](std::string_view n, std::string_view value) { - std::cout << n << " " << value << std::endl; - }); - } catch (std::exception& e) { - std::cout << e.what(); - error_if(dynTableEnabled); - return; - } - error_if(!dynTableEnabled); -} - int main() { - test_wtf(); test_dyntable_move(); test_encode_status(); test_encode_with_cache(); From faad6a6ead560a9da465ee9ed9d80adad5700d49 Mon Sep 17 00:00:00 2001 From: kelbon Date: Mon, 25 Aug 2025 15:07:57 +0500 Subject: [PATCH 4/4] rm assert --- include/hpack/encoder.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/include/hpack/encoder.hpp b/include/hpack/encoder.hpp index 995fa0b..b7a049f 100644 --- a/include/hpack/encoder.hpp +++ b/include/hpack/encoder.hpp @@ -30,7 +30,6 @@ struct encoder { | 1 | Index (7+) | +---+---------------------------+ */ - // assert(header_index <= dyntab.current_max_index()); auto out = noexport::adapt_output_iterator(_out); // indexed name and value 0b1... *out = 0b1000'0000;