lsqpack 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +19 -0
  3. data/Gemfile.lock +82 -0
  4. data/LICENSE +21 -0
  5. data/README.md +36 -0
  6. data/Rakefile +19 -0
  7. data/Steepfile +6 -0
  8. data/ext/lsqpack/extconf.rb +18 -0
  9. data/ext/lsqpack/lsqpack.c +426 -0
  10. data/ext/lsqpack/lsqpack.h +6 -0
  11. data/lib/lsqpack/version.rb +5 -0
  12. data/lib/lsqpack.rb +30 -0
  13. data/ls-qpack/.appveyor.yml +14 -0
  14. data/ls-qpack/.cirrus.yml +6 -0
  15. data/ls-qpack/.travis.yml +32 -0
  16. data/ls-qpack/CMakeLists.txt +66 -0
  17. data/ls-qpack/LICENSE +21 -0
  18. data/ls-qpack/README.md +65 -0
  19. data/ls-qpack/bin/CMakeLists.txt +21 -0
  20. data/ls-qpack/bin/encode-int.c +87 -0
  21. data/ls-qpack/bin/fuzz-decode.c +247 -0
  22. data/ls-qpack/bin/interop-decode.c +433 -0
  23. data/ls-qpack/bin/interop-encode.c +554 -0
  24. data/ls-qpack/deps/xxhash/xxhash.c +941 -0
  25. data/ls-qpack/deps/xxhash/xxhash.h +160 -0
  26. data/ls-qpack/fuzz/decode/a/README +3 -0
  27. data/ls-qpack/fuzz/decode/a/preamble +0 -0
  28. data/ls-qpack/fuzz/decode/a/test-cases/id_000000,sig_06,src_000390,op_havoc,rep_4 +0 -0
  29. data/ls-qpack/fuzz/decode/a/test-cases/id_000000,sig_06,src_000579,op_flip1,pos_14 +0 -0
  30. data/ls-qpack/fuzz/decode/a/test-cases/id_000000,src_000000,op_flip2,pos_12 +0 -0
  31. data/ls-qpack/fuzz/decode/a/test-cases/id_000001,sig_11,src_000579,op_havoc,rep_4 +0 -0
  32. data/ls-qpack/fuzz/decode/a/test-cases/id_000002,sig_11,src_000481,op_int16,pos_15,val_-1 +0 -0
  33. data/ls-qpack/fuzz/decode/a/test-cases/id_000002,src_000000,op_havoc,rep_8 +0 -0
  34. data/ls-qpack/fuzz/decode/a/test-cases/id_000006,src_000285,op_flip2,pos_14 +0 -0
  35. data/ls-qpack/fuzz/decode/a/test-cases/id_000008,src_000285,op_flip2,pos_20 +0 -0
  36. data/ls-qpack/fuzz/decode/a/test-cases/id_000010,src_000306,op_flip2,pos_75 +0 -0
  37. data/ls-qpack/fuzz/decode/a/test-cases/id_000011,src_000344,op_havoc,rep_2 +0 -0
  38. data/ls-qpack/fuzz/decode/a/test-cases/id_000014,src_000366,op_flip2,pos_28 +0 -0
  39. data/ls-qpack/fuzz/decode/b/README +1 -0
  40. data/ls-qpack/fuzz/decode/b/preamble +0 -0
  41. data/ls-qpack/fuzz/decode/b/test-cases/seed +0 -0
  42. data/ls-qpack/fuzz/decode/c/setup.sh +3 -0
  43. data/ls-qpack/fuzz/decode/c/test-cases/fb-req.qif.proxygen.out.256.100.0-chopped +0 -0
  44. data/ls-qpack/fuzz/decode/d/preamble +0 -0
  45. data/ls-qpack/fuzz/decode/d/setup.sh +3 -0
  46. data/ls-qpack/fuzz/decode/d/test-cases/fb-resp.minhq.256.128.0.ack +0 -0
  47. data/ls-qpack/fuzz/input/256.100.1/fb-req.out.256.100.1 +0 -0
  48. data/ls-qpack/fuzz/input/256.100.1/fb-resp.out.256.100.1 +0 -0
  49. data/ls-qpack/fuzz/input/256.100.1/netbsd.out.256.100.1 +0 -0
  50. data/ls-qpack/huff-tables.h +136247 -0
  51. data/ls-qpack/lsqpack.c +5547 -0
  52. data/ls-qpack/lsqpack.h +768 -0
  53. data/ls-qpack/test/CMakeLists.txt +76 -0
  54. data/ls-qpack/test/lsqpack-test.h +43 -0
  55. data/ls-qpack/test/qifs/fb-req.qif +4917 -0
  56. data/ls-qpack/test/qifs/fb-resp.qif +5982 -0
  57. data/ls-qpack/test/qifs/long-codes.qif +5984 -0
  58. data/ls-qpack/test/qifs/netbsd.qif +235 -0
  59. data/ls-qpack/test/run-qif.pl +97 -0
  60. data/ls-qpack/test/run-scenario.sh +68 -0
  61. data/ls-qpack/test/scenarios/0.95-reset.sce +10 -0
  62. data/ls-qpack/test/scenarios/cancel-stream.sce +22 -0
  63. data/ls-qpack/test/scenarios/drain-2.sce +37 -0
  64. data/ls-qpack/test/scenarios/drain.sce +37 -0
  65. data/ls-qpack/test/scenarios/end-dst-2.sce +14 -0
  66. data/ls-qpack/test/scenarios/end-dst.sce +14 -0
  67. data/ls-qpack/test/scenarios/incl-name.sce +13 -0
  68. data/ls-qpack/test/scenarios/multi-byte-int-dyn-ref-1.sce +110 -0
  69. data/ls-qpack/test/scenarios/multi-byte-int-dyn-ref-2.sce +161 -0
  70. data/ls-qpack/test/scenarios/post-base-1.sce +10 -0
  71. data/ls-qpack/test/scenarios/post-base-2.sce +13 -0
  72. data/ls-qpack/test/scenarios/post-base-nr.sce +10 -0
  73. data/ls-qpack/test/scenarios/set-max-cap.sce +15 -0
  74. data/ls-qpack/test/test_enc_str.c +139 -0
  75. data/ls-qpack/test/test_get_stx_id.c +144 -0
  76. data/ls-qpack/test/test_huff_dec.c +399 -0
  77. data/ls-qpack/test/test_int.c +220 -0
  78. data/ls-qpack/test/test_qpack.c +856 -0
  79. data/ls-qpack/test/test_read_enc_stream.c +256 -0
  80. data/ls-qpack/tools/har2qif.pl +139 -0
  81. data/ls-qpack/tools/randomize-cookies.pl +41 -0
  82. data/ls-qpack/tools/sort-qif.pl +31 -0
  83. data/ls-qpack/wincompat/getopt.c +758 -0
  84. data/ls-qpack/wincompat/getopt.h +131 -0
  85. data/ls-qpack/wincompat/getopt1.c +188 -0
  86. data/ls-qpack/wincompat/sys/queue.h +859 -0
  87. data/lsqpack.gemspec +39 -0
  88. data/sig/lsqpack.rbs +29 -0
  89. metadata +135 -0
