summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorlijia <[email protected]>2024-10-25 15:30:31 +0800
committerlijia <[email protected]>2024-11-08 11:52:03 +0800
commita01ac0e7274854a16ce125a059b3d2ab5fb7d7cf (patch)
tree571788768c273dec1f7db0a4744ecbe505259a37 /test
parentd0a868591470a4a9d71a65a5d540058e72c8d92c (diff)
quicv2.0 rebase onto stellar develop-2.0dev-quic-v2.0
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt3
-rw-r--r--test/decoders/quic/CMakeLists.txt76
-rw-r--r--test/decoders/quic/gtest_quic_main.cpp97
-rw-r--r--test/decoders/quic/gtest_quic_module.cpp122
-rw-r--r--test/decoders/quic/gtest_quic_unit.cpp108
-rw-r--r--test/decoders/quic/pcap/airport/Old-Airport-quic.pcapbin0 -> 17503969 bytes
-rw-r--r--test/decoders/quic/pcap/airport/quic_result.json111
-rw-r--r--test/decoders/quic/pcap/gquic/23/1-gquic-023-85.117.117.169.47762-173.194.73.95.443.pcapbin0 -> 1647 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/23/2-gquic-023-85.117.123.193.19270-64.233.165.95.443.pcapbin0 -> 3142 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/23/quic_result.json15
-rw-r--r--test/decoders/quic/pcap/gquic/25/1-gquic-025-85.117.113.98.4340-74.125.131.95.443.pcapbin0 -> 3142 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/25/2-gquic-025-90.143.184.225.63062-173.194.222.95.443.pcapbin0 -> 1647 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/25/quic_result.json12
-rw-r--r--test/decoders/quic/pcap/gquic/33/1-gquic-033-90.143.189.5.8026-173.194.188.40.443.pcapbin0 -> 3143 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/33/quic_result.json9
-rw-r--r--test/decoders/quic/pcap/gquic/34/1-gquic-034-85.117.125.8.21243-173.194.73.102.443.pcapbin0 -> 3141 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/34/quic_result.json9
-rw-r--r--test/decoders/quic/pcap/gquic/35/1-gquic-035-redirector.googlevideo.com-85.117.122.194.32370-173.194.220.138.443.pcapbin0 -> 7537 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/35/2-gquic-035-redirector.googlevideo.com-85.117.122.21.21396-173.194.220.138.443.pcapbin0 -> 9489 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/35/quic_result.json18
-rw-r--r--test/decoders/quic/pcap/gquic/37/1-gquic-037-10.32.121.249.33765-64.233.161.95.443.pcapbin0 -> 1996 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/37/2-gquic-037-10.35.127.134.42356-64.233.165.139.443.pcapbin0 -> 1996 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/37/3-gquic-037-185.57.74.232.43276-173.194.44.78.443.pcapbin0 -> 1794 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/37/4-gquic-037-185.57.74.32.52134-74.125.232.249.443.pcapbin0 -> 1794 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/37/5-gquic-037-195.162.27.132.31404-217.76.77.81.443.pcapbin0 -> 1790 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/37/6-gquic-037-195.162.27.132.31405-217.76.77.81.443.pcapbin0 -> 1790 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/37/7-gquic-037-85.117.112.160.21969-64.233.165.95.443.pcapbin0 -> 1794 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/37/8-gquic-037-85.117.113.62.29644-173.194.73.95.443.pcapbin0 -> 1794 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/37/quic_result.json58
-rw-r--r--test/decoders/quic/pcap/gquic/39/1-gquic-039-redirector.googlevideo.com-85.117.119.45.22495-173.194.73.101.443.pcapbin0 -> 10833 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/39/quic_result.json13
-rw-r--r--test/decoders/quic/pcap/gquic/41/1-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcapbin0 -> 3205 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/41/2-gquic-041-90.143.189.30.53357-64.233.165.95.443.pcapbin0 -> 1710 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/41/quic_result.json15
-rw-r--r--test/decoders/quic/pcap/gquic/43/1-gquic-043-client.weixin.qq.com-112.43.145.231.18699-112.46.25.216.443.pcapbin0 -> 4256 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/43/2-gquic-043-without-sni-192.168.50.26.55209-34.102.215.99.443.pcapbin0 -> 4158 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/43/3-gquic-043-without-sni-192.168.50.26.60851-34.102.215.99.443.pcapbin0 -> 12071 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/43/quic_result.json23
-rw-r--r--test/decoders/quic/pcap/gquic/44/2-gquic-044-185.57.75.21.44739-173.194.73.132.443.pcapbin0 -> 7391 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/44/3-gquic-044-212.154.234.46.62716-74.125.131.156.443.pcapbin0 -> 22034 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/44/4-gquic-044-2.135.246.186.56653-173.194.113.166.443.pcapbin0 -> 9930 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/44/quic_result.json23
-rw-r--r--test/decoders/quic/pcap/gquic/46/1-gquic-046-36.142.158.169.16385-36.189.11.71.443.pcapbin0 -> 704270 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/46/2-gquic-046-pagead2.googlesyndication.com-172.16.30.79.65003-203.208.50.45.443.pcapbin0 -> 37555 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/46/quic_result.json16
-rw-r--r--test/decoders/quic/pcap/gquic/50/1-gquic-050-i.ytimg.com-172.20.9.135.65045-64.233.162.119.443.pcapbin0 -> 2050587 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/50/2-gquic-050-www.google.com-172.20.9.135.61564-173.194.221.103.443.pcapbin0 -> 24888 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/50/3-gquic-050-www.youtube.com-172.20.9.135.49347-64.233.165.93.443.pcapbin0 -> 2087533 bytes
-rw-r--r--test/decoders/quic/pcap/gquic/50/quic_result.json23
-rw-r--r--test/decoders/quic/pcap/iquic/29/1-iquic-29-192.168.50.29.61891-31.13.77.35.443.pcapbin0 -> 73949 bytes
-rw-r--r--test/decoders/quic/pcap/iquic/29/2-iquic-29-223.104.233.102.13650-203.208.40.98.443.pcapbin0 -> 41934 bytes
-rw-r--r--test/decoders/quic/pcap/iquic/29/3-iquic-29-192.168.50.33.57220-114.250.70.38.443.pcapbin0 -> 5489 bytes
-rw-r--r--test/decoders/quic/pcap/iquic/29/quic_result.json21
-rw-r--r--test/decoders/quic/pcap/mvfst/01/1-mvfst-01-i.instagram.com-192.168.60.9.55659-69.171.250.63.443.pcapbin0 -> 49232 bytes
-rw-r--r--test/decoders/quic/pcap/mvfst/01/quic_result.json8
-rw-r--r--test/decoders/quic/pcap/mvfst/02/1-mvfst-02-192.168.137.141.50006-31.13.77.17.443.pcapbin0 -> 777583 bytes
-rw-r--r--test/decoders/quic/pcap/mvfst/02/2-mvfst-02-192.168.137.141.63314-31.13.77.10.443.pcapbin0 -> 21334 bytes
-rw-r--r--test/decoders/quic/pcap/mvfst/02/3-mvfst-02-192.168.137.141.60630-157.240.7.26.443.pcapbin0 -> 92026 bytes
-rw-r--r--test/decoders/quic/pcap/mvfst/02/4-mvfst-02-192.168.137.141.50293-157.240.15.13.443.pcapbin0 -> 115662 bytes
-rw-r--r--test/decoders/quic/pcap/mvfst/02/quic_result.json26
-rw-r--r--test/decoders/quic/pcap/port-8443/1-iquic-29-192.168.50.49.58445-45.77.96.66.8443.pcapbin0 -> 50179 bytes
-rw-r--r--test/decoders/quic/pcap/port-8443/quic_result.json7
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.33232-173.194.220.105.443.pcapbin0 -> 7783 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.39896-173.194.220.105.443.pcapbin0 -> 7931 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.43145-173.194.220.105.443.pcapbin0 -> 7783 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.49914-173.194.220.105.443.pcapbin0 -> 7783 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.54549-173.194.220.105.443.pcapbin0 -> 15743 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.57394-173.194.220.105.443.pcapbin0 -> 21174 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.62303-173.194.220.105.443.pcapbin0 -> 17352 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.63484-173.194.220.105.443.pcapbin0 -> 7931 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.34722-74.125.131.106.443.pcapbin0 -> 24644 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.43786-74.125.131.106.443.pcapbin0 -> 20284 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.44344-74.125.131.106.443.pcapbin0 -> 7783 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.44360-74.125.131.106.443.pcapbin0 -> 31901 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.45109-74.125.131.106.443.pcapbin0 -> 7783 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.45314-74.125.131.106.443.pcapbin0 -> 7931 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.47041-74.125.131.106.443.pcapbin0 -> 7783 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.47174-74.125.131.106.443.pcapbin0 -> 7931 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.50829-74.125.131.106.443.pcapbin0 -> 7931 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.61598-74.125.131.106.443.pcapbin0 -> 26255 bytes
-rw-r--r--test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.62585-74.125.131.106.443.pcapbin0 -> 7931 bytes
-rw-r--r--test/decoders/quic/pcap/quic_len_-2.pcapngbin0 -> 436 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-chlo-fragment/1-google-chlo-fragment-2.pcapbin0 -> 13118 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-chlo-fragment/2-google-chlo-fragment-3.pcapbin0 -> 237635 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-chlo-fragment/3-facebook-chlo-fragment-2.pcapbin0 -> 76188 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-chlo-fragment/4-googleapis.com-chlo-fragment-3.pcapbin0 -> 18729 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-chlo-fragment/5-google_quic-2.pcapbin0 -> 722043 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-chlo-fragment/quic_result.json32
-rw-r--r--test/decoders/quic/pcap/rfc9000-fragment/1-addis-quic-sni-not-parsed-filtered.pcapbin0 -> 1332207 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-fragment/2-quic-no-parse-sni-RFC9000-192.168.8.106.53736-142.250.185.36.443-6.pcapbin0 -> 1308172 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-fragment/3-quic-no-parse-sni-RFC9000-63821-443-192.168.8.106-142.250.185.36.pcapbin0 -> 5877 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-fragment/quic_result.json37
-rw-r--r--test/decoders/quic/pcap/rfc9000-special/1-quic-rc9000-no-parse-UA-192.168.8.110.49832-172.217.18.150.443.pcapbin0 -> 5127842 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-special/2-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.50339-172.217.169.227.443.pcapbin0 -> 8824 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-special/3-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.52455-213.55.110.12.443.pcapbin0 -> 2499594 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-special/4-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.64550-142.250.185.36.443.pcapbin0 -> 5920 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-special/5-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.65140-213.55.110.13.443.pcapbin0 -> 1215697 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000-special/quic_result.json37
-rw-r--r--test/decoders/quic/pcap/rfc9000/1-ietf-rfc9000-192.168.60.32.59699-64.233.164.84.443.pcapbin0 -> 18421 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000/2-ietf-rfc9000-124.88.191.113.39716-114.250.66.33-443.pcapbin0 -> 10619 bytes
-rw-r--r--test/decoders/quic/pcap/rfc9000/quic_result.json15
-rw-r--r--test/decoders/quic/pcap/special/1-no-parse-sni-draft-29-10.83.31.23.37645-142.250.180.42.443.pcapbin0 -> 10262 bytes
-rw-r--r--test/decoders/quic/pcap/special/1-no-parse-sni-draft-29.37645.pcapbin0 -> 10262 bytes
-rw-r--r--test/decoders/quic/pcap/special/2-no-parse-sni-rfc9000-192.168.1.6.61269-142.250.180.42.443.pcapbin0 -> 2173 bytes
-rw-r--r--test/decoders/quic/pcap/special/2-no-parse-sni-rfc9000.61269.pcapbin0 -> 2173 bytes
-rw-r--r--test/decoders/quic/pcap/special/3-no-parse-sni-gquic-43-10.129.24.130.52558-213.55.110.12.443.pcapbin0 -> 75539 bytes
-rw-r--r--test/decoders/quic/pcap/special/4-no-sni-rfc9000-197.156.101.97.12388-142.250.185.46.443.pcapbin0 -> 15656 bytes
-rw-r--r--test/decoders/quic/pcap/special/quic_result.json26
-rw-r--r--test/decoders/quic/pcap/tquic/1-tquic-51-195.12.120.14.41803-173.194.222.101.443.pcapbin0 -> 38915 bytes
-rw-r--r--test/decoders/quic/pcap/tquic/2-tquic-51-195.12.120.14.39526-64.233.165.113.443.pcapbin0 -> 240485 bytes
-rw-r--r--test/decoders/quic/pcap/tquic/3-tquic-51-195.12.120.14.41747-173.194.222.138.443.pcapbin0 -> 24277 bytes
-rw-r--r--test/decoders/quic/pcap/tquic/4-tquic-51-195.12.120.14.59012-173.194.222.138.443.pcapbin0 -> 18390 bytes
-rw-r--r--test/decoders/quic/pcap/tquic/quic_result.json30
-rw-r--r--test/decoders/quic/quic_spec.toml12
114 files changed, 1001 insertions, 1 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 11d1abc..5c05a12 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -6,4 +6,5 @@ add_subdirectory(lpi_plus)
#add_subdirectory(decoders/socks)
#add_subdirectory(decoders/stratum)
#add_subdirectory(decoders/session_flags)
-add_subdirectory(monitor) \ No newline at end of file
+add_subdirectory(monitor)
+add_subdirectory(decoders/quic)
diff --git a/test/decoders/quic/CMakeLists.txt b/test/decoders/quic/CMakeLists.txt
new file mode 100644
index 0000000..faf57c6
--- /dev/null
+++ b/test/decoders/quic/CMakeLists.txt
@@ -0,0 +1,76 @@
+include_directories(${CMAKE_SOURCE_DIR}/decoders)
+add_executable(gtest_quic_unit gtest_quic_unit.cpp)
+target_link_libraries(gtest_quic_unit gtest quic openssl-crypto-static openssl-ssl-static)
+include(GoogleTest)
+gtest_discover_tests(gtest_quic_unit)
+
+add_executable(gtest_quic_main gtest_quic_main.cpp gtest_quic_module.cpp)
+target_include_directories(gtest_quic_main PRIVATE ${CMAKE_SOURCE_DIR}/deps/)
+target_include_directories(gtest_quic_main PRIVATE ${CMAKE_SOURCE_DIR}/decoders/)
+target_link_libraries(gtest_quic_main PRIVATE cjson-static -Wl,--whole-archive stellar_lib session_manager quic -Wl,--no-whole-archive
+ dl "-rdynamic"
+ gtest gmock)
+set(TEST_PREFIX QUIC)
+add_test(NAME ${TEST_PREFIX}.SETUP COMMAND sh -c "
+ mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/conf &&
+ mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/log &&
+ cp ${CMAKE_SOURCE_DIR}/conf/stellar.toml ${CMAKE_CURRENT_BINARY_DIR}/conf/ &&
+ cat ${CMAKE_SOURCE_DIR}/test/decoders/quic/quic_spec.toml >> ${CMAKE_CURRENT_BINARY_DIR}/conf/stellar.toml &&
+ tomlq -t -i '.packet_io.pcap_path=\"-\"' ${CMAKE_CURRENT_BINARY_DIR}/conf/stellar.toml &&
+ tomlq -t -i '.packet_io.mode=\"pcaplist\"' ${CMAKE_CURRENT_BINARY_DIR}/conf/stellar.toml
+ ")
+set_tests_properties(${TEST_PREFIX}.SETUP
+ PROPERTIES FIXTURES_SETUP ${TEST_PREFIX}.SETUP)
+
+set(QUIC_BENCHMARK_DIR ${CMAKE_SOURCE_DIR}/test/decoders/quic/pcap)
+set(QUIC_GTEST_MAIN ${CMAKE_CURRENT_BINARY_DIR}/gtest_quic_main)
+set(QUIC_TEST_JSON quic_gtest.json)
+add_test(NAME ${TEST_PREFIX}.IQUIC_29 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/iquic/29 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/iquic/29/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.IQUIC_PORT8443 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/port-8443 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/port-8443/quic_result.json ${QUIC_TEST_JSON}" )
+
+add_test(NAME ${TEST_PREFIX}.GQUIC_23 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/gquic/23 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/gquic/23/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.GQUIC_25 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/gquic/25 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/gquic/25/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.GQUIC_33 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/gquic/33 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/gquic/33/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.GQUIC_34 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/gquic/34 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/gquic/34/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.GQUIC_35 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/gquic/35 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/gquic/35/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.GQUIC_37 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/gquic/37 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/gquic/37/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.GQUIC_39 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/gquic/39 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/gquic/39/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.GQUIC_41 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/gquic/41 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/gquic/41/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.GQUIC_43 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/gquic/43 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/gquic/43/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.GQUIC_44 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/gquic/44 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/gquic/44/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.GQUIC_46 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/gquic/46 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/gquic/46/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.GQUIC_50 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/gquic/50 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/gquic/50/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.MVFST01 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/mvfst/01 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/mvfst/01/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.MVFST02 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/mvfst/02 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/mvfst/02/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.TQUIC COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/tquic -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/tquic/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.RFC9000 COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/rfc9000 -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/rfc9000/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.RFC9000-FRAG COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/rfc9000-fragment -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/rfc9000-fragment/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.RFC9000-SPECIAL COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/rfc9000-special -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/rfc9000-special/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.RFC9000-CHLO-FRAG COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/rfc9000-chlo-fragment -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/rfc9000-chlo-fragment/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.AIRPORT COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/airport -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/airport/quic_result.json ${QUIC_TEST_JSON}" )
+add_test(NAME ${TEST_PREFIX}.SPECIAL COMMAND sh -c "find ${QUIC_BENCHMARK_DIR}/special -type f -name *.pcap | sort -V | ${QUIC_GTEST_MAIN} ${QUIC_BENCHMARK_DIR}/special/quic_result.json ${QUIC_TEST_JSON}" )
+
+set_tests_properties(${TEST_PREFIX}.IQUIC_29
+ ${TEST_PREFIX}.IQUIC_PORT8443
+ ${TEST_PREFIX}.GQUIC_23
+ ${TEST_PREFIX}.GQUIC_25
+ ${TEST_PREFIX}.GQUIC_33
+ ${TEST_PREFIX}.GQUIC_34
+ ${TEST_PREFIX}.GQUIC_35
+ ${TEST_PREFIX}.GQUIC_37
+ ${TEST_PREFIX}.GQUIC_41
+ ${TEST_PREFIX}.GQUIC_43
+ ${TEST_PREFIX}.GQUIC_44
+ ${TEST_PREFIX}.GQUIC_46
+ ${TEST_PREFIX}.GQUIC_50
+ ${TEST_PREFIX}.MVFST01
+ ${TEST_PREFIX}.MVFST02
+ ${TEST_PREFIX}.TQUIC
+ ${TEST_PREFIX}.RFC9000
+ ${TEST_PREFIX}.RFC9000-FRAG
+ ${TEST_PREFIX}.RFC9000-SPECIAL
+ ${TEST_PREFIX}.RFC9000-CHLO-FRAG
+ ${TEST_PREFIX}.AIRPORT
+ ${TEST_PREFIX}.SPECIAL
+ PROPERTIES FIXTURES_REQUIRED ${TEST_PREFIX}.SETUP
+ ) \ No newline at end of file
diff --git a/test/decoders/quic/gtest_quic_main.cpp b/test/decoders/quic/gtest_quic_main.cpp
new file mode 100644
index 0000000..2e9f7fa
--- /dev/null
+++ b/test/decoders/quic/gtest_quic_main.cpp
@@ -0,0 +1,97 @@
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+#include <assert.h>
+#include <gtest/gtest.h>
+#include "stellar/stellar.h"
+#include "cJSON.h"
+
+static cJSON *load_result_from_jsonfile(const char *json_path)
+{
+ if (json_path == NULL)
+ return NULL;
+
+ long file_len = 0;
+ char *file_content = NULL;
+ FILE *fp = NULL;
+
+ fp = fopen(json_path, "r+");
+ if (NULL == fp)
+ {
+ return NULL;
+ }
+ fseek(fp, 0, SEEK_END);
+ file_len = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
+ if (file_len == 0)
+ {
+ fclose(fp);
+ return NULL;
+ }
+ file_content = (char *)malloc(file_len + 1);
+ fread(file_content, file_len, 1, fp);
+ file_content[file_len] = '\0';
+ cJSON *load = cJSON_Parse(file_content);
+ free(file_content);
+ fclose(fp);
+ return load;
+}
+
+static void show_json_diff(cJSON *expect_json_root, cJSON *test_module_root)
+{
+ if (NULL == expect_json_root || NULL == test_module_root)
+ {
+ return;
+ }
+ cJSON *t_load = expect_json_root->child, *t_test = test_module_root->child;
+ int ret;
+ char *load_json_str = NULL;
+ char *result_json_str = NULL;
+ while (t_load != NULL && t_test != NULL)
+ {
+ ret = cJSON_Compare(t_load, t_test, 0);
+ if (ret != 1)
+ {
+ load_json_str = cJSON_Print(t_load);
+ printf("LOAD Diff:\n%s\n", load_json_str);
+ free(load_json_str);
+ result_json_str = cJSON_Print(t_test);
+ printf("TEST Diff:\n%s\n", result_json_str);
+ free(result_json_str);
+ }
+ t_load = t_load->next;
+ t_test = t_test->next;
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ if (argc != 3)
+ {
+ fprintf(stderr, "\nUsage: ./%s <expect-result> <test-module-result>\n\n", argv[0]);
+ exit(1);
+ }
+ ::testing::InitGoogleTest(&argc, (char **)argv);
+ const char *expect_json_path = argv[1];
+ const char *test_module_json_path = argv[2];
+
+ struct stellar *st = stellar_new("./conf/stellar.toml");
+ EXPECT_TRUE(st != NULL);
+ stellar_run(st);
+ stellar_free(st);
+
+ cJSON *expect_json_root = load_result_from_jsonfile(expect_json_path);
+ EXPECT_TRUE(expect_json_root != NULL);
+ cJSON *test_json_root = load_result_from_jsonfile(test_module_json_path);
+ EXPECT_TRUE(test_json_root != NULL);
+
+ int ret = cJSON_Compare(expect_json_root, test_json_root, 0);
+ EXPECT_EQ(1, ret);
+ if (ret != 1)
+ {
+ show_json_diff(expect_json_root, test_json_root);
+ }
+ cJSON_Delete(expect_json_root);
+ cJSON_Delete(test_json_root);
+ return ::testing::Test::HasFailure() ? 1 : 0;
+} \ No newline at end of file
diff --git a/test/decoders/quic/gtest_quic_module.cpp b/test/decoders/quic/gtest_quic_module.cpp
new file mode 100644
index 0000000..f3e2d77
--- /dev/null
+++ b/test/decoders/quic/gtest_quic_module.cpp
@@ -0,0 +1,122 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <assert.h>
+#include "cJSON.h"
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+#include "stellar/quic.h"
+#include "stellar/session.h"
+#include "stellar/module.h"
+#include "quic/quic_decoder.h"
+#include "stellar/quic.h"
+
+ static cJSON *gtest_quic_json_root;
+ static int g_result_count = 1;
+
+ struct quic_gtest_exdata
+ {
+ cJSON *json_root;
+ };
+
+ struct quic_gtest_env
+ {
+ struct module_manager *mod_mgr;
+ int exdata_idx;
+ };
+
+ static void commit_test_result_json(cJSON *new_node)
+ {
+ if (gtest_quic_json_root)
+ {
+ char test_index[32] = {};
+ sprintf(test_index, "QUIC_RESULT_%d", g_result_count);
+ // cJSON_AddItemToObject(g_test_result_root, name, node);
+ cJSON_AddStringToObject(new_node, "name", test_index);
+ cJSON_AddItemToArray(gtest_quic_json_root, new_node);
+ }
+ }
+
+ static void cJSON_Add_QStringToObject(cJSON *object, const char *name, const char *value, size_t value_len)
+ {
+ char *tmp = (char *)calloc(1, value_len + 1);
+ memcpy(tmp, value, value_len);
+ cJSON_AddStringToObject(object, name, tmp);
+ free(tmp);
+ }
+
+ void quic_gtest_session_exdata_free_cb(int idx, void *ex_ptr, void *arg)
+ {
+ (void)idx;
+ (void)arg;
+ struct quic_gtest_exdata *quic_ext = (struct quic_gtest_exdata *)ex_ptr;
+ if (quic_ext && quic_ext->json_root)
+ {
+ char result_name[128] = "";
+ snprintf(result_name, sizeof(result_name), "QUIC_RESULT_%d", g_result_count);
+ commit_test_result_json(quic_ext->json_root);
+ g_result_count += 1;
+ free(ex_ptr);
+ }
+ }
+
+ void quic_gtest_on_client_hello_cb(struct session *sess, unsigned int version, const struct quic_client_hello *chlo, void *args)
+ {
+ struct quic_gtest_env *env = (struct quic_gtest_env *)args;
+ struct quic_gtest_exdata *quic_ext = (struct quic_gtest_exdata *)session_get_exdata(sess, env->exdata_idx);
+ if (NULL == quic_ext)
+ {
+ quic_ext = (struct quic_gtest_exdata *)calloc(1, sizeof(struct quic_gtest_exdata));
+ session_set_exdata(sess, env->exdata_idx, quic_ext);
+ quic_ext->json_root = cJSON_CreateObject();
+ cJSON_AddStringToObject(quic_ext->json_root, "Tuple4", session_get_readable_addr(sess));
+ }
+ char version_str[128] = {0};
+ quic_version_to_readable_string(version, version_str, sizeof(version_str));
+ cJSON_AddStringToObject(quic_ext->json_root, "VERSION", version_str);
+ if (chlo && chlo->sni && chlo->sni_len > 0)
+ {
+ cJSON_Add_QStringToObject(quic_ext->json_root, "SNI", chlo->sni, chlo->sni_len);
+ }
+ if (chlo && chlo->user_agent && chlo->user_agent_len > 0)
+ {
+ cJSON_Add_QStringToObject(quic_ext->json_root, "UA", chlo->user_agent, chlo->user_agent_len);
+ }
+ }
+
+ struct module *gtest_quic_init(struct module_manager *mod_mgr)
+ {
+ gtest_quic_json_root = cJSON_CreateArray();
+ struct quic_gtest_env *env = (struct quic_gtest_env *)calloc(1, sizeof(struct quic_gtest_env));
+ env->mod_mgr = mod_mgr;
+ struct module *quic_decoder_mod = module_manager_get_module(mod_mgr, QUIC_MODULE_NAME);
+ struct quic *quic_env = quic_module_to_quic(quic_decoder_mod);
+ quic_subscribe_client_hello(quic_env, quic_gtest_on_client_hello_cb, env);
+
+ struct module *sess_mod = module_manager_get_module(mod_mgr, SESSION_MANAGER_MODULE_NAME);
+ struct session_manager *sess_mgr = module_to_session_manager(sess_mod);
+ env->exdata_idx = session_manager_new_session_exdata_index(sess_mgr, "QUIC_GTEST_EXDATA", quic_gtest_session_exdata_free_cb, env);
+ return module_new("GTEST_QUIC", env);
+ }
+
+ void gtest_quic_exit(struct module_manager *mod_mgr, struct module *mod)
+ {
+ (void)mod_mgr;
+ struct quic_gtest_env *env = (struct quic_gtest_env *)module_get_ctx(mod);
+ free(env);
+ char *json_str = cJSON_PrintUnformatted(gtest_quic_json_root);
+ FILE *json_fp = fopen("quic_gtest.json", "w+");
+ fwrite(json_str, strlen(json_str), 1, json_fp);
+ fclose(json_fp);
+ free(json_str);
+ cJSON_Delete(gtest_quic_json_root);
+ module_free(mod);
+ return;
+ }
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/test/decoders/quic/gtest_quic_unit.cpp b/test/decoders/quic/gtest_quic_unit.cpp
new file mode 100644
index 0000000..40efde4
--- /dev/null
+++ b/test/decoders/quic/gtest_quic_unit.cpp
@@ -0,0 +1,108 @@
+#include <gtest/gtest.h>
+#include <unistd.h>
+#include <stdio.h>
+
+extern "C"
+{
+#include "quic/quic_process.h"
+#include "quic/quic_decoder.h"
+}
+
+TEST(QUIC, non_quic_protocol)
+{
+ const unsigned char dns_header[] =
+ {
+ 0x93,
+ 0xa4,
+ 0xa8,
+ 0x01,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ };
+ int payload_offset = 0;
+ enum QUIC_VERSION_T qver = is_quic_protocol((char *)dns_header, sizeof(dns_header), &payload_offset);
+ ASSERT_EQ(qver, QUIC_VERSION_UNKNOWN);
+}
+
+TEST(QUIC, is_quic_protocol_rfc9000)
+{
+ const unsigned char quic_header[] =
+ {
+ 0xcc, // flags
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x01, // version
+ 0x08,
+ 0x01,
+ 0x02,
+ 0x03,
+ 0x04,
+ 0x05,
+ 0x06,
+ 0x07,
+ 0x08,
+ };
+ int payload_offset = 0;
+ enum QUIC_VERSION_T qver = is_quic_protocol((char *)quic_header, sizeof(quic_header), &payload_offset);
+ ASSERT_EQ(qver, IQUIC_VERSION_RFC9000);
+}
+
+TEST(QUIC, is_quic_protocol_gquic23)
+{
+ const unsigned char quic_header[1500] =
+ {
+ 0x0d, // flags
+ 0x01,
+ 0x02,
+ 0x03,
+ 0x04,
+ 0x05,
+ 0x06,
+ 0x07,
+ 0x08, // CID
+ 0x51, 0x30, 0x32, 0x33 // version
+ };
+ int payload_offset = 0;
+ enum QUIC_VERSION_T qver = is_quic_protocol((char *)quic_header, sizeof(quic_header), &payload_offset);
+ ASSERT_EQ(qver, GQUIC_VERSION_Q023);
+}
+
+TEST(QUIC, is_quic_protocol_iquic29)
+{
+ const unsigned char quic_header[] =
+ {
+ 0xc2, // flags
+ 0xff, 0x00, 0x00, 0x1d, // version
+ 0x00, // DCID
+ 0x08, // ID length
+ };
+ int payload_offset = 0;
+ enum QUIC_VERSION_T qver = is_quic_protocol((char *)quic_header, sizeof(quic_header), &payload_offset);
+ ASSERT_EQ(qver, IQUIC_VERSION_I029);
+}
+
+TEST(QUIC, qk_get_chlo_length)
+{
+ const unsigned char quic_chlo_header[] =
+ {
+ 0x01, // handshark type
+ 0x00, 0x01, 0x41, // length
+ 0x03, 0x03, // tls version
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, // random
+ 0x09, 0xa, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, // random
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, // random
+ 0x09, 0xa, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, // random
+ };
+
+ int chlo_len = qk_get_chlo_length(quic_chlo_header, sizeof(quic_chlo_header));
+ ASSERT_EQ(321, chlo_len);
+}
+
+int main(int argc, char const *argv[])
+{
+ ::testing::InitGoogleTest(&argc, (char **)argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/test/decoders/quic/pcap/airport/Old-Airport-quic.pcap b/test/decoders/quic/pcap/airport/Old-Airport-quic.pcap
new file mode 100644
index 0000000..d6dc469
--- /dev/null
+++ b/test/decoders/quic/pcap/airport/Old-Airport-quic.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/airport/quic_result.json b/test/decoders/quic/pcap/airport/quic_result.json
new file mode 100644
index 0000000..6f03e9e
--- /dev/null
+++ b/test/decoders/quic/pcap/airport/quic_result.json
@@ -0,0 +1,111 @@
+[
+ {
+ "Tuple4": "10.56.160.76:44417-216.58.209.132:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.google.com",
+ "UA": "com.google.android.googlequicksearchbox Cronet/96.0.4664.17",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "10.56.160.76:47427-213.55.110.12:443-17-0",
+ "VERSION": "Google QUIC 43",
+ "SNI": "r1---sn-xuj-5qqz.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/96.0.4655.4",
+ "name": "QUIC_RESULT_2"
+ },
+ {
+ "Tuple4": "10.56.160.76:39996-142.250.185.33:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "yt3.ggpht.com",
+ "UA": "com.google.android.youtube Cronet/96.0.4655.4",
+ "name": "QUIC_RESULT_3"
+ },
+ {
+ "Tuple4": "10.56.160.76:48527-216.58.209.130:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.googleadservices.com",
+ "UA": "com.google.android.youtube Cronet/96.0.4655.4",
+ "name": "QUIC_RESULT_4"
+ },
+ {
+ "Tuple4": "10.56.160.76:43569-197.156.74.146:443-17-0",
+ "VERSION": "Google QUIC 43",
+ "SNI": "r7---sn-xuj-5qqs.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/96.0.4655.4",
+ "name": "QUIC_RESULT_5"
+ },
+ {
+ "Tuple4": "10.56.160.76:52114-197.156.74.147:443-17-0",
+ "VERSION": "Google QUIC 43",
+ "SNI": "r8---sn-xuj-5qqs.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/96.0.4655.4",
+ "name": "QUIC_RESULT_6"
+ },
+ {
+ "Tuple4": "10.56.160.76:59023-213.55.110.13:443-17-0",
+ "VERSION": "Google QUIC 43",
+ "SNI": "r2---sn-xuj-5qqz.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/96.0.4655.4",
+ "name": "QUIC_RESULT_7"
+ },
+ {
+ "Tuple4": "10.56.160.76:46224-197.156.74.140:443-17-0",
+ "VERSION": "Google QUIC 43",
+ "SNI": "r1---sn-xuj-5qqs.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/96.0.4655.4",
+ "name": "QUIC_RESULT_8"
+ },
+ {
+ "Tuple4": "10.56.160.76:54334-197.156.74.145:443-17-0",
+ "VERSION": "Google QUIC 43",
+ "SNI": "r6---sn-xuj-5qqs.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/96.0.4655.4",
+ "name": "QUIC_RESULT_9"
+ },
+ {
+ "Tuple4": "10.56.160.76:41069-142.250.180.42:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "youtubei.googleapis.com",
+ "UA": "com.google.android.youtube Cronet/96.0.4655.4",
+ "name": "QUIC_RESULT_10"
+ },
+ {
+ "Tuple4": "10.56.160.76:48756-213.55.110.14:443-17-0",
+ "VERSION": "Google QUIC 43",
+ "SNI": "r3---sn-xuj-5qqz.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/96.0.4655.4",
+ "name": "QUIC_RESULT_11"
+ },
+ {
+ "Tuple4": "10.56.160.76:51113-142.250.180.54:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "i.ytimg.com",
+ "UA": "com.google.android.youtube Cronet/96.0.4655.4",
+ "name": "QUIC_RESULT_12"
+ },
+ {
+ "Tuple4": "10.56.160.76:38866-197.156.74.141:443-17-0",
+ "VERSION": "Google QUIC 43",
+ "SNI": "r2---sn-xuj-5qqs.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/96.0.4655.4",
+ "name": "QUIC_RESULT_13"
+ },
+ {
+ "Tuple4": "10.56.160.76:46131-196.188.31.18:443-17-0",
+ "VERSION": "Facebook mvfst 02",
+ "SNI": "video.fadd1-1.fna.fbcdn.net",
+ "name": "QUIC_RESULT_14"
+ },
+ {
+ "Tuple4": "10.56.160.76:40267-102.132.96.18:443-17-0",
+ "VERSION": "Facebook mvfst 02",
+ "SNI": "graph.facebook.com",
+ "name": "QUIC_RESULT_15"
+ },
+ {
+ "Tuple4": "10.56.160.76:46761-196.188.31.17:443-17-0",
+ "VERSION": "Facebook mvfst 02",
+ "SNI": "scontent.fadd1-1.fna.fbcdn.net",
+ "name": "QUIC_RESULT_16"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/gquic/23/1-gquic-023-85.117.117.169.47762-173.194.73.95.443.pcap b/test/decoders/quic/pcap/gquic/23/1-gquic-023-85.117.117.169.47762-173.194.73.95.443.pcap
new file mode 100644
index 0000000..db29a3b
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/23/1-gquic-023-85.117.117.169.47762-173.194.73.95.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/23/2-gquic-023-85.117.123.193.19270-64.233.165.95.443.pcap b/test/decoders/quic/pcap/gquic/23/2-gquic-023-85.117.123.193.19270-64.233.165.95.443.pcap
new file mode 100644
index 0000000..110620d
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/23/2-gquic-023-85.117.123.193.19270-64.233.165.95.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/23/quic_result.json b/test/decoders/quic/pcap/gquic/23/quic_result.json
new file mode 100644
index 0000000..0325ce4
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/23/quic_result.json
@@ -0,0 +1,15 @@
+[
+ {
+ "Tuple4": "85.117.117.169:47762-173.194.73.95:443-17-0",
+ "VERSION": "Google QUIC 23",
+ "SNI": "www.googleapis.com",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "85.117.123.193:19270-64.233.165.95:443-17-0",
+ "VERSION": "Google QUIC 23",
+ "SNI": "www.googleapis.com",
+ "SNI": "www.googleapis.com",
+ "name": "QUIC_RESULT_2"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/gquic/25/1-gquic-025-85.117.113.98.4340-74.125.131.95.443.pcap b/test/decoders/quic/pcap/gquic/25/1-gquic-025-85.117.113.98.4340-74.125.131.95.443.pcap
new file mode 100644
index 0000000..299e573
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/25/1-gquic-025-85.117.113.98.4340-74.125.131.95.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/25/2-gquic-025-90.143.184.225.63062-173.194.222.95.443.pcap b/test/decoders/quic/pcap/gquic/25/2-gquic-025-90.143.184.225.63062-173.194.222.95.443.pcap
new file mode 100644
index 0000000..ad5a080
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/25/2-gquic-025-90.143.184.225.63062-173.194.222.95.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/25/quic_result.json b/test/decoders/quic/pcap/gquic/25/quic_result.json
new file mode 100644
index 0000000..ad9de51
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/25/quic_result.json
@@ -0,0 +1,12 @@
+[{
+ "Tuple4": "85.117.113.98:4340-74.125.131.95:443-17-0",
+ "VERSION": "Google QUIC 25",
+ "SNI": "www.googleapis.com",
+ "SNI": "www.googleapis.com",
+ "name": "QUIC_RESULT_1"
+ }, {
+ "Tuple4": "90.143.184.225:63062-173.194.222.95:443-17-0",
+ "VERSION": "Google QUIC 25",
+ "SNI": "www.googleapis.com",
+ "name": "QUIC_RESULT_2"
+}]
diff --git a/test/decoders/quic/pcap/gquic/33/1-gquic-033-90.143.189.5.8026-173.194.188.40.443.pcap b/test/decoders/quic/pcap/gquic/33/1-gquic-033-90.143.189.5.8026-173.194.188.40.443.pcap
new file mode 100644
index 0000000..b0e4c5b
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/33/1-gquic-033-90.143.189.5.8026-173.194.188.40.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/33/quic_result.json b/test/decoders/quic/pcap/gquic/33/quic_result.json
new file mode 100644
index 0000000..852897c
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/33/quic_result.json
@@ -0,0 +1,9 @@
+[{
+ "Tuple4": "90.143.189.5:8026-173.194.188.40:443-17-0",
+ "VERSION": "Google QUIC 33",
+ "SNI": "r3---sn-4g5ednse.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/53.0.2768.0",
+ "SNI": "r3---sn-4g5ednse.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/53.0.2768.0",
+ "name": "QUIC_RESULT_1"
+}]
diff --git a/test/decoders/quic/pcap/gquic/34/1-gquic-034-85.117.125.8.21243-173.194.73.102.443.pcap b/test/decoders/quic/pcap/gquic/34/1-gquic-034-85.117.125.8.21243-173.194.73.102.443.pcap
new file mode 100644
index 0000000..eee3c8e
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/34/1-gquic-034-85.117.125.8.21243-173.194.73.102.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/34/quic_result.json b/test/decoders/quic/pcap/gquic/34/quic_result.json
new file mode 100644
index 0000000..d1fd2c7
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/34/quic_result.json
@@ -0,0 +1,9 @@
+[{
+ "Tuple4": "85.117.125.8:21243-173.194.73.102:443-17-0",
+ "VERSION": "Google QUIC 34",
+ "SNI": "redirector.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/54.0.2823.2",
+ "SNI": "redirector.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/54.0.2823.2",
+ "name": "QUIC_RESULT_1"
+}]
diff --git a/test/decoders/quic/pcap/gquic/35/1-gquic-035-redirector.googlevideo.com-85.117.122.194.32370-173.194.220.138.443.pcap b/test/decoders/quic/pcap/gquic/35/1-gquic-035-redirector.googlevideo.com-85.117.122.194.32370-173.194.220.138.443.pcap
new file mode 100644
index 0000000..5dc1f81
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/35/1-gquic-035-redirector.googlevideo.com-85.117.122.194.32370-173.194.220.138.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/35/2-gquic-035-redirector.googlevideo.com-85.117.122.21.21396-173.194.220.138.443.pcap b/test/decoders/quic/pcap/gquic/35/2-gquic-035-redirector.googlevideo.com-85.117.122.21.21396-173.194.220.138.443.pcap
new file mode 100644
index 0000000..075c665
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/35/2-gquic-035-redirector.googlevideo.com-85.117.122.21.21396-173.194.220.138.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/35/quic_result.json b/test/decoders/quic/pcap/gquic/35/quic_result.json
new file mode 100644
index 0000000..276fce5
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/35/quic_result.json
@@ -0,0 +1,18 @@
+[{
+ "Tuple4": "85.117.122.194:32370-173.194.220.138:443-17-0",
+ "VERSION": "Google QUIC 35",
+ "SNI": "redirector.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/56.0.2900.3",
+ "SNI": "redirector.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/56.0.2900.3",
+ "SNI": "redirector.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/56.0.2900.3",
+ "name": "QUIC_RESULT_1"
+ }, {
+ "Tuple4": "85.117.122.21:21396-173.194.220.138:443-17-0",
+ "VERSION": "Google QUIC 35",
+ "SNI": "redirector.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/59.0.3068.4",
+ "name": "QUIC_RESULT_2"
+}]
+
diff --git a/test/decoders/quic/pcap/gquic/37/1-gquic-037-10.32.121.249.33765-64.233.161.95.443.pcap b/test/decoders/quic/pcap/gquic/37/1-gquic-037-10.32.121.249.33765-64.233.161.95.443.pcap
new file mode 100644
index 0000000..ca6388d
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/37/1-gquic-037-10.32.121.249.33765-64.233.161.95.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/37/2-gquic-037-10.35.127.134.42356-64.233.165.139.443.pcap b/test/decoders/quic/pcap/gquic/37/2-gquic-037-10.35.127.134.42356-64.233.165.139.443.pcap
new file mode 100644
index 0000000..86d19de
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/37/2-gquic-037-10.35.127.134.42356-64.233.165.139.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/37/3-gquic-037-185.57.74.232.43276-173.194.44.78.443.pcap b/test/decoders/quic/pcap/gquic/37/3-gquic-037-185.57.74.232.43276-173.194.44.78.443.pcap
new file mode 100644
index 0000000..4b3660b
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/37/3-gquic-037-185.57.74.232.43276-173.194.44.78.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/37/4-gquic-037-185.57.74.32.52134-74.125.232.249.443.pcap b/test/decoders/quic/pcap/gquic/37/4-gquic-037-185.57.74.32.52134-74.125.232.249.443.pcap
new file mode 100644
index 0000000..d075163
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/37/4-gquic-037-185.57.74.32.52134-74.125.232.249.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/37/5-gquic-037-195.162.27.132.31404-217.76.77.81.443.pcap b/test/decoders/quic/pcap/gquic/37/5-gquic-037-195.162.27.132.31404-217.76.77.81.443.pcap
new file mode 100644
index 0000000..73eec87
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/37/5-gquic-037-195.162.27.132.31404-217.76.77.81.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/37/6-gquic-037-195.162.27.132.31405-217.76.77.81.443.pcap b/test/decoders/quic/pcap/gquic/37/6-gquic-037-195.162.27.132.31405-217.76.77.81.443.pcap
new file mode 100644
index 0000000..b78a422
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/37/6-gquic-037-195.162.27.132.31405-217.76.77.81.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/37/7-gquic-037-85.117.112.160.21969-64.233.165.95.443.pcap b/test/decoders/quic/pcap/gquic/37/7-gquic-037-85.117.112.160.21969-64.233.165.95.443.pcap
new file mode 100644
index 0000000..8b53513
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/37/7-gquic-037-85.117.112.160.21969-64.233.165.95.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/37/8-gquic-037-85.117.113.62.29644-173.194.73.95.443.pcap b/test/decoders/quic/pcap/gquic/37/8-gquic-037-85.117.113.62.29644-173.194.73.95.443.pcap
new file mode 100644
index 0000000..370b9fc
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/37/8-gquic-037-85.117.113.62.29644-173.194.73.95.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/37/quic_result.json b/test/decoders/quic/pcap/gquic/37/quic_result.json
new file mode 100644
index 0000000..af84dd5
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/37/quic_result.json
@@ -0,0 +1,58 @@
+[
+ {
+ "Tuple4": "10.32.121.249:33765-64.233.161.95:443-17-0",
+ "VERSION": "Google QUIC 37",
+ "SNI": "instantmessaging-pa.googleapis.com",
+ "UA": "com.google.android.apps.tachyon Cronet/61.0.3142.0",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "10.35.127.134:42356-64.233.165.139:443-17-0",
+ "VERSION": "Google QUIC 37",
+ "SNI": "clients4.google.com",
+ "UA": "com.google.android.apps.maps Cronet/60.0.3108.3",
+ "name": "QUIC_RESULT_2"
+ },
+ {
+ "Tuple4": "185.57.74.232:43276-173.194.44.78:443-17-0",
+ "VERSION": "Google QUIC 37",
+ "SNI": "www.youtube.com",
+ "UA": "com.google.android.youtube Cronet/61.0.3142.0",
+ "name": "QUIC_RESULT_3"
+ },
+ {
+ "Tuple4": "185.57.74.32:52134-74.125.232.249:443-17-0",
+ "VERSION": "Google QUIC 37",
+ "SNI": "googleads.g.doubleclick.net",
+ "UA": "com.google.android.youtube Cronet/61.0.3142.0",
+ "name": "QUIC_RESULT_4"
+ },
+ {
+ "Tuple4": "195.162.27.132:31404-217.76.77.81:443-17-0",
+ "VERSION": "Google QUIC 37",
+ "SNI": "r6---sn-5auxa-unxe.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/61.0.3142.0",
+ "name": "QUIC_RESULT_5"
+ },
+ {
+ "Tuple4": "195.162.27.132:31405-217.76.77.81:443-17-0",
+ "VERSION": "Google QUIC 37",
+ "SNI": "r6---sn-5auxa-unxe.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/61.0.3142.0",
+ "name": "QUIC_RESULT_6"
+ },
+ {
+ "Tuple4": "85.117.112.160:21969-64.233.165.95:443-17-0",
+ "VERSION": "Google QUIC 37",
+ "SNI": "www.googleapis.com",
+ "UA": "com.google.android.youtube Cronet/60.0.3112.12",
+ "name": "QUIC_RESULT_7"
+ },
+ {
+ "Tuple4": "85.117.113.62:29644-173.194.73.95:443-17-0",
+ "VERSION": "Google QUIC 37",
+ "SNI": "youtubei.googleapis.com",
+ "UA": "com.google.android.youtube Cronet/61.0.3142.0",
+ "name": "QUIC_RESULT_8"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/gquic/39/1-gquic-039-redirector.googlevideo.com-85.117.119.45.22495-173.194.73.101.443.pcap b/test/decoders/quic/pcap/gquic/39/1-gquic-039-redirector.googlevideo.com-85.117.119.45.22495-173.194.73.101.443.pcap
new file mode 100644
index 0000000..bd088b0
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/39/1-gquic-039-redirector.googlevideo.com-85.117.119.45.22495-173.194.73.101.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/39/quic_result.json b/test/decoders/quic/pcap/gquic/39/quic_result.json
new file mode 100644
index 0000000..5f6b1fa
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/39/quic_result.json
@@ -0,0 +1,13 @@
+[{
+ "Tuple4": "85.117.119.45:22495-173.194.73.101:443-17-0",
+ "VERSION": "Google QUIC 39",
+ "SNI": "redirector.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/65.0.3322.0",
+ "SNI": "redirector.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/65.0.3322.0",
+ "SNI": "redirector.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/65.0.3322.0",
+ "SNI": "redirector.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/65.0.3322.0",
+ "name": "QUIC_RESULT_1"
+}]
diff --git a/test/decoders/quic/pcap/gquic/41/1-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap b/test/decoders/quic/pcap/gquic/41/1-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap
new file mode 100644
index 0000000..0a6e5ff
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/41/1-gquic-041-90.143.180.56.28496-64.233.165.113.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/41/2-gquic-041-90.143.189.30.53357-64.233.165.95.443.pcap b/test/decoders/quic/pcap/gquic/41/2-gquic-041-90.143.189.30.53357-64.233.165.95.443.pcap
new file mode 100644
index 0000000..171c264
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/41/2-gquic-041-90.143.189.30.53357-64.233.165.95.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/41/quic_result.json b/test/decoders/quic/pcap/gquic/41/quic_result.json
new file mode 100644
index 0000000..16b0a13
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/41/quic_result.json
@@ -0,0 +1,15 @@
+[{
+ "Tuple4": "90.143.180.56:28496-64.233.165.113:443-17-0",
+ "VERSION": "Google QUIC 41",
+ "SNI": "s.youtube.com",
+ "UA": "com.google.android.youtube Cronet/66.0.3335.4",
+ "SNI": "s.youtube.com",
+ "UA": "com.google.android.youtube Cronet/66.0.3335.4",
+ "name": "QUIC_RESULT_1"
+ }, {
+ "Tuple4": "90.143.189.30:53357-64.233.165.95:443-17-0",
+ "VERSION": "Google QUIC 41",
+ "SNI": "youtubei.googleapis.com",
+ "UA": "com.google.android.youtube Cronet/66.0.3335.4",
+ "name": "QUIC_RESULT_2"
+}]
diff --git a/test/decoders/quic/pcap/gquic/43/1-gquic-043-client.weixin.qq.com-112.43.145.231.18699-112.46.25.216.443.pcap b/test/decoders/quic/pcap/gquic/43/1-gquic-043-client.weixin.qq.com-112.43.145.231.18699-112.46.25.216.443.pcap
new file mode 100644
index 0000000..0abc861
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/43/1-gquic-043-client.weixin.qq.com-112.43.145.231.18699-112.46.25.216.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/43/2-gquic-043-without-sni-192.168.50.26.55209-34.102.215.99.443.pcap b/test/decoders/quic/pcap/gquic/43/2-gquic-043-without-sni-192.168.50.26.55209-34.102.215.99.443.pcap
new file mode 100644
index 0000000..ae75b00
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/43/2-gquic-043-without-sni-192.168.50.26.55209-34.102.215.99.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/43/3-gquic-043-without-sni-192.168.50.26.60851-34.102.215.99.443.pcap b/test/decoders/quic/pcap/gquic/43/3-gquic-043-without-sni-192.168.50.26.60851-34.102.215.99.443.pcap
new file mode 100644
index 0000000..3bad2e1
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/43/3-gquic-043-without-sni-192.168.50.26.60851-34.102.215.99.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/43/quic_result.json b/test/decoders/quic/pcap/gquic/43/quic_result.json
new file mode 100644
index 0000000..dbf2d06
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/43/quic_result.json
@@ -0,0 +1,23 @@
+[
+ {
+ "Tuple4": "112.43.145.231:18699-112.46.25.216:443-17-0",
+ "SNI": "client.weixin.qq.com",
+ "VERSION": "Google QUIC 43",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "192.168.50.26:55209-34.102.215.99:443-17-0",
+ "VERSION": "Google QUIC 43",
+ "name": "QUIC_RESULT_2"
+ },
+ {
+ "Tuple4": "192.168.50.26:60851-34.102.215.99:443-17-0",
+ "VERSION": "Google QUIC 43",
+ "name": "QUIC_RESULT_3"
+ },
+ {
+ "Tuple4": "192.168.50.26:63533-34.102.215.99:443-17-0",
+ "VERSION": "Google QUIC 43",
+ "name": "QUIC_RESULT_4"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/gquic/44/2-gquic-044-185.57.75.21.44739-173.194.73.132.443.pcap b/test/decoders/quic/pcap/gquic/44/2-gquic-044-185.57.75.21.44739-173.194.73.132.443.pcap
new file mode 100644
index 0000000..200d565
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/44/2-gquic-044-185.57.75.21.44739-173.194.73.132.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/44/3-gquic-044-212.154.234.46.62716-74.125.131.156.443.pcap b/test/decoders/quic/pcap/gquic/44/3-gquic-044-212.154.234.46.62716-74.125.131.156.443.pcap
new file mode 100644
index 0000000..963dc30
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/44/3-gquic-044-212.154.234.46.62716-74.125.131.156.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/44/4-gquic-044-2.135.246.186.56653-173.194.113.166.443.pcap b/test/decoders/quic/pcap/gquic/44/4-gquic-044-2.135.246.186.56653-173.194.113.166.443.pcap
new file mode 100644
index 0000000..677f71b
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/44/4-gquic-044-2.135.246.186.56653-173.194.113.166.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/44/quic_result.json b/test/decoders/quic/pcap/gquic/44/quic_result.json
new file mode 100644
index 0000000..839939d
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/44/quic_result.json
@@ -0,0 +1,23 @@
+[
+ {
+ "Tuple4": "185.57.75.21:44739-173.194.73.132:443-17-0",
+ "VERSION": "Google QUIC 44",
+ "SNI": "yt3.ggpht.com",
+ "UA": "dev Chrome/73.0.3664.3 Windows NT 6.1; Win64; x64",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "212.154.234.46:62716-74.125.131.156:443-17-0",
+ "VERSION": "Google QUIC 44",
+ "SNI": "stats.g.doubleclick.net",
+ "UA": "dev Chrome/73.0.3664.3 Windows NT 6.1; Win64; x64",
+ "name": "QUIC_RESULT_2"
+ },
+ {
+ "Tuple4": "2.135.246.186:56653-173.194.113.166:443-17-0",
+ "VERSION": "Google QUIC 44",
+ "SNI": "www.google-analytics.com",
+ "UA": "dev Chrome/73.0.3664.3 Windows NT 6.1",
+ "name": "QUIC_RESULT_3"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/gquic/46/1-gquic-046-36.142.158.169.16385-36.189.11.71.443.pcap b/test/decoders/quic/pcap/gquic/46/1-gquic-046-36.142.158.169.16385-36.189.11.71.443.pcap
new file mode 100644
index 0000000..0b77c4d
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/46/1-gquic-046-36.142.158.169.16385-36.189.11.71.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/46/2-gquic-046-pagead2.googlesyndication.com-172.16.30.79.65003-203.208.50.45.443.pcap b/test/decoders/quic/pcap/gquic/46/2-gquic-046-pagead2.googlesyndication.com-172.16.30.79.65003-203.208.50.45.443.pcap
new file mode 100644
index 0000000..7c2a2a4
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/46/2-gquic-046-pagead2.googlesyndication.com-172.16.30.79.65003-203.208.50.45.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/46/quic_result.json b/test/decoders/quic/pcap/gquic/46/quic_result.json
new file mode 100644
index 0000000..20d8213
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/46/quic_result.json
@@ -0,0 +1,16 @@
+[
+ {
+ "Tuple4": "36.142.158.169:16385-36.189.11.71:443-17-0",
+ "VERSION": "Google QUIC 46",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "172.16.30.79:65003-203.208.50.45:443-17-0",
+ "VERSION": "Google QUIC 46",
+ "SNI": "pagead2.googlesyndication.com",
+ "UA": "Chrome/79.0.3945.79 Windows NT 6.1; Win64; x64",
+ "SNI": "pagead2.googlesyndication.com",
+ "UA": "Chrome/79.0.3945.79 Windows NT 6.1; Win64; x64",
+ "name": "QUIC_RESULT_2"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/gquic/50/1-gquic-050-i.ytimg.com-172.20.9.135.65045-64.233.162.119.443.pcap b/test/decoders/quic/pcap/gquic/50/1-gquic-050-i.ytimg.com-172.20.9.135.65045-64.233.162.119.443.pcap
new file mode 100644
index 0000000..1d5c46a
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/50/1-gquic-050-i.ytimg.com-172.20.9.135.65045-64.233.162.119.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/50/2-gquic-050-www.google.com-172.20.9.135.61564-173.194.221.103.443.pcap b/test/decoders/quic/pcap/gquic/50/2-gquic-050-www.google.com-172.20.9.135.61564-173.194.221.103.443.pcap
new file mode 100644
index 0000000..4a58ff7
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/50/2-gquic-050-www.google.com-172.20.9.135.61564-173.194.221.103.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/50/3-gquic-050-www.youtube.com-172.20.9.135.49347-64.233.165.93.443.pcap b/test/decoders/quic/pcap/gquic/50/3-gquic-050-www.youtube.com-172.20.9.135.49347-64.233.165.93.443.pcap
new file mode 100644
index 0000000..81cad56
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/50/3-gquic-050-www.youtube.com-172.20.9.135.49347-64.233.165.93.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/gquic/50/quic_result.json b/test/decoders/quic/pcap/gquic/50/quic_result.json
new file mode 100644
index 0000000..68a30d7
--- /dev/null
+++ b/test/decoders/quic/pcap/gquic/50/quic_result.json
@@ -0,0 +1,23 @@
+[
+ {
+ "Tuple4": "172.20.9.135:65045-64.233.162.119:443-17-0",
+ "VERSION": "Google QUIC 50",
+ "SNI": "i.ytimg.com",
+ "UA": "Chrome/86.0.4240.75 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "172.20.9.135:61564-173.194.221.103:443-17-0",
+ "VERSION": "Google QUIC 50",
+ "SNI": "www.google.com",
+ "UA": "Chrome/86.0.4240.75 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_2"
+ },
+ {
+ "Tuple4": "172.20.9.135:49347-64.233.165.93:443-17-0",
+ "VERSION": "Google QUIC 50",
+ "SNI": "www.youtube.com",
+ "UA": "Chrome/86.0.4240.75 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_3"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/iquic/29/1-iquic-29-192.168.50.29.61891-31.13.77.35.443.pcap b/test/decoders/quic/pcap/iquic/29/1-iquic-29-192.168.50.29.61891-31.13.77.35.443.pcap
new file mode 100644
index 0000000..dcd22db
--- /dev/null
+++ b/test/decoders/quic/pcap/iquic/29/1-iquic-29-192.168.50.29.61891-31.13.77.35.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/iquic/29/2-iquic-29-223.104.233.102.13650-203.208.40.98.443.pcap b/test/decoders/quic/pcap/iquic/29/2-iquic-29-223.104.233.102.13650-203.208.40.98.443.pcap
new file mode 100644
index 0000000..3f2a3dc
--- /dev/null
+++ b/test/decoders/quic/pcap/iquic/29/2-iquic-29-223.104.233.102.13650-203.208.40.98.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/iquic/29/3-iquic-29-192.168.50.33.57220-114.250.70.38.443.pcap b/test/decoders/quic/pcap/iquic/29/3-iquic-29-192.168.50.33.57220-114.250.70.38.443.pcap
new file mode 100644
index 0000000..f6a188c
--- /dev/null
+++ b/test/decoders/quic/pcap/iquic/29/3-iquic-29-192.168.50.33.57220-114.250.70.38.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/iquic/29/quic_result.json b/test/decoders/quic/pcap/iquic/29/quic_result.json
new file mode 100644
index 0000000..ee59487
--- /dev/null
+++ b/test/decoders/quic/pcap/iquic/29/quic_result.json
@@ -0,0 +1,21 @@
+[
+ {
+ "Tuple4": "192.168.50.29:61891-31.13.77.35:443-17-0",
+ "SNI": "www.facebook.com",
+ "UA": "Chrome/86.0.4240.183 Windows NT 10.0; Win64; x64",
+ "VERSION": "IETF QUIC 29",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "223.104.233.102:13650-203.208.40.98:443-17-0",
+ "VERSION": "IETF QUIC 29",
+ "name": "QUIC_RESULT_2"
+ },
+ {
+ "Tuple4": "192.168.50.33:57220-114.250.70.38:443-17-0",
+ "SNI": "securepubads.g.doubleclick.net",
+ "UA": "Chrome/90.0.4430.72 Windows NT 10.0; Win64; x64",
+ "VERSION": "IETF QUIC 29",
+ "name": "QUIC_RESULT_3"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/mvfst/01/1-mvfst-01-i.instagram.com-192.168.60.9.55659-69.171.250.63.443.pcap b/test/decoders/quic/pcap/mvfst/01/1-mvfst-01-i.instagram.com-192.168.60.9.55659-69.171.250.63.443.pcap
new file mode 100644
index 0000000..be91a45
--- /dev/null
+++ b/test/decoders/quic/pcap/mvfst/01/1-mvfst-01-i.instagram.com-192.168.60.9.55659-69.171.250.63.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/mvfst/01/quic_result.json b/test/decoders/quic/pcap/mvfst/01/quic_result.json
new file mode 100644
index 0000000..672abbb
--- /dev/null
+++ b/test/decoders/quic/pcap/mvfst/01/quic_result.json
@@ -0,0 +1,8 @@
+[
+ {
+ "Tuple4": "192.168.60.9:55659-69.171.250.63:443-17-0",
+ "VERSION": "Facebook mvfst 01",
+ "SNI": "i.instagram.com",
+ "name": "QUIC_RESULT_1"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/mvfst/02/1-mvfst-02-192.168.137.141.50006-31.13.77.17.443.pcap b/test/decoders/quic/pcap/mvfst/02/1-mvfst-02-192.168.137.141.50006-31.13.77.17.443.pcap
new file mode 100644
index 0000000..9b88cc0
--- /dev/null
+++ b/test/decoders/quic/pcap/mvfst/02/1-mvfst-02-192.168.137.141.50006-31.13.77.17.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/mvfst/02/2-mvfst-02-192.168.137.141.63314-31.13.77.10.443.pcap b/test/decoders/quic/pcap/mvfst/02/2-mvfst-02-192.168.137.141.63314-31.13.77.10.443.pcap
new file mode 100644
index 0000000..27f209d
--- /dev/null
+++ b/test/decoders/quic/pcap/mvfst/02/2-mvfst-02-192.168.137.141.63314-31.13.77.10.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/mvfst/02/3-mvfst-02-192.168.137.141.60630-157.240.7.26.443.pcap b/test/decoders/quic/pcap/mvfst/02/3-mvfst-02-192.168.137.141.60630-157.240.7.26.443.pcap
new file mode 100644
index 0000000..4a6fa6c
--- /dev/null
+++ b/test/decoders/quic/pcap/mvfst/02/3-mvfst-02-192.168.137.141.60630-157.240.7.26.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/mvfst/02/4-mvfst-02-192.168.137.141.50293-157.240.15.13.443.pcap b/test/decoders/quic/pcap/mvfst/02/4-mvfst-02-192.168.137.141.50293-157.240.15.13.443.pcap
new file mode 100644
index 0000000..016d260
--- /dev/null
+++ b/test/decoders/quic/pcap/mvfst/02/4-mvfst-02-192.168.137.141.50293-157.240.15.13.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/mvfst/02/quic_result.json b/test/decoders/quic/pcap/mvfst/02/quic_result.json
new file mode 100644
index 0000000..a01dd35
--- /dev/null
+++ b/test/decoders/quic/pcap/mvfst/02/quic_result.json
@@ -0,0 +1,26 @@
+[
+ {
+ "Tuple4": "192.168.137.141:50006-31.13.77.17:443-17-0",
+ "VERSION": "Facebook mvfst 02",
+ "SNI": "graph.facebook.com",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "192.168.137.141:63314-31.13.77.10:443-17-0",
+ "VERSION": "Facebook mvfst 02",
+ "SNI": "gateway.facebook.com",
+ "name": "QUIC_RESULT_2"
+ },
+ {
+ "Tuple4": "192.168.137.141:60630-157.240.7.26:443-17-0",
+ "VERSION": "Facebook mvfst 02",
+ "SNI": "scontent-sin6-1.xx.fbcdn.net",
+ "name": "QUIC_RESULT_3"
+ },
+ {
+ "Tuple4": "192.168.137.141:50293-157.240.15.13:443-17-0",
+ "VERSION": "Facebook mvfst 02",
+ "SNI": "scontent-sin6-3.xx.fbcdn.net",
+ "name": "QUIC_RESULT_4"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/port-8443/1-iquic-29-192.168.50.49.58445-45.77.96.66.8443.pcap b/test/decoders/quic/pcap/port-8443/1-iquic-29-192.168.50.49.58445-45.77.96.66.8443.pcap
new file mode 100644
index 0000000..dd8e74a
--- /dev/null
+++ b/test/decoders/quic/pcap/port-8443/1-iquic-29-192.168.50.49.58445-45.77.96.66.8443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/port-8443/quic_result.json b/test/decoders/quic/pcap/port-8443/quic_result.json
new file mode 100644
index 0000000..630db3a
--- /dev/null
+++ b/test/decoders/quic/pcap/port-8443/quic_result.json
@@ -0,0 +1,7 @@
+[{
+ "Tuple4": "192.168.50.49:58445-45.77.96.66:8443-17-0",
+ "VERSION": "IETF QUIC 29",
+ "SNI": "quic.tech",
+ "UA": "Chrome/92.0.4515.159 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_1"
+}]
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.33232-173.194.220.105.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.33232-173.194.220.105.443.pcap
new file mode 100644
index 0000000..a2efae4
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.33232-173.194.220.105.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.39896-173.194.220.105.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.39896-173.194.220.105.443.pcap
new file mode 100644
index 0000000..5e20732
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.39896-173.194.220.105.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.43145-173.194.220.105.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.43145-173.194.220.105.443.pcap
new file mode 100644
index 0000000..9be1464
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.43145-173.194.220.105.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.49914-173.194.220.105.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.49914-173.194.220.105.443.pcap
new file mode 100644
index 0000000..1929ace
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.49914-173.194.220.105.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.54549-173.194.220.105.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.54549-173.194.220.105.443.pcap
new file mode 100644
index 0000000..019bc20
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.54549-173.194.220.105.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.57394-173.194.220.105.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.57394-173.194.220.105.443.pcap
new file mode 100644
index 0000000..2dd3dca
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.57394-173.194.220.105.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.62303-173.194.220.105.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.62303-173.194.220.105.443.pcap
new file mode 100644
index 0000000..9b2cdf6
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.62303-173.194.220.105.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.63484-173.194.220.105.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.63484-173.194.220.105.443.pcap
new file mode 100644
index 0000000..7cbfba3
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.70.63484-173.194.220.105.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.34722-74.125.131.106.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.34722-74.125.131.106.443.pcap
new file mode 100644
index 0000000..841f59a
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.34722-74.125.131.106.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.43786-74.125.131.106.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.43786-74.125.131.106.443.pcap
new file mode 100644
index 0000000..d6f9917
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.43786-74.125.131.106.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.44344-74.125.131.106.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.44344-74.125.131.106.443.pcap
new file mode 100644
index 0000000..e95bf1a
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.44344-74.125.131.106.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.44360-74.125.131.106.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.44360-74.125.131.106.443.pcap
new file mode 100644
index 0000000..fa1f129
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.44360-74.125.131.106.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.45109-74.125.131.106.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.45109-74.125.131.106.443.pcap
new file mode 100644
index 0000000..efd735f
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.45109-74.125.131.106.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.45314-74.125.131.106.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.45314-74.125.131.106.443.pcap
new file mode 100644
index 0000000..9ab26f1
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.45314-74.125.131.106.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.47041-74.125.131.106.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.47041-74.125.131.106.443.pcap
new file mode 100644
index 0000000..fe56a34
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.47041-74.125.131.106.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.47174-74.125.131.106.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.47174-74.125.131.106.443.pcap
new file mode 100644
index 0000000..928fe88
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.47174-74.125.131.106.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.50829-74.125.131.106.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.50829-74.125.131.106.443.pcap
new file mode 100644
index 0000000..a3951a5
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.50829-74.125.131.106.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.61598-74.125.131.106.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.61598-74.125.131.106.443.pcap
new file mode 100644
index 0000000..89bbf37
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.61598-74.125.131.106.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.62585-74.125.131.106.443.pcap b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.62585-74.125.131.106.443.pcap
new file mode 100644
index 0000000..5d00506
--- /dev/null
+++ b/test/decoders/quic/pcap/prox/prox-quic-217.76.77.73.62585-74.125.131.106.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/quic_len_-2.pcapng b/test/decoders/quic/pcap/quic_len_-2.pcapng
new file mode 100644
index 0000000..44f3965
--- /dev/null
+++ b/test/decoders/quic/pcap/quic_len_-2.pcapng
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-chlo-fragment/1-google-chlo-fragment-2.pcap b/test/decoders/quic/pcap/rfc9000-chlo-fragment/1-google-chlo-fragment-2.pcap
new file mode 100644
index 0000000..c9115fe
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-chlo-fragment/1-google-chlo-fragment-2.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-chlo-fragment/2-google-chlo-fragment-3.pcap b/test/decoders/quic/pcap/rfc9000-chlo-fragment/2-google-chlo-fragment-3.pcap
new file mode 100644
index 0000000..80ea303
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-chlo-fragment/2-google-chlo-fragment-3.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-chlo-fragment/3-facebook-chlo-fragment-2.pcap b/test/decoders/quic/pcap/rfc9000-chlo-fragment/3-facebook-chlo-fragment-2.pcap
new file mode 100644
index 0000000..afde2ee
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-chlo-fragment/3-facebook-chlo-fragment-2.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-chlo-fragment/4-googleapis.com-chlo-fragment-3.pcap b/test/decoders/quic/pcap/rfc9000-chlo-fragment/4-googleapis.com-chlo-fragment-3.pcap
new file mode 100644
index 0000000..1dd5354
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-chlo-fragment/4-googleapis.com-chlo-fragment-3.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-chlo-fragment/5-google_quic-2.pcap b/test/decoders/quic/pcap/rfc9000-chlo-fragment/5-google_quic-2.pcap
new file mode 100644
index 0000000..98b4cb2
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-chlo-fragment/5-google_quic-2.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-chlo-fragment/quic_result.json b/test/decoders/quic/pcap/rfc9000-chlo-fragment/quic_result.json
new file mode 100644
index 0000000..2f37adb
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-chlo-fragment/quic_result.json
@@ -0,0 +1,32 @@
+[
+ {
+ "Tuple4": "2607:5d00:2:2::38:2:53977-2404:6800:4005:807::2004:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.google.com",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "2607:5d00:2:2::38:2:50835-2404:6800:4005:80d::2003:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.google.com.hk",
+ "name": "QUIC_RESULT_2"
+ },
+ {
+ "Tuple4": "192.168.64.25:61166-157.240.245.35:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.facebook.com",
+ "name": "QUIC_RESULT_3"
+ },
+ {
+ "Tuple4": "2607:5d00:2:2::38:2:54817-2404:6800:4005:80c::200a:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "optimizationguide-pa.googleapis.com",
+ "name": "QUIC_RESULT_4"
+ },
+ {
+ "Tuple4": "192.168.54.157:60388-142.250.71.164:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.google.com",
+ "name": "QUIC_RESULT_5"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/rfc9000-fragment/1-addis-quic-sni-not-parsed-filtered.pcap b/test/decoders/quic/pcap/rfc9000-fragment/1-addis-quic-sni-not-parsed-filtered.pcap
new file mode 100644
index 0000000..34b5c2d
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-fragment/1-addis-quic-sni-not-parsed-filtered.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-fragment/2-quic-no-parse-sni-RFC9000-192.168.8.106.53736-142.250.185.36.443-6.pcap b/test/decoders/quic/pcap/rfc9000-fragment/2-quic-no-parse-sni-RFC9000-192.168.8.106.53736-142.250.185.36.443-6.pcap
new file mode 100644
index 0000000..eb8d602
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-fragment/2-quic-no-parse-sni-RFC9000-192.168.8.106.53736-142.250.185.36.443-6.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-fragment/3-quic-no-parse-sni-RFC9000-63821-443-192.168.8.106-142.250.185.36.pcap b/test/decoders/quic/pcap/rfc9000-fragment/3-quic-no-parse-sni-RFC9000-63821-443-192.168.8.106-142.250.185.36.pcap
new file mode 100644
index 0000000..c86c379
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-fragment/3-quic-no-parse-sni-RFC9000-63821-443-192.168.8.106-142.250.185.36.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-fragment/quic_result.json b/test/decoders/quic/pcap/rfc9000-fragment/quic_result.json
new file mode 100644
index 0000000..3dfe47f
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-fragment/quic_result.json
@@ -0,0 +1,37 @@
+[
+ {
+ "Tuple4": "192.168.8.106:57644-142.250.185.36:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.google.com",
+ "UA": "Chrome/94.0.4606.81 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "192.168.8.106:60687-142.250.185.36:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.google.com",
+ "UA": "Chrome/94.0.4606.81 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_2"
+ },
+ {
+ "Tuple4": "192.168.8.106:53622-142.250.185.36:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.google.com",
+ "UA": "Chrome/94.0.4606.81 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_3"
+ },
+ {
+ "Tuple4": "192.168.8.106:53736-142.250.185.36:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.google.com",
+ "UA": "Chrome/94.0.4606.81 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_4"
+ },
+ {
+ "Tuple4": "192.168.8.106:63821-142.250.185.36:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.google.com",
+ "UA": "Chrome/94.0.4606.81 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_5"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/rfc9000-special/1-quic-rc9000-no-parse-UA-192.168.8.110.49832-172.217.18.150.443.pcap b/test/decoders/quic/pcap/rfc9000-special/1-quic-rc9000-no-parse-UA-192.168.8.110.49832-172.217.18.150.443.pcap
new file mode 100644
index 0000000..f79f09d
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-special/1-quic-rc9000-no-parse-UA-192.168.8.110.49832-172.217.18.150.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-special/2-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.50339-172.217.169.227.443.pcap b/test/decoders/quic/pcap/rfc9000-special/2-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.50339-172.217.169.227.443.pcap
new file mode 100644
index 0000000..c53cbee
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-special/2-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.50339-172.217.169.227.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-special/3-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.52455-213.55.110.12.443.pcap b/test/decoders/quic/pcap/rfc9000-special/3-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.52455-213.55.110.12.443.pcap
new file mode 100644
index 0000000..3a1736c
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-special/3-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.52455-213.55.110.12.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-special/4-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.64550-142.250.185.36.443.pcap b/test/decoders/quic/pcap/rfc9000-special/4-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.64550-142.250.185.36.443.pcap
new file mode 100644
index 0000000..09e3dc2
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-special/4-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.64550-142.250.185.36.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-special/5-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.65140-213.55.110.13.443.pcap b/test/decoders/quic/pcap/rfc9000-special/5-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.65140-213.55.110.13.443.pcap
new file mode 100644
index 0000000..7e484b7
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-special/5-quic-rfc9000-no-parse-SNI-UA-192.168.8.110.65140-213.55.110.13.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000-special/quic_result.json b/test/decoders/quic/pcap/rfc9000-special/quic_result.json
new file mode 100644
index 0000000..bb9562a
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000-special/quic_result.json
@@ -0,0 +1,37 @@
+[
+ {
+ "Tuple4": "192.168.8.110:49832-172.217.18.150:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "i.ytimg.com",
+ "UA": "Chrome/95.0.4638.54 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "192.168.8.110:50339-172.217.169.227:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.google.com.et",
+ "UA": "Chrome/95.0.4638.54 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_2"
+ },
+ {
+ "Tuple4": "192.168.8.110:52455-213.55.110.12:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "r1---sn-xuj-5qqz.googlevideo.com",
+ "UA": "Chrome/95.0.4638.54 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_3"
+ },
+ {
+ "Tuple4": "192.168.8.110:64550-142.250.185.36:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "www.google.com",
+ "UA": "Chrome/95.0.4638.54 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_4"
+ },
+ {
+ "Tuple4": "192.168.8.110:65140-213.55.110.13:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "r2---sn-xuj-5qqz.googlevideo.com",
+ "UA": "Chrome/95.0.4638.54 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_5"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/rfc9000/1-ietf-rfc9000-192.168.60.32.59699-64.233.164.84.443.pcap b/test/decoders/quic/pcap/rfc9000/1-ietf-rfc9000-192.168.60.32.59699-64.233.164.84.443.pcap
new file mode 100644
index 0000000..84097c8
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000/1-ietf-rfc9000-192.168.60.32.59699-64.233.164.84.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000/2-ietf-rfc9000-124.88.191.113.39716-114.250.66.33-443.pcap b/test/decoders/quic/pcap/rfc9000/2-ietf-rfc9000-124.88.191.113.39716-114.250.66.33-443.pcap
new file mode 100644
index 0000000..ee760fb
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000/2-ietf-rfc9000-124.88.191.113.39716-114.250.66.33-443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/rfc9000/quic_result.json b/test/decoders/quic/pcap/rfc9000/quic_result.json
new file mode 100644
index 0000000..e5155b1
--- /dev/null
+++ b/test/decoders/quic/pcap/rfc9000/quic_result.json
@@ -0,0 +1,15 @@
+[
+ {
+ "Tuple4": "192.168.60.32:59699-64.233.164.84:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "accounts.google.com",
+ "UA": "Chrome/92.0.4515.159 Windows NT 10.0; Win64; x64",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "124.88.191.113:39716-114.250.66.33:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "safebrowsing.googleapis.com",
+ "name": "QUIC_RESULT_2"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/pcap/special/1-no-parse-sni-draft-29-10.83.31.23.37645-142.250.180.42.443.pcap b/test/decoders/quic/pcap/special/1-no-parse-sni-draft-29-10.83.31.23.37645-142.250.180.42.443.pcap
new file mode 100644
index 0000000..ad40e1d
--- /dev/null
+++ b/test/decoders/quic/pcap/special/1-no-parse-sni-draft-29-10.83.31.23.37645-142.250.180.42.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/special/1-no-parse-sni-draft-29.37645.pcap b/test/decoders/quic/pcap/special/1-no-parse-sni-draft-29.37645.pcap
new file mode 100644
index 0000000..ad40e1d
--- /dev/null
+++ b/test/decoders/quic/pcap/special/1-no-parse-sni-draft-29.37645.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/special/2-no-parse-sni-rfc9000-192.168.1.6.61269-142.250.180.42.443.pcap b/test/decoders/quic/pcap/special/2-no-parse-sni-rfc9000-192.168.1.6.61269-142.250.180.42.443.pcap
new file mode 100644
index 0000000..ad965e8
--- /dev/null
+++ b/test/decoders/quic/pcap/special/2-no-parse-sni-rfc9000-192.168.1.6.61269-142.250.180.42.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/special/2-no-parse-sni-rfc9000.61269.pcap b/test/decoders/quic/pcap/special/2-no-parse-sni-rfc9000.61269.pcap
new file mode 100644
index 0000000..ad965e8
--- /dev/null
+++ b/test/decoders/quic/pcap/special/2-no-parse-sni-rfc9000.61269.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/special/3-no-parse-sni-gquic-43-10.129.24.130.52558-213.55.110.12.443.pcap b/test/decoders/quic/pcap/special/3-no-parse-sni-gquic-43-10.129.24.130.52558-213.55.110.12.443.pcap
new file mode 100644
index 0000000..9ea020b
--- /dev/null
+++ b/test/decoders/quic/pcap/special/3-no-parse-sni-gquic-43-10.129.24.130.52558-213.55.110.12.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/special/4-no-sni-rfc9000-197.156.101.97.12388-142.250.185.46.443.pcap b/test/decoders/quic/pcap/special/4-no-sni-rfc9000-197.156.101.97.12388-142.250.185.46.443.pcap
new file mode 100644
index 0000000..36d7457
--- /dev/null
+++ b/test/decoders/quic/pcap/special/4-no-sni-rfc9000-197.156.101.97.12388-142.250.185.46.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/special/quic_result.json b/test/decoders/quic/pcap/special/quic_result.json
new file mode 100644
index 0000000..362c6e4
--- /dev/null
+++ b/test/decoders/quic/pcap/special/quic_result.json
@@ -0,0 +1,26 @@
+[{
+ "Tuple4": "10.83.31.23:37645-142.250.180.42:443-17-0",
+ "VERSION": "IETF QUIC 29",
+ "SNI": "play.googleapis.com",
+ "UA": "com.google.android.gms Cronet/92.0.4515.131",
+ "VERSION": "IETF QUIC 29",
+ "name": "QUIC_RESULT_1"
+ }, {
+ "Tuple4": "192.168.1.6:61269-142.250.180.42:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "SNI": "content-autofill.googleapis.com",
+ "UA": "Chrome/94.0.4606.81 Windows NT 10.0; Win64; x64",
+ "VERSION": "IETF QUIC RFC9000",
+ "name": "QUIC_RESULT_2"
+ }, {
+ "Tuple4": "10.129.24.130:52558-213.55.110.12:443-17-0",
+ "VERSION": "Google QUIC 43",
+ "SNI": "r1---sn-xuj-5qqz.googlevideo.com",
+ "UA": "com.google.android.youtube Cronet/80.0.3970.3",
+ "VERSION": "Google QUIC 43",
+ "name": "QUIC_RESULT_3"
+}, {
+ "Tuple4": "197.156.101.97:12388-142.250.185.46:443-17-0",
+ "VERSION": "IETF QUIC RFC9000",
+ "name": "QUIC_RESULT_4"
+}]
diff --git a/test/decoders/quic/pcap/tquic/1-tquic-51-195.12.120.14.41803-173.194.222.101.443.pcap b/test/decoders/quic/pcap/tquic/1-tquic-51-195.12.120.14.41803-173.194.222.101.443.pcap
new file mode 100644
index 0000000..357777c
--- /dev/null
+++ b/test/decoders/quic/pcap/tquic/1-tquic-51-195.12.120.14.41803-173.194.222.101.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/tquic/2-tquic-51-195.12.120.14.39526-64.233.165.113.443.pcap b/test/decoders/quic/pcap/tquic/2-tquic-51-195.12.120.14.39526-64.233.165.113.443.pcap
new file mode 100644
index 0000000..f64152a
--- /dev/null
+++ b/test/decoders/quic/pcap/tquic/2-tquic-51-195.12.120.14.39526-64.233.165.113.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/tquic/3-tquic-51-195.12.120.14.41747-173.194.222.138.443.pcap b/test/decoders/quic/pcap/tquic/3-tquic-51-195.12.120.14.41747-173.194.222.138.443.pcap
new file mode 100644
index 0000000..8d87b8d
--- /dev/null
+++ b/test/decoders/quic/pcap/tquic/3-tquic-51-195.12.120.14.41747-173.194.222.138.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/tquic/4-tquic-51-195.12.120.14.59012-173.194.222.138.443.pcap b/test/decoders/quic/pcap/tquic/4-tquic-51-195.12.120.14.59012-173.194.222.138.443.pcap
new file mode 100644
index 0000000..bb67486
--- /dev/null
+++ b/test/decoders/quic/pcap/tquic/4-tquic-51-195.12.120.14.59012-173.194.222.138.443.pcap
Binary files differ
diff --git a/test/decoders/quic/pcap/tquic/quic_result.json b/test/decoders/quic/pcap/tquic/quic_result.json
new file mode 100644
index 0000000..1737864
--- /dev/null
+++ b/test/decoders/quic/pcap/tquic/quic_result.json
@@ -0,0 +1,30 @@
+[
+ {
+ "Tuple4": "195.12.120.14:41803-173.194.222.101:443-17-0",
+ "VERSION": "Google QUIC with TLS 51",
+ "SNI": "clients4.google.com",
+ "UA": "Chrome/87.0.4280.101 Android 9; ANE-LX1",
+ "name": "QUIC_RESULT_1"
+ },
+ {
+ "Tuple4": "195.12.120.14:39526-64.233.165.113:443-17-0",
+ "VERSION": "Google QUIC with TLS 51",
+ "SNI": "m.youtube.com",
+ "UA": "Chrome/87.0.4280.101 Android 9; ANE-LX1",
+ "name": "QUIC_RESULT_2"
+ },
+ {
+ "Tuple4": "195.12.120.14:41747-173.194.222.138:443-17-0",
+ "VERSION": "Google QUIC with TLS 51",
+ "SNI": "clients4.google.com",
+ "UA": "Chrome/87.0.4280.101 Android 9; ANE-LX1",
+ "name": "QUIC_RESULT_3"
+ },
+ {
+ "Tuple4": "195.12.120.14:59012-173.194.222.138:443-17-0",
+ "VERSION": "Google QUIC with TLS 51",
+ "SNI": "clients4.google.com",
+ "UA": "Chrome/87.0.4280.101 Android 9; ANE-LX1",
+ "name": "QUIC_RESULT_4"
+ }
+] \ No newline at end of file
diff --git a/test/decoders/quic/quic_spec.toml b/test/decoders/quic/quic_spec.toml
new file mode 100644
index 0000000..b9ebe05
--- /dev/null
+++ b/test/decoders/quic/quic_spec.toml
@@ -0,0 +1,12 @@
+
+#load quic module
+[[module]]
+path = ""
+init = "quic_init"
+exit = "quic_exit"
+
+#load quic gtest module
+[[module]]
+path = ""
+init = "gtest_quic_init"
+exit = "gtest_quic_exit"