You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ma...@apache.org on 2019/07/15 22:57:27 UTC
[trafficserver] branch master updated: Convert regression tests for
XPACK into Catch based unit tests
This is an automated email from the ASF dual-hosted git repository.
masaori pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push:
new fd5c84a Convert regression tests for XPACK into Catch based unit tests
fd5c84a is described below
commit fd5c84a96d39ff29a559d05c354ed6ea9299bece
Author: Masaori Koshiba <ma...@apache.org>
AuthorDate: Fri Jul 12 07:55:14 2019 +0900
Convert regression tests for XPACK into Catch based unit tests
---
.gitignore | 1 +
proxy/hdrs/Makefile.am | 15 ++++-
proxy/hdrs/unit_tests/test_XPACK.cc | 123 ++++++++++++++++++++++++++++++++++++
proxy/http2/RegressionHPACK.cc | 104 ------------------------------
4 files changed, 138 insertions(+), 105 deletions(-)
diff --git a/.gitignore b/.gitignore
index 7c84a7e..6d2f706 100644
--- a/.gitignore
+++ b/.gitignore
@@ -102,6 +102,7 @@ proxy/hdrs/test_mime
proxy/hdrs/test_proxy_hdrs
proxy/hdrs/test_hdr_heap
proxy/hdrs/test_Huffmancode
+proxy/hdrs/test_XPACK
proxy/http/test_proxy_http
proxy/http2/test_Http2DependencyTree
proxy/http2/test_HPACK
diff --git a/proxy/hdrs/Makefile.am b/proxy/hdrs/Makefile.am
index 63abeab..7067f55 100644
--- a/proxy/hdrs/Makefile.am
+++ b/proxy/hdrs/Makefile.am
@@ -69,7 +69,8 @@ check_PROGRAMS = \
test_mime \
test_proxy_hdrs \
test_hdr_heap \
- test_Huffmancode
+ test_Huffmancode \
+ test_XPACK
TESTS = $(check_PROGRAMS)
@@ -133,6 +134,18 @@ test_Huffmancode_SOURCES = \
HuffmanCodec.cc \
HuffmanCodec.h
+test_XPACK_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -I$(abs_top_srcdir)/tests/include
+
+test_XPACK_LDADD = \
+ $(top_builddir)/src/tscore/libtscore.la \
+ $(top_builddir)/src/tscpp/util/libtscpputil.la
+
+test_XPACK_SOURCES = \
+ unit_tests/test_XPACK.cc \
+ HuffmanCodec.cc \
+ XPACK.cc
#test_UNUSED_SOURCES = \
# test_urlhash.cc
diff --git a/proxy/hdrs/unit_tests/test_XPACK.cc b/proxy/hdrs/unit_tests/test_XPACK.cc
new file mode 100644
index 0000000..91bd8b3
--- /dev/null
+++ b/proxy/hdrs/unit_tests/test_XPACK.cc
@@ -0,0 +1,123 @@
+/** @file
+
+ Catch based unit tests for XPACK
+
+ @section license License
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+
+#define CATCH_CONFIG_MAIN
+
+#include "catch.hpp"
+
+#include "XPACK.h"
+#include "HuffmanCodec.h"
+
+static constexpr int BUFSIZE_FOR_REGRESSION_TEST = 128;
+
+TEST_CASE("XPACK_Integer", "[xpack]")
+{
+ // [RFC 7541] C.1. Integer Representation Examples
+ static const struct {
+ uint32_t raw_integer;
+ uint8_t *encoded_field;
+ int encoded_field_len;
+ int prefix;
+ } integer_test_case[] = {{10, (uint8_t *)"\x0a", 1, 5}, {1337, (uint8_t *)"\x1F\x9A\x0A", 3, 5}, {42, (uint8_t *)R"(*)", 1, 8}};
+
+ SECTION("Encoding")
+ {
+ for (const auto &i : integer_test_case) {
+ uint8_t buf[BUFSIZE_FOR_REGRESSION_TEST] = {0};
+
+ int len = xpack_encode_integer(buf, buf + BUFSIZE_FOR_REGRESSION_TEST, i.raw_integer, i.prefix);
+
+ REQUIRE(len > 0);
+ REQUIRE(len == i.encoded_field_len);
+ REQUIRE(memcmp(buf, i.encoded_field, len) == 0);
+ }
+ }
+
+ SECTION("Decoding")
+ {
+ for (const auto &i : integer_test_case) {
+ uint64_t actual = 0;
+ int len = xpack_decode_integer(actual, i.encoded_field, i.encoded_field + i.encoded_field_len, i.prefix);
+
+ REQUIRE(len == i.encoded_field_len);
+ REQUIRE(actual == i.raw_integer);
+ }
+ }
+}
+
+TEST_CASE("XPACK_String", "[xpack]")
+{
+ // Example: custom-key: custom-header
+ const static struct {
+ char *raw_string;
+ uint32_t raw_string_len;
+ uint8_t *encoded_field;
+ int encoded_field_len;
+ } string_test_case[] = {{(char *)"", 0,
+ (uint8_t *)"\x0"
+ "",
+ 1},
+ {(char *)"custom-key", 10,
+ (uint8_t *)"\xA"
+ "custom-key",
+ 11},
+ {(char *)"", 0,
+ (uint8_t *)"\x80"
+ "",
+ 1},
+ {(char *)"custom-key", 10,
+ (uint8_t *)"\x88"
+ "\x25\xa8\x49\xe9\x5b\xa9\x7d\x7f",
+ 9}};
+
+ SECTION("Encoding")
+ {
+ // FIXME Current encoder support only huffman conding.
+ for (unsigned int i = 2; i < sizeof(string_test_case) / sizeof(string_test_case[0]); i++) {
+ uint8_t buf[BUFSIZE_FOR_REGRESSION_TEST] = {0};
+ int len = xpack_encode_string(buf, buf + BUFSIZE_FOR_REGRESSION_TEST, string_test_case[i].raw_string,
+ string_test_case[i].raw_string_len);
+
+ REQUIRE(len > 0);
+ REQUIRE(len == string_test_case[i].encoded_field_len);
+ REQUIRE(memcmp(buf, string_test_case[i].encoded_field, len) == 0);
+ }
+ }
+
+ SECTION("Decoding")
+ {
+ // Decoding string needs huffman tree
+ hpack_huffman_init();
+
+ for (const auto &i : string_test_case) {
+ Arena arena;
+ char *actual = nullptr;
+ uint64_t actual_len = 0;
+ int len = xpack_decode_string(arena, &actual, actual_len, i.encoded_field, i.encoded_field + i.encoded_field_len);
+
+ REQUIRE(len == i.encoded_field_len);
+ REQUIRE(actual_len == i.raw_string_len);
+ REQUIRE(memcmp(actual, i.raw_string, actual_len) == 0);
+ }
+ }
+}
diff --git a/proxy/http2/RegressionHPACK.cc b/proxy/http2/RegressionHPACK.cc
index d8c0beb..8beb73d 100644
--- a/proxy/http2/RegressionHPACK.cc
+++ b/proxy/http2/RegressionHPACK.cc
@@ -41,37 +41,6 @@ const static int MAX_TABLE_SIZE = 4096;
* *
***********************************************************************************/
-// [RFC 7541] C.1. Integer Representation Examples
-const static struct {
- uint32_t raw_integer;
- uint8_t *encoded_field;
- int encoded_field_len;
- int prefix;
-} integer_test_case[] = {{10, (uint8_t *)"\x0A", 1, 5}, {1337, (uint8_t *)"\x1F\x9A\x0A", 3, 5}, {42, (uint8_t *)R"(*)", 1, 8}};
-
-// Example: custom-key: custom-header
-const static struct {
- char *raw_string;
- uint32_t raw_string_len;
- uint8_t *encoded_field;
- int encoded_field_len;
-} string_test_case[] = {{(char *)"", 0,
- (uint8_t *)"\x0"
- "",
- 1},
- {(char *)"custom-key", 10,
- (uint8_t *)"\xA"
- "custom-key",
- 11},
- {(char *)"", 0,
- (uint8_t *)"\x80"
- "",
- 1},
- {(char *)"custom-key", 10,
- (uint8_t *)"\x88"
- "\x25\xa8\x49\xe9\x5b\xa9\x7d\x7f",
- 9}};
-
// [RFC 7541] C.2.4. Indexed Header Field
const static struct {
int index;
@@ -317,43 +286,6 @@ const static struct {
* *
***********************************************************************************/
-REGRESSION_TEST(HPACK_EncodeInteger)(RegressionTest *t, int, int *pstatus)
-{
- TestBox box(t, pstatus);
- box = REGRESSION_TEST_PASSED;
- uint8_t buf[BUFSIZE_FOR_REGRESSION_TEST];
-
- for (const auto &i : integer_test_case) {
- memset(buf, 0, BUFSIZE_FOR_REGRESSION_TEST);
-
- int len = xpack_encode_integer(buf, buf + BUFSIZE_FOR_REGRESSION_TEST, i.raw_integer, i.prefix);
-
- box.check(len == i.encoded_field_len, "encoded length was %d, expecting %d", len, i.encoded_field_len);
- box.check(len > 0 && memcmp(buf, i.encoded_field, len) == 0, "encoded value was invalid");
- }
-}
-
-REGRESSION_TEST(HPACK_EncodeString)(RegressionTest *t, int, int *pstatus)
-{
- TestBox box(t, pstatus);
- box = REGRESSION_TEST_PASSED;
-
- uint8_t buf[BUFSIZE_FOR_REGRESSION_TEST];
- int len;
-
- // FIXME Current encoder support only huffman conding.
- for (unsigned int i = 2; i < sizeof(string_test_case) / sizeof(string_test_case[0]); i++) {
- memset(buf, 0, BUFSIZE_FOR_REGRESSION_TEST);
-
- len = xpack_encode_string(buf, buf + BUFSIZE_FOR_REGRESSION_TEST, string_test_case[i].raw_string,
- string_test_case[i].raw_string_len);
-
- box.check(len == string_test_case[i].encoded_field_len, "encoded length was %d, expecting %d", len,
- string_test_case[i].encoded_field_len);
- box.check(len > 0 && memcmp(buf, string_test_case[i].encoded_field, len) == 0, "encoded string was invalid");
- }
-}
-
REGRESSION_TEST(HPACK_EncodeIndexedHeaderField)(RegressionTest *t, int, int *pstatus)
{
TestBox box(t, pstatus);
@@ -467,42 +399,6 @@ REGRESSION_TEST(HPACK_Encode)(RegressionTest *t, int, int *pstatus)
}
}
-REGRESSION_TEST(HPACK_DecodeInteger)(RegressionTest *t, int, int *pstatus)
-{
- TestBox box(t, pstatus);
- box = REGRESSION_TEST_PASSED;
-
- uint64_t actual;
-
- for (const auto &i : integer_test_case) {
- int len = xpack_decode_integer(actual, i.encoded_field, i.encoded_field + i.encoded_field_len, i.prefix);
-
- box.check(len == i.encoded_field_len, "decoded length was %d, expecting %d", len, i.encoded_field_len);
- box.check(actual == i.raw_integer, "decoded value was %" PRIu64 ", expected %d", actual, i.raw_integer);
- }
-}
-
-REGRESSION_TEST(HPACK_DecodeString)(RegressionTest *t, int, int *pstatus)
-{
- TestBox box(t, pstatus);
- box = REGRESSION_TEST_PASSED;
-
- Arena arena;
- char *actual = nullptr;
- uint64_t actual_len = 0;
-
- hpack_huffman_init();
-
- for (const auto &i : string_test_case) {
- int len = xpack_decode_string(arena, &actual, actual_len, i.encoded_field, i.encoded_field + i.encoded_field_len);
-
- box.check(len == i.encoded_field_len, "decoded length was %d, expecting %d", len, i.encoded_field_len);
- box.check(actual_len == i.raw_string_len, "length of decoded string was %" PRIu64 ", expecting %d", actual_len,
- i.raw_string_len);
- box.check(memcmp(actual, i.raw_string, actual_len) == 0, "decoded string was invalid");
- }
-}
-
REGRESSION_TEST(HPACK_DecodeIndexedHeaderField)(RegressionTest *t, int, int *pstatus)
{
TestBox box(t, pstatus);