@@ -0,0 +1,76 @@
1
+ function(lsqpack_add_test TARGET)
2
+ add_executable(test_${TARGET} "")
3
+ target_sources(test_${TARGET} PRIVATE test_${TARGET}.c)
4
+ target_link_libraries(test_${TARGET} ls-qpack)
5
+
6
+ if(MSVC)
7
+ target_include_directories(test_${TARGET} PRIVATE ../wincompat)
8
+ target_sources(test_${TARGET} PRIVATE
9
+ ../wincompat/getopt.c
10
+ ../wincompat/getopt1.c
11
+ )
12
+ else()
13
+ target_link_libraries(test_${TARGET} m)
14
+ endif()
15
+
16
+ add_test(${TARGET} test_${TARGET})
17
+ endfunction()
18
+
19
+ lsqpack_add_test(int)
20
+ lsqpack_add_test(enc_str)
21
+ lsqpack_add_test(huff_dec)
22
+ lsqpack_add_test(read_enc_stream)
23
+ lsqpack_add_test(qpack)
24
+ lsqpack_add_test(get_stx_id)
25
+
26
+ if(MSVC)
27
+ message(WARNING "Scenario tests are disabled on Windows (TODO)")
28
+ else()
29
+ file(GLOB SCENARIOS scenarios/*.sce)
30
+ foreach(SCENARIO ${SCENARIOS})
31
+ get_filename_component(TEST_NAME ${SCENARIO} NAME)
32
+ add_test(
33
+ NAME scenario-${TEST_NAME}
34
+ COMMAND bash run-scenario.sh ${SCENARIO}
35
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/test
36
+ )
37
+ set_tests_properties(scenario-${TEST_NAME} PROPERTIES
38
+ ENVIRONMENT "PATH=$ENV{PATH}:${PROJECT_BINARY_DIR}/bin:${PROJECT_SOURCE_DIR}/tools"
39
+ )
40
+ endforeach()
41
+ endif()
42
+
43
+ find_package(Perl)
44
+
45
+ if(PERL_FOUND)
46
+ message(STATUS "Found Perl interpreter: ${PERL}")
47
+ file(GLOB QIFS qifs/*.qif)
48
+
49
+ foreach(QIF ${QIFS})
50
+ get_filename_component(FILE_NAME ${QIF} NAME)
51
+
52
+ foreach(TABLE_SIZE 0 256 512 1024 4096)
53
+ foreach(RISKED_STREAMS 0 100)
54
+ foreach(IMMEDIATE_ACK 0 1)
55
+ foreach(AGGRESSIVE 0 1)
56
+ set(TEST_NAME qif-${FILE_NAME}-t${TABLE_SIZE}-s${RISKED_STREAMS}-a${IMMEDIATE_ACK}-A${AGGRESSIVE})
57
+
58
+ add_test(
59
+ NAME ${TEST_NAME}
60
+ COMMAND ${PERL} run-qif.pl --table-size ${TABLE_SIZE} --risked-streams ${RISKED_STREAMS} --immed-ack ${IMMEDIATE_ACK} --aggressive ${AGGRESSIVE} ${QIF}
61
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/test
62
+ )
63
+
64
+ if(NOT MSVC)
65
+ set_tests_properties(${TEST_NAME} PROPERTIES
66
+ ENVIRONMENT "PATH=$ENV{PATH}:${PROJECT_BINARY_DIR}/bin:${PROJECT_SOURCE_DIR}/tools"
67
+ )
68
+ endif()
69
+ endforeach()
70
+ endforeach()
71
+ endforeach()
72
+ endforeach()
73
+ endforeach()
74
+ else()
75
+ message(WARNING "Perl not found: QIF tests won't be run")
76
+ endif()
@@ -0,0 +1,43 @@
1
+ #ifndef LITESPEED_QPACK_TEST_H
2
+ #define LITESPEED_QPACK_TEST_H 1
3
+
4
+ #ifndef LS_QPACK_USE_LARGE_TABLES
5
+ #define LS_QPACK_USE_LARGE_TABLES 1
6
+ #endif
7
+
8
+ #if !LS_QPACK_USE_LARGE_TABLES
9
+ #define lsqpack_huff_decode_full lsqpack_huff_decode
10
+ #endif
11
+
12
+ int
13
+ lsqpack_enc_enc_str (unsigned prefix_bits, unsigned char *const dst,
14
+ size_t dst_len, const unsigned char *str, unsigned str_len);
15
+
16
+ unsigned char *
17
+ lsqpack_enc_int (unsigned char *dst, unsigned char *const end, uint64_t value,
18
+ unsigned prefix_bits);
19
+
20
+ int
21
+ lsqpack_dec_int (const unsigned char **src_p, const unsigned char *src_end,
22
+ unsigned prefix_bits, uint64_t *value_p,
23
+ struct lsqpack_dec_int_state *state);
24
+
25
+ struct huff_decode_retval
26
+ {
27
+ enum
28
+ {
29
+ HUFF_DEC_OK,
30
+ HUFF_DEC_END_SRC,
31
+ HUFF_DEC_END_DST,
32
+ HUFF_DEC_ERROR,
33
+ } status;
34
+ unsigned n_dst;
35
+ unsigned n_src;
36
+ };
37
+
38
+ struct huff_decode_retval
39
+ lsqpack_huff_decode_full (const unsigned char *src, int src_len,
40
+ unsigned char *dst, int dst_len,
41
+ struct lsqpack_huff_decode_state *state, int final);
42
+
43
+ #endif