From 3923e6cc54cf9d09ec6e568a6712f79e17eec118 Mon Sep 17 00:00:00 2001 From: Dan Zhang Date: Fri, 25 Jan 2019 14:04:09 -0500 Subject: [PATCH 1/4] quic_string_utils_impl and quic_str_cat Signed-off-by: Dan Zhang --- bazel/external/quiche.BUILD | 6 +- .../quic_listeners/quiche/platform/BUILD | 7 + .../quiche/platform/quic_str_cat_impl.h | 26 +++ .../quiche/platform/quic_string_utils_impl.h | 20 +++ .../quiche/platform/quic_platform_test.cc | 155 ++++++++++++++++++ 5 files changed, 211 insertions(+), 3 deletions(-) create mode 100644 source/extensions/quic_listeners/quiche/platform/quic_str_cat_impl.h create mode 100644 source/extensions/quic_listeners/quiche/platform/quic_string_utils_impl.h diff --git a/bazel/external/quiche.BUILD b/bazel/external/quiche.BUILD index 2b0af386def57..b1150c2ee4645 100644 --- a/bazel/external/quiche.BUILD +++ b/bazel/external/quiche.BUILD @@ -105,9 +105,11 @@ cc_library( "quiche/quic/platform/api/quic_flag_utils.h", "quiche/quic/platform/api/quic_iovec.h", "quiche/quic/platform/api/quic_prefetch.h", + "quiche/quic/platform/api/quic_ptr_util.h", + "quiche/quic/platform/api/quic_str_cat.h", "quiche/quic/platform/api/quic_string.h", "quiche/quic/platform/api/quic_string_piece.h", - "quiche/quic/platform/api/quic_ptr_util.h", + "quiche/quic/platform/api/quic_string_utils.h", "quiche/quic/platform/api/quic_uint128.h", # TODO: uncomment the following files as implementations are added. # "quiche/quic/platform/api/quic_bug_tracker.h", @@ -138,8 +140,6 @@ cc_library( # "quiche/quic/platform/api/quic_sleep.h", # "quiche/quic/platform/api/quic_socket_address.h", # "quiche/quic/platform/api/quic_stack_trace.h", - # "quiche/quic/platform/api/quic_str_cat.h", - # "quiche/quic/platform/api/quic_string_utils.h", # "quiche/quic/platform/api/quic_test.h", # "quiche/quic/platform/api/quic_test_loopback.h", # "quiche/quic/platform/api/quic_test_mem_slice_vector.h", diff --git a/source/extensions/quic_listeners/quiche/platform/BUILD b/source/extensions/quic_listeners/quiche/platform/BUILD index 934a5be3f6418..f15c2146c83cd 100644 --- a/source/extensions/quic_listeners/quiche/platform/BUILD +++ b/source/extensions/quic_listeners/quiche/platform/BUILD @@ -49,11 +49,18 @@ envoy_cc_library( "quic_fallthrough_impl.h", "quic_flag_utils_impl.h", "quic_iovec_impl.h", +<<<<<<< HEAD "quic_prefetch_impl.h", "quic_ptr_util_impl.h", "quic_string_impl.h", "quic_string_piece_impl.h", "quic_uint128_impl.h", +======= + "quic_str_cat_impl.h", + "quic_string_impl.h", + "quic_string_piece_impl.h", + "quic_string_utils_impl.h", +>>>>>>> quic_string_utils_impl and quic_str_cat ], external_deps = [ "abseil_base", diff --git a/source/extensions/quic_listeners/quiche/platform/quic_str_cat_impl.h b/source/extensions/quic_listeners/quiche/platform/quic_str_cat_impl.h new file mode 100644 index 0000000000000..44b6b5b85ba1f --- /dev/null +++ b/source/extensions/quic_listeners/quiche/platform/quic_str_cat_impl.h @@ -0,0 +1,26 @@ +#pragma once + +#include "absl/strings/str_cat.h" +#include "fmt/printf.h" + +#include "quiche/quic/platform/api/quic_string.h" + +// NOLINT(namespace-envoy) + +// This file is part of the QUICHE platform implementation, and is not to be +// consumed or referenced directly by other Envoy code. It serves purely as a +// porting layer for QUICHE. + +namespace quic { + +template +inline QuicString QuicStrCatImpl(const Args&... args) { + return absl::StrCat(absl::LegacyPrecision(args)...); +} + +template +inline QuicString QuicStringPrintfImpl(const Args&... args) { + return fmt::sprintf(std::forward(args)...); +} + +} // namespace quic diff --git a/source/extensions/quic_listeners/quiche/platform/quic_string_utils_impl.h b/source/extensions/quic_listeners/quiche/platform/quic_string_utils_impl.h new file mode 100644 index 0000000000000..ea4d43091c3ed --- /dev/null +++ b/source/extensions/quic_listeners/quiche/platform/quic_string_utils_impl.h @@ -0,0 +1,20 @@ +#pragma once + +#include "absl/strings/str_cat.h" + +#include "quiche/quic/platform/api/quic_string.h" + +// NOLINT(namespace-envoy) + +// This file is part of the QUICHE platform implementation, and is not to be +// consumed or referenced directly by other Envoy code. It serves purely as a +// porting layer for QUICHE. + +namespace quic { + +template +inline void QuicStrAppendImpl(QuicString* output, const Args&... args) { + absl::StrAppend(output, absl::LegacyPrecision(args)...); +} + +} // namespace quic diff --git a/test/extensions/quic_listeners/quiche/platform/quic_platform_test.cc b/test/extensions/quic_listeners/quiche/platform/quic_platform_test.cc index 42d134e94e422..b46df2a0438c0 100644 --- a/test/extensions/quic_listeners/quiche/platform/quic_platform_test.cc +++ b/test/extensions/quic_listeners/quiche/platform/quic_platform_test.cc @@ -4,10 +4,16 @@ #include "quiche/quic/platform/api/quic_containers.h" #include "quiche/quic/platform/api/quic_endian.h" #include "quiche/quic/platform/api/quic_estimate_memory_usage.h" +<<<<<<< HEAD #include "quiche/quic/platform/api/quic_ptr_util.h" #include "quiche/quic/platform/api/quic_string.h" #include "quiche/quic/platform/api/quic_string_piece.h" #include "quiche/quic/platform/api/quic_uint128.h" +======= +#include "quiche/quic/platform/api/quic_string.h" +#include "quiche/quic/platform/api/quic_string_piece.h" +#include "quiche/quic/platform/api/quic_str_cat.h" +>>>>>>> quic_string_utils_impl and quic_str_cat // Basic tests to validate functioning of the QUICHE quic platform // implementation. For platform APIs in which the implementation is a simple @@ -79,6 +85,7 @@ TEST(QuicPlatformTest, QuicStringPiece) { EXPECT_EQ('b', sp[0]); } +<<<<<<< HEAD TEST(QuicPlatformTest, QuicUint128) { quic::QuicUint128 i = MakeQuicUint128(16777216, 315); EXPECT_EQ(315, QuicUint128Low64(i)); @@ -91,6 +98,154 @@ TEST(QuicPlatformTest, QuicPtrUtil) { p = quic::QuicWrapUnique(new quic::QuicString("aaa")); EXPECT_EQ("aaa", *p); +======= +TEST(QuicPlatformTest, QuicStrCatInts) { + const int16_t s = -1; + const uint16_t us = 2; + const int i = -3; + const uint32_t ui = 4; + const int64_t l = -5; + const uint64_t ul = 6; + const ptrdiff_t ptrdiff = -7; + const size_t size = 8; + const intptr_t intptr = -9; + const uintptr_t uintptr = 10; + QuicString answer; + answer = QuicStrCat(s, us); + EXPECT_EQ(answer, "-12"); + answer = QuicStrCat(i, ui); + EXPECT_EQ(answer, "-34"); + answer = QuicStrCat(l, ul); + EXPECT_EQ(answer, "-56"); + answer = QuicStrCat(ptrdiff, size); + EXPECT_EQ(answer, "-78"); + answer = QuicStrCat(size, intptr); + EXPECT_EQ(answer, "8-9"); + answer = QuicStrCat(uintptr, 0); + EXPECT_EQ(answer, "100"); +} + +TEST(QuicPlatformTest, QuicStrCatBasics) { + quic::QuicString result; + + quic::QuicString strs[] = {"Hello", "Cruel", "World"}; + + quic::QuicStringPiece pieces[] = {"Hello", "Cruel", "World"}; + + const char* c_strs[] = {"Hello", "Cruel", "World"}; + + int32_t i32s[] = {'H', 'C', 'W'}; + uint64_t ui64s[] = {12345678910LL, 10987654321LL}; + + result = quic::QuicStrCat(false, true, 2, 3); + EXPECT_EQ(result, "0123"); + + result = quic::QuicStrCat(-1); + EXPECT_EQ(result, "-1"); + + result = quic::QuicStrCat(0.5); + EXPECT_EQ(result, "0.5"); + + result = quic::QuicStrCat(strs[1], pieces[2]); + EXPECT_EQ(result, "CruelWorld"); + + result = quic::QuicStrCat(strs[0], ", ", pieces[2]); + EXPECT_EQ(result, "Hello, World"); + + result = quic::QuicStrCat(strs[0], ", ", strs[1], " ", strs[2], "!"); + EXPECT_EQ(result, "Hello, Cruel World!"); + + result = quic::QuicStrCat(pieces[0], ", ", pieces[1], " ", pieces[2]); + EXPECT_EQ(result, "Hello, Cruel World"); + + result = quic::QuicStrCat(c_strs[0], ", ", c_strs[1], " ", c_strs[2]); + EXPECT_EQ(result, "Hello, Cruel World"); + + result = quic::QuicStrCat("ASCII ", i32s[0], ", ", i32s[1], " ", i32s[2], "!"); + EXPECT_EQ(result, "ASCII 72, 67 87!"); + + result = quic::QuicStrCat(ui64s[0], ", ", ui64s[1], "!"); + EXPECT_EQ(result, "12345678910, 10987654321!"); + + quic::QuicString one = "1"; + result = quic::QuicStrCat("And a ", one.size(), " and a ", &result[2] - &result[0], + " and a ", one, " 2 3 4", "!"); + EXPECT_EQ(result, "And a 1 and a 2 and a 1 2 3 4!"); + + result = + quic::QuicStrCat("To output a char by ASCII/numeric value, use +: ", '!' + 0); + EXPECT_EQ(result, "To output a char by ASCII/numeric value, use +: 33"); + + float f = 10000.5; + result = quic::QuicStrCat("Ten K and a half is ", f); + EXPECT_EQ(result, "Ten K and a half is 10000.5"); + + double d = 99999.9; + result = quic::QuicStrCat("This double number is ", d); + EXPECT_EQ(result, "This double number is 99999.9"); + + result = + quic::QuicStrCat(1, 22, 333, 4444, 55555, 666666, 7777777, 88888888, 999999999); + EXPECT_EQ(result, "122333444455555666666777777788888888999999999"); +} + +TEST(QuicPlatformTest, QuicStrCatMaxArgs) { + QuicString result; + // Test 10 up to 26 arguments, the current maximum + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a"); + EXPECT_EQ(result, "123456789a"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b"); + EXPECT_EQ(result, "123456789ab"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c"); + EXPECT_EQ(result, "123456789abc"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d"); + EXPECT_EQ(result, "123456789abcd"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e"); + EXPECT_EQ(result, "123456789abcde"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f"); + EXPECT_EQ(result, "123456789abcdef"); + result = + quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", "g"); + EXPECT_EQ(result, "123456789abcdefg"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", + "g", "h"); + EXPECT_EQ(result, "123456789abcdefgh"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", + "g", "h", "i"); + EXPECT_EQ(result, "123456789abcdefghi"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", + "g", "h", "i", "j"); + EXPECT_EQ(result, "123456789abcdefghij"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", + "g", "h", "i", "j", "k"); + EXPECT_EQ(result, "123456789abcdefghijk"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", + "g", "h", "i", "j", "k", "l"); + EXPECT_EQ(result, "123456789abcdefghijkl"); + result = QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", + "g", "h", "i", "j", "k", "l", "m"); + EXPECT_EQ(result, "123456789abcdefghijklm"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", + "g", "h", "i", "j", "k", "l", "m", "n"); + EXPECT_EQ(result, "123456789abcdefghijklmn"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", + "g", "h", "i", "j", "k", "l", "m", "n", "o"); + EXPECT_EQ(result, "123456789abcdefghijklmno"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", + "g", "h", "i", "j", "k", "l", "m", "n", "o", "p"); + EXPECT_EQ(result, "123456789abcdefghijklmnop"); + result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", + "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q"); + EXPECT_EQ(result, "123456789abcdefghijklmnopq"); + // No limit thanks to C++11's variadic templates + result = quic::QuicStrCat( + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "a", "b", "c", "d", "e", "f", "g", "h", + "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", + "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", + "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"); + EXPECT_EQ(result, + "12345678910abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); +>>>>>>> quic_string_utils_impl and quic_str_cat } } // namespace Quiche From de13444fd0b27ba60796a4f5f564ea95161bce5b Mon Sep 17 00:00:00 2001 From: Dan Zhang Date: Wed, 30 Jan 2019 18:57:20 -0500 Subject: [PATCH 2/4] add test Signed-off-by: Dan Zhang --- bazel/external/quiche.BUILD | 13 +++++++++++++ .../extensions/quic_listeners/quiche/platform/BUILD | 7 +------ .../quiche/platform/quic_str_cat_impl.h | 11 ++++------- .../quiche/platform/quic_string_utils_impl.h | 8 +++----- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/bazel/external/quiche.BUILD b/bazel/external/quiche.BUILD index b1150c2ee4645..c3c230ec0ce3e 100644 --- a/bazel/external/quiche.BUILD +++ b/bazel/external/quiche.BUILD @@ -26,6 +26,10 @@ licenses(["notice"]) # Apache 2 # should remain largely the same. load(":genrule_cmd.bzl", "genrule_cmd") +load( + "@envoy//bazel:envoy_build_system.bzl", + "envoy_cc_test", +) src_files = glob([ "**/*.h", @@ -152,3 +156,12 @@ cc_library( "@envoy//source/extensions/quic_listeners/quiche/platform:quic_platform_impl_lib", ], ) + +envoy_cc_test( + name = "quic_platform_test", + srcs = ["quiche/quic/platform/api/quic_string_utils_test.cc"], + repository = "@envoy", + deps = [ + ":quic_platform", + ], +) diff --git a/source/extensions/quic_listeners/quiche/platform/BUILD b/source/extensions/quic_listeners/quiche/platform/BUILD index f15c2146c83cd..bf073d3d6fbb4 100644 --- a/source/extensions/quic_listeners/quiche/platform/BUILD +++ b/source/extensions/quic_listeners/quiche/platform/BUILD @@ -49,18 +49,13 @@ envoy_cc_library( "quic_fallthrough_impl.h", "quic_flag_utils_impl.h", "quic_iovec_impl.h", -<<<<<<< HEAD "quic_prefetch_impl.h", "quic_ptr_util_impl.h", - "quic_string_impl.h", - "quic_string_piece_impl.h", - "quic_uint128_impl.h", -======= "quic_str_cat_impl.h", "quic_string_impl.h", "quic_string_piece_impl.h", "quic_string_utils_impl.h", ->>>>>>> quic_string_utils_impl and quic_str_cat + "quic_uint128_impl.h", ], external_deps = [ "abseil_base", diff --git a/source/extensions/quic_listeners/quiche/platform/quic_str_cat_impl.h b/source/extensions/quic_listeners/quiche/platform/quic_str_cat_impl.h index 44b6b5b85ba1f..f689f40a6204a 100644 --- a/source/extensions/quic_listeners/quiche/platform/quic_str_cat_impl.h +++ b/source/extensions/quic_listeners/quiche/platform/quic_str_cat_impl.h @@ -2,7 +2,6 @@ #include "absl/strings/str_cat.h" #include "fmt/printf.h" - #include "quiche/quic/platform/api/quic_string.h" // NOLINT(namespace-envoy) @@ -13,14 +12,12 @@ namespace quic { -template -inline QuicString QuicStrCatImpl(const Args&... args) { - return absl::StrCat(absl::LegacyPrecision(args)...); +template inline QuicString QuicStrCatImpl(const Args&... args) { + return absl::StrCat(args...); } -template -inline QuicString QuicStringPrintfImpl(const Args&... args) { +template inline QuicString QuicStringPrintfImpl(const Args&... args) { return fmt::sprintf(std::forward(args)...); } -} // namespace quic +} // namespace quic diff --git a/source/extensions/quic_listeners/quiche/platform/quic_string_utils_impl.h b/source/extensions/quic_listeners/quiche/platform/quic_string_utils_impl.h index ea4d43091c3ed..b3ab8277df196 100644 --- a/source/extensions/quic_listeners/quiche/platform/quic_string_utils_impl.h +++ b/source/extensions/quic_listeners/quiche/platform/quic_string_utils_impl.h @@ -1,7 +1,6 @@ #pragma once #include "absl/strings/str_cat.h" - #include "quiche/quic/platform/api/quic_string.h" // NOLINT(namespace-envoy) @@ -12,9 +11,8 @@ namespace quic { -template -inline void QuicStrAppendImpl(QuicString* output, const Args&... args) { - absl::StrAppend(output, absl::LegacyPrecision(args)...); +template inline void QuicStrAppendImpl(QuicString* output, const Args&... args) { + absl::StrAppend(output, args...); } -} // namespace quic +} // namespace quic From 33cd107a3add998fa5b266dc882e53afda1ff868 Mon Sep 17 00:00:00 2001 From: Dan Zhang Date: Thu, 31 Jan 2019 15:15:59 -0500 Subject: [PATCH 3/4] revert quic_platform_test Signed-off-by: Dan Zhang --- .../quiche/platform/quic_platform_test.cc | 155 ------------------ 1 file changed, 155 deletions(-) diff --git a/test/extensions/quic_listeners/quiche/platform/quic_platform_test.cc b/test/extensions/quic_listeners/quiche/platform/quic_platform_test.cc index b46df2a0438c0..42d134e94e422 100644 --- a/test/extensions/quic_listeners/quiche/platform/quic_platform_test.cc +++ b/test/extensions/quic_listeners/quiche/platform/quic_platform_test.cc @@ -4,16 +4,10 @@ #include "quiche/quic/platform/api/quic_containers.h" #include "quiche/quic/platform/api/quic_endian.h" #include "quiche/quic/platform/api/quic_estimate_memory_usage.h" -<<<<<<< HEAD #include "quiche/quic/platform/api/quic_ptr_util.h" #include "quiche/quic/platform/api/quic_string.h" #include "quiche/quic/platform/api/quic_string_piece.h" #include "quiche/quic/platform/api/quic_uint128.h" -======= -#include "quiche/quic/platform/api/quic_string.h" -#include "quiche/quic/platform/api/quic_string_piece.h" -#include "quiche/quic/platform/api/quic_str_cat.h" ->>>>>>> quic_string_utils_impl and quic_str_cat // Basic tests to validate functioning of the QUICHE quic platform // implementation. For platform APIs in which the implementation is a simple @@ -85,7 +79,6 @@ TEST(QuicPlatformTest, QuicStringPiece) { EXPECT_EQ('b', sp[0]); } -<<<<<<< HEAD TEST(QuicPlatformTest, QuicUint128) { quic::QuicUint128 i = MakeQuicUint128(16777216, 315); EXPECT_EQ(315, QuicUint128Low64(i)); @@ -98,154 +91,6 @@ TEST(QuicPlatformTest, QuicPtrUtil) { p = quic::QuicWrapUnique(new quic::QuicString("aaa")); EXPECT_EQ("aaa", *p); -======= -TEST(QuicPlatformTest, QuicStrCatInts) { - const int16_t s = -1; - const uint16_t us = 2; - const int i = -3; - const uint32_t ui = 4; - const int64_t l = -5; - const uint64_t ul = 6; - const ptrdiff_t ptrdiff = -7; - const size_t size = 8; - const intptr_t intptr = -9; - const uintptr_t uintptr = 10; - QuicString answer; - answer = QuicStrCat(s, us); - EXPECT_EQ(answer, "-12"); - answer = QuicStrCat(i, ui); - EXPECT_EQ(answer, "-34"); - answer = QuicStrCat(l, ul); - EXPECT_EQ(answer, "-56"); - answer = QuicStrCat(ptrdiff, size); - EXPECT_EQ(answer, "-78"); - answer = QuicStrCat(size, intptr); - EXPECT_EQ(answer, "8-9"); - answer = QuicStrCat(uintptr, 0); - EXPECT_EQ(answer, "100"); -} - -TEST(QuicPlatformTest, QuicStrCatBasics) { - quic::QuicString result; - - quic::QuicString strs[] = {"Hello", "Cruel", "World"}; - - quic::QuicStringPiece pieces[] = {"Hello", "Cruel", "World"}; - - const char* c_strs[] = {"Hello", "Cruel", "World"}; - - int32_t i32s[] = {'H', 'C', 'W'}; - uint64_t ui64s[] = {12345678910LL, 10987654321LL}; - - result = quic::QuicStrCat(false, true, 2, 3); - EXPECT_EQ(result, "0123"); - - result = quic::QuicStrCat(-1); - EXPECT_EQ(result, "-1"); - - result = quic::QuicStrCat(0.5); - EXPECT_EQ(result, "0.5"); - - result = quic::QuicStrCat(strs[1], pieces[2]); - EXPECT_EQ(result, "CruelWorld"); - - result = quic::QuicStrCat(strs[0], ", ", pieces[2]); - EXPECT_EQ(result, "Hello, World"); - - result = quic::QuicStrCat(strs[0], ", ", strs[1], " ", strs[2], "!"); - EXPECT_EQ(result, "Hello, Cruel World!"); - - result = quic::QuicStrCat(pieces[0], ", ", pieces[1], " ", pieces[2]); - EXPECT_EQ(result, "Hello, Cruel World"); - - result = quic::QuicStrCat(c_strs[0], ", ", c_strs[1], " ", c_strs[2]); - EXPECT_EQ(result, "Hello, Cruel World"); - - result = quic::QuicStrCat("ASCII ", i32s[0], ", ", i32s[1], " ", i32s[2], "!"); - EXPECT_EQ(result, "ASCII 72, 67 87!"); - - result = quic::QuicStrCat(ui64s[0], ", ", ui64s[1], "!"); - EXPECT_EQ(result, "12345678910, 10987654321!"); - - quic::QuicString one = "1"; - result = quic::QuicStrCat("And a ", one.size(), " and a ", &result[2] - &result[0], - " and a ", one, " 2 3 4", "!"); - EXPECT_EQ(result, "And a 1 and a 2 and a 1 2 3 4!"); - - result = - quic::QuicStrCat("To output a char by ASCII/numeric value, use +: ", '!' + 0); - EXPECT_EQ(result, "To output a char by ASCII/numeric value, use +: 33"); - - float f = 10000.5; - result = quic::QuicStrCat("Ten K and a half is ", f); - EXPECT_EQ(result, "Ten K and a half is 10000.5"); - - double d = 99999.9; - result = quic::QuicStrCat("This double number is ", d); - EXPECT_EQ(result, "This double number is 99999.9"); - - result = - quic::QuicStrCat(1, 22, 333, 4444, 55555, 666666, 7777777, 88888888, 999999999); - EXPECT_EQ(result, "122333444455555666666777777788888888999999999"); -} - -TEST(QuicPlatformTest, QuicStrCatMaxArgs) { - QuicString result; - // Test 10 up to 26 arguments, the current maximum - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a"); - EXPECT_EQ(result, "123456789a"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b"); - EXPECT_EQ(result, "123456789ab"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c"); - EXPECT_EQ(result, "123456789abc"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d"); - EXPECT_EQ(result, "123456789abcd"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e"); - EXPECT_EQ(result, "123456789abcde"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f"); - EXPECT_EQ(result, "123456789abcdef"); - result = - quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", "g"); - EXPECT_EQ(result, "123456789abcdefg"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", - "g", "h"); - EXPECT_EQ(result, "123456789abcdefgh"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", - "g", "h", "i"); - EXPECT_EQ(result, "123456789abcdefghi"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", - "g", "h", "i", "j"); - EXPECT_EQ(result, "123456789abcdefghij"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", - "g", "h", "i", "j", "k"); - EXPECT_EQ(result, "123456789abcdefghijk"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", - "g", "h", "i", "j", "k", "l"); - EXPECT_EQ(result, "123456789abcdefghijkl"); - result = QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", - "g", "h", "i", "j", "k", "l", "m"); - EXPECT_EQ(result, "123456789abcdefghijklm"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", - "g", "h", "i", "j", "k", "l", "m", "n"); - EXPECT_EQ(result, "123456789abcdefghijklmn"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", - "g", "h", "i", "j", "k", "l", "m", "n", "o"); - EXPECT_EQ(result, "123456789abcdefghijklmno"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", - "g", "h", "i", "j", "k", "l", "m", "n", "o", "p"); - EXPECT_EQ(result, "123456789abcdefghijklmnop"); - result = quic::QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", - "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q"); - EXPECT_EQ(result, "123456789abcdefghijklmnopq"); - // No limit thanks to C++11's variadic templates - result = quic::QuicStrCat( - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "a", "b", "c", "d", "e", "f", "g", "h", - "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", - "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", - "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"); - EXPECT_EQ(result, - "12345678910abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); ->>>>>>> quic_string_utils_impl and quic_str_cat } } // namespace Quiche From 5555bf17ed5cc34044c83a944c65b1b206dc7ef5 Mon Sep 17 00:00:00 2001 From: Dan Zhang Date: Fri, 1 Feb 2019 14:26:09 -0500 Subject: [PATCH 4/4] fix dependency Signed-off-by: Dan Zhang --- source/extensions/quic_listeners/quiche/platform/BUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/extensions/quic_listeners/quiche/platform/BUILD b/source/extensions/quic_listeners/quiche/platform/BUILD index 60ab1db73ad79..8687dd1cb0b6f 100644 --- a/source/extensions/quic_listeners/quiche/platform/BUILD +++ b/source/extensions/quic_listeners/quiche/platform/BUILD @@ -51,10 +51,8 @@ envoy_cc_library( "quic_iovec_impl.h", "quic_prefetch_impl.h", "quic_ptr_util_impl.h", - "quic_str_cat_impl.h", "quic_string_impl.h", "quic_string_piece_impl.h", - "quic_string_utils_impl.h", "quic_uint128_impl.h", ], external_deps = [ @@ -72,6 +70,8 @@ envoy_cc_library( name = "quic_platform_impl_lib", hdrs = [ "quic_mutex_impl.h", + "quic_str_cat_impl.h", + "quic_string_utils_impl.h", ], external_deps = [ "quiche_quic_platform_base",