From 34a57d0346afe95e11104462c30dc468b0cb0b89 Mon Sep 17 00:00:00 2001 From: Yash Tibrewal Date: Mon, 23 Oct 2017 15:33:21 -0700 Subject: rename all test core files to cc and a lot of C++ style conversions --- test/core/transport/byte_stream_test.c | 279 -------------- test/core/transport/byte_stream_test.cc | 279 ++++++++++++++ test/core/transport/chttp2/alpn_test.c | 57 --- test/core/transport/chttp2/alpn_test.cc | 57 +++ test/core/transport/chttp2/bin_decoder_test.c | 143 -------- test/core/transport/chttp2/bin_decoder_test.cc | 143 ++++++++ test/core/transport/chttp2/bin_encoder_test.c | 173 --------- test/core/transport/chttp2/bin_encoder_test.cc | 173 +++++++++ test/core/transport/chttp2/hpack_encoder_test.c | 284 --------------- test/core/transport/chttp2/hpack_encoder_test.cc | 287 +++++++++++++++ .../transport/chttp2/hpack_parser_fuzzer_test.c | 51 --- .../transport/chttp2/hpack_parser_fuzzer_test.cc | 51 +++ test/core/transport/chttp2/hpack_parser_test.c | 216 ----------- test/core/transport/chttp2/hpack_parser_test.cc | 216 +++++++++++ test/core/transport/chttp2/hpack_table_test.c | 285 --------------- test/core/transport/chttp2/hpack_table_test.cc | 285 +++++++++++++++ test/core/transport/chttp2/stream_map_test.c | 215 ----------- test/core/transport/chttp2/stream_map_test.cc | 215 +++++++++++ test/core/transport/chttp2/varint_test.c | 54 --- test/core/transport/chttp2/varint_test.cc | 54 +++ test/core/transport/connectivity_state_test.c | 146 -------- test/core/transport/connectivity_state_test.cc | 146 ++++++++ test/core/transport/metadata_test.c | 402 -------------------- test/core/transport/metadata_test.cc | 404 +++++++++++++++++++++ test/core/transport/status_conversion_test.c | 162 --------- test/core/transport/status_conversion_test.cc | 162 +++++++++ test/core/transport/stream_owned_slice_test.c | 43 --- test/core/transport/stream_owned_slice_test.cc | 43 +++ test/core/transport/timeout_encoding_test.c | 161 -------- test/core/transport/timeout_encoding_test.cc | 161 ++++++++ 30 files changed, 2676 insertions(+), 2671 deletions(-) delete mode 100644 test/core/transport/byte_stream_test.c create mode 100644 test/core/transport/byte_stream_test.cc delete mode 100644 test/core/transport/chttp2/alpn_test.c create mode 100644 test/core/transport/chttp2/alpn_test.cc delete mode 100644 test/core/transport/chttp2/bin_decoder_test.c create mode 100644 test/core/transport/chttp2/bin_decoder_test.cc delete mode 100644 test/core/transport/chttp2/bin_encoder_test.c create mode 100644 test/core/transport/chttp2/bin_encoder_test.cc delete mode 100644 test/core/transport/chttp2/hpack_encoder_test.c create mode 100644 test/core/transport/chttp2/hpack_encoder_test.cc delete mode 100644 test/core/transport/chttp2/hpack_parser_fuzzer_test.c create mode 100644 test/core/transport/chttp2/hpack_parser_fuzzer_test.cc delete mode 100644 test/core/transport/chttp2/hpack_parser_test.c create mode 100644 test/core/transport/chttp2/hpack_parser_test.cc delete mode 100644 test/core/transport/chttp2/hpack_table_test.c create mode 100644 test/core/transport/chttp2/hpack_table_test.cc delete mode 100644 test/core/transport/chttp2/stream_map_test.c create mode 100644 test/core/transport/chttp2/stream_map_test.cc delete mode 100644 test/core/transport/chttp2/varint_test.c create mode 100644 test/core/transport/chttp2/varint_test.cc delete mode 100644 test/core/transport/connectivity_state_test.c create mode 100644 test/core/transport/connectivity_state_test.cc delete mode 100644 test/core/transport/metadata_test.c create mode 100644 test/core/transport/metadata_test.cc delete mode 100644 test/core/transport/status_conversion_test.c create mode 100644 test/core/transport/status_conversion_test.cc delete mode 100644 test/core/transport/stream_owned_slice_test.c create mode 100644 test/core/transport/stream_owned_slice_test.cc delete mode 100644 test/core/transport/timeout_encoding_test.c create mode 100644 test/core/transport/timeout_encoding_test.cc (limited to 'test/core/transport') diff --git a/test/core/transport/byte_stream_test.c b/test/core/transport/byte_stream_test.c deleted file mode 100644 index a0c5f961cf..0000000000 --- a/test/core/transport/byte_stream_test.c +++ /dev/null @@ -1,279 +0,0 @@ -/* - * - * Copyright 2017 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/lib/transport/byte_stream.h" - -#include -#include -#include - -#include "src/core/lib/slice/slice_internal.h" - -#include "test/core/util/test_config.h" - -// -// grpc_slice_buffer_stream tests -// - -static void not_called_closure(grpc_exec_ctx *exec_ctx, void *arg, - grpc_error *error) { - GPR_ASSERT(false); -} - -static void test_slice_buffer_stream_basic(void) { - gpr_log(GPR_DEBUG, "test_slice_buffer_stream_basic"); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - // Create and populate slice buffer. - grpc_slice_buffer buffer; - grpc_slice_buffer_init(&buffer); - grpc_slice input[] = { - grpc_slice_from_static_string("foo"), - grpc_slice_from_static_string("bar"), - }; - for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { - grpc_slice_buffer_add(&buffer, input[i]); - } - // Create byte stream. - grpc_slice_buffer_stream stream; - grpc_slice_buffer_stream_init(&stream, &buffer, 0); - GPR_ASSERT(stream.base.length == 6); - grpc_closure closure; - GRPC_CLOSURE_INIT(&closure, not_called_closure, NULL, - grpc_schedule_on_exec_ctx); - // Read each slice. Note that next() always returns synchronously. - for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { - GPR_ASSERT( - grpc_byte_stream_next(&exec_ctx, &stream.base, ~(size_t)0, &closure)); - grpc_slice output; - grpc_error *error = grpc_byte_stream_pull(&exec_ctx, &stream.base, &output); - GPR_ASSERT(error == GRPC_ERROR_NONE); - GPR_ASSERT(grpc_slice_eq(input[i], output)); - grpc_slice_unref_internal(&exec_ctx, output); - } - // Clean up. - grpc_byte_stream_destroy(&exec_ctx, &stream.base); - grpc_slice_buffer_destroy_internal(&exec_ctx, &buffer); - grpc_exec_ctx_finish(&exec_ctx); -} - -static void test_slice_buffer_stream_shutdown(void) { - gpr_log(GPR_DEBUG, "test_slice_buffer_stream_shutdown"); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - // Create and populate slice buffer. - grpc_slice_buffer buffer; - grpc_slice_buffer_init(&buffer); - grpc_slice input[] = { - grpc_slice_from_static_string("foo"), - grpc_slice_from_static_string("bar"), - }; - for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { - grpc_slice_buffer_add(&buffer, input[i]); - } - // Create byte stream. - grpc_slice_buffer_stream stream; - grpc_slice_buffer_stream_init(&stream, &buffer, 0); - GPR_ASSERT(stream.base.length == 6); - grpc_closure closure; - GRPC_CLOSURE_INIT(&closure, not_called_closure, NULL, - grpc_schedule_on_exec_ctx); - // Read the first slice. - GPR_ASSERT( - grpc_byte_stream_next(&exec_ctx, &stream.base, ~(size_t)0, &closure)); - grpc_slice output; - grpc_error *error = grpc_byte_stream_pull(&exec_ctx, &stream.base, &output); - GPR_ASSERT(error == GRPC_ERROR_NONE); - GPR_ASSERT(grpc_slice_eq(input[0], output)); - grpc_slice_unref_internal(&exec_ctx, output); - // Now shutdown. - grpc_error *shutdown_error = - GRPC_ERROR_CREATE_FROM_STATIC_STRING("shutdown error"); - grpc_byte_stream_shutdown(&exec_ctx, &stream.base, - GRPC_ERROR_REF(shutdown_error)); - // After shutdown, the next pull() should return the error. - GPR_ASSERT( - grpc_byte_stream_next(&exec_ctx, &stream.base, ~(size_t)0, &closure)); - error = grpc_byte_stream_pull(&exec_ctx, &stream.base, &output); - GPR_ASSERT(error == shutdown_error); - GRPC_ERROR_UNREF(error); - GRPC_ERROR_UNREF(shutdown_error); - // Clean up. - grpc_byte_stream_destroy(&exec_ctx, &stream.base); - grpc_slice_buffer_destroy_internal(&exec_ctx, &buffer); - grpc_exec_ctx_finish(&exec_ctx); -} - -// -// grpc_caching_byte_stream tests -// - -static void test_caching_byte_stream_basic(void) { - gpr_log(GPR_DEBUG, "test_caching_byte_stream_basic"); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - // Create and populate slice buffer byte stream. - grpc_slice_buffer buffer; - grpc_slice_buffer_init(&buffer); - grpc_slice input[] = { - grpc_slice_from_static_string("foo"), - grpc_slice_from_static_string("bar"), - }; - for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { - grpc_slice_buffer_add(&buffer, input[i]); - } - grpc_slice_buffer_stream underlying_stream; - grpc_slice_buffer_stream_init(&underlying_stream, &buffer, 0); - // Create cache and caching stream. - grpc_byte_stream_cache cache; - grpc_byte_stream_cache_init(&cache, &underlying_stream.base); - grpc_caching_byte_stream stream; - grpc_caching_byte_stream_init(&stream, &cache); - grpc_closure closure; - GRPC_CLOSURE_INIT(&closure, not_called_closure, NULL, - grpc_schedule_on_exec_ctx); - // Read each slice. Note that next() always returns synchronously, - // because the underlying byte stream always does. - for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { - GPR_ASSERT( - grpc_byte_stream_next(&exec_ctx, &stream.base, ~(size_t)0, &closure)); - grpc_slice output; - grpc_error *error = grpc_byte_stream_pull(&exec_ctx, &stream.base, &output); - GPR_ASSERT(error == GRPC_ERROR_NONE); - GPR_ASSERT(grpc_slice_eq(input[i], output)); - grpc_slice_unref_internal(&exec_ctx, output); - } - // Clean up. - grpc_byte_stream_destroy(&exec_ctx, &stream.base); - grpc_byte_stream_cache_destroy(&exec_ctx, &cache); - grpc_slice_buffer_destroy_internal(&exec_ctx, &buffer); - grpc_exec_ctx_finish(&exec_ctx); -} - -static void test_caching_byte_stream_reset(void) { - gpr_log(GPR_DEBUG, "test_caching_byte_stream_reset"); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - // Create and populate slice buffer byte stream. - grpc_slice_buffer buffer; - grpc_slice_buffer_init(&buffer); - grpc_slice input[] = { - grpc_slice_from_static_string("foo"), - grpc_slice_from_static_string("bar"), - }; - for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { - grpc_slice_buffer_add(&buffer, input[i]); - } - grpc_slice_buffer_stream underlying_stream; - grpc_slice_buffer_stream_init(&underlying_stream, &buffer, 0); - // Create cache and caching stream. - grpc_byte_stream_cache cache; - grpc_byte_stream_cache_init(&cache, &underlying_stream.base); - grpc_caching_byte_stream stream; - grpc_caching_byte_stream_init(&stream, &cache); - grpc_closure closure; - GRPC_CLOSURE_INIT(&closure, not_called_closure, NULL, - grpc_schedule_on_exec_ctx); - // Read one slice. - GPR_ASSERT( - grpc_byte_stream_next(&exec_ctx, &stream.base, ~(size_t)0, &closure)); - grpc_slice output; - grpc_error *error = grpc_byte_stream_pull(&exec_ctx, &stream.base, &output); - GPR_ASSERT(error == GRPC_ERROR_NONE); - GPR_ASSERT(grpc_slice_eq(input[0], output)); - grpc_slice_unref_internal(&exec_ctx, output); - // Reset the caching stream. The reads should start over from the - // first slice. - grpc_caching_byte_stream_reset(&stream); - for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { - GPR_ASSERT( - grpc_byte_stream_next(&exec_ctx, &stream.base, ~(size_t)0, &closure)); - error = grpc_byte_stream_pull(&exec_ctx, &stream.base, &output); - GPR_ASSERT(error == GRPC_ERROR_NONE); - GPR_ASSERT(grpc_slice_eq(input[i], output)); - grpc_slice_unref_internal(&exec_ctx, output); - } - // Clean up. - grpc_byte_stream_destroy(&exec_ctx, &stream.base); - grpc_byte_stream_cache_destroy(&exec_ctx, &cache); - grpc_slice_buffer_destroy_internal(&exec_ctx, &buffer); - grpc_exec_ctx_finish(&exec_ctx); -} - -static void test_caching_byte_stream_shared_cache(void) { - gpr_log(GPR_DEBUG, "test_caching_byte_stream_shared_cache"); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - // Create and populate slice buffer byte stream. - grpc_slice_buffer buffer; - grpc_slice_buffer_init(&buffer); - grpc_slice input[] = { - grpc_slice_from_static_string("foo"), - grpc_slice_from_static_string("bar"), - }; - for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { - grpc_slice_buffer_add(&buffer, input[i]); - } - grpc_slice_buffer_stream underlying_stream; - grpc_slice_buffer_stream_init(&underlying_stream, &buffer, 0); - // Create cache and two caching streams. - grpc_byte_stream_cache cache; - grpc_byte_stream_cache_init(&cache, &underlying_stream.base); - grpc_caching_byte_stream stream1; - grpc_caching_byte_stream_init(&stream1, &cache); - grpc_caching_byte_stream stream2; - grpc_caching_byte_stream_init(&stream2, &cache); - grpc_closure closure; - GRPC_CLOSURE_INIT(&closure, not_called_closure, NULL, - grpc_schedule_on_exec_ctx); - // Read one slice from stream1. - GPR_ASSERT( - grpc_byte_stream_next(&exec_ctx, &stream1.base, ~(size_t)0, &closure)); - grpc_slice output; - grpc_error *error = grpc_byte_stream_pull(&exec_ctx, &stream1.base, &output); - GPR_ASSERT(error == GRPC_ERROR_NONE); - GPR_ASSERT(grpc_slice_eq(input[0], output)); - grpc_slice_unref_internal(&exec_ctx, output); - // Read all slices from stream2. - for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { - GPR_ASSERT( - grpc_byte_stream_next(&exec_ctx, &stream2.base, ~(size_t)0, &closure)); - error = grpc_byte_stream_pull(&exec_ctx, &stream2.base, &output); - GPR_ASSERT(error == GRPC_ERROR_NONE); - GPR_ASSERT(grpc_slice_eq(input[i], output)); - grpc_slice_unref_internal(&exec_ctx, output); - } - // Now read the second slice from stream1. - GPR_ASSERT( - grpc_byte_stream_next(&exec_ctx, &stream1.base, ~(size_t)0, &closure)); - error = grpc_byte_stream_pull(&exec_ctx, &stream1.base, &output); - GPR_ASSERT(error == GRPC_ERROR_NONE); - GPR_ASSERT(grpc_slice_eq(input[1], output)); - grpc_slice_unref_internal(&exec_ctx, output); - // Clean up. - grpc_byte_stream_destroy(&exec_ctx, &stream1.base); - grpc_byte_stream_destroy(&exec_ctx, &stream2.base); - grpc_byte_stream_cache_destroy(&exec_ctx, &cache); - grpc_slice_buffer_destroy_internal(&exec_ctx, &buffer); - grpc_exec_ctx_finish(&exec_ctx); -} - -int main(int argc, char **argv) { - grpc_test_init(argc, argv); - test_slice_buffer_stream_basic(); - test_slice_buffer_stream_shutdown(); - test_caching_byte_stream_basic(); - test_caching_byte_stream_reset(); - test_caching_byte_stream_shared_cache(); - return 0; -} diff --git a/test/core/transport/byte_stream_test.cc b/test/core/transport/byte_stream_test.cc new file mode 100644 index 0000000000..a0c5f961cf --- /dev/null +++ b/test/core/transport/byte_stream_test.cc @@ -0,0 +1,279 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/lib/transport/byte_stream.h" + +#include +#include +#include + +#include "src/core/lib/slice/slice_internal.h" + +#include "test/core/util/test_config.h" + +// +// grpc_slice_buffer_stream tests +// + +static void not_called_closure(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { + GPR_ASSERT(false); +} + +static void test_slice_buffer_stream_basic(void) { + gpr_log(GPR_DEBUG, "test_slice_buffer_stream_basic"); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + // Create and populate slice buffer. + grpc_slice_buffer buffer; + grpc_slice_buffer_init(&buffer); + grpc_slice input[] = { + grpc_slice_from_static_string("foo"), + grpc_slice_from_static_string("bar"), + }; + for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { + grpc_slice_buffer_add(&buffer, input[i]); + } + // Create byte stream. + grpc_slice_buffer_stream stream; + grpc_slice_buffer_stream_init(&stream, &buffer, 0); + GPR_ASSERT(stream.base.length == 6); + grpc_closure closure; + GRPC_CLOSURE_INIT(&closure, not_called_closure, NULL, + grpc_schedule_on_exec_ctx); + // Read each slice. Note that next() always returns synchronously. + for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { + GPR_ASSERT( + grpc_byte_stream_next(&exec_ctx, &stream.base, ~(size_t)0, &closure)); + grpc_slice output; + grpc_error *error = grpc_byte_stream_pull(&exec_ctx, &stream.base, &output); + GPR_ASSERT(error == GRPC_ERROR_NONE); + GPR_ASSERT(grpc_slice_eq(input[i], output)); + grpc_slice_unref_internal(&exec_ctx, output); + } + // Clean up. + grpc_byte_stream_destroy(&exec_ctx, &stream.base); + grpc_slice_buffer_destroy_internal(&exec_ctx, &buffer); + grpc_exec_ctx_finish(&exec_ctx); +} + +static void test_slice_buffer_stream_shutdown(void) { + gpr_log(GPR_DEBUG, "test_slice_buffer_stream_shutdown"); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + // Create and populate slice buffer. + grpc_slice_buffer buffer; + grpc_slice_buffer_init(&buffer); + grpc_slice input[] = { + grpc_slice_from_static_string("foo"), + grpc_slice_from_static_string("bar"), + }; + for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { + grpc_slice_buffer_add(&buffer, input[i]); + } + // Create byte stream. + grpc_slice_buffer_stream stream; + grpc_slice_buffer_stream_init(&stream, &buffer, 0); + GPR_ASSERT(stream.base.length == 6); + grpc_closure closure; + GRPC_CLOSURE_INIT(&closure, not_called_closure, NULL, + grpc_schedule_on_exec_ctx); + // Read the first slice. + GPR_ASSERT( + grpc_byte_stream_next(&exec_ctx, &stream.base, ~(size_t)0, &closure)); + grpc_slice output; + grpc_error *error = grpc_byte_stream_pull(&exec_ctx, &stream.base, &output); + GPR_ASSERT(error == GRPC_ERROR_NONE); + GPR_ASSERT(grpc_slice_eq(input[0], output)); + grpc_slice_unref_internal(&exec_ctx, output); + // Now shutdown. + grpc_error *shutdown_error = + GRPC_ERROR_CREATE_FROM_STATIC_STRING("shutdown error"); + grpc_byte_stream_shutdown(&exec_ctx, &stream.base, + GRPC_ERROR_REF(shutdown_error)); + // After shutdown, the next pull() should return the error. + GPR_ASSERT( + grpc_byte_stream_next(&exec_ctx, &stream.base, ~(size_t)0, &closure)); + error = grpc_byte_stream_pull(&exec_ctx, &stream.base, &output); + GPR_ASSERT(error == shutdown_error); + GRPC_ERROR_UNREF(error); + GRPC_ERROR_UNREF(shutdown_error); + // Clean up. + grpc_byte_stream_destroy(&exec_ctx, &stream.base); + grpc_slice_buffer_destroy_internal(&exec_ctx, &buffer); + grpc_exec_ctx_finish(&exec_ctx); +} + +// +// grpc_caching_byte_stream tests +// + +static void test_caching_byte_stream_basic(void) { + gpr_log(GPR_DEBUG, "test_caching_byte_stream_basic"); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + // Create and populate slice buffer byte stream. + grpc_slice_buffer buffer; + grpc_slice_buffer_init(&buffer); + grpc_slice input[] = { + grpc_slice_from_static_string("foo"), + grpc_slice_from_static_string("bar"), + }; + for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { + grpc_slice_buffer_add(&buffer, input[i]); + } + grpc_slice_buffer_stream underlying_stream; + grpc_slice_buffer_stream_init(&underlying_stream, &buffer, 0); + // Create cache and caching stream. + grpc_byte_stream_cache cache; + grpc_byte_stream_cache_init(&cache, &underlying_stream.base); + grpc_caching_byte_stream stream; + grpc_caching_byte_stream_init(&stream, &cache); + grpc_closure closure; + GRPC_CLOSURE_INIT(&closure, not_called_closure, NULL, + grpc_schedule_on_exec_ctx); + // Read each slice. Note that next() always returns synchronously, + // because the underlying byte stream always does. + for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { + GPR_ASSERT( + grpc_byte_stream_next(&exec_ctx, &stream.base, ~(size_t)0, &closure)); + grpc_slice output; + grpc_error *error = grpc_byte_stream_pull(&exec_ctx, &stream.base, &output); + GPR_ASSERT(error == GRPC_ERROR_NONE); + GPR_ASSERT(grpc_slice_eq(input[i], output)); + grpc_slice_unref_internal(&exec_ctx, output); + } + // Clean up. + grpc_byte_stream_destroy(&exec_ctx, &stream.base); + grpc_byte_stream_cache_destroy(&exec_ctx, &cache); + grpc_slice_buffer_destroy_internal(&exec_ctx, &buffer); + grpc_exec_ctx_finish(&exec_ctx); +} + +static void test_caching_byte_stream_reset(void) { + gpr_log(GPR_DEBUG, "test_caching_byte_stream_reset"); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + // Create and populate slice buffer byte stream. + grpc_slice_buffer buffer; + grpc_slice_buffer_init(&buffer); + grpc_slice input[] = { + grpc_slice_from_static_string("foo"), + grpc_slice_from_static_string("bar"), + }; + for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { + grpc_slice_buffer_add(&buffer, input[i]); + } + grpc_slice_buffer_stream underlying_stream; + grpc_slice_buffer_stream_init(&underlying_stream, &buffer, 0); + // Create cache and caching stream. + grpc_byte_stream_cache cache; + grpc_byte_stream_cache_init(&cache, &underlying_stream.base); + grpc_caching_byte_stream stream; + grpc_caching_byte_stream_init(&stream, &cache); + grpc_closure closure; + GRPC_CLOSURE_INIT(&closure, not_called_closure, NULL, + grpc_schedule_on_exec_ctx); + // Read one slice. + GPR_ASSERT( + grpc_byte_stream_next(&exec_ctx, &stream.base, ~(size_t)0, &closure)); + grpc_slice output; + grpc_error *error = grpc_byte_stream_pull(&exec_ctx, &stream.base, &output); + GPR_ASSERT(error == GRPC_ERROR_NONE); + GPR_ASSERT(grpc_slice_eq(input[0], output)); + grpc_slice_unref_internal(&exec_ctx, output); + // Reset the caching stream. The reads should start over from the + // first slice. + grpc_caching_byte_stream_reset(&stream); + for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { + GPR_ASSERT( + grpc_byte_stream_next(&exec_ctx, &stream.base, ~(size_t)0, &closure)); + error = grpc_byte_stream_pull(&exec_ctx, &stream.base, &output); + GPR_ASSERT(error == GRPC_ERROR_NONE); + GPR_ASSERT(grpc_slice_eq(input[i], output)); + grpc_slice_unref_internal(&exec_ctx, output); + } + // Clean up. + grpc_byte_stream_destroy(&exec_ctx, &stream.base); + grpc_byte_stream_cache_destroy(&exec_ctx, &cache); + grpc_slice_buffer_destroy_internal(&exec_ctx, &buffer); + grpc_exec_ctx_finish(&exec_ctx); +} + +static void test_caching_byte_stream_shared_cache(void) { + gpr_log(GPR_DEBUG, "test_caching_byte_stream_shared_cache"); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + // Create and populate slice buffer byte stream. + grpc_slice_buffer buffer; + grpc_slice_buffer_init(&buffer); + grpc_slice input[] = { + grpc_slice_from_static_string("foo"), + grpc_slice_from_static_string("bar"), + }; + for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { + grpc_slice_buffer_add(&buffer, input[i]); + } + grpc_slice_buffer_stream underlying_stream; + grpc_slice_buffer_stream_init(&underlying_stream, &buffer, 0); + // Create cache and two caching streams. + grpc_byte_stream_cache cache; + grpc_byte_stream_cache_init(&cache, &underlying_stream.base); + grpc_caching_byte_stream stream1; + grpc_caching_byte_stream_init(&stream1, &cache); + grpc_caching_byte_stream stream2; + grpc_caching_byte_stream_init(&stream2, &cache); + grpc_closure closure; + GRPC_CLOSURE_INIT(&closure, not_called_closure, NULL, + grpc_schedule_on_exec_ctx); + // Read one slice from stream1. + GPR_ASSERT( + grpc_byte_stream_next(&exec_ctx, &stream1.base, ~(size_t)0, &closure)); + grpc_slice output; + grpc_error *error = grpc_byte_stream_pull(&exec_ctx, &stream1.base, &output); + GPR_ASSERT(error == GRPC_ERROR_NONE); + GPR_ASSERT(grpc_slice_eq(input[0], output)); + grpc_slice_unref_internal(&exec_ctx, output); + // Read all slices from stream2. + for (size_t i = 0; i < GPR_ARRAY_SIZE(input); ++i) { + GPR_ASSERT( + grpc_byte_stream_next(&exec_ctx, &stream2.base, ~(size_t)0, &closure)); + error = grpc_byte_stream_pull(&exec_ctx, &stream2.base, &output); + GPR_ASSERT(error == GRPC_ERROR_NONE); + GPR_ASSERT(grpc_slice_eq(input[i], output)); + grpc_slice_unref_internal(&exec_ctx, output); + } + // Now read the second slice from stream1. + GPR_ASSERT( + grpc_byte_stream_next(&exec_ctx, &stream1.base, ~(size_t)0, &closure)); + error = grpc_byte_stream_pull(&exec_ctx, &stream1.base, &output); + GPR_ASSERT(error == GRPC_ERROR_NONE); + GPR_ASSERT(grpc_slice_eq(input[1], output)); + grpc_slice_unref_internal(&exec_ctx, output); + // Clean up. + grpc_byte_stream_destroy(&exec_ctx, &stream1.base); + grpc_byte_stream_destroy(&exec_ctx, &stream2.base); + grpc_byte_stream_cache_destroy(&exec_ctx, &cache); + grpc_slice_buffer_destroy_internal(&exec_ctx, &buffer); + grpc_exec_ctx_finish(&exec_ctx); +} + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + test_slice_buffer_stream_basic(); + test_slice_buffer_stream_shutdown(); + test_caching_byte_stream_basic(); + test_caching_byte_stream_reset(); + test_caching_byte_stream_shared_cache(); + return 0; +} diff --git a/test/core/transport/chttp2/alpn_test.c b/test/core/transport/chttp2/alpn_test.c deleted file mode 100644 index 72c30c40eb..0000000000 --- a/test/core/transport/chttp2/alpn_test.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * - * Copyright 2015 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/ext/transport/chttp2/alpn/alpn.h" - -#include -#include "test/core/util/test_config.h" - -static void test_alpn_success(void) { - GPR_ASSERT(grpc_chttp2_is_alpn_version_supported("h2", 2)); - GPR_ASSERT(grpc_chttp2_is_alpn_version_supported("grpc-exp", 8)); -} - -static void test_alpn_failure(void) { - GPR_ASSERT(!grpc_chttp2_is_alpn_version_supported("h2-155", 6)); - GPR_ASSERT(!grpc_chttp2_is_alpn_version_supported("h1-15", 5)); -} - -// First index in ALPN supported version list of a given protocol. Returns a -// value one beyond the last valid element index if not found. -static size_t alpn_version_index(const char *version, size_t size) { - size_t i; - for (i = 0; i < grpc_chttp2_num_alpn_versions(); ++i) { - if (!strncmp(version, grpc_chttp2_get_alpn_version_index(i), size)) { - return i; - } - } - return i; -} - -static void test_alpn_grpc_before_h2(void) { - // grpc-exp is preferred over h2. - GPR_ASSERT(alpn_version_index("grpc-exp", 8) < alpn_version_index("h2", 2)); -} - -int main(int argc, char **argv) { - grpc_test_init(argc, argv); - test_alpn_success(); - test_alpn_failure(); - test_alpn_grpc_before_h2(); - return 0; -} diff --git a/test/core/transport/chttp2/alpn_test.cc b/test/core/transport/chttp2/alpn_test.cc new file mode 100644 index 0000000000..72c30c40eb --- /dev/null +++ b/test/core/transport/chttp2/alpn_test.cc @@ -0,0 +1,57 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/ext/transport/chttp2/alpn/alpn.h" + +#include +#include "test/core/util/test_config.h" + +static void test_alpn_success(void) { + GPR_ASSERT(grpc_chttp2_is_alpn_version_supported("h2", 2)); + GPR_ASSERT(grpc_chttp2_is_alpn_version_supported("grpc-exp", 8)); +} + +static void test_alpn_failure(void) { + GPR_ASSERT(!grpc_chttp2_is_alpn_version_supported("h2-155", 6)); + GPR_ASSERT(!grpc_chttp2_is_alpn_version_supported("h1-15", 5)); +} + +// First index in ALPN supported version list of a given protocol. Returns a +// value one beyond the last valid element index if not found. +static size_t alpn_version_index(const char *version, size_t size) { + size_t i; + for (i = 0; i < grpc_chttp2_num_alpn_versions(); ++i) { + if (!strncmp(version, grpc_chttp2_get_alpn_version_index(i), size)) { + return i; + } + } + return i; +} + +static void test_alpn_grpc_before_h2(void) { + // grpc-exp is preferred over h2. + GPR_ASSERT(alpn_version_index("grpc-exp", 8) < alpn_version_index("h2", 2)); +} + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + test_alpn_success(); + test_alpn_failure(); + test_alpn_grpc_before_h2(); + return 0; +} diff --git a/test/core/transport/chttp2/bin_decoder_test.c b/test/core/transport/chttp2/bin_decoder_test.c deleted file mode 100644 index 775161ec91..0000000000 --- a/test/core/transport/chttp2/bin_decoder_test.c +++ /dev/null @@ -1,143 +0,0 @@ -/* - * - * Copyright 2016 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/ext/transport/chttp2/transport/bin_decoder.h" - -#include - -#include -#include -#include "src/core/ext/transport/chttp2/transport/bin_encoder.h" -#include "src/core/lib/slice/slice_internal.h" -#include "src/core/lib/slice/slice_string_helpers.h" -#include "src/core/lib/support/string.h" - -static int all_ok = 1; - -static void expect_slice_eq(grpc_exec_ctx *exec_ctx, grpc_slice expected, - grpc_slice slice, char *debug, int line) { - if (!grpc_slice_eq(slice, expected)) { - char *hs = grpc_dump_slice(slice, GPR_DUMP_HEX | GPR_DUMP_ASCII); - char *he = grpc_dump_slice(expected, GPR_DUMP_HEX | GPR_DUMP_ASCII); - gpr_log(GPR_ERROR, "FAILED:%d: %s\ngot: %s\nwant: %s", line, debug, hs, - he); - gpr_free(hs); - gpr_free(he); - all_ok = 0; - } - grpc_slice_unref_internal(exec_ctx, expected); - grpc_slice_unref_internal(exec_ctx, slice); -} - -static grpc_slice base64_encode(grpc_exec_ctx *exec_ctx, const char *s) { - grpc_slice ss = grpc_slice_from_copied_string(s); - grpc_slice out = grpc_chttp2_base64_encode(ss); - grpc_slice_unref_internal(exec_ctx, ss); - return out; -} - -static grpc_slice base64_decode(grpc_exec_ctx *exec_ctx, const char *s) { - grpc_slice ss = grpc_slice_from_copied_string(s); - grpc_slice out = grpc_chttp2_base64_decode(exec_ctx, ss); - grpc_slice_unref_internal(exec_ctx, ss); - return out; -} - -static grpc_slice base64_decode_with_length(grpc_exec_ctx *exec_ctx, - const char *s, - size_t output_length) { - grpc_slice ss = grpc_slice_from_copied_string(s); - grpc_slice out = - grpc_chttp2_base64_decode_with_length(exec_ctx, ss, output_length); - grpc_slice_unref_internal(exec_ctx, ss); - return out; -} - -#define EXPECT_SLICE_EQ(exec_ctx, expected, slice) \ - expect_slice_eq( \ - exec_ctx, grpc_slice_from_copied_buffer(expected, sizeof(expected) - 1), \ - slice, #slice, __LINE__); - -#define ENCODE_AND_DECODE(exec_ctx, s) \ - EXPECT_SLICE_EQ(exec_ctx, s, \ - grpc_chttp2_base64_decode_with_length( \ - exec_ctx, base64_encode(exec_ctx, s), strlen(s))); - -int main(int argc, char **argv) { - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - - /* ENCODE_AND_DECODE tests grpc_chttp2_base64_decode_with_length(), which - takes encoded base64 strings without pad chars, but output length is - required. */ - /* Base64 test vectors from RFC 4648 */ - ENCODE_AND_DECODE(&exec_ctx, ""); - ENCODE_AND_DECODE(&exec_ctx, "f"); - ENCODE_AND_DECODE(&exec_ctx, "foo"); - ENCODE_AND_DECODE(&exec_ctx, "fo"); - ENCODE_AND_DECODE(&exec_ctx, "foob"); - ENCODE_AND_DECODE(&exec_ctx, "fooba"); - ENCODE_AND_DECODE(&exec_ctx, "foobar"); - - ENCODE_AND_DECODE(&exec_ctx, "\xc0\xc1\xc2\xc3\xc4\xc5"); - - /* Base64 test vectors from RFC 4648, with pad chars */ - /* BASE64("") = "" */ - EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode(&exec_ctx, "")); - /* BASE64("f") = "Zg==" */ - EXPECT_SLICE_EQ(&exec_ctx, "f", base64_decode(&exec_ctx, "Zg==")); - /* BASE64("fo") = "Zm8=" */ - EXPECT_SLICE_EQ(&exec_ctx, "fo", base64_decode(&exec_ctx, "Zm8=")); - /* BASE64("foo") = "Zm9v" */ - EXPECT_SLICE_EQ(&exec_ctx, "foo", base64_decode(&exec_ctx, "Zm9v")); - /* BASE64("foob") = "Zm9vYg==" */ - EXPECT_SLICE_EQ(&exec_ctx, "foob", base64_decode(&exec_ctx, "Zm9vYg==")); - /* BASE64("fooba") = "Zm9vYmE=" */ - EXPECT_SLICE_EQ(&exec_ctx, "fooba", base64_decode(&exec_ctx, "Zm9vYmE=")); - /* BASE64("foobar") = "Zm9vYmFy" */ - EXPECT_SLICE_EQ(&exec_ctx, "foobar", base64_decode(&exec_ctx, "Zm9vYmFy")); - - EXPECT_SLICE_EQ(&exec_ctx, "\xc0\xc1\xc2\xc3\xc4\xc5", - base64_decode(&exec_ctx, "wMHCw8TF")); - - // Test illegal input length in grpc_chttp2_base64_decode - EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode(&exec_ctx, "a")); - EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode(&exec_ctx, "ab")); - EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode(&exec_ctx, "abc")); - - // Test illegal charactors in grpc_chttp2_base64_decode - EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode(&exec_ctx, "Zm:v")); - EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode(&exec_ctx, "Zm=v")); - - // Test output_length longer than max possible output length in - // grpc_chttp2_base64_decode_with_length - EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode_with_length(&exec_ctx, "Zg", 2)); - EXPECT_SLICE_EQ(&exec_ctx, "", - base64_decode_with_length(&exec_ctx, "Zm8", 3)); - EXPECT_SLICE_EQ(&exec_ctx, "", - base64_decode_with_length(&exec_ctx, "Zm9v", 4)); - - // Test illegal charactors in grpc_chttp2_base64_decode_with_length - EXPECT_SLICE_EQ(&exec_ctx, "", - base64_decode_with_length(&exec_ctx, "Zm:v", 3)); - EXPECT_SLICE_EQ(&exec_ctx, "", - base64_decode_with_length(&exec_ctx, "Zm=v", 3)); - - grpc_exec_ctx_finish(&exec_ctx); - - return all_ok ? 0 : 1; -} diff --git a/test/core/transport/chttp2/bin_decoder_test.cc b/test/core/transport/chttp2/bin_decoder_test.cc new file mode 100644 index 0000000000..a09aadb18d --- /dev/null +++ b/test/core/transport/chttp2/bin_decoder_test.cc @@ -0,0 +1,143 @@ +/* + * + * Copyright 2016 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/ext/transport/chttp2/transport/bin_decoder.h" + +#include + +#include +#include +#include "src/core/ext/transport/chttp2/transport/bin_encoder.h" +#include "src/core/lib/slice/slice_internal.h" +#include "src/core/lib/slice/slice_string_helpers.h" +#include "src/core/lib/support/string.h" + +static int all_ok = 1; + +static void expect_slice_eq(grpc_exec_ctx *exec_ctx, grpc_slice expected, + grpc_slice slice, const char *debug, int line) { + if (!grpc_slice_eq(slice, expected)) { + char *hs = grpc_dump_slice(slice, GPR_DUMP_HEX | GPR_DUMP_ASCII); + char *he = grpc_dump_slice(expected, GPR_DUMP_HEX | GPR_DUMP_ASCII); + gpr_log(GPR_ERROR, "FAILED:%d: %s\ngot: %s\nwant: %s", line, debug, hs, + he); + gpr_free(hs); + gpr_free(he); + all_ok = 0; + } + grpc_slice_unref_internal(exec_ctx, expected); + grpc_slice_unref_internal(exec_ctx, slice); +} + +static grpc_slice base64_encode(grpc_exec_ctx *exec_ctx, const char *s) { + grpc_slice ss = grpc_slice_from_copied_string(s); + grpc_slice out = grpc_chttp2_base64_encode(ss); + grpc_slice_unref_internal(exec_ctx, ss); + return out; +} + +static grpc_slice base64_decode(grpc_exec_ctx *exec_ctx, const char *s) { + grpc_slice ss = grpc_slice_from_copied_string(s); + grpc_slice out = grpc_chttp2_base64_decode(exec_ctx, ss); + grpc_slice_unref_internal(exec_ctx, ss); + return out; +} + +static grpc_slice base64_decode_with_length(grpc_exec_ctx *exec_ctx, + const char *s, + size_t output_length) { + grpc_slice ss = grpc_slice_from_copied_string(s); + grpc_slice out = + grpc_chttp2_base64_decode_with_length(exec_ctx, ss, output_length); + grpc_slice_unref_internal(exec_ctx, ss); + return out; +} + +#define EXPECT_SLICE_EQ(exec_ctx, expected, slice) \ + expect_slice_eq( \ + exec_ctx, grpc_slice_from_copied_buffer(expected, sizeof(expected) - 1), \ + slice, #slice, __LINE__); + +#define ENCODE_AND_DECODE(exec_ctx, s) \ + EXPECT_SLICE_EQ(exec_ctx, s, \ + grpc_chttp2_base64_decode_with_length( \ + exec_ctx, base64_encode(exec_ctx, s), strlen(s))); + +int main(int argc, char **argv) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + + /* ENCODE_AND_DECODE tests grpc_chttp2_base64_decode_with_length(), which + takes encoded base64 strings without pad chars, but output length is + required. */ + /* Base64 test vectors from RFC 4648 */ + ENCODE_AND_DECODE(&exec_ctx, ""); + ENCODE_AND_DECODE(&exec_ctx, "f"); + ENCODE_AND_DECODE(&exec_ctx, "foo"); + ENCODE_AND_DECODE(&exec_ctx, "fo"); + ENCODE_AND_DECODE(&exec_ctx, "foob"); + ENCODE_AND_DECODE(&exec_ctx, "fooba"); + ENCODE_AND_DECODE(&exec_ctx, "foobar"); + + ENCODE_AND_DECODE(&exec_ctx, "\xc0\xc1\xc2\xc3\xc4\xc5"); + + /* Base64 test vectors from RFC 4648, with pad chars */ + /* BASE64("") = "" */ + EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode(&exec_ctx, "")); + /* BASE64("f") = "Zg==" */ + EXPECT_SLICE_EQ(&exec_ctx, "f", base64_decode(&exec_ctx, "Zg==")); + /* BASE64("fo") = "Zm8=" */ + EXPECT_SLICE_EQ(&exec_ctx, "fo", base64_decode(&exec_ctx, "Zm8=")); + /* BASE64("foo") = "Zm9v" */ + EXPECT_SLICE_EQ(&exec_ctx, "foo", base64_decode(&exec_ctx, "Zm9v")); + /* BASE64("foob") = "Zm9vYg==" */ + EXPECT_SLICE_EQ(&exec_ctx, "foob", base64_decode(&exec_ctx, "Zm9vYg==")); + /* BASE64("fooba") = "Zm9vYmE=" */ + EXPECT_SLICE_EQ(&exec_ctx, "fooba", base64_decode(&exec_ctx, "Zm9vYmE=")); + /* BASE64("foobar") = "Zm9vYmFy" */ + EXPECT_SLICE_EQ(&exec_ctx, "foobar", base64_decode(&exec_ctx, "Zm9vYmFy")); + + EXPECT_SLICE_EQ(&exec_ctx, "\xc0\xc1\xc2\xc3\xc4\xc5", + base64_decode(&exec_ctx, "wMHCw8TF")); + + // Test illegal input length in grpc_chttp2_base64_decode + EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode(&exec_ctx, "a")); + EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode(&exec_ctx, "ab")); + EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode(&exec_ctx, "abc")); + + // Test illegal charactors in grpc_chttp2_base64_decode + EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode(&exec_ctx, "Zm:v")); + EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode(&exec_ctx, "Zm=v")); + + // Test output_length longer than max possible output length in + // grpc_chttp2_base64_decode_with_length + EXPECT_SLICE_EQ(&exec_ctx, "", base64_decode_with_length(&exec_ctx, "Zg", 2)); + EXPECT_SLICE_EQ(&exec_ctx, "", + base64_decode_with_length(&exec_ctx, "Zm8", 3)); + EXPECT_SLICE_EQ(&exec_ctx, "", + base64_decode_with_length(&exec_ctx, "Zm9v", 4)); + + // Test illegal charactors in grpc_chttp2_base64_decode_with_length + EXPECT_SLICE_EQ(&exec_ctx, "", + base64_decode_with_length(&exec_ctx, "Zm:v", 3)); + EXPECT_SLICE_EQ(&exec_ctx, "", + base64_decode_with_length(&exec_ctx, "Zm=v", 3)); + + grpc_exec_ctx_finish(&exec_ctx); + + return all_ok ? 0 : 1; +} diff --git a/test/core/transport/chttp2/bin_encoder_test.c b/test/core/transport/chttp2/bin_encoder_test.c deleted file mode 100644 index acadcf6c89..0000000000 --- a/test/core/transport/chttp2/bin_encoder_test.c +++ /dev/null @@ -1,173 +0,0 @@ -/* - * - * Copyright 2015 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/ext/transport/chttp2/transport/bin_encoder.h" - -#include - -/* This is here for grpc_is_binary_header - * TODO(murgatroid99): Remove this - */ -#include -#include -#include -#include "src/core/lib/slice/slice_string_helpers.h" -#include "src/core/lib/support/string.h" - -static int all_ok = 1; - -static void expect_slice_eq(grpc_slice expected, grpc_slice slice, char *debug, - int line) { - if (!grpc_slice_eq(slice, expected)) { - char *hs = grpc_dump_slice(slice, GPR_DUMP_HEX | GPR_DUMP_ASCII); - char *he = grpc_dump_slice(expected, GPR_DUMP_HEX | GPR_DUMP_ASCII); - gpr_log(GPR_ERROR, "FAILED:%d: %s\ngot: %s\nwant: %s", line, debug, hs, - he); - gpr_free(hs); - gpr_free(he); - all_ok = 0; - } - grpc_slice_unref(expected); - grpc_slice_unref(slice); -} - -static grpc_slice B64(const char *s) { - grpc_slice ss = grpc_slice_from_copied_string(s); - grpc_slice out = grpc_chttp2_base64_encode(ss); - grpc_slice_unref(ss); - return out; -} - -static grpc_slice HUFF(const char *s) { - grpc_slice ss = grpc_slice_from_copied_string(s); - grpc_slice out = grpc_chttp2_huffman_compress(ss); - grpc_slice_unref(ss); - return out; -} - -#define EXPECT_SLICE_EQ(expected, slice) \ - expect_slice_eq( \ - grpc_slice_from_copied_buffer(expected, sizeof(expected) - 1), slice, \ - #slice, __LINE__); - -static void expect_combined_equiv(const char *s, size_t len, int line) { - grpc_slice input = grpc_slice_from_copied_buffer(s, len); - grpc_slice base64 = grpc_chttp2_base64_encode(input); - grpc_slice expect = grpc_chttp2_huffman_compress(base64); - grpc_slice got = grpc_chttp2_base64_encode_and_huffman_compress(input); - if (!grpc_slice_eq(expect, got)) { - char *t = grpc_dump_slice(input, GPR_DUMP_HEX | GPR_DUMP_ASCII); - char *e = grpc_dump_slice(expect, GPR_DUMP_HEX | GPR_DUMP_ASCII); - char *g = grpc_dump_slice(got, GPR_DUMP_HEX | GPR_DUMP_ASCII); - gpr_log(GPR_ERROR, "FAILED:%d:\ntest: %s\ngot: %s\nwant: %s", line, t, g, - e); - gpr_free(t); - gpr_free(e); - gpr_free(g); - all_ok = 0; - } - grpc_slice_unref(input); - grpc_slice_unref(base64); - grpc_slice_unref(expect); - grpc_slice_unref(got); -} - -#define EXPECT_COMBINED_EQUIV(x) \ - expect_combined_equiv(x, sizeof(x) - 1, __LINE__) - -static void expect_binary_header(const char *hdr, int binary) { - if (grpc_is_binary_header(grpc_slice_from_static_string(hdr)) != binary) { - gpr_log(GPR_ERROR, "FAILED: expected header '%s' to be %s", hdr, - binary ? "binary" : "not binary"); - all_ok = 0; - } -} - -int main(int argc, char **argv) { - /* Base64 test vectors from RFC 4648, with padding removed */ - /* BASE64("") = "" */ - EXPECT_SLICE_EQ("", B64("")); - /* BASE64("f") = "Zg" */ - EXPECT_SLICE_EQ("Zg", B64("f")); - /* BASE64("fo") = "Zm8" */ - EXPECT_SLICE_EQ("Zm8", B64("fo")); - /* BASE64("foo") = "Zm9v" */ - EXPECT_SLICE_EQ("Zm9v", B64("foo")); - /* BASE64("foob") = "Zm9vYg" */ - EXPECT_SLICE_EQ("Zm9vYg", B64("foob")); - /* BASE64("fooba") = "Zm9vYmE" */ - EXPECT_SLICE_EQ("Zm9vYmE", B64("fooba")); - /* BASE64("foobar") = "Zm9vYmFy" */ - EXPECT_SLICE_EQ("Zm9vYmFy", B64("foobar")); - - EXPECT_SLICE_EQ("wMHCw8TF", B64("\xc0\xc1\xc2\xc3\xc4\xc5")); - - /* Huffman encoding tests */ - EXPECT_SLICE_EQ("\xf1\xe3\xc2\xe5\xf2\x3a\x6b\xa0\xab\x90\xf4\xff", - HUFF("www.example.com")); - EXPECT_SLICE_EQ("\xa8\xeb\x10\x64\x9c\xbf", HUFF("no-cache")); - EXPECT_SLICE_EQ("\x25\xa8\x49\xe9\x5b\xa9\x7d\x7f", HUFF("custom-key")); - EXPECT_SLICE_EQ("\x25\xa8\x49\xe9\x5b\xb8\xe8\xb4\xbf", HUFF("custom-value")); - EXPECT_SLICE_EQ("\xae\xc3\x77\x1a\x4b", HUFF("private")); - EXPECT_SLICE_EQ( - "\xd0\x7a\xbe\x94\x10\x54\xd4\x44\xa8\x20\x05\x95\x04\x0b\x81\x66\xe0\x82" - "\xa6\x2d\x1b\xff", - HUFF("Mon, 21 Oct 2013 20:13:21 GMT")); - EXPECT_SLICE_EQ( - "\x9d\x29\xad\x17\x18\x63\xc7\x8f\x0b\x97\xc8\xe9\xae\x82\xae\x43\xd3", - HUFF("https://www.example.com")); - - /* Various test vectors for combined encoding */ - EXPECT_COMBINED_EQUIV(""); - EXPECT_COMBINED_EQUIV("f"); - EXPECT_COMBINED_EQUIV("fo"); - EXPECT_COMBINED_EQUIV("foo"); - EXPECT_COMBINED_EQUIV("foob"); - EXPECT_COMBINED_EQUIV("fooba"); - EXPECT_COMBINED_EQUIV("foobar"); - EXPECT_COMBINED_EQUIV("www.example.com"); - EXPECT_COMBINED_EQUIV("no-cache"); - EXPECT_COMBINED_EQUIV("custom-key"); - EXPECT_COMBINED_EQUIV("custom-value"); - EXPECT_COMBINED_EQUIV("private"); - EXPECT_COMBINED_EQUIV("Mon, 21 Oct 2013 20:13:21 GMT"); - EXPECT_COMBINED_EQUIV("https://www.example.com"); - EXPECT_COMBINED_EQUIV( - "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" - "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" - "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" - "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f" - "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f" - "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f" - "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f" - "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f" - "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" - "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f" - "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf" - "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf" - "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf" - "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf" - "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef" - "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"); - - expect_binary_header("foo-bin", 1); - expect_binary_header("foo-bar", 0); - expect_binary_header("-bin", 0); - - return all_ok ? 0 : 1; -} diff --git a/test/core/transport/chttp2/bin_encoder_test.cc b/test/core/transport/chttp2/bin_encoder_test.cc new file mode 100644 index 0000000000..d073f74d27 --- /dev/null +++ b/test/core/transport/chttp2/bin_encoder_test.cc @@ -0,0 +1,173 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/ext/transport/chttp2/transport/bin_encoder.h" + +#include + +/* This is here for grpc_is_binary_header + * TODO(murgatroid99): Remove this + */ +#include +#include +#include +#include "src/core/lib/slice/slice_string_helpers.h" +#include "src/core/lib/support/string.h" + +static int all_ok = 1; + +static void expect_slice_eq(grpc_slice expected, grpc_slice slice, + const char *debug, int line) { + if (!grpc_slice_eq(slice, expected)) { + char *hs = grpc_dump_slice(slice, GPR_DUMP_HEX | GPR_DUMP_ASCII); + char *he = grpc_dump_slice(expected, GPR_DUMP_HEX | GPR_DUMP_ASCII); + gpr_log(GPR_ERROR, "FAILED:%d: %s\ngot: %s\nwant: %s", line, debug, hs, + he); + gpr_free(hs); + gpr_free(he); + all_ok = 0; + } + grpc_slice_unref(expected); + grpc_slice_unref(slice); +} + +static grpc_slice B64(const char *s) { + grpc_slice ss = grpc_slice_from_copied_string(s); + grpc_slice out = grpc_chttp2_base64_encode(ss); + grpc_slice_unref(ss); + return out; +} + +static grpc_slice HUFF(const char *s) { + grpc_slice ss = grpc_slice_from_copied_string(s); + grpc_slice out = grpc_chttp2_huffman_compress(ss); + grpc_slice_unref(ss); + return out; +} + +#define EXPECT_SLICE_EQ(expected, slice) \ + expect_slice_eq( \ + grpc_slice_from_copied_buffer(expected, sizeof(expected) - 1), slice, \ + #slice, __LINE__); + +static void expect_combined_equiv(const char *s, size_t len, int line) { + grpc_slice input = grpc_slice_from_copied_buffer(s, len); + grpc_slice base64 = grpc_chttp2_base64_encode(input); + grpc_slice expect = grpc_chttp2_huffman_compress(base64); + grpc_slice got = grpc_chttp2_base64_encode_and_huffman_compress(input); + if (!grpc_slice_eq(expect, got)) { + char *t = grpc_dump_slice(input, GPR_DUMP_HEX | GPR_DUMP_ASCII); + char *e = grpc_dump_slice(expect, GPR_DUMP_HEX | GPR_DUMP_ASCII); + char *g = grpc_dump_slice(got, GPR_DUMP_HEX | GPR_DUMP_ASCII); + gpr_log(GPR_ERROR, "FAILED:%d:\ntest: %s\ngot: %s\nwant: %s", line, t, g, + e); + gpr_free(t); + gpr_free(e); + gpr_free(g); + all_ok = 0; + } + grpc_slice_unref(input); + grpc_slice_unref(base64); + grpc_slice_unref(expect); + grpc_slice_unref(got); +} + +#define EXPECT_COMBINED_EQUIV(x) \ + expect_combined_equiv(x, sizeof(x) - 1, __LINE__) + +static void expect_binary_header(const char *hdr, int binary) { + if (grpc_is_binary_header(grpc_slice_from_static_string(hdr)) != binary) { + gpr_log(GPR_ERROR, "FAILED: expected header '%s' to be %s", hdr, + binary ? "binary" : "not binary"); + all_ok = 0; + } +} + +int main(int argc, char **argv) { + /* Base64 test vectors from RFC 4648, with padding removed */ + /* BASE64("") = "" */ + EXPECT_SLICE_EQ("", B64("")); + /* BASE64("f") = "Zg" */ + EXPECT_SLICE_EQ("Zg", B64("f")); + /* BASE64("fo") = "Zm8" */ + EXPECT_SLICE_EQ("Zm8", B64("fo")); + /* BASE64("foo") = "Zm9v" */ + EXPECT_SLICE_EQ("Zm9v", B64("foo")); + /* BASE64("foob") = "Zm9vYg" */ + EXPECT_SLICE_EQ("Zm9vYg", B64("foob")); + /* BASE64("fooba") = "Zm9vYmE" */ + EXPECT_SLICE_EQ("Zm9vYmE", B64("fooba")); + /* BASE64("foobar") = "Zm9vYmFy" */ + EXPECT_SLICE_EQ("Zm9vYmFy", B64("foobar")); + + EXPECT_SLICE_EQ("wMHCw8TF", B64("\xc0\xc1\xc2\xc3\xc4\xc5")); + + /* Huffman encoding tests */ + EXPECT_SLICE_EQ("\xf1\xe3\xc2\xe5\xf2\x3a\x6b\xa0\xab\x90\xf4\xff", + HUFF("www.example.com")); + EXPECT_SLICE_EQ("\xa8\xeb\x10\x64\x9c\xbf", HUFF("no-cache")); + EXPECT_SLICE_EQ("\x25\xa8\x49\xe9\x5b\xa9\x7d\x7f", HUFF("custom-key")); + EXPECT_SLICE_EQ("\x25\xa8\x49\xe9\x5b\xb8\xe8\xb4\xbf", HUFF("custom-value")); + EXPECT_SLICE_EQ("\xae\xc3\x77\x1a\x4b", HUFF("private")); + EXPECT_SLICE_EQ( + "\xd0\x7a\xbe\x94\x10\x54\xd4\x44\xa8\x20\x05\x95\x04\x0b\x81\x66\xe0\x82" + "\xa6\x2d\x1b\xff", + HUFF("Mon, 21 Oct 2013 20:13:21 GMT")); + EXPECT_SLICE_EQ( + "\x9d\x29\xad\x17\x18\x63\xc7\x8f\x0b\x97\xc8\xe9\xae\x82\xae\x43\xd3", + HUFF("https://www.example.com")); + + /* Various test vectors for combined encoding */ + EXPECT_COMBINED_EQUIV(""); + EXPECT_COMBINED_EQUIV("f"); + EXPECT_COMBINED_EQUIV("fo"); + EXPECT_COMBINED_EQUIV("foo"); + EXPECT_COMBINED_EQUIV("foob"); + EXPECT_COMBINED_EQUIV("fooba"); + EXPECT_COMBINED_EQUIV("foobar"); + EXPECT_COMBINED_EQUIV("www.example.com"); + EXPECT_COMBINED_EQUIV("no-cache"); + EXPECT_COMBINED_EQUIV("custom-key"); + EXPECT_COMBINED_EQUIV("custom-value"); + EXPECT_COMBINED_EQUIV("private"); + EXPECT_COMBINED_EQUIV("Mon, 21 Oct 2013 20:13:21 GMT"); + EXPECT_COMBINED_EQUIV("https://www.example.com"); + EXPECT_COMBINED_EQUIV( + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" + "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" + "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" + "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f" + "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f" + "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f" + "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f" + "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f" + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" + "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f" + "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf" + "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf" + "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf" + "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf" + "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef" + "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"); + + expect_binary_header("foo-bin", 1); + expect_binary_header("foo-bar", 0); + expect_binary_header("-bin", 0); + + return all_ok ? 0 : 1; +} diff --git a/test/core/transport/chttp2/hpack_encoder_test.c b/test/core/transport/chttp2/hpack_encoder_test.c deleted file mode 100644 index a2af83b6cb..0000000000 --- a/test/core/transport/chttp2/hpack_encoder_test.c +++ /dev/null @@ -1,284 +0,0 @@ -/* - * - * Copyright 2015 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h" - -#include -#include - -#include -#include -#include - -#include "src/core/ext/transport/chttp2/transport/hpack_parser.h" -#include "src/core/lib/slice/slice_internal.h" -#include "src/core/lib/slice/slice_string_helpers.h" -#include "src/core/lib/support/string.h" -#include "src/core/lib/transport/metadata.h" -#include "test/core/util/parse_hexstring.h" -#include "test/core/util/slice_splitter.h" -#include "test/core/util/test_config.h" - -#define TEST(x) run_test(x, #x) - -grpc_chttp2_hpack_compressor g_compressor; -int g_failure = 0; - -void **to_delete = NULL; -size_t num_to_delete = 0; -size_t cap_to_delete = 0; - -typedef struct { - bool eof; - bool use_true_binary_metadata; - bool only_intern_key; -} verify_params; - -/* verify that the output generated by encoding the stream matches the - hexstring passed in */ -static void verify(grpc_exec_ctx *exec_ctx, const verify_params params, - const char *expected, size_t nheaders, ...) { - grpc_slice_buffer output; - grpc_slice merged; - grpc_slice expect = parse_hexstring(expected); - size_t i; - va_list l; - grpc_linked_mdelem *e = gpr_malloc(sizeof(*e) * nheaders); - grpc_metadata_batch b; - - grpc_metadata_batch_init(&b); - - va_start(l, nheaders); - for (i = 0; i < nheaders; i++) { - char *key = va_arg(l, char *); - char *value = va_arg(l, char *); - if (i) { - e[i - 1].next = &e[i]; - e[i].prev = &e[i - 1]; - } - grpc_slice value_slice = grpc_slice_from_static_string(value); - if (!params.only_intern_key) { - value_slice = grpc_slice_intern(value_slice); - } - e[i].md = grpc_mdelem_from_slices( - exec_ctx, grpc_slice_intern(grpc_slice_from_static_string(key)), - value_slice); - } - e[0].prev = NULL; - e[nheaders - 1].next = NULL; - va_end(l); - - b.list.head = &e[0]; - b.list.tail = &e[nheaders - 1]; - b.list.count = nheaders; - - if (cap_to_delete == num_to_delete) { - cap_to_delete = GPR_MAX(2 * cap_to_delete, 1000); - to_delete = gpr_realloc(to_delete, sizeof(*to_delete) * cap_to_delete); - } - to_delete[num_to_delete++] = e; - - grpc_slice_buffer_init(&output); - - grpc_transport_one_way_stats stats; - memset(&stats, 0, sizeof(stats)); - grpc_encode_header_options hopt = { - .stream_id = 0xdeadbeef, - .is_eof = params.eof, - .use_true_binary_metadata = params.use_true_binary_metadata, - .max_frame_size = 16384, - .stats = &stats, - }; - grpc_chttp2_encode_header(exec_ctx, &g_compressor, NULL, 0, &b, &hopt, - &output); - merged = grpc_slice_merge(output.slices, output.count); - grpc_slice_buffer_destroy_internal(exec_ctx, &output); - grpc_metadata_batch_destroy(exec_ctx, &b); - - if (!grpc_slice_eq(merged, expect)) { - char *expect_str = grpc_dump_slice(expect, GPR_DUMP_HEX | GPR_DUMP_ASCII); - char *got_str = grpc_dump_slice(merged, GPR_DUMP_HEX | GPR_DUMP_ASCII); - gpr_log(GPR_ERROR, "mismatched output for %s", expected); - gpr_log(GPR_ERROR, "EXPECT: %s", expect_str); - gpr_log(GPR_ERROR, "GOT: %s", got_str); - gpr_free(expect_str); - gpr_free(got_str); - g_failure = 1; - } - - grpc_slice_unref_internal(exec_ctx, merged); - grpc_slice_unref_internal(exec_ctx, expect); -} - -static void test_basic_headers(grpc_exec_ctx *exec_ctx) { - int i; - - verify_params params = { - .eof = false, .use_true_binary_metadata = false, .only_intern_key = false, - }; - verify(exec_ctx, params, "000005 0104 deadbeef 40 0161 0161", 1, "a", "a"); - verify(exec_ctx, params, "000001 0104 deadbeef be", 1, "a", "a"); - verify(exec_ctx, params, "000001 0104 deadbeef be", 1, "a", "a"); - verify(exec_ctx, params, "000006 0104 deadbeef be 40 0162 0163", 2, "a", "a", - "b", "c"); - verify(exec_ctx, params, "000002 0104 deadbeef bf be", 2, "a", "a", "b", "c"); - verify(exec_ctx, params, "000004 0104 deadbeef 7f 00 0164", 1, "a", "d"); - - /* flush out what's there to make a few values look very popular */ - for (i = 0; i < 350; i++) { - verify(exec_ctx, params, "000003 0104 deadbeef c0 bf be", 3, "a", "a", "b", - "c", "a", "d"); - } - - verify(exec_ctx, params, "000006 0104 deadbeef c0 00 016b 0176", 2, "a", "a", - "k", "v"); - /* this could be 000004 0104 deadbeef 0f 30 0176 also */ - verify(exec_ctx, params, "000004 0104 deadbeef 0f 2f 0176", 1, "a", "v"); -} - -static void encode_int_to_str(int i, char *p) { - p[0] = (char)('a' + i % 26); - i /= 26; - GPR_ASSERT(i < 26); - p[1] = (char)('a' + i); - p[2] = 0; -} - -static void test_decode_table_overflow(grpc_exec_ctx *exec_ctx) { - int i; - char key[3], value[3]; - char *expect; - - verify_params params = { - .eof = false, .use_true_binary_metadata = false, .only_intern_key = false, - }; - - for (i = 0; i < 114; i++) { - encode_int_to_str(i, key); - encode_int_to_str(i + 1, value); - - if (i + 61 >= 127) { - gpr_asprintf(&expect, - "000009 0104 deadbeef ff%02x 40 02%02x%02x 02%02x%02x", - i + 61 - 127, key[0], key[1], value[0], value[1]); - } else if (i > 0) { - gpr_asprintf(&expect, - "000008 0104 deadbeef %02x 40 02%02x%02x 02%02x%02x", - 0x80 + 61 + i, key[0], key[1], value[0], value[1]); - } else { - gpr_asprintf(&expect, "000007 0104 deadbeef 40 02%02x%02x 02%02x%02x", - key[0], key[1], value[0], value[1]); - } - - if (i > 0) { - verify(exec_ctx, params, expect, 2, "aa", "ba", key, value); - } else { - verify(exec_ctx, params, expect, 1, key, value); - } - gpr_free(expect); - } - - /* if the above passes, then we must have just knocked this pair out of the - decoder stack, and so we'll be forced to re-encode it */ - verify(exec_ctx, params, "000007 0104 deadbeef 40 026161 026261", 1, "aa", - "ba"); -} - -static void verify_table_size_change_match_elem_size(grpc_exec_ctx *exec_ctx, - const char *key, - const char *value, - bool use_true_binary) { - grpc_slice_buffer output; - grpc_mdelem elem = grpc_mdelem_from_slices( - exec_ctx, grpc_slice_intern(grpc_slice_from_static_string(key)), - grpc_slice_intern(grpc_slice_from_static_string(value))); - size_t elem_size = grpc_mdelem_get_size_in_hpack_table(elem, use_true_binary); - size_t initial_table_size = g_compressor.table_size; - grpc_linked_mdelem *e = gpr_malloc(sizeof(*e)); - grpc_metadata_batch b; - grpc_metadata_batch_init(&b); - e[0].md = elem; - e[0].prev = NULL; - e[0].next = NULL; - b.list.head = &e[0]; - b.list.tail = &e[0]; - b.list.count = 1; - grpc_slice_buffer_init(&output); - - grpc_transport_one_way_stats stats; - memset(&stats, 0, sizeof(stats)); - grpc_encode_header_options hopt = { - .stream_id = 0xdeadbeef, - .is_eof = false, - .use_true_binary_metadata = use_true_binary, - .max_frame_size = 16384, - .stats = &stats}; - grpc_chttp2_encode_header(exec_ctx, &g_compressor, NULL, 0, &b, &hopt, - &output); - grpc_slice_buffer_destroy_internal(exec_ctx, &output); - grpc_metadata_batch_destroy(exec_ctx, &b); - - GPR_ASSERT(g_compressor.table_size == elem_size + initial_table_size); - gpr_free(e); -} - -static void test_encode_header_size(grpc_exec_ctx *exec_ctx) { - verify_table_size_change_match_elem_size(exec_ctx, "hello", "world", false); - verify_table_size_change_match_elem_size(exec_ctx, "hello-bin", "world", - false); - verify_table_size_change_match_elem_size(exec_ctx, "true-binary-bin", - "I_am_true_binary_value", true); -} - -static void test_interned_key_indexed(grpc_exec_ctx *exec_ctx) { - int i; - verify_params params = { - .eof = false, .use_true_binary_metadata = false, .only_intern_key = true, - }; - verify(exec_ctx, params, "000009 0104 deadbeef 40 0161 0162 0f2f 0163", 2, - "a", "b", "a", "c"); - for (i = 0; i < 10; i++) { - verify(exec_ctx, params, "000008 0104 deadbeef 0f2f 0162 0f2f 0163", 2, "a", - "b", "a", "c"); - } -} - -static void run_test(void (*test)(grpc_exec_ctx *exec_ctx), const char *name) { - gpr_log(GPR_INFO, "RUN TEST: %s", name); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_chttp2_hpack_compressor_init(&g_compressor); - test(&exec_ctx); - grpc_chttp2_hpack_compressor_destroy(&exec_ctx, &g_compressor); - grpc_exec_ctx_finish(&exec_ctx); -} - -int main(int argc, char **argv) { - size_t i; - grpc_test_only_set_slice_hash_seed(0); - grpc_test_init(argc, argv); - grpc_init(); - TEST(test_basic_headers); - TEST(test_decode_table_overflow); - TEST(test_encode_header_size); - TEST(test_interned_key_indexed); - grpc_shutdown(); - for (i = 0; i < num_to_delete; i++) { - gpr_free(to_delete[i]); - } - return g_failure; -} diff --git a/test/core/transport/chttp2/hpack_encoder_test.cc b/test/core/transport/chttp2/hpack_encoder_test.cc new file mode 100644 index 0000000000..b203df1892 --- /dev/null +++ b/test/core/transport/chttp2/hpack_encoder_test.cc @@ -0,0 +1,287 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h" + +#include +#include + +#include +#include +#include + +#include "src/core/ext/transport/chttp2/transport/hpack_parser.h" +#include "src/core/lib/slice/slice_internal.h" +#include "src/core/lib/slice/slice_string_helpers.h" +#include "src/core/lib/support/string.h" +#include "src/core/lib/transport/metadata.h" +#include "test/core/util/parse_hexstring.h" +#include "test/core/util/slice_splitter.h" +#include "test/core/util/test_config.h" + +#define TEST(x) run_test(x, #x) + +grpc_chttp2_hpack_compressor g_compressor; +int g_failure = 0; + +void **to_delete = NULL; +size_t num_to_delete = 0; +size_t cap_to_delete = 0; + +typedef struct { + bool eof; + bool use_true_binary_metadata; + bool only_intern_key; +} verify_params; + +/* verify that the output generated by encoding the stream matches the + hexstring passed in */ +static void verify(grpc_exec_ctx *exec_ctx, const verify_params params, + const char *expected, size_t nheaders, ...) { + grpc_slice_buffer output; + grpc_slice merged; + grpc_slice expect = parse_hexstring(expected); + size_t i; + va_list l; + grpc_linked_mdelem *e = + static_cast(gpr_malloc(sizeof(*e) * nheaders)); + grpc_metadata_batch b; + + grpc_metadata_batch_init(&b); + + va_start(l, nheaders); + for (i = 0; i < nheaders; i++) { + char *key = va_arg(l, char *); + char *value = va_arg(l, char *); + if (i) { + e[i - 1].next = &e[i]; + e[i].prev = &e[i - 1]; + } + grpc_slice value_slice = grpc_slice_from_static_string(value); + if (!params.only_intern_key) { + value_slice = grpc_slice_intern(value_slice); + } + e[i].md = grpc_mdelem_from_slices( + exec_ctx, grpc_slice_intern(grpc_slice_from_static_string(key)), + value_slice); + } + e[0].prev = NULL; + e[nheaders - 1].next = NULL; + va_end(l); + + b.list.head = &e[0]; + b.list.tail = &e[nheaders - 1]; + b.list.count = nheaders; + + if (cap_to_delete == num_to_delete) { + cap_to_delete = GPR_MAX(2 * cap_to_delete, 1000); + to_delete = static_cast( + gpr_realloc(to_delete, sizeof(*to_delete) * cap_to_delete)); + } + to_delete[num_to_delete++] = e; + + grpc_slice_buffer_init(&output); + + grpc_transport_one_way_stats stats; + memset(&stats, 0, sizeof(stats)); + grpc_encode_header_options hopt = { + .stream_id = 0xdeadbeef, + .is_eof = params.eof, + .use_true_binary_metadata = params.use_true_binary_metadata, + .max_frame_size = 16384, + .stats = &stats, + }; + grpc_chttp2_encode_header(exec_ctx, &g_compressor, NULL, 0, &b, &hopt, + &output); + merged = grpc_slice_merge(output.slices, output.count); + grpc_slice_buffer_destroy_internal(exec_ctx, &output); + grpc_metadata_batch_destroy(exec_ctx, &b); + + if (!grpc_slice_eq(merged, expect)) { + char *expect_str = grpc_dump_slice(expect, GPR_DUMP_HEX | GPR_DUMP_ASCII); + char *got_str = grpc_dump_slice(merged, GPR_DUMP_HEX | GPR_DUMP_ASCII); + gpr_log(GPR_ERROR, "mismatched output for %s", expected); + gpr_log(GPR_ERROR, "EXPECT: %s", expect_str); + gpr_log(GPR_ERROR, "GOT: %s", got_str); + gpr_free(expect_str); + gpr_free(got_str); + g_failure = 1; + } + + grpc_slice_unref_internal(exec_ctx, merged); + grpc_slice_unref_internal(exec_ctx, expect); +} + +static void test_basic_headers(grpc_exec_ctx *exec_ctx) { + int i; + + verify_params params = { + .eof = false, .use_true_binary_metadata = false, .only_intern_key = false, + }; + verify(exec_ctx, params, "000005 0104 deadbeef 40 0161 0161", 1, "a", "a"); + verify(exec_ctx, params, "000001 0104 deadbeef be", 1, "a", "a"); + verify(exec_ctx, params, "000001 0104 deadbeef be", 1, "a", "a"); + verify(exec_ctx, params, "000006 0104 deadbeef be 40 0162 0163", 2, "a", "a", + "b", "c"); + verify(exec_ctx, params, "000002 0104 deadbeef bf be", 2, "a", "a", "b", "c"); + verify(exec_ctx, params, "000004 0104 deadbeef 7f 00 0164", 1, "a", "d"); + + /* flush out what's there to make a few values look very popular */ + for (i = 0; i < 350; i++) { + verify(exec_ctx, params, "000003 0104 deadbeef c0 bf be", 3, "a", "a", "b", + "c", "a", "d"); + } + + verify(exec_ctx, params, "000006 0104 deadbeef c0 00 016b 0176", 2, "a", "a", + "k", "v"); + /* this could be 000004 0104 deadbeef 0f 30 0176 also */ + verify(exec_ctx, params, "000004 0104 deadbeef 0f 2f 0176", 1, "a", "v"); +} + +static void encode_int_to_str(int i, char *p) { + p[0] = (char)('a' + i % 26); + i /= 26; + GPR_ASSERT(i < 26); + p[1] = (char)('a' + i); + p[2] = 0; +} + +static void test_decode_table_overflow(grpc_exec_ctx *exec_ctx) { + int i; + char key[3], value[3]; + char *expect; + + verify_params params = { + .eof = false, .use_true_binary_metadata = false, .only_intern_key = false, + }; + + for (i = 0; i < 114; i++) { + encode_int_to_str(i, key); + encode_int_to_str(i + 1, value); + + if (i + 61 >= 127) { + gpr_asprintf(&expect, + "000009 0104 deadbeef ff%02x 40 02%02x%02x 02%02x%02x", + i + 61 - 127, key[0], key[1], value[0], value[1]); + } else if (i > 0) { + gpr_asprintf(&expect, + "000008 0104 deadbeef %02x 40 02%02x%02x 02%02x%02x", + 0x80 + 61 + i, key[0], key[1], value[0], value[1]); + } else { + gpr_asprintf(&expect, "000007 0104 deadbeef 40 02%02x%02x 02%02x%02x", + key[0], key[1], value[0], value[1]); + } + + if (i > 0) { + verify(exec_ctx, params, expect, 2, "aa", "ba", key, value); + } else { + verify(exec_ctx, params, expect, 1, key, value); + } + gpr_free(expect); + } + + /* if the above passes, then we must have just knocked this pair out of the + decoder stack, and so we'll be forced to re-encode it */ + verify(exec_ctx, params, "000007 0104 deadbeef 40 026161 026261", 1, "aa", + "ba"); +} + +static void verify_table_size_change_match_elem_size(grpc_exec_ctx *exec_ctx, + const char *key, + const char *value, + bool use_true_binary) { + grpc_slice_buffer output; + grpc_mdelem elem = grpc_mdelem_from_slices( + exec_ctx, grpc_slice_intern(grpc_slice_from_static_string(key)), + grpc_slice_intern(grpc_slice_from_static_string(value))); + size_t elem_size = grpc_mdelem_get_size_in_hpack_table(elem, use_true_binary); + size_t initial_table_size = g_compressor.table_size; + grpc_linked_mdelem *e = + static_cast(gpr_malloc(sizeof(*e))); + grpc_metadata_batch b; + grpc_metadata_batch_init(&b); + e[0].md = elem; + e[0].prev = NULL; + e[0].next = NULL; + b.list.head = &e[0]; + b.list.tail = &e[0]; + b.list.count = 1; + grpc_slice_buffer_init(&output); + + grpc_transport_one_way_stats stats; + memset(&stats, 0, sizeof(stats)); + grpc_encode_header_options hopt = { + .stream_id = 0xdeadbeef, + .is_eof = false, + .use_true_binary_metadata = use_true_binary, + .max_frame_size = 16384, + .stats = &stats}; + grpc_chttp2_encode_header(exec_ctx, &g_compressor, NULL, 0, &b, &hopt, + &output); + grpc_slice_buffer_destroy_internal(exec_ctx, &output); + grpc_metadata_batch_destroy(exec_ctx, &b); + + GPR_ASSERT(g_compressor.table_size == elem_size + initial_table_size); + gpr_free(e); +} + +static void test_encode_header_size(grpc_exec_ctx *exec_ctx) { + verify_table_size_change_match_elem_size(exec_ctx, "hello", "world", false); + verify_table_size_change_match_elem_size(exec_ctx, "hello-bin", "world", + false); + verify_table_size_change_match_elem_size(exec_ctx, "true-binary-bin", + "I_am_true_binary_value", true); +} + +static void test_interned_key_indexed(grpc_exec_ctx *exec_ctx) { + int i; + verify_params params = { + .eof = false, .use_true_binary_metadata = false, .only_intern_key = true, + }; + verify(exec_ctx, params, "000009 0104 deadbeef 40 0161 0162 0f2f 0163", 2, + "a", "b", "a", "c"); + for (i = 0; i < 10; i++) { + verify(exec_ctx, params, "000008 0104 deadbeef 0f2f 0162 0f2f 0163", 2, "a", + "b", "a", "c"); + } +} + +static void run_test(void (*test)(grpc_exec_ctx *exec_ctx), const char *name) { + gpr_log(GPR_INFO, "RUN TEST: %s", name); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_chttp2_hpack_compressor_init(&g_compressor); + test(&exec_ctx); + grpc_chttp2_hpack_compressor_destroy(&exec_ctx, &g_compressor); + grpc_exec_ctx_finish(&exec_ctx); +} + +int main(int argc, char **argv) { + size_t i; + grpc_test_only_set_slice_hash_seed(0); + grpc_test_init(argc, argv); + grpc_init(); + TEST(test_basic_headers); + TEST(test_decode_table_overflow); + TEST(test_encode_header_size); + TEST(test_interned_key_indexed); + grpc_shutdown(); + for (i = 0; i < num_to_delete; i++) { + gpr_free(to_delete[i]); + } + return g_failure; +} diff --git a/test/core/transport/chttp2/hpack_parser_fuzzer_test.c b/test/core/transport/chttp2/hpack_parser_fuzzer_test.c deleted file mode 100644 index 03834084cb..0000000000 --- a/test/core/transport/chttp2/hpack_parser_fuzzer_test.c +++ /dev/null @@ -1,51 +0,0 @@ -/* - * - * Copyright 2015 gRPC authors. - * - * Licensed 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. - * - */ - -#include -#include - -#include -#include -#include - -#include "src/core/ext/transport/chttp2/transport/hpack_parser.h" -#include "src/core/lib/slice/slice_internal.h" - -bool squelch = true; -bool leak_check = true; - -static void onhdr(grpc_exec_ctx *exec_ctx, void *ud, grpc_mdelem md) { - GRPC_MDELEM_UNREF(exec_ctx, md); -} -static void dont_log(gpr_log_func_args *args) {} - -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - grpc_test_only_set_slice_hash_seed(0); - if (squelch) gpr_set_log_function(dont_log); - grpc_init(); - grpc_chttp2_hpack_parser parser; - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_chttp2_hpack_parser_init(&exec_ctx, &parser); - parser.on_header = onhdr; - GRPC_ERROR_UNREF(grpc_chttp2_hpack_parser_parse( - &exec_ctx, &parser, grpc_slice_from_static_buffer(data, size))); - grpc_chttp2_hpack_parser_destroy(&exec_ctx, &parser); - grpc_exec_ctx_finish(&exec_ctx); - grpc_shutdown(); - return 0; -} diff --git a/test/core/transport/chttp2/hpack_parser_fuzzer_test.cc b/test/core/transport/chttp2/hpack_parser_fuzzer_test.cc new file mode 100644 index 0000000000..03834084cb --- /dev/null +++ b/test/core/transport/chttp2/hpack_parser_fuzzer_test.cc @@ -0,0 +1,51 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ + +#include +#include + +#include +#include +#include + +#include "src/core/ext/transport/chttp2/transport/hpack_parser.h" +#include "src/core/lib/slice/slice_internal.h" + +bool squelch = true; +bool leak_check = true; + +static void onhdr(grpc_exec_ctx *exec_ctx, void *ud, grpc_mdelem md) { + GRPC_MDELEM_UNREF(exec_ctx, md); +} +static void dont_log(gpr_log_func_args *args) {} + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + grpc_test_only_set_slice_hash_seed(0); + if (squelch) gpr_set_log_function(dont_log); + grpc_init(); + grpc_chttp2_hpack_parser parser; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_chttp2_hpack_parser_init(&exec_ctx, &parser); + parser.on_header = onhdr; + GRPC_ERROR_UNREF(grpc_chttp2_hpack_parser_parse( + &exec_ctx, &parser, grpc_slice_from_static_buffer(data, size))); + grpc_chttp2_hpack_parser_destroy(&exec_ctx, &parser); + grpc_exec_ctx_finish(&exec_ctx); + grpc_shutdown(); + return 0; +} diff --git a/test/core/transport/chttp2/hpack_parser_test.c b/test/core/transport/chttp2/hpack_parser_test.c deleted file mode 100644 index 0946c05261..0000000000 --- a/test/core/transport/chttp2/hpack_parser_test.c +++ /dev/null @@ -1,216 +0,0 @@ -/* - * - * Copyright 2015 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/ext/transport/chttp2/transport/hpack_parser.h" - -#include - -#include -#include -#include -#include -#include "test/core/util/parse_hexstring.h" -#include "test/core/util/slice_splitter.h" -#include "test/core/util/test_config.h" - -typedef struct { va_list args; } test_checker; - -static void onhdr(grpc_exec_ctx *exec_ctx, void *ud, grpc_mdelem md) { - const char *ekey, *evalue; - test_checker *chk = ud; - ekey = va_arg(chk->args, char *); - GPR_ASSERT(ekey); - evalue = va_arg(chk->args, char *); - GPR_ASSERT(evalue); - GPR_ASSERT(grpc_slice_str_cmp(GRPC_MDKEY(md), ekey) == 0); - GPR_ASSERT(grpc_slice_str_cmp(GRPC_MDVALUE(md), evalue) == 0); - GRPC_MDELEM_UNREF(exec_ctx, md); -} - -static void test_vector(grpc_chttp2_hpack_parser *parser, - grpc_slice_split_mode mode, const char *hexstring, - ... /* char *key, char *value */) { - grpc_slice input = parse_hexstring(hexstring); - grpc_slice *slices; - size_t nslices; - size_t i; - test_checker chk; - - va_start(chk.args, hexstring); - - parser->on_header = onhdr; - parser->on_header_user_data = &chk; - - grpc_split_slices(mode, &input, 1, &slices, &nslices); - grpc_slice_unref(input); - - for (i = 0; i < nslices; i++) { - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - GPR_ASSERT(grpc_chttp2_hpack_parser_parse(&exec_ctx, parser, slices[i]) == - GRPC_ERROR_NONE); - grpc_exec_ctx_finish(&exec_ctx); - } - - for (i = 0; i < nslices; i++) { - grpc_slice_unref(slices[i]); - } - gpr_free(slices); - - GPR_ASSERT(NULL == va_arg(chk.args, char *)); - - va_end(chk.args); -} - -static void test_vectors(grpc_slice_split_mode mode) { - grpc_chttp2_hpack_parser parser; - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - - grpc_chttp2_hpack_parser_init(&exec_ctx, &parser); - /* D.2.1 */ - test_vector(&parser, mode, - "400a 6375 7374 6f6d 2d6b 6579 0d63 7573" - "746f 6d2d 6865 6164 6572", - "custom-key", "custom-header", NULL); - /* D.2.2 */ - test_vector(&parser, mode, "040c 2f73 616d 706c 652f 7061 7468", ":path", - "/sample/path", NULL); - /* D.2.3 */ - test_vector(&parser, mode, - "1008 7061 7373 776f 7264 0673 6563 7265" - "74", - "password", "secret", NULL); - /* D.2.4 */ - test_vector(&parser, mode, "82", ":method", "GET", NULL); - grpc_chttp2_hpack_parser_destroy(&exec_ctx, &parser); - - grpc_chttp2_hpack_parser_init(&exec_ctx, &parser); - /* D.3.1 */ - test_vector(&parser, mode, - "8286 8441 0f77 7777 2e65 7861 6d70 6c65" - "2e63 6f6d", - ":method", "GET", ":scheme", "http", ":path", "/", ":authority", - "www.example.com", NULL); - /* D.3.2 */ - test_vector(&parser, mode, "8286 84be 5808 6e6f 2d63 6163 6865", ":method", - "GET", ":scheme", "http", ":path", "/", ":authority", - "www.example.com", "cache-control", "no-cache", NULL); - /* D.3.3 */ - test_vector(&parser, mode, - "8287 85bf 400a 6375 7374 6f6d 2d6b 6579" - "0c63 7573 746f 6d2d 7661 6c75 65", - ":method", "GET", ":scheme", "https", ":path", "/index.html", - ":authority", "www.example.com", "custom-key", "custom-value", - NULL); - grpc_chttp2_hpack_parser_destroy(&exec_ctx, &parser); - - grpc_chttp2_hpack_parser_init(&exec_ctx, &parser); - /* D.4.1 */ - test_vector(&parser, mode, - "8286 8441 8cf1 e3c2 e5f2 3a6b a0ab 90f4" - "ff", - ":method", "GET", ":scheme", "http", ":path", "/", ":authority", - "www.example.com", NULL); - /* D.4.2 */ - test_vector(&parser, mode, "8286 84be 5886 a8eb 1064 9cbf", ":method", "GET", - ":scheme", "http", ":path", "/", ":authority", "www.example.com", - "cache-control", "no-cache", NULL); - /* D.4.3 */ - test_vector(&parser, mode, - "8287 85bf 4088 25a8 49e9 5ba9 7d7f 8925" - "a849 e95b b8e8 b4bf", - ":method", "GET", ":scheme", "https", ":path", "/index.html", - ":authority", "www.example.com", "custom-key", "custom-value", - NULL); - grpc_chttp2_hpack_parser_destroy(&exec_ctx, &parser); - - grpc_chttp2_hpack_parser_init(&exec_ctx, &parser); - grpc_chttp2_hptbl_set_max_bytes(&exec_ctx, &parser.table, 256); - grpc_chttp2_hptbl_set_current_table_size(&exec_ctx, &parser.table, 256); - /* D.5.1 */ - test_vector(&parser, mode, - "4803 3330 3258 0770 7269 7661 7465 611d" - "4d6f 6e2c 2032 3120 4f63 7420 3230 3133" - "2032 303a 3133 3a32 3120 474d 546e 1768" - "7474 7073 3a2f 2f77 7777 2e65 7861 6d70" - "6c65 2e63 6f6d", - ":status", "302", "cache-control", "private", "date", - "Mon, 21 Oct 2013 20:13:21 GMT", "location", - "https://www.example.com", NULL); - /* D.5.2 */ - test_vector(&parser, mode, "4803 3330 37c1 c0bf", ":status", "307", - "cache-control", "private", "date", - "Mon, 21 Oct 2013 20:13:21 GMT", "location", - "https://www.example.com", NULL); - /* D.5.3 */ - test_vector(&parser, mode, - "88c1 611d 4d6f 6e2c 2032 3120 4f63 7420" - "3230 3133 2032 303a 3133 3a32 3220 474d" - "54c0 5a04 677a 6970 7738 666f 6f3d 4153" - "444a 4b48 514b 425a 584f 5157 454f 5049" - "5541 5851 5745 4f49 553b 206d 6178 2d61" - "6765 3d33 3630 303b 2076 6572 7369 6f6e" - "3d31", - ":status", "200", "cache-control", "private", "date", - "Mon, 21 Oct 2013 20:13:22 GMT", "location", - "https://www.example.com", "content-encoding", "gzip", - "set-cookie", - "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1", NULL); - grpc_chttp2_hpack_parser_destroy(&exec_ctx, &parser); - - grpc_chttp2_hpack_parser_init(&exec_ctx, &parser); - grpc_chttp2_hptbl_set_max_bytes(&exec_ctx, &parser.table, 256); - grpc_chttp2_hptbl_set_current_table_size(&exec_ctx, &parser.table, 256); - /* D.6.1 */ - test_vector(&parser, mode, - "4882 6402 5885 aec3 771a 4b61 96d0 7abe" - "9410 54d4 44a8 2005 9504 0b81 66e0 82a6" - "2d1b ff6e 919d 29ad 1718 63c7 8f0b 97c8" - "e9ae 82ae 43d3", - ":status", "302", "cache-control", "private", "date", - "Mon, 21 Oct 2013 20:13:21 GMT", "location", - "https://www.example.com", NULL); - /* D.6.2 */ - test_vector(&parser, mode, "4883 640e ffc1 c0bf", ":status", "307", - "cache-control", "private", "date", - "Mon, 21 Oct 2013 20:13:21 GMT", "location", - "https://www.example.com", NULL); - /* D.6.3 */ - test_vector(&parser, mode, - "88c1 6196 d07a be94 1054 d444 a820 0595" - "040b 8166 e084 a62d 1bff c05a 839b d9ab" - "77ad 94e7 821d d7f2 e6c7 b335 dfdf cd5b" - "3960 d5af 2708 7f36 72c1 ab27 0fb5 291f" - "9587 3160 65c0 03ed 4ee5 b106 3d50 07", - ":status", "200", "cache-control", "private", "date", - "Mon, 21 Oct 2013 20:13:22 GMT", "location", - "https://www.example.com", "content-encoding", "gzip", - "set-cookie", - "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1", NULL); - grpc_chttp2_hpack_parser_destroy(&exec_ctx, &parser); - - grpc_exec_ctx_finish(&exec_ctx); -} - -int main(int argc, char **argv) { - grpc_test_init(argc, argv); - grpc_init(); - test_vectors(GRPC_SLICE_SPLIT_MERGE_ALL); - test_vectors(GRPC_SLICE_SPLIT_ONE_BYTE); - grpc_shutdown(); - return 0; -} diff --git a/test/core/transport/chttp2/hpack_parser_test.cc b/test/core/transport/chttp2/hpack_parser_test.cc new file mode 100644 index 0000000000..27b4a1c2c0 --- /dev/null +++ b/test/core/transport/chttp2/hpack_parser_test.cc @@ -0,0 +1,216 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/ext/transport/chttp2/transport/hpack_parser.h" + +#include + +#include +#include +#include +#include +#include "test/core/util/parse_hexstring.h" +#include "test/core/util/slice_splitter.h" +#include "test/core/util/test_config.h" + +typedef struct { va_list args; } test_checker; + +static void onhdr(grpc_exec_ctx *exec_ctx, void *ud, grpc_mdelem md) { + const char *ekey, *evalue; + test_checker *chk = static_cast(ud); + ekey = va_arg(chk->args, char *); + GPR_ASSERT(ekey); + evalue = va_arg(chk->args, char *); + GPR_ASSERT(evalue); + GPR_ASSERT(grpc_slice_str_cmp(GRPC_MDKEY(md), ekey) == 0); + GPR_ASSERT(grpc_slice_str_cmp(GRPC_MDVALUE(md), evalue) == 0); + GRPC_MDELEM_UNREF(exec_ctx, md); +} + +static void test_vector(grpc_chttp2_hpack_parser *parser, + grpc_slice_split_mode mode, const char *hexstring, + ... /* char *key, char *value */) { + grpc_slice input = parse_hexstring(hexstring); + grpc_slice *slices; + size_t nslices; + size_t i; + test_checker chk; + + va_start(chk.args, hexstring); + + parser->on_header = onhdr; + parser->on_header_user_data = &chk; + + grpc_split_slices(mode, &input, 1, &slices, &nslices); + grpc_slice_unref(input); + + for (i = 0; i < nslices; i++) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + GPR_ASSERT(grpc_chttp2_hpack_parser_parse(&exec_ctx, parser, slices[i]) == + GRPC_ERROR_NONE); + grpc_exec_ctx_finish(&exec_ctx); + } + + for (i = 0; i < nslices; i++) { + grpc_slice_unref(slices[i]); + } + gpr_free(slices); + + GPR_ASSERT(NULL == va_arg(chk.args, char *)); + + va_end(chk.args); +} + +static void test_vectors(grpc_slice_split_mode mode) { + grpc_chttp2_hpack_parser parser; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + + grpc_chttp2_hpack_parser_init(&exec_ctx, &parser); + /* D.2.1 */ + test_vector(&parser, mode, + "400a 6375 7374 6f6d 2d6b 6579 0d63 7573" + "746f 6d2d 6865 6164 6572", + "custom-key", "custom-header", NULL); + /* D.2.2 */ + test_vector(&parser, mode, "040c 2f73 616d 706c 652f 7061 7468", ":path", + "/sample/path", NULL); + /* D.2.3 */ + test_vector(&parser, mode, + "1008 7061 7373 776f 7264 0673 6563 7265" + "74", + "password", "secret", NULL); + /* D.2.4 */ + test_vector(&parser, mode, "82", ":method", "GET", NULL); + grpc_chttp2_hpack_parser_destroy(&exec_ctx, &parser); + + grpc_chttp2_hpack_parser_init(&exec_ctx, &parser); + /* D.3.1 */ + test_vector(&parser, mode, + "8286 8441 0f77 7777 2e65 7861 6d70 6c65" + "2e63 6f6d", + ":method", "GET", ":scheme", "http", ":path", "/", ":authority", + "www.example.com", NULL); + /* D.3.2 */ + test_vector(&parser, mode, "8286 84be 5808 6e6f 2d63 6163 6865", ":method", + "GET", ":scheme", "http", ":path", "/", ":authority", + "www.example.com", "cache-control", "no-cache", NULL); + /* D.3.3 */ + test_vector(&parser, mode, + "8287 85bf 400a 6375 7374 6f6d 2d6b 6579" + "0c63 7573 746f 6d2d 7661 6c75 65", + ":method", "GET", ":scheme", "https", ":path", "/index.html", + ":authority", "www.example.com", "custom-key", "custom-value", + NULL); + grpc_chttp2_hpack_parser_destroy(&exec_ctx, &parser); + + grpc_chttp2_hpack_parser_init(&exec_ctx, &parser); + /* D.4.1 */ + test_vector(&parser, mode, + "8286 8441 8cf1 e3c2 e5f2 3a6b a0ab 90f4" + "ff", + ":method", "GET", ":scheme", "http", ":path", "/", ":authority", + "www.example.com", NULL); + /* D.4.2 */ + test_vector(&parser, mode, "8286 84be 5886 a8eb 1064 9cbf", ":method", "GET", + ":scheme", "http", ":path", "/", ":authority", "www.example.com", + "cache-control", "no-cache", NULL); + /* D.4.3 */ + test_vector(&parser, mode, + "8287 85bf 4088 25a8 49e9 5ba9 7d7f 8925" + "a849 e95b b8e8 b4bf", + ":method", "GET", ":scheme", "https", ":path", "/index.html", + ":authority", "www.example.com", "custom-key", "custom-value", + NULL); + grpc_chttp2_hpack_parser_destroy(&exec_ctx, &parser); + + grpc_chttp2_hpack_parser_init(&exec_ctx, &parser); + grpc_chttp2_hptbl_set_max_bytes(&exec_ctx, &parser.table, 256); + grpc_chttp2_hptbl_set_current_table_size(&exec_ctx, &parser.table, 256); + /* D.5.1 */ + test_vector(&parser, mode, + "4803 3330 3258 0770 7269 7661 7465 611d" + "4d6f 6e2c 2032 3120 4f63 7420 3230 3133" + "2032 303a 3133 3a32 3120 474d 546e 1768" + "7474 7073 3a2f 2f77 7777 2e65 7861 6d70" + "6c65 2e63 6f6d", + ":status", "302", "cache-control", "private", "date", + "Mon, 21 Oct 2013 20:13:21 GMT", "location", + "https://www.example.com", NULL); + /* D.5.2 */ + test_vector(&parser, mode, "4803 3330 37c1 c0bf", ":status", "307", + "cache-control", "private", "date", + "Mon, 21 Oct 2013 20:13:21 GMT", "location", + "https://www.example.com", NULL); + /* D.5.3 */ + test_vector(&parser, mode, + "88c1 611d 4d6f 6e2c 2032 3120 4f63 7420" + "3230 3133 2032 303a 3133 3a32 3220 474d" + "54c0 5a04 677a 6970 7738 666f 6f3d 4153" + "444a 4b48 514b 425a 584f 5157 454f 5049" + "5541 5851 5745 4f49 553b 206d 6178 2d61" + "6765 3d33 3630 303b 2076 6572 7369 6f6e" + "3d31", + ":status", "200", "cache-control", "private", "date", + "Mon, 21 Oct 2013 20:13:22 GMT", "location", + "https://www.example.com", "content-encoding", "gzip", + "set-cookie", + "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1", NULL); + grpc_chttp2_hpack_parser_destroy(&exec_ctx, &parser); + + grpc_chttp2_hpack_parser_init(&exec_ctx, &parser); + grpc_chttp2_hptbl_set_max_bytes(&exec_ctx, &parser.table, 256); + grpc_chttp2_hptbl_set_current_table_size(&exec_ctx, &parser.table, 256); + /* D.6.1 */ + test_vector(&parser, mode, + "4882 6402 5885 aec3 771a 4b61 96d0 7abe" + "9410 54d4 44a8 2005 9504 0b81 66e0 82a6" + "2d1b ff6e 919d 29ad 1718 63c7 8f0b 97c8" + "e9ae 82ae 43d3", + ":status", "302", "cache-control", "private", "date", + "Mon, 21 Oct 2013 20:13:21 GMT", "location", + "https://www.example.com", NULL); + /* D.6.2 */ + test_vector(&parser, mode, "4883 640e ffc1 c0bf", ":status", "307", + "cache-control", "private", "date", + "Mon, 21 Oct 2013 20:13:21 GMT", "location", + "https://www.example.com", NULL); + /* D.6.3 */ + test_vector(&parser, mode, + "88c1 6196 d07a be94 1054 d444 a820 0595" + "040b 8166 e084 a62d 1bff c05a 839b d9ab" + "77ad 94e7 821d d7f2 e6c7 b335 dfdf cd5b" + "3960 d5af 2708 7f36 72c1 ab27 0fb5 291f" + "9587 3160 65c0 03ed 4ee5 b106 3d50 07", + ":status", "200", "cache-control", "private", "date", + "Mon, 21 Oct 2013 20:13:22 GMT", "location", + "https://www.example.com", "content-encoding", "gzip", + "set-cookie", + "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1", NULL); + grpc_chttp2_hpack_parser_destroy(&exec_ctx, &parser); + + grpc_exec_ctx_finish(&exec_ctx); +} + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + grpc_init(); + test_vectors(GRPC_SLICE_SPLIT_MERGE_ALL); + test_vectors(GRPC_SLICE_SPLIT_ONE_BYTE); + grpc_shutdown(); + return 0; +} diff --git a/test/core/transport/chttp2/hpack_table_test.c b/test/core/transport/chttp2/hpack_table_test.c deleted file mode 100644 index 430ece33c7..0000000000 --- a/test/core/transport/chttp2/hpack_table_test.c +++ /dev/null @@ -1,285 +0,0 @@ -/* - * - * Copyright 2015 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/ext/transport/chttp2/transport/hpack_table.h" - -#include -#include - -#include -#include -#include -#include - -#include "src/core/lib/support/string.h" -#include "test/core/util/test_config.h" - -#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x) - -static void assert_str(const grpc_chttp2_hptbl *tbl, grpc_slice mdstr, - const char *str) { - GPR_ASSERT(grpc_slice_str_cmp(mdstr, str) == 0); -} - -static void assert_index(const grpc_chttp2_hptbl *tbl, uint32_t idx, - const char *key, const char *value) { - grpc_mdelem md = grpc_chttp2_hptbl_lookup(tbl, idx); - assert_str(tbl, GRPC_MDKEY(md), key); - assert_str(tbl, GRPC_MDVALUE(md), value); -} - -static void test_static_lookup(void) { - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_chttp2_hptbl tbl; - - grpc_chttp2_hptbl_init(&exec_ctx, &tbl); - - LOG_TEST("test_static_lookup"); - assert_index(&tbl, 1, ":authority", ""); - assert_index(&tbl, 2, ":method", "GET"); - assert_index(&tbl, 3, ":method", "POST"); - assert_index(&tbl, 4, ":path", "/"); - assert_index(&tbl, 5, ":path", "/index.html"); - assert_index(&tbl, 6, ":scheme", "http"); - assert_index(&tbl, 7, ":scheme", "https"); - assert_index(&tbl, 8, ":status", "200"); - assert_index(&tbl, 9, ":status", "204"); - assert_index(&tbl, 10, ":status", "206"); - assert_index(&tbl, 11, ":status", "304"); - assert_index(&tbl, 12, ":status", "400"); - assert_index(&tbl, 13, ":status", "404"); - assert_index(&tbl, 14, ":status", "500"); - assert_index(&tbl, 15, "accept-charset", ""); - assert_index(&tbl, 16, "accept-encoding", "gzip, deflate"); - assert_index(&tbl, 17, "accept-language", ""); - assert_index(&tbl, 18, "accept-ranges", ""); - assert_index(&tbl, 19, "accept", ""); - assert_index(&tbl, 20, "access-control-allow-origin", ""); - assert_index(&tbl, 21, "age", ""); - assert_index(&tbl, 22, "allow", ""); - assert_index(&tbl, 23, "authorization", ""); - assert_index(&tbl, 24, "cache-control", ""); - assert_index(&tbl, 25, "content-disposition", ""); - assert_index(&tbl, 26, "content-encoding", ""); - assert_index(&tbl, 27, "content-language", ""); - assert_index(&tbl, 28, "content-length", ""); - assert_index(&tbl, 29, "content-location", ""); - assert_index(&tbl, 30, "content-range", ""); - assert_index(&tbl, 31, "content-type", ""); - assert_index(&tbl, 32, "cookie", ""); - assert_index(&tbl, 33, "date", ""); - assert_index(&tbl, 34, "etag", ""); - assert_index(&tbl, 35, "expect", ""); - assert_index(&tbl, 36, "expires", ""); - assert_index(&tbl, 37, "from", ""); - assert_index(&tbl, 38, "host", ""); - assert_index(&tbl, 39, "if-match", ""); - assert_index(&tbl, 40, "if-modified-since", ""); - assert_index(&tbl, 41, "if-none-match", ""); - assert_index(&tbl, 42, "if-range", ""); - assert_index(&tbl, 43, "if-unmodified-since", ""); - assert_index(&tbl, 44, "last-modified", ""); - assert_index(&tbl, 45, "link", ""); - assert_index(&tbl, 46, "location", ""); - assert_index(&tbl, 47, "max-forwards", ""); - assert_index(&tbl, 48, "proxy-authenticate", ""); - assert_index(&tbl, 49, "proxy-authorization", ""); - assert_index(&tbl, 50, "range", ""); - assert_index(&tbl, 51, "referer", ""); - assert_index(&tbl, 52, "refresh", ""); - assert_index(&tbl, 53, "retry-after", ""); - assert_index(&tbl, 54, "server", ""); - assert_index(&tbl, 55, "set-cookie", ""); - assert_index(&tbl, 56, "strict-transport-security", ""); - assert_index(&tbl, 57, "transfer-encoding", ""); - assert_index(&tbl, 58, "user-agent", ""); - assert_index(&tbl, 59, "vary", ""); - assert_index(&tbl, 60, "via", ""); - assert_index(&tbl, 61, "www-authenticate", ""); - - grpc_chttp2_hptbl_destroy(&exec_ctx, &tbl); - grpc_exec_ctx_finish(&exec_ctx); -} - -static void test_many_additions(void) { - grpc_chttp2_hptbl tbl; - int i; - char *key; - char *value; - - LOG_TEST("test_many_additions"); - - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_chttp2_hptbl_init(&exec_ctx, &tbl); - - for (i = 0; i < 100000; i++) { - grpc_mdelem elem; - gpr_asprintf(&key, "K:%d", i); - gpr_asprintf(&value, "VALUE:%d", i); - elem = - grpc_mdelem_from_slices(&exec_ctx, grpc_slice_from_copied_string(key), - grpc_slice_from_copied_string(value)); - GPR_ASSERT(grpc_chttp2_hptbl_add(&exec_ctx, &tbl, elem) == GRPC_ERROR_NONE); - GRPC_MDELEM_UNREF(&exec_ctx, elem); - assert_index(&tbl, 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY, key, value); - gpr_free(key); - gpr_free(value); - if (i) { - gpr_asprintf(&key, "K:%d", i - 1); - gpr_asprintf(&value, "VALUE:%d", i - 1); - assert_index(&tbl, 2 + GRPC_CHTTP2_LAST_STATIC_ENTRY, key, value); - gpr_free(key); - gpr_free(value); - } - } - - grpc_chttp2_hptbl_destroy(&exec_ctx, &tbl); - grpc_exec_ctx_finish(&exec_ctx); -} - -static grpc_chttp2_hptbl_find_result find_simple(grpc_chttp2_hptbl *tbl, - const char *key, - const char *value) { - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_mdelem md = - grpc_mdelem_from_slices(&exec_ctx, grpc_slice_from_copied_string(key), - grpc_slice_from_copied_string(value)); - grpc_chttp2_hptbl_find_result r = grpc_chttp2_hptbl_find(tbl, md); - GRPC_MDELEM_UNREF(&exec_ctx, md); - grpc_exec_ctx_finish(&exec_ctx); - return r; -} - -static void test_find(void) { - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_chttp2_hptbl tbl; - uint32_t i; - char buffer[32]; - grpc_mdelem elem; - grpc_chttp2_hptbl_find_result r; - - LOG_TEST("test_find"); - - grpc_chttp2_hptbl_init(&exec_ctx, &tbl); - elem = - grpc_mdelem_from_slices(&exec_ctx, grpc_slice_from_static_string("abc"), - grpc_slice_from_static_string("xyz")); - GPR_ASSERT(grpc_chttp2_hptbl_add(&exec_ctx, &tbl, elem) == GRPC_ERROR_NONE); - GRPC_MDELEM_UNREF(&exec_ctx, elem); - elem = - grpc_mdelem_from_slices(&exec_ctx, grpc_slice_from_static_string("abc"), - grpc_slice_from_static_string("123")); - GPR_ASSERT(grpc_chttp2_hptbl_add(&exec_ctx, &tbl, elem) == GRPC_ERROR_NONE); - GRPC_MDELEM_UNREF(&exec_ctx, elem); - elem = grpc_mdelem_from_slices(&exec_ctx, grpc_slice_from_static_string("x"), - grpc_slice_from_static_string("1")); - GPR_ASSERT(grpc_chttp2_hptbl_add(&exec_ctx, &tbl, elem) == GRPC_ERROR_NONE); - GRPC_MDELEM_UNREF(&exec_ctx, elem); - - r = find_simple(&tbl, "abc", "123"); - GPR_ASSERT(r.index == 2 + GRPC_CHTTP2_LAST_STATIC_ENTRY); - GPR_ASSERT(r.has_value == 1); - - r = find_simple(&tbl, "abc", "xyz"); - GPR_ASSERT(r.index == 3 + GRPC_CHTTP2_LAST_STATIC_ENTRY); - GPR_ASSERT(r.has_value == 1); - - r = find_simple(&tbl, "x", "1"); - GPR_ASSERT(r.index == 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY); - GPR_ASSERT(r.has_value == 1); - - r = find_simple(&tbl, "x", "2"); - GPR_ASSERT(r.index == 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY); - GPR_ASSERT(r.has_value == 0); - - r = find_simple(&tbl, "vary", "some-vary-arg"); - GPR_ASSERT(r.index == 59); - GPR_ASSERT(r.has_value == 0); - - r = find_simple(&tbl, "accept-encoding", "gzip, deflate"); - GPR_ASSERT(r.index == 16); - GPR_ASSERT(r.has_value == 1); - - r = find_simple(&tbl, "accept-encoding", "gzip"); - GPR_ASSERT(r.index == 16); - GPR_ASSERT(r.has_value == 0); - - r = find_simple(&tbl, ":method", "GET"); - GPR_ASSERT(r.index == 2); - GPR_ASSERT(r.has_value == 1); - - r = find_simple(&tbl, ":method", "POST"); - GPR_ASSERT(r.index == 3); - GPR_ASSERT(r.has_value == 1); - - r = find_simple(&tbl, ":method", "PUT"); - GPR_ASSERT(r.index == 2 || r.index == 3); - GPR_ASSERT(r.has_value == 0); - - r = find_simple(&tbl, "this-does-not-exist", ""); - GPR_ASSERT(r.index == 0); - GPR_ASSERT(r.has_value == 0); - - /* overflow the string buffer, check find still works */ - for (i = 0; i < 10000; i++) { - int64_ttoa(i, buffer); - elem = grpc_mdelem_from_slices(&exec_ctx, - grpc_slice_from_static_string("test"), - grpc_slice_from_copied_string(buffer)); - GPR_ASSERT(grpc_chttp2_hptbl_add(&exec_ctx, &tbl, elem) == GRPC_ERROR_NONE); - GRPC_MDELEM_UNREF(&exec_ctx, elem); - } - - r = find_simple(&tbl, "abc", "123"); - GPR_ASSERT(r.index == 0); - GPR_ASSERT(r.has_value == 0); - - r = find_simple(&tbl, "test", "9999"); - GPR_ASSERT(r.index == 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY); - GPR_ASSERT(r.has_value == 1); - - r = find_simple(&tbl, "test", "9998"); - GPR_ASSERT(r.index == 2 + GRPC_CHTTP2_LAST_STATIC_ENTRY); - GPR_ASSERT(r.has_value == 1); - - for (i = 0; i < tbl.num_ents; i++) { - uint32_t expect = 9999 - i; - int64_ttoa(expect, buffer); - - r = find_simple(&tbl, "test", buffer); - GPR_ASSERT(r.index == i + 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY); - GPR_ASSERT(r.has_value == 1); - } - - r = find_simple(&tbl, "test", "10000"); - GPR_ASSERT(r.index != 0); - GPR_ASSERT(r.has_value == 0); - - grpc_chttp2_hptbl_destroy(&exec_ctx, &tbl); - grpc_exec_ctx_finish(&exec_ctx); -} - -int main(int argc, char **argv) { - grpc_test_init(argc, argv); - grpc_init(); - test_static_lookup(); - test_many_additions(); - test_find(); - grpc_shutdown(); - return 0; -} diff --git a/test/core/transport/chttp2/hpack_table_test.cc b/test/core/transport/chttp2/hpack_table_test.cc new file mode 100644 index 0000000000..430ece33c7 --- /dev/null +++ b/test/core/transport/chttp2/hpack_table_test.cc @@ -0,0 +1,285 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/ext/transport/chttp2/transport/hpack_table.h" + +#include +#include + +#include +#include +#include +#include + +#include "src/core/lib/support/string.h" +#include "test/core/util/test_config.h" + +#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x) + +static void assert_str(const grpc_chttp2_hptbl *tbl, grpc_slice mdstr, + const char *str) { + GPR_ASSERT(grpc_slice_str_cmp(mdstr, str) == 0); +} + +static void assert_index(const grpc_chttp2_hptbl *tbl, uint32_t idx, + const char *key, const char *value) { + grpc_mdelem md = grpc_chttp2_hptbl_lookup(tbl, idx); + assert_str(tbl, GRPC_MDKEY(md), key); + assert_str(tbl, GRPC_MDVALUE(md), value); +} + +static void test_static_lookup(void) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_chttp2_hptbl tbl; + + grpc_chttp2_hptbl_init(&exec_ctx, &tbl); + + LOG_TEST("test_static_lookup"); + assert_index(&tbl, 1, ":authority", ""); + assert_index(&tbl, 2, ":method", "GET"); + assert_index(&tbl, 3, ":method", "POST"); + assert_index(&tbl, 4, ":path", "/"); + assert_index(&tbl, 5, ":path", "/index.html"); + assert_index(&tbl, 6, ":scheme", "http"); + assert_index(&tbl, 7, ":scheme", "https"); + assert_index(&tbl, 8, ":status", "200"); + assert_index(&tbl, 9, ":status", "204"); + assert_index(&tbl, 10, ":status", "206"); + assert_index(&tbl, 11, ":status", "304"); + assert_index(&tbl, 12, ":status", "400"); + assert_index(&tbl, 13, ":status", "404"); + assert_index(&tbl, 14, ":status", "500"); + assert_index(&tbl, 15, "accept-charset", ""); + assert_index(&tbl, 16, "accept-encoding", "gzip, deflate"); + assert_index(&tbl, 17, "accept-language", ""); + assert_index(&tbl, 18, "accept-ranges", ""); + assert_index(&tbl, 19, "accept", ""); + assert_index(&tbl, 20, "access-control-allow-origin", ""); + assert_index(&tbl, 21, "age", ""); + assert_index(&tbl, 22, "allow", ""); + assert_index(&tbl, 23, "authorization", ""); + assert_index(&tbl, 24, "cache-control", ""); + assert_index(&tbl, 25, "content-disposition", ""); + assert_index(&tbl, 26, "content-encoding", ""); + assert_index(&tbl, 27, "content-language", ""); + assert_index(&tbl, 28, "content-length", ""); + assert_index(&tbl, 29, "content-location", ""); + assert_index(&tbl, 30, "content-range", ""); + assert_index(&tbl, 31, "content-type", ""); + assert_index(&tbl, 32, "cookie", ""); + assert_index(&tbl, 33, "date", ""); + assert_index(&tbl, 34, "etag", ""); + assert_index(&tbl, 35, "expect", ""); + assert_index(&tbl, 36, "expires", ""); + assert_index(&tbl, 37, "from", ""); + assert_index(&tbl, 38, "host", ""); + assert_index(&tbl, 39, "if-match", ""); + assert_index(&tbl, 40, "if-modified-since", ""); + assert_index(&tbl, 41, "if-none-match", ""); + assert_index(&tbl, 42, "if-range", ""); + assert_index(&tbl, 43, "if-unmodified-since", ""); + assert_index(&tbl, 44, "last-modified", ""); + assert_index(&tbl, 45, "link", ""); + assert_index(&tbl, 46, "location", ""); + assert_index(&tbl, 47, "max-forwards", ""); + assert_index(&tbl, 48, "proxy-authenticate", ""); + assert_index(&tbl, 49, "proxy-authorization", ""); + assert_index(&tbl, 50, "range", ""); + assert_index(&tbl, 51, "referer", ""); + assert_index(&tbl, 52, "refresh", ""); + assert_index(&tbl, 53, "retry-after", ""); + assert_index(&tbl, 54, "server", ""); + assert_index(&tbl, 55, "set-cookie", ""); + assert_index(&tbl, 56, "strict-transport-security", ""); + assert_index(&tbl, 57, "transfer-encoding", ""); + assert_index(&tbl, 58, "user-agent", ""); + assert_index(&tbl, 59, "vary", ""); + assert_index(&tbl, 60, "via", ""); + assert_index(&tbl, 61, "www-authenticate", ""); + + grpc_chttp2_hptbl_destroy(&exec_ctx, &tbl); + grpc_exec_ctx_finish(&exec_ctx); +} + +static void test_many_additions(void) { + grpc_chttp2_hptbl tbl; + int i; + char *key; + char *value; + + LOG_TEST("test_many_additions"); + + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_chttp2_hptbl_init(&exec_ctx, &tbl); + + for (i = 0; i < 100000; i++) { + grpc_mdelem elem; + gpr_asprintf(&key, "K:%d", i); + gpr_asprintf(&value, "VALUE:%d", i); + elem = + grpc_mdelem_from_slices(&exec_ctx, grpc_slice_from_copied_string(key), + grpc_slice_from_copied_string(value)); + GPR_ASSERT(grpc_chttp2_hptbl_add(&exec_ctx, &tbl, elem) == GRPC_ERROR_NONE); + GRPC_MDELEM_UNREF(&exec_ctx, elem); + assert_index(&tbl, 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY, key, value); + gpr_free(key); + gpr_free(value); + if (i) { + gpr_asprintf(&key, "K:%d", i - 1); + gpr_asprintf(&value, "VALUE:%d", i - 1); + assert_index(&tbl, 2 + GRPC_CHTTP2_LAST_STATIC_ENTRY, key, value); + gpr_free(key); + gpr_free(value); + } + } + + grpc_chttp2_hptbl_destroy(&exec_ctx, &tbl); + grpc_exec_ctx_finish(&exec_ctx); +} + +static grpc_chttp2_hptbl_find_result find_simple(grpc_chttp2_hptbl *tbl, + const char *key, + const char *value) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_mdelem md = + grpc_mdelem_from_slices(&exec_ctx, grpc_slice_from_copied_string(key), + grpc_slice_from_copied_string(value)); + grpc_chttp2_hptbl_find_result r = grpc_chttp2_hptbl_find(tbl, md); + GRPC_MDELEM_UNREF(&exec_ctx, md); + grpc_exec_ctx_finish(&exec_ctx); + return r; +} + +static void test_find(void) { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_chttp2_hptbl tbl; + uint32_t i; + char buffer[32]; + grpc_mdelem elem; + grpc_chttp2_hptbl_find_result r; + + LOG_TEST("test_find"); + + grpc_chttp2_hptbl_init(&exec_ctx, &tbl); + elem = + grpc_mdelem_from_slices(&exec_ctx, grpc_slice_from_static_string("abc"), + grpc_slice_from_static_string("xyz")); + GPR_ASSERT(grpc_chttp2_hptbl_add(&exec_ctx, &tbl, elem) == GRPC_ERROR_NONE); + GRPC_MDELEM_UNREF(&exec_ctx, elem); + elem = + grpc_mdelem_from_slices(&exec_ctx, grpc_slice_from_static_string("abc"), + grpc_slice_from_static_string("123")); + GPR_ASSERT(grpc_chttp2_hptbl_add(&exec_ctx, &tbl, elem) == GRPC_ERROR_NONE); + GRPC_MDELEM_UNREF(&exec_ctx, elem); + elem = grpc_mdelem_from_slices(&exec_ctx, grpc_slice_from_static_string("x"), + grpc_slice_from_static_string("1")); + GPR_ASSERT(grpc_chttp2_hptbl_add(&exec_ctx, &tbl, elem) == GRPC_ERROR_NONE); + GRPC_MDELEM_UNREF(&exec_ctx, elem); + + r = find_simple(&tbl, "abc", "123"); + GPR_ASSERT(r.index == 2 + GRPC_CHTTP2_LAST_STATIC_ENTRY); + GPR_ASSERT(r.has_value == 1); + + r = find_simple(&tbl, "abc", "xyz"); + GPR_ASSERT(r.index == 3 + GRPC_CHTTP2_LAST_STATIC_ENTRY); + GPR_ASSERT(r.has_value == 1); + + r = find_simple(&tbl, "x", "1"); + GPR_ASSERT(r.index == 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY); + GPR_ASSERT(r.has_value == 1); + + r = find_simple(&tbl, "x", "2"); + GPR_ASSERT(r.index == 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY); + GPR_ASSERT(r.has_value == 0); + + r = find_simple(&tbl, "vary", "some-vary-arg"); + GPR_ASSERT(r.index == 59); + GPR_ASSERT(r.has_value == 0); + + r = find_simple(&tbl, "accept-encoding", "gzip, deflate"); + GPR_ASSERT(r.index == 16); + GPR_ASSERT(r.has_value == 1); + + r = find_simple(&tbl, "accept-encoding", "gzip"); + GPR_ASSERT(r.index == 16); + GPR_ASSERT(r.has_value == 0); + + r = find_simple(&tbl, ":method", "GET"); + GPR_ASSERT(r.index == 2); + GPR_ASSERT(r.has_value == 1); + + r = find_simple(&tbl, ":method", "POST"); + GPR_ASSERT(r.index == 3); + GPR_ASSERT(r.has_value == 1); + + r = find_simple(&tbl, ":method", "PUT"); + GPR_ASSERT(r.index == 2 || r.index == 3); + GPR_ASSERT(r.has_value == 0); + + r = find_simple(&tbl, "this-does-not-exist", ""); + GPR_ASSERT(r.index == 0); + GPR_ASSERT(r.has_value == 0); + + /* overflow the string buffer, check find still works */ + for (i = 0; i < 10000; i++) { + int64_ttoa(i, buffer); + elem = grpc_mdelem_from_slices(&exec_ctx, + grpc_slice_from_static_string("test"), + grpc_slice_from_copied_string(buffer)); + GPR_ASSERT(grpc_chttp2_hptbl_add(&exec_ctx, &tbl, elem) == GRPC_ERROR_NONE); + GRPC_MDELEM_UNREF(&exec_ctx, elem); + } + + r = find_simple(&tbl, "abc", "123"); + GPR_ASSERT(r.index == 0); + GPR_ASSERT(r.has_value == 0); + + r = find_simple(&tbl, "test", "9999"); + GPR_ASSERT(r.index == 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY); + GPR_ASSERT(r.has_value == 1); + + r = find_simple(&tbl, "test", "9998"); + GPR_ASSERT(r.index == 2 + GRPC_CHTTP2_LAST_STATIC_ENTRY); + GPR_ASSERT(r.has_value == 1); + + for (i = 0; i < tbl.num_ents; i++) { + uint32_t expect = 9999 - i; + int64_ttoa(expect, buffer); + + r = find_simple(&tbl, "test", buffer); + GPR_ASSERT(r.index == i + 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY); + GPR_ASSERT(r.has_value == 1); + } + + r = find_simple(&tbl, "test", "10000"); + GPR_ASSERT(r.index != 0); + GPR_ASSERT(r.has_value == 0); + + grpc_chttp2_hptbl_destroy(&exec_ctx, &tbl); + grpc_exec_ctx_finish(&exec_ctx); +} + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + grpc_init(); + test_static_lookup(); + test_many_additions(); + test_find(); + grpc_shutdown(); + return 0; +} diff --git a/test/core/transport/chttp2/stream_map_test.c b/test/core/transport/chttp2/stream_map_test.c deleted file mode 100644 index ae2583ab84..0000000000 --- a/test/core/transport/chttp2/stream_map_test.c +++ /dev/null @@ -1,215 +0,0 @@ -/* - * - * Copyright 2015 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/ext/transport/chttp2/transport/stream_map.h" -#include -#include "test/core/util/test_config.h" - -#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x) - -/* test creation & destruction */ -static void test_no_op(void) { - grpc_chttp2_stream_map map; - - LOG_TEST("test_no_op"); - - grpc_chttp2_stream_map_init(&map, 8); - grpc_chttp2_stream_map_destroy(&map); -} - -/* test lookup on an empty map */ -static void test_empty_find(void) { - grpc_chttp2_stream_map map; - - LOG_TEST("test_empty_find"); - - grpc_chttp2_stream_map_init(&map, 8); - GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 39128)); - grpc_chttp2_stream_map_destroy(&map); -} - -/* test it's safe to delete twice */ -static void test_double_deletion(void) { - grpc_chttp2_stream_map map; - - LOG_TEST("test_double_deletion"); - - grpc_chttp2_stream_map_init(&map, 8); - GPR_ASSERT(0 == grpc_chttp2_stream_map_size(&map)); - grpc_chttp2_stream_map_add(&map, 1, (void *)1); - GPR_ASSERT((void *)1 == grpc_chttp2_stream_map_find(&map, 1)); - GPR_ASSERT(1 == grpc_chttp2_stream_map_size(&map)); - GPR_ASSERT((void *)1 == grpc_chttp2_stream_map_delete(&map, 1)); - GPR_ASSERT(0 == grpc_chttp2_stream_map_size(&map)); - GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 1)); - GPR_ASSERT(NULL == grpc_chttp2_stream_map_delete(&map, 1)); - GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 1)); - GPR_ASSERT(NULL == grpc_chttp2_stream_map_delete(&map, 1)); - GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 1)); - GPR_ASSERT(NULL == grpc_chttp2_stream_map_delete(&map, 1)); - GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 1)); - grpc_chttp2_stream_map_destroy(&map); -} - -/* test add & lookup */ -static void test_basic_add_find(uint32_t n) { - grpc_chttp2_stream_map map; - uint32_t i; - size_t got; - - LOG_TEST("test_basic_add_find"); - gpr_log(GPR_INFO, "n = %d", n); - - grpc_chttp2_stream_map_init(&map, 8); - GPR_ASSERT(0 == grpc_chttp2_stream_map_size(&map)); - for (i = 1; i <= n; i++) { - grpc_chttp2_stream_map_add(&map, i, (void *)(uintptr_t)i); - } - GPR_ASSERT(n == grpc_chttp2_stream_map_size(&map)); - GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 0)); - GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, n + 1)); - for (i = 1; i <= n; i++) { - got = (uintptr_t)grpc_chttp2_stream_map_find(&map, i); - GPR_ASSERT(i == got); - } - grpc_chttp2_stream_map_destroy(&map); -} - -/* verify that for_each gets the right values during test_delete_evens_XXX */ -static void verify_for_each(void *user_data, uint32_t stream_id, void *ptr) { - uint32_t *for_each_check = user_data; - GPR_ASSERT(ptr); - GPR_ASSERT(*for_each_check == stream_id); - *for_each_check += 2; -} - -static void check_delete_evens(grpc_chttp2_stream_map *map, uint32_t n) { - uint32_t for_each_check = 1; - uint32_t i; - size_t got; - - GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(map, 0)); - GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(map, n + 1)); - for (i = 1; i <= n; i++) { - if (i & 1) { - got = (uintptr_t)grpc_chttp2_stream_map_find(map, i); - GPR_ASSERT(i == got); - } else { - GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(map, i)); - } - } - - grpc_chttp2_stream_map_for_each(map, verify_for_each, &for_each_check); - if (n & 1) { - GPR_ASSERT(for_each_check == n + 2); - } else { - GPR_ASSERT(for_each_check == n + 1); - } -} - -/* add a bunch of keys, delete the even ones, and make sure the map is - consistent */ -static void test_delete_evens_sweep(uint32_t n) { - grpc_chttp2_stream_map map; - uint32_t i; - - LOG_TEST("test_delete_evens_sweep"); - gpr_log(GPR_INFO, "n = %d", n); - - grpc_chttp2_stream_map_init(&map, 8); - for (i = 1; i <= n; i++) { - grpc_chttp2_stream_map_add(&map, i, (void *)(uintptr_t)i); - } - for (i = 1; i <= n; i++) { - if ((i & 1) == 0) { - GPR_ASSERT((void *)(uintptr_t)i == - grpc_chttp2_stream_map_delete(&map, i)); - } - } - check_delete_evens(&map, n); - grpc_chttp2_stream_map_destroy(&map); -} - -/* add a bunch of keys, delete the even ones immediately, and make sure the map - is consistent */ -static void test_delete_evens_incremental(uint32_t n) { - grpc_chttp2_stream_map map; - uint32_t i; - - LOG_TEST("test_delete_evens_incremental"); - gpr_log(GPR_INFO, "n = %d", n); - - grpc_chttp2_stream_map_init(&map, 8); - for (i = 1; i <= n; i++) { - grpc_chttp2_stream_map_add(&map, i, (void *)(uintptr_t)i); - if ((i & 1) == 0) { - grpc_chttp2_stream_map_delete(&map, i); - } - } - check_delete_evens(&map, n); - grpc_chttp2_stream_map_destroy(&map); -} - -/* add a bunch of keys, delete old ones after some time, ensure the - backing array does not grow */ -static void test_periodic_compaction(uint32_t n) { - grpc_chttp2_stream_map map; - uint32_t i; - uint32_t del; - - LOG_TEST("test_periodic_compaction"); - gpr_log(GPR_INFO, "n = %d", n); - - grpc_chttp2_stream_map_init(&map, 16); - GPR_ASSERT(map.capacity == 16); - for (i = 1; i <= n; i++) { - grpc_chttp2_stream_map_add(&map, i, (void *)(uintptr_t)i); - if (i > 8) { - del = i - 8; - GPR_ASSERT((void *)(uintptr_t)del == - grpc_chttp2_stream_map_delete(&map, del)); - } - } - GPR_ASSERT(map.capacity == 16); - grpc_chttp2_stream_map_destroy(&map); -} - -int main(int argc, char **argv) { - uint32_t n = 1; - uint32_t prev = 1; - uint32_t tmp; - - grpc_test_init(argc, argv); - - test_no_op(); - test_empty_find(); - test_double_deletion(); - - while (n < 100000) { - test_basic_add_find(n); - test_delete_evens_sweep(n); - test_delete_evens_incremental(n); - test_periodic_compaction(n); - - tmp = n; - n += prev; - prev = tmp; - } - - return 0; -} diff --git a/test/core/transport/chttp2/stream_map_test.cc b/test/core/transport/chttp2/stream_map_test.cc new file mode 100644 index 0000000000..7df7b1b2a6 --- /dev/null +++ b/test/core/transport/chttp2/stream_map_test.cc @@ -0,0 +1,215 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/ext/transport/chttp2/transport/stream_map.h" +#include +#include "test/core/util/test_config.h" + +#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x) + +/* test creation & destruction */ +static void test_no_op(void) { + grpc_chttp2_stream_map map; + + LOG_TEST("test_no_op"); + + grpc_chttp2_stream_map_init(&map, 8); + grpc_chttp2_stream_map_destroy(&map); +} + +/* test lookup on an empty map */ +static void test_empty_find(void) { + grpc_chttp2_stream_map map; + + LOG_TEST("test_empty_find"); + + grpc_chttp2_stream_map_init(&map, 8); + GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 39128)); + grpc_chttp2_stream_map_destroy(&map); +} + +/* test it's safe to delete twice */ +static void test_double_deletion(void) { + grpc_chttp2_stream_map map; + + LOG_TEST("test_double_deletion"); + + grpc_chttp2_stream_map_init(&map, 8); + GPR_ASSERT(0 == grpc_chttp2_stream_map_size(&map)); + grpc_chttp2_stream_map_add(&map, 1, (void *)1); + GPR_ASSERT((void *)1 == grpc_chttp2_stream_map_find(&map, 1)); + GPR_ASSERT(1 == grpc_chttp2_stream_map_size(&map)); + GPR_ASSERT((void *)1 == grpc_chttp2_stream_map_delete(&map, 1)); + GPR_ASSERT(0 == grpc_chttp2_stream_map_size(&map)); + GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 1)); + GPR_ASSERT(NULL == grpc_chttp2_stream_map_delete(&map, 1)); + GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 1)); + GPR_ASSERT(NULL == grpc_chttp2_stream_map_delete(&map, 1)); + GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 1)); + GPR_ASSERT(NULL == grpc_chttp2_stream_map_delete(&map, 1)); + GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 1)); + grpc_chttp2_stream_map_destroy(&map); +} + +/* test add & lookup */ +static void test_basic_add_find(uint32_t n) { + grpc_chttp2_stream_map map; + uint32_t i; + size_t got; + + LOG_TEST("test_basic_add_find"); + gpr_log(GPR_INFO, "n = %d", n); + + grpc_chttp2_stream_map_init(&map, 8); + GPR_ASSERT(0 == grpc_chttp2_stream_map_size(&map)); + for (i = 1; i <= n; i++) { + grpc_chttp2_stream_map_add(&map, i, (void *)(uintptr_t)i); + } + GPR_ASSERT(n == grpc_chttp2_stream_map_size(&map)); + GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, 0)); + GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(&map, n + 1)); + for (i = 1; i <= n; i++) { + got = (uintptr_t)grpc_chttp2_stream_map_find(&map, i); + GPR_ASSERT(i == got); + } + grpc_chttp2_stream_map_destroy(&map); +} + +/* verify that for_each gets the right values during test_delete_evens_XXX */ +static void verify_for_each(void *user_data, uint32_t stream_id, void *ptr) { + uint32_t *for_each_check = static_cast(user_data); + GPR_ASSERT(ptr); + GPR_ASSERT(*for_each_check == stream_id); + *for_each_check += 2; +} + +static void check_delete_evens(grpc_chttp2_stream_map *map, uint32_t n) { + uint32_t for_each_check = 1; + uint32_t i; + size_t got; + + GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(map, 0)); + GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(map, n + 1)); + for (i = 1; i <= n; i++) { + if (i & 1) { + got = (uintptr_t)grpc_chttp2_stream_map_find(map, i); + GPR_ASSERT(i == got); + } else { + GPR_ASSERT(NULL == grpc_chttp2_stream_map_find(map, i)); + } + } + + grpc_chttp2_stream_map_for_each(map, verify_for_each, &for_each_check); + if (n & 1) { + GPR_ASSERT(for_each_check == n + 2); + } else { + GPR_ASSERT(for_each_check == n + 1); + } +} + +/* add a bunch of keys, delete the even ones, and make sure the map is + consistent */ +static void test_delete_evens_sweep(uint32_t n) { + grpc_chttp2_stream_map map; + uint32_t i; + + LOG_TEST("test_delete_evens_sweep"); + gpr_log(GPR_INFO, "n = %d", n); + + grpc_chttp2_stream_map_init(&map, 8); + for (i = 1; i <= n; i++) { + grpc_chttp2_stream_map_add(&map, i, (void *)(uintptr_t)i); + } + for (i = 1; i <= n; i++) { + if ((i & 1) == 0) { + GPR_ASSERT((void *)(uintptr_t)i == + grpc_chttp2_stream_map_delete(&map, i)); + } + } + check_delete_evens(&map, n); + grpc_chttp2_stream_map_destroy(&map); +} + +/* add a bunch of keys, delete the even ones immediately, and make sure the map + is consistent */ +static void test_delete_evens_incremental(uint32_t n) { + grpc_chttp2_stream_map map; + uint32_t i; + + LOG_TEST("test_delete_evens_incremental"); + gpr_log(GPR_INFO, "n = %d", n); + + grpc_chttp2_stream_map_init(&map, 8); + for (i = 1; i <= n; i++) { + grpc_chttp2_stream_map_add(&map, i, (void *)(uintptr_t)i); + if ((i & 1) == 0) { + grpc_chttp2_stream_map_delete(&map, i); + } + } + check_delete_evens(&map, n); + grpc_chttp2_stream_map_destroy(&map); +} + +/* add a bunch of keys, delete old ones after some time, ensure the + backing array does not grow */ +static void test_periodic_compaction(uint32_t n) { + grpc_chttp2_stream_map map; + uint32_t i; + uint32_t del; + + LOG_TEST("test_periodic_compaction"); + gpr_log(GPR_INFO, "n = %d", n); + + grpc_chttp2_stream_map_init(&map, 16); + GPR_ASSERT(map.capacity == 16); + for (i = 1; i <= n; i++) { + grpc_chttp2_stream_map_add(&map, i, (void *)(uintptr_t)i); + if (i > 8) { + del = i - 8; + GPR_ASSERT((void *)(uintptr_t)del == + grpc_chttp2_stream_map_delete(&map, del)); + } + } + GPR_ASSERT(map.capacity == 16); + grpc_chttp2_stream_map_destroy(&map); +} + +int main(int argc, char **argv) { + uint32_t n = 1; + uint32_t prev = 1; + uint32_t tmp; + + grpc_test_init(argc, argv); + + test_no_op(); + test_empty_find(); + test_double_deletion(); + + while (n < 100000) { + test_basic_add_find(n); + test_delete_evens_sweep(n); + test_delete_evens_incremental(n); + test_periodic_compaction(n); + + tmp = n; + n += prev; + prev = tmp; + } + + return 0; +} diff --git a/test/core/transport/chttp2/varint_test.c b/test/core/transport/chttp2/varint_test.c deleted file mode 100644 index 0986a2cde6..0000000000 --- a/test/core/transport/chttp2/varint_test.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * - * Copyright 2015 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/ext/transport/chttp2/transport/varint.h" - -#include -#include - -#include "test/core/util/test_config.h" - -static void test_varint(uint32_t value, uint32_t prefix_bits, uint8_t prefix_or, - const char *expect_bytes, size_t expect_length) { - uint32_t nbytes = GRPC_CHTTP2_VARINT_LENGTH(value, prefix_bits); - grpc_slice expect = - grpc_slice_from_copied_buffer(expect_bytes, expect_length); - grpc_slice slice; - gpr_log(GPR_DEBUG, "Test: 0x%08x", value); - GPR_ASSERT(nbytes == expect_length); - slice = grpc_slice_malloc(nbytes); - GRPC_CHTTP2_WRITE_VARINT(value, prefix_bits, prefix_or, - GRPC_SLICE_START_PTR(slice), nbytes); - GPR_ASSERT(grpc_slice_eq(expect, slice)); - grpc_slice_unref(expect); - grpc_slice_unref(slice); -} - -#define TEST_VARINT(value, prefix_bits, prefix_or, expect) \ - test_varint(value, prefix_bits, prefix_or, expect, sizeof(expect) - 1) - -int main(int argc, char **argv) { - grpc_test_init(argc, argv); - TEST_VARINT(0, 1, 0, "\x00"); - TEST_VARINT(128, 1, 0, "\x7f\x01"); - TEST_VARINT(16384, 1, 0, "\x7f\x81\x7f"); - TEST_VARINT(2097152, 1, 0, "\x7f\x81\xff\x7f"); - TEST_VARINT(268435456, 1, 0, "\x7f\x81\xff\xff\x7f"); - TEST_VARINT(0xffffffff, 1, 0, "\x7f\x80\xff\xff\xff\x0f"); - return 0; -} diff --git a/test/core/transport/chttp2/varint_test.cc b/test/core/transport/chttp2/varint_test.cc new file mode 100644 index 0000000000..0986a2cde6 --- /dev/null +++ b/test/core/transport/chttp2/varint_test.cc @@ -0,0 +1,54 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/ext/transport/chttp2/transport/varint.h" + +#include +#include + +#include "test/core/util/test_config.h" + +static void test_varint(uint32_t value, uint32_t prefix_bits, uint8_t prefix_or, + const char *expect_bytes, size_t expect_length) { + uint32_t nbytes = GRPC_CHTTP2_VARINT_LENGTH(value, prefix_bits); + grpc_slice expect = + grpc_slice_from_copied_buffer(expect_bytes, expect_length); + grpc_slice slice; + gpr_log(GPR_DEBUG, "Test: 0x%08x", value); + GPR_ASSERT(nbytes == expect_length); + slice = grpc_slice_malloc(nbytes); + GRPC_CHTTP2_WRITE_VARINT(value, prefix_bits, prefix_or, + GRPC_SLICE_START_PTR(slice), nbytes); + GPR_ASSERT(grpc_slice_eq(expect, slice)); + grpc_slice_unref(expect); + grpc_slice_unref(slice); +} + +#define TEST_VARINT(value, prefix_bits, prefix_or, expect) \ + test_varint(value, prefix_bits, prefix_or, expect, sizeof(expect) - 1) + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + TEST_VARINT(0, 1, 0, "\x00"); + TEST_VARINT(128, 1, 0, "\x7f\x01"); + TEST_VARINT(16384, 1, 0, "\x7f\x81\x7f"); + TEST_VARINT(2097152, 1, 0, "\x7f\x81\xff\x7f"); + TEST_VARINT(268435456, 1, 0, "\x7f\x81\xff\xff\x7f"); + TEST_VARINT(0xffffffff, 1, 0, "\x7f\x80\xff\xff\xff\x0f"); + return 0; +} diff --git a/test/core/transport/connectivity_state_test.c b/test/core/transport/connectivity_state_test.c deleted file mode 100644 index 4ef8683107..0000000000 --- a/test/core/transport/connectivity_state_test.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * - * Copyright 2015 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/lib/transport/connectivity_state.h" - -#include - -#include - -#include "test/core/util/test_config.h" - -#define THE_ARG ((void *)(size_t)0xcafebabe) - -int g_counter; - -static void must_succeed(grpc_exec_ctx *exec_ctx, void *arg, - grpc_error *error) { - GPR_ASSERT(error == GRPC_ERROR_NONE); - GPR_ASSERT(arg == THE_ARG); - g_counter++; -} - -static void must_fail(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { - GPR_ASSERT(error != GRPC_ERROR_NONE); - GPR_ASSERT(arg == THE_ARG); - g_counter++; -} - -static void test_connectivity_state_name(void) { - gpr_log(GPR_DEBUG, "test_connectivity_state_name"); - GPR_ASSERT(0 == - strcmp(grpc_connectivity_state_name(GRPC_CHANNEL_IDLE), "IDLE")); - GPR_ASSERT(0 == strcmp(grpc_connectivity_state_name(GRPC_CHANNEL_CONNECTING), - "CONNECTING")); - GPR_ASSERT(0 == - strcmp(grpc_connectivity_state_name(GRPC_CHANNEL_READY), "READY")); - GPR_ASSERT( - 0 == strcmp(grpc_connectivity_state_name(GRPC_CHANNEL_TRANSIENT_FAILURE), - "TRANSIENT_FAILURE")); - GPR_ASSERT(0 == strcmp(grpc_connectivity_state_name(GRPC_CHANNEL_SHUTDOWN), - "SHUTDOWN")); -} - -static void test_check(void) { - grpc_connectivity_state_tracker tracker; - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_error *error; - gpr_log(GPR_DEBUG, "test_check"); - grpc_connectivity_state_init(&tracker, GRPC_CHANNEL_IDLE, "xxx"); - GPR_ASSERT(grpc_connectivity_state_get(&tracker, &error) == - GRPC_CHANNEL_IDLE); - GPR_ASSERT(grpc_connectivity_state_check(&tracker) == GRPC_CHANNEL_IDLE); - GPR_ASSERT(error == GRPC_ERROR_NONE); - grpc_connectivity_state_destroy(&exec_ctx, &tracker); - grpc_exec_ctx_finish(&exec_ctx); -} - -static void test_subscribe_then_unsubscribe(void) { - grpc_connectivity_state_tracker tracker; - grpc_closure *closure = - GRPC_CLOSURE_CREATE(must_fail, THE_ARG, grpc_schedule_on_exec_ctx); - grpc_connectivity_state state = GRPC_CHANNEL_IDLE; - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - gpr_log(GPR_DEBUG, "test_subscribe_then_unsubscribe"); - g_counter = 0; - grpc_connectivity_state_init(&tracker, GRPC_CHANNEL_IDLE, "xxx"); - GPR_ASSERT(grpc_connectivity_state_notify_on_state_change(&exec_ctx, &tracker, - &state, closure)); - grpc_exec_ctx_flush(&exec_ctx); - GPR_ASSERT(state == GRPC_CHANNEL_IDLE); - GPR_ASSERT(g_counter == 0); - grpc_connectivity_state_notify_on_state_change(&exec_ctx, &tracker, NULL, - closure); - grpc_exec_ctx_flush(&exec_ctx); - GPR_ASSERT(state == GRPC_CHANNEL_IDLE); - GPR_ASSERT(g_counter == 1); - - grpc_connectivity_state_destroy(&exec_ctx, &tracker); - grpc_exec_ctx_finish(&exec_ctx); -} - -static void test_subscribe_then_destroy(void) { - grpc_connectivity_state_tracker tracker; - grpc_closure *closure = - GRPC_CLOSURE_CREATE(must_succeed, THE_ARG, grpc_schedule_on_exec_ctx); - grpc_connectivity_state state = GRPC_CHANNEL_IDLE; - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - gpr_log(GPR_DEBUG, "test_subscribe_then_destroy"); - g_counter = 0; - grpc_connectivity_state_init(&tracker, GRPC_CHANNEL_IDLE, "xxx"); - GPR_ASSERT(grpc_connectivity_state_notify_on_state_change(&exec_ctx, &tracker, - &state, closure)); - grpc_exec_ctx_flush(&exec_ctx); - GPR_ASSERT(state == GRPC_CHANNEL_IDLE); - GPR_ASSERT(g_counter == 0); - grpc_connectivity_state_destroy(&exec_ctx, &tracker); - grpc_exec_ctx_finish(&exec_ctx); - GPR_ASSERT(state == GRPC_CHANNEL_SHUTDOWN); - GPR_ASSERT(g_counter == 1); -} - -static void test_subscribe_with_failure_then_destroy(void) { - grpc_connectivity_state_tracker tracker; - grpc_closure *closure = - GRPC_CLOSURE_CREATE(must_fail, THE_ARG, grpc_schedule_on_exec_ctx); - grpc_connectivity_state state = GRPC_CHANNEL_SHUTDOWN; - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - gpr_log(GPR_DEBUG, "test_subscribe_with_failure_then_destroy"); - g_counter = 0; - grpc_connectivity_state_init(&tracker, GRPC_CHANNEL_SHUTDOWN, "xxx"); - GPR_ASSERT(0 == grpc_connectivity_state_notify_on_state_change( - &exec_ctx, &tracker, &state, closure)); - grpc_exec_ctx_flush(&exec_ctx); - GPR_ASSERT(state == GRPC_CHANNEL_SHUTDOWN); - GPR_ASSERT(g_counter == 0); - grpc_connectivity_state_destroy(&exec_ctx, &tracker); - grpc_exec_ctx_finish(&exec_ctx); - GPR_ASSERT(state == GRPC_CHANNEL_SHUTDOWN); - GPR_ASSERT(g_counter == 1); -} - -int main(int argc, char **argv) { - grpc_test_init(argc, argv); - grpc_connectivity_state_trace.value = 1; - test_connectivity_state_name(); - test_check(); - test_subscribe_then_unsubscribe(); - test_subscribe_then_destroy(); - test_subscribe_with_failure_then_destroy(); - return 0; -} diff --git a/test/core/transport/connectivity_state_test.cc b/test/core/transport/connectivity_state_test.cc new file mode 100644 index 0000000000..4ef8683107 --- /dev/null +++ b/test/core/transport/connectivity_state_test.cc @@ -0,0 +1,146 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/lib/transport/connectivity_state.h" + +#include + +#include + +#include "test/core/util/test_config.h" + +#define THE_ARG ((void *)(size_t)0xcafebabe) + +int g_counter; + +static void must_succeed(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { + GPR_ASSERT(error == GRPC_ERROR_NONE); + GPR_ASSERT(arg == THE_ARG); + g_counter++; +} + +static void must_fail(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { + GPR_ASSERT(error != GRPC_ERROR_NONE); + GPR_ASSERT(arg == THE_ARG); + g_counter++; +} + +static void test_connectivity_state_name(void) { + gpr_log(GPR_DEBUG, "test_connectivity_state_name"); + GPR_ASSERT(0 == + strcmp(grpc_connectivity_state_name(GRPC_CHANNEL_IDLE), "IDLE")); + GPR_ASSERT(0 == strcmp(grpc_connectivity_state_name(GRPC_CHANNEL_CONNECTING), + "CONNECTING")); + GPR_ASSERT(0 == + strcmp(grpc_connectivity_state_name(GRPC_CHANNEL_READY), "READY")); + GPR_ASSERT( + 0 == strcmp(grpc_connectivity_state_name(GRPC_CHANNEL_TRANSIENT_FAILURE), + "TRANSIENT_FAILURE")); + GPR_ASSERT(0 == strcmp(grpc_connectivity_state_name(GRPC_CHANNEL_SHUTDOWN), + "SHUTDOWN")); +} + +static void test_check(void) { + grpc_connectivity_state_tracker tracker; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_error *error; + gpr_log(GPR_DEBUG, "test_check"); + grpc_connectivity_state_init(&tracker, GRPC_CHANNEL_IDLE, "xxx"); + GPR_ASSERT(grpc_connectivity_state_get(&tracker, &error) == + GRPC_CHANNEL_IDLE); + GPR_ASSERT(grpc_connectivity_state_check(&tracker) == GRPC_CHANNEL_IDLE); + GPR_ASSERT(error == GRPC_ERROR_NONE); + grpc_connectivity_state_destroy(&exec_ctx, &tracker); + grpc_exec_ctx_finish(&exec_ctx); +} + +static void test_subscribe_then_unsubscribe(void) { + grpc_connectivity_state_tracker tracker; + grpc_closure *closure = + GRPC_CLOSURE_CREATE(must_fail, THE_ARG, grpc_schedule_on_exec_ctx); + grpc_connectivity_state state = GRPC_CHANNEL_IDLE; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + gpr_log(GPR_DEBUG, "test_subscribe_then_unsubscribe"); + g_counter = 0; + grpc_connectivity_state_init(&tracker, GRPC_CHANNEL_IDLE, "xxx"); + GPR_ASSERT(grpc_connectivity_state_notify_on_state_change(&exec_ctx, &tracker, + &state, closure)); + grpc_exec_ctx_flush(&exec_ctx); + GPR_ASSERT(state == GRPC_CHANNEL_IDLE); + GPR_ASSERT(g_counter == 0); + grpc_connectivity_state_notify_on_state_change(&exec_ctx, &tracker, NULL, + closure); + grpc_exec_ctx_flush(&exec_ctx); + GPR_ASSERT(state == GRPC_CHANNEL_IDLE); + GPR_ASSERT(g_counter == 1); + + grpc_connectivity_state_destroy(&exec_ctx, &tracker); + grpc_exec_ctx_finish(&exec_ctx); +} + +static void test_subscribe_then_destroy(void) { + grpc_connectivity_state_tracker tracker; + grpc_closure *closure = + GRPC_CLOSURE_CREATE(must_succeed, THE_ARG, grpc_schedule_on_exec_ctx); + grpc_connectivity_state state = GRPC_CHANNEL_IDLE; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + gpr_log(GPR_DEBUG, "test_subscribe_then_destroy"); + g_counter = 0; + grpc_connectivity_state_init(&tracker, GRPC_CHANNEL_IDLE, "xxx"); + GPR_ASSERT(grpc_connectivity_state_notify_on_state_change(&exec_ctx, &tracker, + &state, closure)); + grpc_exec_ctx_flush(&exec_ctx); + GPR_ASSERT(state == GRPC_CHANNEL_IDLE); + GPR_ASSERT(g_counter == 0); + grpc_connectivity_state_destroy(&exec_ctx, &tracker); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(state == GRPC_CHANNEL_SHUTDOWN); + GPR_ASSERT(g_counter == 1); +} + +static void test_subscribe_with_failure_then_destroy(void) { + grpc_connectivity_state_tracker tracker; + grpc_closure *closure = + GRPC_CLOSURE_CREATE(must_fail, THE_ARG, grpc_schedule_on_exec_ctx); + grpc_connectivity_state state = GRPC_CHANNEL_SHUTDOWN; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + gpr_log(GPR_DEBUG, "test_subscribe_with_failure_then_destroy"); + g_counter = 0; + grpc_connectivity_state_init(&tracker, GRPC_CHANNEL_SHUTDOWN, "xxx"); + GPR_ASSERT(0 == grpc_connectivity_state_notify_on_state_change( + &exec_ctx, &tracker, &state, closure)); + grpc_exec_ctx_flush(&exec_ctx); + GPR_ASSERT(state == GRPC_CHANNEL_SHUTDOWN); + GPR_ASSERT(g_counter == 0); + grpc_connectivity_state_destroy(&exec_ctx, &tracker); + grpc_exec_ctx_finish(&exec_ctx); + GPR_ASSERT(state == GRPC_CHANNEL_SHUTDOWN); + GPR_ASSERT(g_counter == 1); +} + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + grpc_connectivity_state_trace.value = 1; + test_connectivity_state_name(); + test_check(); + test_subscribe_then_unsubscribe(); + test_subscribe_then_destroy(); + test_subscribe_with_failure_then_destroy(); + return 0; +} diff --git a/test/core/transport/metadata_test.c b/test/core/transport/metadata_test.c deleted file mode 100644 index f7124d29a7..0000000000 --- a/test/core/transport/metadata_test.c +++ /dev/null @@ -1,402 +0,0 @@ -/* - * - * Copyright 2015 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/lib/transport/metadata.h" - -#include -#include - -#include -#include -#include -#include - -#include "src/core/ext/transport/chttp2/transport/bin_encoder.h" -#include "src/core/lib/slice/slice_internal.h" -#include "src/core/lib/support/string.h" -#include "src/core/lib/transport/static_metadata.h" -#include "test/core/util/test_config.h" - -/* a large number */ -#define MANY 10000 - -static void test_no_op(void) { - gpr_log(GPR_INFO, "test_no_op"); - grpc_init(); - grpc_shutdown(); -} - -static grpc_slice maybe_intern(grpc_slice in, bool intern) { - grpc_slice out = intern ? grpc_slice_intern(in) : grpc_slice_ref(in); - grpc_slice_unref(in); - return out; -} - -static grpc_slice maybe_dup(grpc_slice in, bool dup) { - grpc_slice out = dup ? grpc_slice_dup(in) : grpc_slice_ref(in); - grpc_slice_unref(in); - return out; -} - -static void test_create_metadata(bool intern_keys, bool intern_values) { - grpc_mdelem m1, m2, m3; - - gpr_log(GPR_INFO, "test_create_metadata: intern_keys=%d intern_values=%d", - intern_keys, intern_values); - - grpc_init(); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - m1 = grpc_mdelem_from_slices( - &exec_ctx, maybe_intern(grpc_slice_from_static_string("a"), intern_keys), - maybe_intern(grpc_slice_from_static_string("b"), intern_values)); - m2 = grpc_mdelem_from_slices( - &exec_ctx, maybe_intern(grpc_slice_from_static_string("a"), intern_keys), - maybe_intern(grpc_slice_from_static_string("b"), intern_values)); - m3 = grpc_mdelem_from_slices( - &exec_ctx, maybe_intern(grpc_slice_from_static_string("a"), intern_keys), - maybe_intern(grpc_slice_from_static_string("c"), intern_values)); - GPR_ASSERT(grpc_mdelem_eq(m1, m2)); - GPR_ASSERT(!grpc_mdelem_eq(m3, m1)); - GPR_ASSERT(grpc_slice_eq(GRPC_MDKEY(m3), GRPC_MDKEY(m1))); - GPR_ASSERT(!grpc_slice_eq(GRPC_MDVALUE(m3), GRPC_MDVALUE(m1))); - GPR_ASSERT(grpc_slice_str_cmp(GRPC_MDKEY(m1), "a") == 0); - GPR_ASSERT(grpc_slice_str_cmp(GRPC_MDVALUE(m1), "b") == 0); - GPR_ASSERT(grpc_slice_str_cmp(GRPC_MDVALUE(m3), "c") == 0); - GRPC_MDELEM_UNREF(&exec_ctx, m1); - GRPC_MDELEM_UNREF(&exec_ctx, m2); - GRPC_MDELEM_UNREF(&exec_ctx, m3); - grpc_exec_ctx_finish(&exec_ctx); - grpc_shutdown(); -} - -static void test_create_many_ephemeral_metadata(bool intern_keys, - bool intern_values) { - char buffer[GPR_LTOA_MIN_BUFSIZE]; - long i; - - gpr_log( - GPR_INFO, - "test_create_many_ephemeral_metadata: intern_keys=%d intern_values=%d", - intern_keys, intern_values); - - grpc_init(); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - /* add, and immediately delete a bunch of different elements */ - for (i = 0; i < MANY; i++) { - gpr_ltoa(i, buffer); - GRPC_MDELEM_UNREF( - &exec_ctx, - grpc_mdelem_from_slices( - &exec_ctx, - maybe_intern(grpc_slice_from_static_string("a"), intern_keys), - maybe_intern(grpc_slice_from_copied_string(buffer), - intern_values))); - } - grpc_exec_ctx_finish(&exec_ctx); - grpc_shutdown(); -} - -static void test_create_many_persistant_metadata(void) { - char buffer[GPR_LTOA_MIN_BUFSIZE]; - long i; - grpc_mdelem *created = gpr_malloc(sizeof(grpc_mdelem) * MANY); - grpc_mdelem md; - - gpr_log(GPR_INFO, "test_create_many_persistant_metadata"); - - grpc_init(); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - /* add phase */ - for (i = 0; i < MANY; i++) { - gpr_ltoa(i, buffer); - created[i] = grpc_mdelem_from_slices( - &exec_ctx, grpc_slice_intern(grpc_slice_from_static_string("a")), - grpc_slice_intern(grpc_slice_from_static_string(buffer))); - } - /* verify phase */ - for (i = 0; i < MANY; i++) { - gpr_ltoa(i, buffer); - md = grpc_mdelem_from_slices( - &exec_ctx, grpc_slice_intern(grpc_slice_from_static_string("a")), - grpc_slice_intern(grpc_slice_from_static_string(buffer))); - GPR_ASSERT(grpc_mdelem_eq(md, created[i])); - GRPC_MDELEM_UNREF(&exec_ctx, md); - } - /* cleanup phase */ - for (i = 0; i < MANY; i++) { - GRPC_MDELEM_UNREF(&exec_ctx, created[i]); - } - grpc_exec_ctx_finish(&exec_ctx); - grpc_shutdown(); - - gpr_free(created); -} - -static void test_spin_creating_the_same_thing(bool intern_keys, - bool intern_values) { - gpr_log(GPR_INFO, - "test_spin_creating_the_same_thing: intern_keys=%d intern_values=%d", - intern_keys, intern_values); - - grpc_init(); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_mdelem a, b, c; - GRPC_MDELEM_UNREF( - &exec_ctx, - a = grpc_mdelem_from_slices( - &exec_ctx, - maybe_intern(grpc_slice_from_static_string("a"), intern_keys), - maybe_intern(grpc_slice_from_static_string("b"), intern_values))); - GRPC_MDELEM_UNREF( - &exec_ctx, - b = grpc_mdelem_from_slices( - &exec_ctx, - maybe_intern(grpc_slice_from_static_string("a"), intern_keys), - maybe_intern(grpc_slice_from_static_string("b"), intern_values))); - GRPC_MDELEM_UNREF( - &exec_ctx, - c = grpc_mdelem_from_slices( - &exec_ctx, - maybe_intern(grpc_slice_from_static_string("a"), intern_keys), - maybe_intern(grpc_slice_from_static_string("b"), intern_values))); - if (intern_keys && intern_values) { - GPR_ASSERT(a.payload == b.payload); - GPR_ASSERT(a.payload == c.payload); - } - grpc_exec_ctx_finish(&exec_ctx); - grpc_shutdown(); -} - -static void test_identity_laws(bool intern_keys, bool intern_values) { - gpr_log(GPR_INFO, "test_identity_laws: intern_keys=%d intern_values=%d", - intern_keys, intern_values); - - grpc_init(); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_mdelem a, b, c; - a = grpc_mdelem_from_slices( - &exec_ctx, maybe_intern(grpc_slice_from_static_string("a"), intern_keys), - maybe_intern(grpc_slice_from_static_string("b"), intern_values)); - b = grpc_mdelem_from_slices( - &exec_ctx, maybe_intern(grpc_slice_from_static_string("a"), intern_keys), - maybe_intern(grpc_slice_from_static_string("b"), intern_values)); - c = grpc_mdelem_from_slices( - &exec_ctx, maybe_intern(grpc_slice_from_static_string("a"), intern_keys), - maybe_intern(grpc_slice_from_static_string("b"), intern_values)); - GPR_ASSERT(grpc_mdelem_eq(a, a)); - GPR_ASSERT(grpc_mdelem_eq(b, b)); - GPR_ASSERT(grpc_mdelem_eq(c, c)); - GPR_ASSERT(grpc_mdelem_eq(a, b)); - GPR_ASSERT(grpc_mdelem_eq(b, c)); - GPR_ASSERT(grpc_mdelem_eq(a, c)); - GPR_ASSERT(grpc_mdelem_eq(b, a)); - GPR_ASSERT(grpc_mdelem_eq(c, b)); - GPR_ASSERT(grpc_mdelem_eq(c, a)); - if (intern_keys && intern_values) { - GPR_ASSERT(a.payload == b.payload); - GPR_ASSERT(a.payload == c.payload); - } else { - GPR_ASSERT(a.payload != b.payload); - GPR_ASSERT(a.payload != c.payload); - GPR_ASSERT(b.payload != c.payload); - } - GRPC_MDELEM_UNREF(&exec_ctx, a); - GRPC_MDELEM_UNREF(&exec_ctx, b); - GRPC_MDELEM_UNREF(&exec_ctx, c); - grpc_exec_ctx_finish(&exec_ctx); - grpc_shutdown(); -} - -static void test_things_stick_around(void) { - size_t i, j; - char *buffer; - size_t nstrs = 1000; - grpc_slice *strs = gpr_malloc(sizeof(grpc_slice) * nstrs); - size_t *shuf = gpr_malloc(sizeof(size_t) * nstrs); - grpc_slice test; - - gpr_log(GPR_INFO, "test_things_stick_around"); - - grpc_init(); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - - for (i = 0; i < nstrs; i++) { - gpr_asprintf(&buffer, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%" PRIuPTR "x", i); - strs[i] = grpc_slice_intern(grpc_slice_from_static_string(buffer)); - shuf[i] = i; - gpr_free(buffer); - } - - for (i = 0; i < nstrs; i++) { - grpc_slice_ref_internal(strs[i]); - grpc_slice_unref_internal(&exec_ctx, strs[i]); - } - - for (i = 0; i < nstrs; i++) { - size_t p = (size_t)rand() % nstrs; - size_t q = (size_t)rand() % nstrs; - size_t temp = shuf[p]; - shuf[p] = shuf[q]; - shuf[q] = temp; - } - - for (i = 0; i < nstrs; i++) { - grpc_slice_unref_internal(&exec_ctx, strs[shuf[i]]); - for (j = i + 1; j < nstrs; j++) { - gpr_asprintf(&buffer, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%" PRIuPTR "x", - shuf[j]); - test = grpc_slice_intern(grpc_slice_from_static_string(buffer)); - GPR_ASSERT(grpc_slice_is_equivalent(test, strs[shuf[j]])); - grpc_slice_unref_internal(&exec_ctx, test); - gpr_free(buffer); - } - } - - grpc_exec_ctx_finish(&exec_ctx); - grpc_shutdown(); - gpr_free(strs); - gpr_free(shuf); -} - -static void test_user_data_works(void) { - int *ud1; - int *ud2; - grpc_mdelem md; - gpr_log(GPR_INFO, "test_user_data_works"); - - grpc_init(); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - ud1 = gpr_malloc(sizeof(int)); - *ud1 = 1; - ud2 = gpr_malloc(sizeof(int)); - *ud2 = 2; - md = grpc_mdelem_from_slices( - &exec_ctx, grpc_slice_intern(grpc_slice_from_static_string("abc")), - grpc_slice_intern(grpc_slice_from_static_string("123"))); - grpc_mdelem_set_user_data(md, gpr_free, ud1); - grpc_mdelem_set_user_data(md, gpr_free, ud2); - GPR_ASSERT(grpc_mdelem_get_user_data(md, gpr_free) == ud1); - GRPC_MDELEM_UNREF(&exec_ctx, md); - grpc_exec_ctx_finish(&exec_ctx); - grpc_shutdown(); -} - -static void verify_ascii_header_size(grpc_exec_ctx *exec_ctx, const char *key, - const char *value, bool intern_key, - bool intern_value) { - grpc_mdelem elem = grpc_mdelem_from_slices( - exec_ctx, maybe_intern(grpc_slice_from_static_string(key), intern_key), - maybe_intern(grpc_slice_from_static_string(value), intern_value)); - size_t elem_size = grpc_mdelem_get_size_in_hpack_table(elem, false); - size_t expected_size = 32 + strlen(key) + strlen(value); - GPR_ASSERT(expected_size == elem_size); - GRPC_MDELEM_UNREF(exec_ctx, elem); -} - -static void verify_binary_header_size(grpc_exec_ctx *exec_ctx, const char *key, - const uint8_t *value, size_t value_len, - bool intern_key, bool intern_value) { - grpc_mdelem elem = grpc_mdelem_from_slices( - exec_ctx, maybe_intern(grpc_slice_from_static_string(key), intern_key), - maybe_intern(grpc_slice_from_static_buffer(value, value_len), - intern_value)); - GPR_ASSERT(grpc_is_binary_header(GRPC_MDKEY(elem))); - size_t elem_size = grpc_mdelem_get_size_in_hpack_table(elem, false); - grpc_slice value_slice = - grpc_slice_from_copied_buffer((const char *)value, value_len); - grpc_slice base64_encoded = grpc_chttp2_base64_encode(value_slice); - size_t expected_size = 32 + strlen(key) + GRPC_SLICE_LENGTH(base64_encoded); - GPR_ASSERT(expected_size == elem_size); - grpc_slice_unref_internal(exec_ctx, value_slice); - grpc_slice_unref_internal(exec_ctx, base64_encoded); - GRPC_MDELEM_UNREF(exec_ctx, elem); -} - -#define BUFFER_SIZE 64 -static void test_mdelem_sizes_in_hpack(bool intern_key, bool intern_value) { - gpr_log(GPR_INFO, "test_mdelem_size: intern_key=%d intern_value=%d", - intern_key, intern_value); - grpc_init(); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - - uint8_t binary_value[BUFFER_SIZE] = {0}; - for (uint8_t i = 0; i < BUFFER_SIZE; i++) { - binary_value[i] = i; - } - - verify_ascii_header_size(&exec_ctx, "hello", "world", intern_key, - intern_value); - verify_ascii_header_size(&exec_ctx, "hello", - "worldxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", intern_key, - intern_value); - verify_ascii_header_size(&exec_ctx, ":scheme", "http", intern_key, - intern_value); - - for (uint8_t i = 0; i < BUFFER_SIZE; i++) { - verify_binary_header_size(&exec_ctx, "hello-bin", binary_value, i, - intern_key, intern_value); - } - - grpc_exec_ctx_finish(&exec_ctx); - grpc_shutdown(); -} - -static void test_copied_static_metadata(bool dup_key, bool dup_value) { - gpr_log(GPR_INFO, "test_static_metadata: dup_key=%d dup_value=%d", dup_key, - dup_value); - grpc_init(); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - - for (size_t i = 0; i < GRPC_STATIC_MDELEM_COUNT; i++) { - grpc_mdelem p = GRPC_MAKE_MDELEM(&grpc_static_mdelem_table[i], - GRPC_MDELEM_STORAGE_STATIC); - grpc_mdelem q = - grpc_mdelem_from_slices(&exec_ctx, maybe_dup(GRPC_MDKEY(p), dup_key), - maybe_dup(GRPC_MDVALUE(p), dup_value)); - GPR_ASSERT(grpc_mdelem_eq(p, q)); - if (dup_key || dup_value) { - GPR_ASSERT(p.payload != q.payload); - } else { - GPR_ASSERT(p.payload == q.payload); - } - GRPC_MDELEM_UNREF(&exec_ctx, p); - GRPC_MDELEM_UNREF(&exec_ctx, q); - } - - grpc_exec_ctx_finish(&exec_ctx); - grpc_shutdown(); -} - -int main(int argc, char **argv) { - grpc_test_init(argc, argv); - test_no_op(); - for (int k = 0; k <= 1; k++) { - for (int v = 0; v <= 1; v++) { - test_create_metadata(k, v); - test_create_many_ephemeral_metadata(k, v); - test_identity_laws(k, v); - test_spin_creating_the_same_thing(k, v); - test_mdelem_sizes_in_hpack(k, v); - test_copied_static_metadata(k, v); - } - } - test_create_many_persistant_metadata(); - test_things_stick_around(); - test_user_data_works(); - return 0; -} diff --git a/test/core/transport/metadata_test.cc b/test/core/transport/metadata_test.cc new file mode 100644 index 0000000000..e043078560 --- /dev/null +++ b/test/core/transport/metadata_test.cc @@ -0,0 +1,404 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/lib/transport/metadata.h" + +#include +#include + +#include +#include +#include +#include + +#include "src/core/ext/transport/chttp2/transport/bin_encoder.h" +#include "src/core/lib/slice/slice_internal.h" +#include "src/core/lib/support/string.h" +#include "src/core/lib/transport/static_metadata.h" +#include "test/core/util/test_config.h" + +/* a large number */ +#define MANY 10000 + +static void test_no_op(void) { + gpr_log(GPR_INFO, "test_no_op"); + grpc_init(); + grpc_shutdown(); +} + +static grpc_slice maybe_intern(grpc_slice in, bool intern) { + grpc_slice out = intern ? grpc_slice_intern(in) : grpc_slice_ref(in); + grpc_slice_unref(in); + return out; +} + +static grpc_slice maybe_dup(grpc_slice in, bool dup) { + grpc_slice out = dup ? grpc_slice_dup(in) : grpc_slice_ref(in); + grpc_slice_unref(in); + return out; +} + +static void test_create_metadata(bool intern_keys, bool intern_values) { + grpc_mdelem m1, m2, m3; + + gpr_log(GPR_INFO, "test_create_metadata: intern_keys=%d intern_values=%d", + intern_keys, intern_values); + + grpc_init(); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + m1 = grpc_mdelem_from_slices( + &exec_ctx, maybe_intern(grpc_slice_from_static_string("a"), intern_keys), + maybe_intern(grpc_slice_from_static_string("b"), intern_values)); + m2 = grpc_mdelem_from_slices( + &exec_ctx, maybe_intern(grpc_slice_from_static_string("a"), intern_keys), + maybe_intern(grpc_slice_from_static_string("b"), intern_values)); + m3 = grpc_mdelem_from_slices( + &exec_ctx, maybe_intern(grpc_slice_from_static_string("a"), intern_keys), + maybe_intern(grpc_slice_from_static_string("c"), intern_values)); + GPR_ASSERT(grpc_mdelem_eq(m1, m2)); + GPR_ASSERT(!grpc_mdelem_eq(m3, m1)); + GPR_ASSERT(grpc_slice_eq(GRPC_MDKEY(m3), GRPC_MDKEY(m1))); + GPR_ASSERT(!grpc_slice_eq(GRPC_MDVALUE(m3), GRPC_MDVALUE(m1))); + GPR_ASSERT(grpc_slice_str_cmp(GRPC_MDKEY(m1), "a") == 0); + GPR_ASSERT(grpc_slice_str_cmp(GRPC_MDVALUE(m1), "b") == 0); + GPR_ASSERT(grpc_slice_str_cmp(GRPC_MDVALUE(m3), "c") == 0); + GRPC_MDELEM_UNREF(&exec_ctx, m1); + GRPC_MDELEM_UNREF(&exec_ctx, m2); + GRPC_MDELEM_UNREF(&exec_ctx, m3); + grpc_exec_ctx_finish(&exec_ctx); + grpc_shutdown(); +} + +static void test_create_many_ephemeral_metadata(bool intern_keys, + bool intern_values) { + char buffer[GPR_LTOA_MIN_BUFSIZE]; + long i; + + gpr_log( + GPR_INFO, + "test_create_many_ephemeral_metadata: intern_keys=%d intern_values=%d", + intern_keys, intern_values); + + grpc_init(); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + /* add, and immediately delete a bunch of different elements */ + for (i = 0; i < MANY; i++) { + gpr_ltoa(i, buffer); + GRPC_MDELEM_UNREF( + &exec_ctx, + grpc_mdelem_from_slices( + &exec_ctx, + maybe_intern(grpc_slice_from_static_string("a"), intern_keys), + maybe_intern(grpc_slice_from_copied_string(buffer), + intern_values))); + } + grpc_exec_ctx_finish(&exec_ctx); + grpc_shutdown(); +} + +static void test_create_many_persistant_metadata(void) { + char buffer[GPR_LTOA_MIN_BUFSIZE]; + long i; + grpc_mdelem *created = + static_cast(gpr_malloc(sizeof(grpc_mdelem) * MANY)); + grpc_mdelem md; + + gpr_log(GPR_INFO, "test_create_many_persistant_metadata"); + + grpc_init(); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + /* add phase */ + for (i = 0; i < MANY; i++) { + gpr_ltoa(i, buffer); + created[i] = grpc_mdelem_from_slices( + &exec_ctx, grpc_slice_intern(grpc_slice_from_static_string("a")), + grpc_slice_intern(grpc_slice_from_static_string(buffer))); + } + /* verify phase */ + for (i = 0; i < MANY; i++) { + gpr_ltoa(i, buffer); + md = grpc_mdelem_from_slices( + &exec_ctx, grpc_slice_intern(grpc_slice_from_static_string("a")), + grpc_slice_intern(grpc_slice_from_static_string(buffer))); + GPR_ASSERT(grpc_mdelem_eq(md, created[i])); + GRPC_MDELEM_UNREF(&exec_ctx, md); + } + /* cleanup phase */ + for (i = 0; i < MANY; i++) { + GRPC_MDELEM_UNREF(&exec_ctx, created[i]); + } + grpc_exec_ctx_finish(&exec_ctx); + grpc_shutdown(); + + gpr_free(created); +} + +static void test_spin_creating_the_same_thing(bool intern_keys, + bool intern_values) { + gpr_log(GPR_INFO, + "test_spin_creating_the_same_thing: intern_keys=%d intern_values=%d", + intern_keys, intern_values); + + grpc_init(); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_mdelem a, b, c; + GRPC_MDELEM_UNREF( + &exec_ctx, + a = grpc_mdelem_from_slices( + &exec_ctx, + maybe_intern(grpc_slice_from_static_string("a"), intern_keys), + maybe_intern(grpc_slice_from_static_string("b"), intern_values))); + GRPC_MDELEM_UNREF( + &exec_ctx, + b = grpc_mdelem_from_slices( + &exec_ctx, + maybe_intern(grpc_slice_from_static_string("a"), intern_keys), + maybe_intern(grpc_slice_from_static_string("b"), intern_values))); + GRPC_MDELEM_UNREF( + &exec_ctx, + c = grpc_mdelem_from_slices( + &exec_ctx, + maybe_intern(grpc_slice_from_static_string("a"), intern_keys), + maybe_intern(grpc_slice_from_static_string("b"), intern_values))); + if (intern_keys && intern_values) { + GPR_ASSERT(a.payload == b.payload); + GPR_ASSERT(a.payload == c.payload); + } + grpc_exec_ctx_finish(&exec_ctx); + grpc_shutdown(); +} + +static void test_identity_laws(bool intern_keys, bool intern_values) { + gpr_log(GPR_INFO, "test_identity_laws: intern_keys=%d intern_values=%d", + intern_keys, intern_values); + + grpc_init(); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_mdelem a, b, c; + a = grpc_mdelem_from_slices( + &exec_ctx, maybe_intern(grpc_slice_from_static_string("a"), intern_keys), + maybe_intern(grpc_slice_from_static_string("b"), intern_values)); + b = grpc_mdelem_from_slices( + &exec_ctx, maybe_intern(grpc_slice_from_static_string("a"), intern_keys), + maybe_intern(grpc_slice_from_static_string("b"), intern_values)); + c = grpc_mdelem_from_slices( + &exec_ctx, maybe_intern(grpc_slice_from_static_string("a"), intern_keys), + maybe_intern(grpc_slice_from_static_string("b"), intern_values)); + GPR_ASSERT(grpc_mdelem_eq(a, a)); + GPR_ASSERT(grpc_mdelem_eq(b, b)); + GPR_ASSERT(grpc_mdelem_eq(c, c)); + GPR_ASSERT(grpc_mdelem_eq(a, b)); + GPR_ASSERT(grpc_mdelem_eq(b, c)); + GPR_ASSERT(grpc_mdelem_eq(a, c)); + GPR_ASSERT(grpc_mdelem_eq(b, a)); + GPR_ASSERT(grpc_mdelem_eq(c, b)); + GPR_ASSERT(grpc_mdelem_eq(c, a)); + if (intern_keys && intern_values) { + GPR_ASSERT(a.payload == b.payload); + GPR_ASSERT(a.payload == c.payload); + } else { + GPR_ASSERT(a.payload != b.payload); + GPR_ASSERT(a.payload != c.payload); + GPR_ASSERT(b.payload != c.payload); + } + GRPC_MDELEM_UNREF(&exec_ctx, a); + GRPC_MDELEM_UNREF(&exec_ctx, b); + GRPC_MDELEM_UNREF(&exec_ctx, c); + grpc_exec_ctx_finish(&exec_ctx); + grpc_shutdown(); +} + +static void test_things_stick_around(void) { + size_t i, j; + char *buffer; + size_t nstrs = 1000; + grpc_slice *strs = + static_cast(gpr_malloc(sizeof(grpc_slice) * nstrs)); + size_t *shuf = static_cast(gpr_malloc(sizeof(size_t) * nstrs)); + grpc_slice test; + + gpr_log(GPR_INFO, "test_things_stick_around"); + + grpc_init(); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + + for (i = 0; i < nstrs; i++) { + gpr_asprintf(&buffer, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%" PRIuPTR "x", i); + strs[i] = grpc_slice_intern(grpc_slice_from_static_string(buffer)); + shuf[i] = i; + gpr_free(buffer); + } + + for (i = 0; i < nstrs; i++) { + grpc_slice_ref_internal(strs[i]); + grpc_slice_unref_internal(&exec_ctx, strs[i]); + } + + for (i = 0; i < nstrs; i++) { + size_t p = (size_t)rand() % nstrs; + size_t q = (size_t)rand() % nstrs; + size_t temp = shuf[p]; + shuf[p] = shuf[q]; + shuf[q] = temp; + } + + for (i = 0; i < nstrs; i++) { + grpc_slice_unref_internal(&exec_ctx, strs[shuf[i]]); + for (j = i + 1; j < nstrs; j++) { + gpr_asprintf(&buffer, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%" PRIuPTR "x", + shuf[j]); + test = grpc_slice_intern(grpc_slice_from_static_string(buffer)); + GPR_ASSERT(grpc_slice_is_equivalent(test, strs[shuf[j]])); + grpc_slice_unref_internal(&exec_ctx, test); + gpr_free(buffer); + } + } + + grpc_exec_ctx_finish(&exec_ctx); + grpc_shutdown(); + gpr_free(strs); + gpr_free(shuf); +} + +static void test_user_data_works(void) { + int *ud1; + int *ud2; + grpc_mdelem md; + gpr_log(GPR_INFO, "test_user_data_works"); + + grpc_init(); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + ud1 = static_cast(gpr_malloc(sizeof(int))); + *ud1 = 1; + ud2 = static_cast(gpr_malloc(sizeof(int))); + *ud2 = 2; + md = grpc_mdelem_from_slices( + &exec_ctx, grpc_slice_intern(grpc_slice_from_static_string("abc")), + grpc_slice_intern(grpc_slice_from_static_string("123"))); + grpc_mdelem_set_user_data(md, gpr_free, ud1); + grpc_mdelem_set_user_data(md, gpr_free, ud2); + GPR_ASSERT(grpc_mdelem_get_user_data(md, gpr_free) == ud1); + GRPC_MDELEM_UNREF(&exec_ctx, md); + grpc_exec_ctx_finish(&exec_ctx); + grpc_shutdown(); +} + +static void verify_ascii_header_size(grpc_exec_ctx *exec_ctx, const char *key, + const char *value, bool intern_key, + bool intern_value) { + grpc_mdelem elem = grpc_mdelem_from_slices( + exec_ctx, maybe_intern(grpc_slice_from_static_string(key), intern_key), + maybe_intern(grpc_slice_from_static_string(value), intern_value)); + size_t elem_size = grpc_mdelem_get_size_in_hpack_table(elem, false); + size_t expected_size = 32 + strlen(key) + strlen(value); + GPR_ASSERT(expected_size == elem_size); + GRPC_MDELEM_UNREF(exec_ctx, elem); +} + +static void verify_binary_header_size(grpc_exec_ctx *exec_ctx, const char *key, + const uint8_t *value, size_t value_len, + bool intern_key, bool intern_value) { + grpc_mdelem elem = grpc_mdelem_from_slices( + exec_ctx, maybe_intern(grpc_slice_from_static_string(key), intern_key), + maybe_intern(grpc_slice_from_static_buffer(value, value_len), + intern_value)); + GPR_ASSERT(grpc_is_binary_header(GRPC_MDKEY(elem))); + size_t elem_size = grpc_mdelem_get_size_in_hpack_table(elem, false); + grpc_slice value_slice = + grpc_slice_from_copied_buffer((const char *)value, value_len); + grpc_slice base64_encoded = grpc_chttp2_base64_encode(value_slice); + size_t expected_size = 32 + strlen(key) + GRPC_SLICE_LENGTH(base64_encoded); + GPR_ASSERT(expected_size == elem_size); + grpc_slice_unref_internal(exec_ctx, value_slice); + grpc_slice_unref_internal(exec_ctx, base64_encoded); + GRPC_MDELEM_UNREF(exec_ctx, elem); +} + +#define BUFFER_SIZE 64 +static void test_mdelem_sizes_in_hpack(bool intern_key, bool intern_value) { + gpr_log(GPR_INFO, "test_mdelem_size: intern_key=%d intern_value=%d", + intern_key, intern_value); + grpc_init(); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + + uint8_t binary_value[BUFFER_SIZE] = {0}; + for (uint8_t i = 0; i < BUFFER_SIZE; i++) { + binary_value[i] = i; + } + + verify_ascii_header_size(&exec_ctx, "hello", "world", intern_key, + intern_value); + verify_ascii_header_size(&exec_ctx, "hello", + "worldxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", intern_key, + intern_value); + verify_ascii_header_size(&exec_ctx, ":scheme", "http", intern_key, + intern_value); + + for (uint8_t i = 0; i < BUFFER_SIZE; i++) { + verify_binary_header_size(&exec_ctx, "hello-bin", binary_value, i, + intern_key, intern_value); + } + + grpc_exec_ctx_finish(&exec_ctx); + grpc_shutdown(); +} + +static void test_copied_static_metadata(bool dup_key, bool dup_value) { + gpr_log(GPR_INFO, "test_static_metadata: dup_key=%d dup_value=%d", dup_key, + dup_value); + grpc_init(); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + + for (size_t i = 0; i < GRPC_STATIC_MDELEM_COUNT; i++) { + grpc_mdelem p = GRPC_MAKE_MDELEM(&grpc_static_mdelem_table[i], + GRPC_MDELEM_STORAGE_STATIC); + grpc_mdelem q = + grpc_mdelem_from_slices(&exec_ctx, maybe_dup(GRPC_MDKEY(p), dup_key), + maybe_dup(GRPC_MDVALUE(p), dup_value)); + GPR_ASSERT(grpc_mdelem_eq(p, q)); + if (dup_key || dup_value) { + GPR_ASSERT(p.payload != q.payload); + } else { + GPR_ASSERT(p.payload == q.payload); + } + GRPC_MDELEM_UNREF(&exec_ctx, p); + GRPC_MDELEM_UNREF(&exec_ctx, q); + } + + grpc_exec_ctx_finish(&exec_ctx); + grpc_shutdown(); +} + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + test_no_op(); + for (int k = 0; k <= 1; k++) { + for (int v = 0; v <= 1; v++) { + test_create_metadata(k, v); + test_create_many_ephemeral_metadata(k, v); + test_identity_laws(k, v); + test_spin_creating_the_same_thing(k, v); + test_mdelem_sizes_in_hpack(k, v); + test_copied_static_metadata(k, v); + } + } + test_create_many_persistant_metadata(); + test_things_stick_around(); + test_user_data_works(); + return 0; +} diff --git a/test/core/transport/status_conversion_test.c b/test/core/transport/status_conversion_test.c deleted file mode 100644 index de8fa4458a..0000000000 --- a/test/core/transport/status_conversion_test.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * - * Copyright 2015 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/lib/transport/status_conversion.h" -#include -#include "test/core/util/test_config.h" - -#define GRPC_STATUS_TO_HTTP2_ERROR(a, b) \ - GPR_ASSERT(grpc_status_to_http2_error(a) == (b)) -#define HTTP2_ERROR_TO_GRPC_STATUS(a, deadline, b) \ - do { \ - grpc_exec_ctx my_exec_ctx = GRPC_EXEC_CTX_INIT; \ - GPR_ASSERT(grpc_http2_error_to_grpc_status(&my_exec_ctx, a, deadline) == \ - (b)); \ - grpc_exec_ctx_finish(&my_exec_ctx); \ - } while (0) -#define GRPC_STATUS_TO_HTTP2_STATUS(a, b) \ - GPR_ASSERT(grpc_status_to_http2_status(a) == (b)) -#define HTTP2_STATUS_TO_GRPC_STATUS(a, b) \ - GPR_ASSERT(grpc_http2_status_to_grpc_status(a) == (b)) - -int main(int argc, char **argv) { - int i; - - grpc_test_init(argc, argv); - - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_OK, GRPC_HTTP2_NO_ERROR); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_CANCELLED, GRPC_HTTP2_CANCEL); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_UNKNOWN, GRPC_HTTP2_INTERNAL_ERROR); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_INVALID_ARGUMENT, - GRPC_HTTP2_INTERNAL_ERROR); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_DEADLINE_EXCEEDED, GRPC_HTTP2_CANCEL); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_NOT_FOUND, GRPC_HTTP2_INTERNAL_ERROR); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_ALREADY_EXISTS, - GRPC_HTTP2_INTERNAL_ERROR); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_PERMISSION_DENIED, - GRPC_HTTP2_INADEQUATE_SECURITY); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_UNAUTHENTICATED, - GRPC_HTTP2_INTERNAL_ERROR); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_RESOURCE_EXHAUSTED, - GRPC_HTTP2_ENHANCE_YOUR_CALM); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_FAILED_PRECONDITION, - GRPC_HTTP2_INTERNAL_ERROR); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_ABORTED, GRPC_HTTP2_INTERNAL_ERROR); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_OUT_OF_RANGE, - GRPC_HTTP2_INTERNAL_ERROR); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_UNIMPLEMENTED, - GRPC_HTTP2_INTERNAL_ERROR); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_INTERNAL, GRPC_HTTP2_INTERNAL_ERROR); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_UNAVAILABLE, - GRPC_HTTP2_REFUSED_STREAM); - GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_DATA_LOSS, GRPC_HTTP2_INTERNAL_ERROR); - - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_OK, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_CANCELLED, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_UNKNOWN, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_INVALID_ARGUMENT, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_DEADLINE_EXCEEDED, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_NOT_FOUND, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_ALREADY_EXISTS, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_PERMISSION_DENIED, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_UNAUTHENTICATED, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_RESOURCE_EXHAUSTED, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_FAILED_PRECONDITION, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_ABORTED, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_OUT_OF_RANGE, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_UNIMPLEMENTED, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_INTERNAL, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_UNAVAILABLE, 200); - GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_DATA_LOSS, 200); - - const grpc_millis before_deadline = GRPC_MILLIS_INF_FUTURE; - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_NO_ERROR, before_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_PROTOCOL_ERROR, before_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_INTERNAL_ERROR, before_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_FLOW_CONTROL_ERROR, before_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_SETTINGS_TIMEOUT, before_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_STREAM_CLOSED, before_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_FRAME_SIZE_ERROR, before_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_REFUSED_STREAM, before_deadline, - GRPC_STATUS_UNAVAILABLE); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_CANCEL, before_deadline, - GRPC_STATUS_CANCELLED); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_COMPRESSION_ERROR, before_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_CONNECT_ERROR, before_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_ENHANCE_YOUR_CALM, before_deadline, - GRPC_STATUS_RESOURCE_EXHAUSTED); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_INADEQUATE_SECURITY, before_deadline, - GRPC_STATUS_PERMISSION_DENIED); - - const grpc_millis after_deadline = 0; - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_NO_ERROR, after_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_PROTOCOL_ERROR, after_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_INTERNAL_ERROR, after_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_FLOW_CONTROL_ERROR, after_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_SETTINGS_TIMEOUT, after_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_STREAM_CLOSED, after_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_FRAME_SIZE_ERROR, after_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_REFUSED_STREAM, after_deadline, - GRPC_STATUS_UNAVAILABLE); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_CANCEL, after_deadline, - GRPC_STATUS_DEADLINE_EXCEEDED); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_COMPRESSION_ERROR, after_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_CONNECT_ERROR, after_deadline, - GRPC_STATUS_INTERNAL); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_ENHANCE_YOUR_CALM, after_deadline, - GRPC_STATUS_RESOURCE_EXHAUSTED); - HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_INADEQUATE_SECURITY, after_deadline, - GRPC_STATUS_PERMISSION_DENIED); - - HTTP2_STATUS_TO_GRPC_STATUS(200, GRPC_STATUS_OK); - HTTP2_STATUS_TO_GRPC_STATUS(400, GRPC_STATUS_INVALID_ARGUMENT); - HTTP2_STATUS_TO_GRPC_STATUS(401, GRPC_STATUS_UNAUTHENTICATED); - HTTP2_STATUS_TO_GRPC_STATUS(403, GRPC_STATUS_PERMISSION_DENIED); - HTTP2_STATUS_TO_GRPC_STATUS(404, GRPC_STATUS_NOT_FOUND); - HTTP2_STATUS_TO_GRPC_STATUS(409, GRPC_STATUS_ABORTED); - HTTP2_STATUS_TO_GRPC_STATUS(412, GRPC_STATUS_FAILED_PRECONDITION); - HTTP2_STATUS_TO_GRPC_STATUS(429, GRPC_STATUS_RESOURCE_EXHAUSTED); - HTTP2_STATUS_TO_GRPC_STATUS(499, GRPC_STATUS_CANCELLED); - HTTP2_STATUS_TO_GRPC_STATUS(500, GRPC_STATUS_UNKNOWN); - HTTP2_STATUS_TO_GRPC_STATUS(503, GRPC_STATUS_UNAVAILABLE); - HTTP2_STATUS_TO_GRPC_STATUS(504, GRPC_STATUS_DEADLINE_EXCEEDED); - - /* check all status values can be converted */ - for (i = 0; i <= 999; i++) { - grpc_http2_status_to_grpc_status(i); - } - - return 0; -} diff --git a/test/core/transport/status_conversion_test.cc b/test/core/transport/status_conversion_test.cc new file mode 100644 index 0000000000..de8fa4458a --- /dev/null +++ b/test/core/transport/status_conversion_test.cc @@ -0,0 +1,162 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/lib/transport/status_conversion.h" +#include +#include "test/core/util/test_config.h" + +#define GRPC_STATUS_TO_HTTP2_ERROR(a, b) \ + GPR_ASSERT(grpc_status_to_http2_error(a) == (b)) +#define HTTP2_ERROR_TO_GRPC_STATUS(a, deadline, b) \ + do { \ + grpc_exec_ctx my_exec_ctx = GRPC_EXEC_CTX_INIT; \ + GPR_ASSERT(grpc_http2_error_to_grpc_status(&my_exec_ctx, a, deadline) == \ + (b)); \ + grpc_exec_ctx_finish(&my_exec_ctx); \ + } while (0) +#define GRPC_STATUS_TO_HTTP2_STATUS(a, b) \ + GPR_ASSERT(grpc_status_to_http2_status(a) == (b)) +#define HTTP2_STATUS_TO_GRPC_STATUS(a, b) \ + GPR_ASSERT(grpc_http2_status_to_grpc_status(a) == (b)) + +int main(int argc, char **argv) { + int i; + + grpc_test_init(argc, argv); + + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_OK, GRPC_HTTP2_NO_ERROR); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_CANCELLED, GRPC_HTTP2_CANCEL); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_UNKNOWN, GRPC_HTTP2_INTERNAL_ERROR); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_INVALID_ARGUMENT, + GRPC_HTTP2_INTERNAL_ERROR); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_DEADLINE_EXCEEDED, GRPC_HTTP2_CANCEL); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_NOT_FOUND, GRPC_HTTP2_INTERNAL_ERROR); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_ALREADY_EXISTS, + GRPC_HTTP2_INTERNAL_ERROR); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_PERMISSION_DENIED, + GRPC_HTTP2_INADEQUATE_SECURITY); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_UNAUTHENTICATED, + GRPC_HTTP2_INTERNAL_ERROR); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_RESOURCE_EXHAUSTED, + GRPC_HTTP2_ENHANCE_YOUR_CALM); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_FAILED_PRECONDITION, + GRPC_HTTP2_INTERNAL_ERROR); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_ABORTED, GRPC_HTTP2_INTERNAL_ERROR); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_OUT_OF_RANGE, + GRPC_HTTP2_INTERNAL_ERROR); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_UNIMPLEMENTED, + GRPC_HTTP2_INTERNAL_ERROR); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_INTERNAL, GRPC_HTTP2_INTERNAL_ERROR); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_UNAVAILABLE, + GRPC_HTTP2_REFUSED_STREAM); + GRPC_STATUS_TO_HTTP2_ERROR(GRPC_STATUS_DATA_LOSS, GRPC_HTTP2_INTERNAL_ERROR); + + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_OK, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_CANCELLED, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_UNKNOWN, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_INVALID_ARGUMENT, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_DEADLINE_EXCEEDED, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_NOT_FOUND, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_ALREADY_EXISTS, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_PERMISSION_DENIED, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_UNAUTHENTICATED, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_RESOURCE_EXHAUSTED, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_FAILED_PRECONDITION, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_ABORTED, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_OUT_OF_RANGE, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_UNIMPLEMENTED, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_INTERNAL, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_UNAVAILABLE, 200); + GRPC_STATUS_TO_HTTP2_STATUS(GRPC_STATUS_DATA_LOSS, 200); + + const grpc_millis before_deadline = GRPC_MILLIS_INF_FUTURE; + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_NO_ERROR, before_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_PROTOCOL_ERROR, before_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_INTERNAL_ERROR, before_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_FLOW_CONTROL_ERROR, before_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_SETTINGS_TIMEOUT, before_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_STREAM_CLOSED, before_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_FRAME_SIZE_ERROR, before_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_REFUSED_STREAM, before_deadline, + GRPC_STATUS_UNAVAILABLE); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_CANCEL, before_deadline, + GRPC_STATUS_CANCELLED); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_COMPRESSION_ERROR, before_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_CONNECT_ERROR, before_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_ENHANCE_YOUR_CALM, before_deadline, + GRPC_STATUS_RESOURCE_EXHAUSTED); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_INADEQUATE_SECURITY, before_deadline, + GRPC_STATUS_PERMISSION_DENIED); + + const grpc_millis after_deadline = 0; + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_NO_ERROR, after_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_PROTOCOL_ERROR, after_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_INTERNAL_ERROR, after_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_FLOW_CONTROL_ERROR, after_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_SETTINGS_TIMEOUT, after_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_STREAM_CLOSED, after_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_FRAME_SIZE_ERROR, after_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_REFUSED_STREAM, after_deadline, + GRPC_STATUS_UNAVAILABLE); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_CANCEL, after_deadline, + GRPC_STATUS_DEADLINE_EXCEEDED); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_COMPRESSION_ERROR, after_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_CONNECT_ERROR, after_deadline, + GRPC_STATUS_INTERNAL); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_ENHANCE_YOUR_CALM, after_deadline, + GRPC_STATUS_RESOURCE_EXHAUSTED); + HTTP2_ERROR_TO_GRPC_STATUS(GRPC_HTTP2_INADEQUATE_SECURITY, after_deadline, + GRPC_STATUS_PERMISSION_DENIED); + + HTTP2_STATUS_TO_GRPC_STATUS(200, GRPC_STATUS_OK); + HTTP2_STATUS_TO_GRPC_STATUS(400, GRPC_STATUS_INVALID_ARGUMENT); + HTTP2_STATUS_TO_GRPC_STATUS(401, GRPC_STATUS_UNAUTHENTICATED); + HTTP2_STATUS_TO_GRPC_STATUS(403, GRPC_STATUS_PERMISSION_DENIED); + HTTP2_STATUS_TO_GRPC_STATUS(404, GRPC_STATUS_NOT_FOUND); + HTTP2_STATUS_TO_GRPC_STATUS(409, GRPC_STATUS_ABORTED); + HTTP2_STATUS_TO_GRPC_STATUS(412, GRPC_STATUS_FAILED_PRECONDITION); + HTTP2_STATUS_TO_GRPC_STATUS(429, GRPC_STATUS_RESOURCE_EXHAUSTED); + HTTP2_STATUS_TO_GRPC_STATUS(499, GRPC_STATUS_CANCELLED); + HTTP2_STATUS_TO_GRPC_STATUS(500, GRPC_STATUS_UNKNOWN); + HTTP2_STATUS_TO_GRPC_STATUS(503, GRPC_STATUS_UNAVAILABLE); + HTTP2_STATUS_TO_GRPC_STATUS(504, GRPC_STATUS_DEADLINE_EXCEEDED); + + /* check all status values can be converted */ + for (i = 0; i <= 999; i++) { + grpc_http2_status_to_grpc_status(i); + } + + return 0; +} diff --git a/test/core/transport/stream_owned_slice_test.c b/test/core/transport/stream_owned_slice_test.c deleted file mode 100644 index 774ad4e72e..0000000000 --- a/test/core/transport/stream_owned_slice_test.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * Copyright 2017 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/lib/transport/transport.h" - -#include "test/core/util/test_config.h" - -#include - -static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {} - -int main(int argc, char **argv) { - grpc_test_init(argc, argv); - - uint8_t buffer[] = "abc123"; - grpc_stream_refcount r; - GRPC_STREAM_REF_INIT(&r, 1, do_nothing, NULL, "test"); - GPR_ASSERT(r.refs.count == 1); - grpc_slice slice = - grpc_slice_from_stream_owned_buffer(&r, buffer, sizeof(buffer)); - GPR_ASSERT(GRPC_SLICE_START_PTR(slice) == buffer); - GPR_ASSERT(GRPC_SLICE_LENGTH(slice) == sizeof(buffer)); - GPR_ASSERT(r.refs.count == 2); - grpc_slice_unref(slice); - GPR_ASSERT(r.refs.count == 1); - - return 0; -} diff --git a/test/core/transport/stream_owned_slice_test.cc b/test/core/transport/stream_owned_slice_test.cc new file mode 100644 index 0000000000..774ad4e72e --- /dev/null +++ b/test/core/transport/stream_owned_slice_test.cc @@ -0,0 +1,43 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/lib/transport/transport.h" + +#include "test/core/util/test_config.h" + +#include + +static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {} + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + + uint8_t buffer[] = "abc123"; + grpc_stream_refcount r; + GRPC_STREAM_REF_INIT(&r, 1, do_nothing, NULL, "test"); + GPR_ASSERT(r.refs.count == 1); + grpc_slice slice = + grpc_slice_from_stream_owned_buffer(&r, buffer, sizeof(buffer)); + GPR_ASSERT(GRPC_SLICE_START_PTR(slice) == buffer); + GPR_ASSERT(GRPC_SLICE_LENGTH(slice) == sizeof(buffer)); + GPR_ASSERT(r.refs.count == 2); + grpc_slice_unref(slice); + GPR_ASSERT(r.refs.count == 1); + + return 0; +} diff --git a/test/core/transport/timeout_encoding_test.c b/test/core/transport/timeout_encoding_test.c deleted file mode 100644 index 30357faed3..0000000000 --- a/test/core/transport/timeout_encoding_test.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * - * Copyright 2015 gRPC authors. - * - * Licensed 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. - * - */ - -#include "src/core/lib/transport/timeout_encoding.h" - -#include -#include - -#include -#include -#include -#include -#include "src/core/lib/support/murmur_hash.h" -#include "src/core/lib/support/string.h" -#include "test/core/util/test_config.h" - -#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x) - -static void assert_encodes_as(grpc_millis ts, const char *s) { - char buffer[GRPC_HTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE]; - grpc_http2_encode_timeout(ts, buffer); - gpr_log(GPR_INFO, "check '%s' == '%s'", buffer, s); - GPR_ASSERT(0 == strcmp(buffer, s)); -} - -void test_encoding(void) { - LOG_TEST("test_encoding"); - assert_encodes_as(-1, "1n"); - assert_encodes_as(-10, "1n"); - assert_encodes_as(1, "1m"); - assert_encodes_as(10, "10m"); - assert_encodes_as(100, "100m"); - assert_encodes_as(890, "890m"); - assert_encodes_as(900, "900m"); - assert_encodes_as(901, "901m"); - assert_encodes_as(1000, "1S"); - assert_encodes_as(2000, "2S"); - assert_encodes_as(2500, "2500m"); - assert_encodes_as(59900, "59900m"); - assert_encodes_as(50000, "50S"); - assert_encodes_as(59000, "59S"); - assert_encodes_as(60000, "1M"); - assert_encodes_as(80000, "80S"); - assert_encodes_as(90000, "90S"); - assert_encodes_as(120000, "2M"); - assert_encodes_as(20 * 60 * GPR_MS_PER_SEC, "20M"); - assert_encodes_as(60 * 60 * GPR_MS_PER_SEC, "1H"); - assert_encodes_as(10 * 60 * 60 * GPR_MS_PER_SEC, "10H"); -} - -static void assert_decodes_as(const char *buffer, grpc_millis expected) { - grpc_millis got; - uint32_t hash = gpr_murmur_hash3(buffer, strlen(buffer), 0); - gpr_log(GPR_INFO, "check decoding '%s' (hash=0x%x)", buffer, hash); - GPR_ASSERT(1 == grpc_http2_decode_timeout( - grpc_slice_from_static_string(buffer), &got)); - if (got != expected) { - gpr_log(GPR_ERROR, "got:'%" PRIdPTR "' != expected:'%" PRIdPTR "'", got, - expected); - abort(); - } -} - -void decode_suite(char ext, grpc_millis (*answer)(int64_t x)) { - long test_vals[] = {1, 12, 123, 1234, 12345, 123456, - 1234567, 12345678, 123456789, 98765432, 9876543, 987654, - 98765, 9876, 987, 98, 9}; - unsigned i; - char *input; - for (i = 0; i < GPR_ARRAY_SIZE(test_vals); i++) { - gpr_asprintf(&input, "%ld%c", test_vals[i], ext); - assert_decodes_as(input, answer(test_vals[i])); - gpr_free(input); - - gpr_asprintf(&input, " %ld%c", test_vals[i], ext); - assert_decodes_as(input, answer(test_vals[i])); - gpr_free(input); - - gpr_asprintf(&input, "%ld %c", test_vals[i], ext); - assert_decodes_as(input, answer(test_vals[i])); - gpr_free(input); - - gpr_asprintf(&input, "%ld %c ", test_vals[i], ext); - assert_decodes_as(input, answer(test_vals[i])); - gpr_free(input); - } -} - -static grpc_millis millis_from_nanos(int64_t x) { - return (grpc_millis)(x / GPR_NS_PER_MS + (x % GPR_NS_PER_MS != 0)); -} -static grpc_millis millis_from_micros(int64_t x) { - return (grpc_millis)(x / GPR_US_PER_MS + (x % GPR_US_PER_MS != 0)); -} -static grpc_millis millis_from_millis(int64_t x) { return (grpc_millis)x; } -static grpc_millis millis_from_seconds(int64_t x) { - return (grpc_millis)(x * GPR_MS_PER_SEC); -} -static grpc_millis millis_from_minutes(int64_t x) { - return (grpc_millis)(x * 60 * GPR_MS_PER_SEC); -} -static grpc_millis millis_from_hours(int64_t x) { - return (grpc_millis)(x * 3600 * GPR_MS_PER_SEC); -} - -void test_decoding(void) { - LOG_TEST("test_decoding"); - decode_suite('n', millis_from_nanos); - decode_suite('u', millis_from_micros); - decode_suite('m', millis_from_millis); - decode_suite('S', millis_from_seconds); - decode_suite('M', millis_from_minutes); - decode_suite('H', millis_from_hours); - assert_decodes_as("1000000000S", millis_from_seconds(1000 * 1000 * 1000)); - assert_decodes_as("1000000000000000000000u", GRPC_MILLIS_INF_FUTURE); - assert_decodes_as("1000000001S", GRPC_MILLIS_INF_FUTURE); - assert_decodes_as("2000000001S", GRPC_MILLIS_INF_FUTURE); - assert_decodes_as("9999999999S", GRPC_MILLIS_INF_FUTURE); -} - -static void assert_decoding_fails(const char *s) { - grpc_millis x; - GPR_ASSERT(0 == - grpc_http2_decode_timeout(grpc_slice_from_static_string(s), &x)); -} - -void test_decoding_fails(void) { - LOG_TEST("test_decoding_fails"); - assert_decoding_fails(""); - assert_decoding_fails(" "); - assert_decoding_fails("x"); - assert_decoding_fails("1"); - assert_decoding_fails("1x"); - assert_decoding_fails("1ux"); - assert_decoding_fails("!"); - assert_decoding_fails("n1"); - assert_decoding_fails("-1u"); -} - -int main(int argc, char **argv) { - grpc_test_init(argc, argv); - test_encoding(); - test_decoding(); - test_decoding_fails(); - return 0; -} diff --git a/test/core/transport/timeout_encoding_test.cc b/test/core/transport/timeout_encoding_test.cc new file mode 100644 index 0000000000..30357faed3 --- /dev/null +++ b/test/core/transport/timeout_encoding_test.cc @@ -0,0 +1,161 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed 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. + * + */ + +#include "src/core/lib/transport/timeout_encoding.h" + +#include +#include + +#include +#include +#include +#include +#include "src/core/lib/support/murmur_hash.h" +#include "src/core/lib/support/string.h" +#include "test/core/util/test_config.h" + +#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x) + +static void assert_encodes_as(grpc_millis ts, const char *s) { + char buffer[GRPC_HTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE]; + grpc_http2_encode_timeout(ts, buffer); + gpr_log(GPR_INFO, "check '%s' == '%s'", buffer, s); + GPR_ASSERT(0 == strcmp(buffer, s)); +} + +void test_encoding(void) { + LOG_TEST("test_encoding"); + assert_encodes_as(-1, "1n"); + assert_encodes_as(-10, "1n"); + assert_encodes_as(1, "1m"); + assert_encodes_as(10, "10m"); + assert_encodes_as(100, "100m"); + assert_encodes_as(890, "890m"); + assert_encodes_as(900, "900m"); + assert_encodes_as(901, "901m"); + assert_encodes_as(1000, "1S"); + assert_encodes_as(2000, "2S"); + assert_encodes_as(2500, "2500m"); + assert_encodes_as(59900, "59900m"); + assert_encodes_as(50000, "50S"); + assert_encodes_as(59000, "59S"); + assert_encodes_as(60000, "1M"); + assert_encodes_as(80000, "80S"); + assert_encodes_as(90000, "90S"); + assert_encodes_as(120000, "2M"); + assert_encodes_as(20 * 60 * GPR_MS_PER_SEC, "20M"); + assert_encodes_as(60 * 60 * GPR_MS_PER_SEC, "1H"); + assert_encodes_as(10 * 60 * 60 * GPR_MS_PER_SEC, "10H"); +} + +static void assert_decodes_as(const char *buffer, grpc_millis expected) { + grpc_millis got; + uint32_t hash = gpr_murmur_hash3(buffer, strlen(buffer), 0); + gpr_log(GPR_INFO, "check decoding '%s' (hash=0x%x)", buffer, hash); + GPR_ASSERT(1 == grpc_http2_decode_timeout( + grpc_slice_from_static_string(buffer), &got)); + if (got != expected) { + gpr_log(GPR_ERROR, "got:'%" PRIdPTR "' != expected:'%" PRIdPTR "'", got, + expected); + abort(); + } +} + +void decode_suite(char ext, grpc_millis (*answer)(int64_t x)) { + long test_vals[] = {1, 12, 123, 1234, 12345, 123456, + 1234567, 12345678, 123456789, 98765432, 9876543, 987654, + 98765, 9876, 987, 98, 9}; + unsigned i; + char *input; + for (i = 0; i < GPR_ARRAY_SIZE(test_vals); i++) { + gpr_asprintf(&input, "%ld%c", test_vals[i], ext); + assert_decodes_as(input, answer(test_vals[i])); + gpr_free(input); + + gpr_asprintf(&input, " %ld%c", test_vals[i], ext); + assert_decodes_as(input, answer(test_vals[i])); + gpr_free(input); + + gpr_asprintf(&input, "%ld %c", test_vals[i], ext); + assert_decodes_as(input, answer(test_vals[i])); + gpr_free(input); + + gpr_asprintf(&input, "%ld %c ", test_vals[i], ext); + assert_decodes_as(input, answer(test_vals[i])); + gpr_free(input); + } +} + +static grpc_millis millis_from_nanos(int64_t x) { + return (grpc_millis)(x / GPR_NS_PER_MS + (x % GPR_NS_PER_MS != 0)); +} +static grpc_millis millis_from_micros(int64_t x) { + return (grpc_millis)(x / GPR_US_PER_MS + (x % GPR_US_PER_MS != 0)); +} +static grpc_millis millis_from_millis(int64_t x) { return (grpc_millis)x; } +static grpc_millis millis_from_seconds(int64_t x) { + return (grpc_millis)(x * GPR_MS_PER_SEC); +} +static grpc_millis millis_from_minutes(int64_t x) { + return (grpc_millis)(x * 60 * GPR_MS_PER_SEC); +} +static grpc_millis millis_from_hours(int64_t x) { + return (grpc_millis)(x * 3600 * GPR_MS_PER_SEC); +} + +void test_decoding(void) { + LOG_TEST("test_decoding"); + decode_suite('n', millis_from_nanos); + decode_suite('u', millis_from_micros); + decode_suite('m', millis_from_millis); + decode_suite('S', millis_from_seconds); + decode_suite('M', millis_from_minutes); + decode_suite('H', millis_from_hours); + assert_decodes_as("1000000000S", millis_from_seconds(1000 * 1000 * 1000)); + assert_decodes_as("1000000000000000000000u", GRPC_MILLIS_INF_FUTURE); + assert_decodes_as("1000000001S", GRPC_MILLIS_INF_FUTURE); + assert_decodes_as("2000000001S", GRPC_MILLIS_INF_FUTURE); + assert_decodes_as("9999999999S", GRPC_MILLIS_INF_FUTURE); +} + +static void assert_decoding_fails(const char *s) { + grpc_millis x; + GPR_ASSERT(0 == + grpc_http2_decode_timeout(grpc_slice_from_static_string(s), &x)); +} + +void test_decoding_fails(void) { + LOG_TEST("test_decoding_fails"); + assert_decoding_fails(""); + assert_decoding_fails(" "); + assert_decoding_fails("x"); + assert_decoding_fails("1"); + assert_decoding_fails("1x"); + assert_decoding_fails("1ux"); + assert_decoding_fails("!"); + assert_decoding_fails("n1"); + assert_decoding_fails("-1u"); +} + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + test_encoding(); + test_decoding(); + test_decoding_fails(); + return 0; +} -- cgit v1.2.3 From e5863246272f5e15d17f74606f6357c6aef24e6e Mon Sep 17 00:00:00 2001 From: Yash Tibrewal Date: Mon, 30 Oct 2017 17:52:07 -0700 Subject: BUILD files changes for bazel --- test/core/backoff/BUILD | 2 +- test/core/census/BUILD | 8 ++--- test/core/channel/BUILD | 6 ++-- test/core/client_channel/BUILD | 4 +-- test/core/client_channel/lb_policies_test.cc | 4 +-- test/core/client_channel/resolvers/BUILD | 8 ++--- test/core/compression/BUILD | 6 ++-- test/core/fling/BUILD | 8 ++--- test/core/handshake/BUILD | 4 +-- test/core/http/BUILD | 10 +++--- test/core/iomgr/BUILD | 42 +++++++++++----------- test/core/json/BUILD | 10 +++--- test/core/nanopb/BUILD | 4 +-- test/core/network_benchmarks/BUILD | 2 +- .../core/network_benchmarks/low_level_ping_pong.cc | 12 ++++--- test/core/security/BUILD | 20 +++++------ test/core/slice/BUILD | 16 ++++----- test/core/support/BUILD | 36 +++++++++---------- test/core/surface/BUILD | 24 ++++++------- test/core/transport/BUILD | 12 +++---- test/core/transport/chttp2/BUILD | 18 +++++----- test/core/tsi/BUILD | 8 ++--- test/core/util/BUILD | 24 ++++++------- 23 files changed, 146 insertions(+), 142 deletions(-) (limited to 'test/core/transport') diff --git a/test/core/backoff/BUILD b/test/core/backoff/BUILD index 4ae762007c..97a08aecd0 100644 --- a/test/core/backoff/BUILD +++ b/test/core/backoff/BUILD @@ -25,7 +25,7 @@ package( grpc_cc_test( name = "backoff_test", - srcs = ["backoff_test.c"], + srcs = ["backoff_test.cc"], language = "C", deps = [ "//:grpc", diff --git a/test/core/census/BUILD b/test/core/census/BUILD index 24fd2807d0..52d0b772d1 100644 --- a/test/core/census/BUILD +++ b/test/core/census/BUILD @@ -20,7 +20,7 @@ licenses(["notice"]) # Apache v2 grpc_cc_test( name = "context_test", - srcs = ["context_test.c"], + srcs = ["context_test.cc"], language = "C", deps = [ "//:gpr", @@ -32,7 +32,7 @@ grpc_cc_test( grpc_cc_test( name = "mlog_test", - srcs = ["mlog_test.c"], + srcs = ["mlog_test.cc"], language = "C", deps = [ "//:gpr", @@ -44,7 +44,7 @@ grpc_cc_test( grpc_cc_test( name = "resource_test", - srcs = ["resource_test.c"], + srcs = ["resource_test.cc"], language = "C", data = [ ":data/resource_empty_name.pb", @@ -64,7 +64,7 @@ grpc_cc_test( grpc_cc_test( name = "trace_context_test", - srcs = ["trace_context_test.c"], + srcs = ["trace_context_test.cc"], language = "C", data = [ ":data/context_empty.pb", diff --git a/test/core/channel/BUILD b/test/core/channel/BUILD index 5ac77c449b..14e45bf3c7 100644 --- a/test/core/channel/BUILD +++ b/test/core/channel/BUILD @@ -20,7 +20,7 @@ licenses(["notice"]) # Apache v2 grpc_cc_test( name = "channel_args_test", - srcs = ["channel_args_test.c"], + srcs = ["channel_args_test.cc"], language = "C", deps = [ "//:gpr", @@ -32,7 +32,7 @@ grpc_cc_test( grpc_cc_test( name = "channel_stack_test", - srcs = ["channel_stack_test.c"], + srcs = ["channel_stack_test.cc"], language = "C", deps = [ "//:gpr", @@ -44,7 +44,7 @@ grpc_cc_test( grpc_cc_test( name = "channel_stack_builder_test", - srcs = ["channel_stack_builder_test.c"], + srcs = ["channel_stack_builder_test.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/client_channel/BUILD b/test/core/client_channel/BUILD index c4a93238f2..75628413c5 100644 --- a/test/core/client_channel/BUILD +++ b/test/core/client_channel/BUILD @@ -22,7 +22,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "uri_fuzzer_test", - srcs = ["uri_fuzzer_test.c"], + srcs = ["uri_fuzzer_test.cc"], language = "C", corpus = "uri_corpus", deps = [ @@ -34,7 +34,7 @@ grpc_fuzzer( grpc_cc_test( name = "lb_policies_test", - srcs = ["lb_policies_test.c"], + srcs = ["lb_policies_test.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/client_channel/lb_policies_test.cc b/test/core/client_channel/lb_policies_test.cc index aa0e1ba14d..25b896697e 100644 --- a/test/core/client_channel/lb_policies_test.cc +++ b/test/core/client_channel/lb_policies_test.cc @@ -234,8 +234,8 @@ static request_sequences request_sequences_create(size_t n) { res.n = n; res.connections = static_cast(gpr_malloc(sizeof(*res.connections) * n)); - res.connectivity_states = - static_cast(gpr_malloc(sizeof(*res.connectivity_states) * n)); + res.connectivity_states = static_cast( + gpr_malloc(sizeof(*res.connectivity_states) * n)); memset(res.connections, 0, sizeof(*res.connections) * n); memset(res.connectivity_states, 0, sizeof(*res.connectivity_states) * n); return res; diff --git a/test/core/client_channel/resolvers/BUILD b/test/core/client_channel/resolvers/BUILD index 0907e06623..ae3ce0b257 100644 --- a/test/core/client_channel/resolvers/BUILD +++ b/test/core/client_channel/resolvers/BUILD @@ -20,7 +20,7 @@ licenses(["notice"]) # Apache v2 grpc_cc_test( name = "dns_resolver_connectivity_test", - srcs = ["dns_resolver_connectivity_test.c"], + srcs = ["dns_resolver_connectivity_test.cc"], language = "C", deps = [ "//:gpr", @@ -32,7 +32,7 @@ grpc_cc_test( grpc_cc_test( name = "dns_resolver_test", - srcs = ["dns_resolver_test.c"], + srcs = ["dns_resolver_test.cc"], language = "C", deps = [ "//:gpr", @@ -44,7 +44,7 @@ grpc_cc_test( grpc_cc_test( name = "sockaddr_resolver_test", - srcs = ["sockaddr_resolver_test.c"], + srcs = ["sockaddr_resolver_test.cc"], language = "C", deps = [ "//:gpr", @@ -56,7 +56,7 @@ grpc_cc_test( grpc_cc_test( name = "fake_resolver_test", - srcs = ["fake_resolver_test.c"], + srcs = ["fake_resolver_test.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/compression/BUILD b/test/core/compression/BUILD index 1ab6e35f0d..60453fc036 100644 --- a/test/core/compression/BUILD +++ b/test/core/compression/BUILD @@ -20,7 +20,7 @@ licenses(["notice"]) # Apache v2 grpc_cc_test( name = "algorithm_test", - srcs = ["algorithm_test.c"], + srcs = ["algorithm_test.cc"], language = "C", deps = [ "//:gpr", @@ -32,7 +32,7 @@ grpc_cc_test( grpc_cc_test( name = "compression_test", - srcs = ["compression_test.c"], + srcs = ["compression_test.cc"], language = "C", deps = [ "//:gpr", @@ -44,7 +44,7 @@ grpc_cc_test( grpc_cc_test( name = "message_compress_test", - srcs = ["message_compress_test.c"], + srcs = ["message_compress_test.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/fling/BUILD b/test/core/fling/BUILD index 27b2b5bec6..beacae7a75 100644 --- a/test/core/fling/BUILD +++ b/test/core/fling/BUILD @@ -23,7 +23,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_cc_binary( name = "client", testonly = 1, - srcs = ["client.c"], + srcs = ["client.cc"], language = "C", deps = [ "//:gpr", @@ -37,7 +37,7 @@ grpc_cc_binary( grpc_cc_binary( name = "server", testonly = 1, - srcs = ["server.c"], + srcs = ["server.cc"], language = "C", deps = [ "//:gpr", @@ -50,7 +50,7 @@ grpc_cc_binary( grpc_cc_test( name = "fling", - srcs = ["fling_test.c"], + srcs = ["fling_test.cc"], data = [ ":client", ":server", @@ -66,7 +66,7 @@ grpc_cc_test( grpc_cc_test( name = "fling_stream", - srcs = ["fling_stream_test.c"], + srcs = ["fling_stream_test.cc"], data = [ ":client", ":server", diff --git a/test/core/handshake/BUILD b/test/core/handshake/BUILD index 8e462cfc5b..a2ac501927 100644 --- a/test/core/handshake/BUILD +++ b/test/core/handshake/BUILD @@ -20,7 +20,7 @@ licenses(["notice"]) # Apache v2 grpc_cc_test( name = "client_ssl", - srcs = ["client_ssl.c"], + srcs = ["client_ssl.cc"], language = "C", data = [ "//src/core/tsi/test_creds:ca.pem", @@ -37,7 +37,7 @@ grpc_cc_test( grpc_cc_test( name = "server_ssl", - srcs = ["server_ssl.c"], + srcs = ["server_ssl.cc"], language = "C", data = [ "//src/core/tsi/test_creds:ca.pem", diff --git a/test/core/http/BUILD b/test/core/http/BUILD index fffdac5e08..4dbba73f31 100644 --- a/test/core/http/BUILD +++ b/test/core/http/BUILD @@ -22,7 +22,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "response_fuzzer", - srcs = ["response_fuzzer.c"], + srcs = ["response_fuzzer.cc"], language = "C", corpus = "response_corpus", deps = [ @@ -34,7 +34,7 @@ grpc_fuzzer( grpc_fuzzer( name = "request_fuzzer", - srcs = ["request_fuzzer.c"], + srcs = ["request_fuzzer.cc"], language = "C", corpus = "request_corpus", deps = [ @@ -64,7 +64,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_cc_test( name = "httpcli_test", - srcs = ["httpcli_test.c"], + srcs = ["httpcli_test.cc"], language = "C", data = ["test_server.py"], deps = [ @@ -78,7 +78,7 @@ grpc_cc_test( grpc_cc_test( name = "httpscli_test", - srcs = ["httpscli_test.c"], + srcs = ["httpscli_test.cc"], language = "C", data = ["test_server.py"], deps = [ @@ -92,7 +92,7 @@ grpc_cc_test( grpc_cc_test( name = "parser_test", - srcs = ["parser_test.c"], + srcs = ["parser_test.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/iomgr/BUILD b/test/core/iomgr/BUILD index 7620d1de21..b4490e7a5f 100644 --- a/test/core/iomgr/BUILD +++ b/test/core/iomgr/BUILD @@ -22,7 +22,7 @@ grpc_package(name = "test/core/iomgr", visibility = "public") # Useful for third grpc_cc_library( name = "endpoint_tests", - srcs = ["endpoint_tests.c"], + srcs = ["endpoint_tests.cc"], hdrs = ["endpoint_tests.h"], language = "C", visibility = ["//test:__subpackages__"], @@ -36,7 +36,7 @@ grpc_cc_library( grpc_cc_test( name = "combiner_test", - srcs = ["combiner_test.c"], + srcs = ["combiner_test.cc"], language = "C", deps = [ "//:gpr", @@ -48,7 +48,7 @@ grpc_cc_test( grpc_cc_test( name = "endpoint_pair_test", - srcs = ["endpoint_pair_test.c"], + srcs = ["endpoint_pair_test.cc"], language = "C", deps = [ ":endpoint_tests", @@ -61,7 +61,7 @@ grpc_cc_test( grpc_cc_test( name = "ev_epollsig_linux_test", - srcs = ["ev_epollsig_linux_test.c"], + srcs = ["ev_epollsig_linux_test.cc"], deps = [ "//:gpr", "//:grpc", @@ -73,7 +73,7 @@ grpc_cc_test( grpc_cc_test( name = "fd_conservation_posix_test", - srcs = ["fd_conservation_posix_test.c"], + srcs = ["fd_conservation_posix_test.cc"], language = "C", deps = [ "//:gpr", @@ -85,7 +85,7 @@ grpc_cc_test( grpc_cc_test( name = "fd_posix_test", - srcs = ["fd_posix_test.c"], + srcs = ["fd_posix_test.cc"], language = "C", deps = [ "//:gpr", @@ -97,7 +97,7 @@ grpc_cc_test( grpc_cc_test( name = "load_file_test", - srcs = ["load_file_test.c"], + srcs = ["load_file_test.cc"], language = "C", deps = [ "//:gpr", @@ -109,7 +109,7 @@ grpc_cc_test( grpc_cc_test( name = "pollset_set_test", - srcs = ["pollset_set_test.c"], + srcs = ["pollset_set_test.cc"], language = "C", deps = [ "//:gpr", @@ -121,7 +121,7 @@ grpc_cc_test( grpc_cc_test( name = "resolve_address_posix_test", - srcs = ["resolve_address_posix_test.c"], + srcs = ["resolve_address_posix_test.cc"], language = "C", deps = [ "//:gpr", @@ -133,7 +133,7 @@ grpc_cc_test( grpc_cc_test( name = "resolve_address_test", - srcs = ["resolve_address_test.c"], + srcs = ["resolve_address_test.cc"], language = "C", deps = [ "//:gpr", @@ -145,7 +145,7 @@ grpc_cc_test( grpc_cc_test( name = "resource_quota_test", - srcs = ["resource_quota_test.c"], + srcs = ["resource_quota_test.cc"], language = "C", deps = [ "//:gpr", @@ -157,7 +157,7 @@ grpc_cc_test( grpc_cc_test( name = "sockaddr_utils_test", - srcs = ["sockaddr_utils_test.c"], + srcs = ["sockaddr_utils_test.cc"], language = "C", deps = [ "//:gpr", @@ -169,7 +169,7 @@ grpc_cc_test( grpc_cc_test( name = "socket_utils_test", - srcs = ["socket_utils_test.c"], + srcs = ["socket_utils_test.cc"], language = "C", deps = [ "//:gpr", @@ -181,7 +181,7 @@ grpc_cc_test( grpc_cc_test( name = "tcp_client_posix_test", - srcs = ["tcp_client_posix_test.c"], + srcs = ["tcp_client_posix_test.cc"], language = "C", deps = [ "//:gpr", @@ -193,7 +193,7 @@ grpc_cc_test( grpc_cc_test( name = "tcp_posix_test", - srcs = ["tcp_posix_test.c"], + srcs = ["tcp_posix_test.cc"], language = "C", deps = [ ":endpoint_tests", @@ -206,7 +206,7 @@ grpc_cc_test( grpc_cc_test( name = "tcp_server_posix_test", - srcs = ["tcp_server_posix_test.c"], + srcs = ["tcp_server_posix_test.cc"], language = "C", deps = [ "//:gpr", @@ -218,7 +218,7 @@ grpc_cc_test( grpc_cc_test( name = "time_averaged_stats_test", - srcs = ["time_averaged_stats_test.c"], + srcs = ["time_averaged_stats_test.cc"], language = "C", deps = [ "//:gpr", @@ -230,7 +230,7 @@ grpc_cc_test( grpc_cc_test( name = "timer_heap_test", - srcs = ["timer_heap_test.c"], + srcs = ["timer_heap_test.cc"], language = "C", deps = [ "//:gpr", @@ -242,7 +242,7 @@ grpc_cc_test( grpc_cc_test( name = "timer_list_test", - srcs = ["timer_list_test.c"], + srcs = ["timer_list_test.cc"], language = "C", deps = [ "//:gpr", @@ -254,7 +254,7 @@ grpc_cc_test( grpc_cc_test( name = "udp_server_test", - srcs = ["udp_server_test.c"], + srcs = ["udp_server_test.cc"], language = "C", deps = [ "//:gpr", @@ -266,7 +266,7 @@ grpc_cc_test( grpc_cc_test( name = "wakeup_fd_cv_test", - srcs = ["wakeup_fd_cv_test.c"], + srcs = ["wakeup_fd_cv_test.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/json/BUILD b/test/core/json/BUILD index 3ff7918677..6e92fdc069 100644 --- a/test/core/json/BUILD +++ b/test/core/json/BUILD @@ -22,7 +22,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "json_fuzzer", - srcs = ["fuzzer.c"], + srcs = ["fuzzer.cc"], language = "C", corpus = "corpus", deps = [ @@ -35,7 +35,7 @@ grpc_fuzzer( grpc_cc_binary( name = "json_rewrite", testonly = 1, - srcs = ["json_rewrite.c"], + srcs = ["json_rewrite.cc"], language = "C", deps = [ "//:gpr", @@ -47,7 +47,7 @@ grpc_cc_binary( grpc_cc_test( name = "json_rewrite_test", - srcs = ["json_rewrite_test.c"], + srcs = ["json_rewrite_test.cc"], language = "C", data = [ "rewrite_test_input.json", @@ -65,7 +65,7 @@ grpc_cc_test( grpc_cc_test( name = "json_stream_error_test", - srcs = ["json_stream_error_test.c"], + srcs = ["json_stream_error_test.cc"], language = "C", deps = [ "//:gpr", @@ -77,7 +77,7 @@ grpc_cc_test( grpc_cc_test( name = "json_test", - srcs = ["json_test.c"], + srcs = ["json_test.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/nanopb/BUILD b/test/core/nanopb/BUILD index f332207e2d..a814cd3411 100644 --- a/test/core/nanopb/BUILD +++ b/test/core/nanopb/BUILD @@ -22,7 +22,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "fuzzer_response", - srcs = ["fuzzer_response.c"], + srcs = ["fuzzer_response.cc"], language = "C", corpus = "corpus_response", deps = [ @@ -34,7 +34,7 @@ grpc_fuzzer( grpc_fuzzer( name = "fuzzer_serverlist", - srcs = ["fuzzer_serverlist.c"], + srcs = ["fuzzer_serverlist.cc"], language = "C", corpus = "corpus_serverlist", deps = [ diff --git a/test/core/network_benchmarks/BUILD b/test/core/network_benchmarks/BUILD index 0e15393030..0db3ad7940 100644 --- a/test/core/network_benchmarks/BUILD +++ b/test/core/network_benchmarks/BUILD @@ -22,7 +22,7 @@ licenses(["notice"]) # Apache v2 grpc_cc_binary( name = "low_level_ping_pong", - srcs = ["low_level_ping_pong.c"], + srcs = ["low_level_ping_pong.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/network_benchmarks/low_level_ping_pong.cc b/test/core/network_benchmarks/low_level_ping_pong.cc index acd84aaa09..8aed0bccbd 100644 --- a/test/core/network_benchmarks/low_level_ping_pong.cc +++ b/test/core/network_benchmarks/low_level_ping_pong.cc @@ -594,8 +594,10 @@ static int run_all_benchmarks(size_t msg_size) { test_strategy *strategy = &test_strategies[i]; size_t j; for (j = 0; j < GPR_ARRAY_SIZE(socket_types); ++j) { - thread_args *client_args = static_cast(gpr_malloc(sizeof(thread_args))); - thread_args *server_args = static_cast(gpr_malloc(sizeof(thread_args))); + thread_args *client_args = + static_cast(gpr_malloc(sizeof(thread_args))); + thread_args *server_args = + static_cast(gpr_malloc(sizeof(thread_args))); char *socket_type = socket_types[j]; client_args->read_bytes = strategy->read_strategy; @@ -618,8 +620,10 @@ static int run_all_benchmarks(size_t msg_size) { } int main(int argc, char **argv) { - thread_args *client_args = static_cast(gpr_malloc(sizeof(thread_args))); - thread_args *server_args = static_cast(gpr_malloc(sizeof(thread_args))); + thread_args *client_args = + static_cast(gpr_malloc(sizeof(thread_args))); + thread_args *server_args = + static_cast(gpr_malloc(sizeof(thread_args))); int msg_size = -1; const char *read_strategy = NULL; const char *socket_type = NULL; diff --git a/test/core/security/BUILD b/test/core/security/BUILD index 83b1747648..e771465be2 100644 --- a/test/core/security/BUILD +++ b/test/core/security/BUILD @@ -22,7 +22,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "ssl_server_fuzzer", - srcs = ["ssl_server_fuzzer.c"], + srcs = ["ssl_server_fuzzer.cc"], language = "C", corpus = "corpus", deps = [ @@ -35,7 +35,7 @@ grpc_fuzzer( grpc_cc_library( name = "oauth2_utils", - srcs = ["oauth2_utils.c"], + srcs = ["oauth2_utils.cc"], hdrs = ["oauth2_utils.h"], language = "C", deps = ["//:grpc"], @@ -44,7 +44,7 @@ grpc_cc_library( grpc_cc_test( name = "auth_context_test", - srcs = ["auth_context_test.c"], + srcs = ["auth_context_test.cc"], language = "C", deps = [ "//:gpr", @@ -56,7 +56,7 @@ grpc_cc_test( grpc_cc_test( name = "credentials_test", - srcs = ["credentials_test.c"], + srcs = ["credentials_test.cc"], language = "C", deps = [ "//:gpr", @@ -68,7 +68,7 @@ grpc_cc_test( grpc_cc_test( name = "secure_endpoint_test", - srcs = ["secure_endpoint_test.c"], + srcs = ["secure_endpoint_test.cc"], language = "C", deps = [ "//:gpr", @@ -81,7 +81,7 @@ grpc_cc_test( grpc_cc_test( name = "security_connector_test", - srcs = ["security_connector_test.c"], + srcs = ["security_connector_test.cc"], language = "C", deps = [ "//:gpr", @@ -93,7 +93,7 @@ grpc_cc_test( grpc_cc_test( name = "ssl_credentials_test", - srcs = ["ssl_credentials_test.c"], + srcs = ["ssl_credentials_test.cc"], language = "C", deps = [ "//:gpr", @@ -105,7 +105,7 @@ grpc_cc_test( grpc_cc_binary( name = "create_jwt", - srcs = ["create_jwt.c"], + srcs = ["create_jwt.cc"], language = "C", deps = [ "//:gpr", @@ -115,7 +115,7 @@ grpc_cc_binary( grpc_cc_binary( name = "fetch_oauth2", - srcs = ["fetch_oauth2.c"], + srcs = ["fetch_oauth2.cc"], language = "C", deps = [ ":oauth2_utils", @@ -126,7 +126,7 @@ grpc_cc_binary( grpc_cc_binary( name = "verify_jwt", - srcs = ["verify_jwt.c"], + srcs = ["verify_jwt.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/slice/BUILD b/test/core/slice/BUILD index ad2308a4d6..d7bcc37f6b 100644 --- a/test/core/slice/BUILD +++ b/test/core/slice/BUILD @@ -22,7 +22,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "percent_encode_fuzzer", - srcs = ["percent_encode_fuzzer.c"], + srcs = ["percent_encode_fuzzer.cc"], language = "C", corpus = "percent_encode_corpus", deps = [ @@ -34,7 +34,7 @@ grpc_fuzzer( grpc_fuzzer( name = "percent_decode_fuzzer", - srcs = ["percent_decode_fuzzer.c"], + srcs = ["percent_decode_fuzzer.cc"], language = "C", corpus = "percent_decode_corpus", deps = [ @@ -46,7 +46,7 @@ grpc_fuzzer( grpc_cc_test( name = "percent_encoding_test", - srcs = ["percent_encoding_test.c"], + srcs = ["percent_encoding_test.cc"], language = "C", deps = [ "//:gpr", @@ -58,14 +58,14 @@ grpc_cc_test( grpc_cc_test( name = "slice_test", - srcs = ["slice_test.c"], + srcs = ["slice_test.cc"], deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], language = "C", ) grpc_cc_test( name = "slice_string_helpers_test", - srcs = ["slice_string_helpers_test.c"], + srcs = ["slice_string_helpers_test.cc"], language = "C", deps = [ "//:gpr", @@ -77,21 +77,21 @@ grpc_cc_test( grpc_cc_test( name = "slice_buffer_test", - srcs = ["slice_buffer_test.c"], + srcs = ["slice_buffer_test.cc"], deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], language = "C", ) grpc_cc_test( name = "slice_hash_table_test", - srcs = ["slice_hash_table_test.c"], + srcs = ["slice_hash_table_test.cc"], deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], language = "C", ) grpc_cc_test( name = "b64_test", - srcs = ["b64_test.c"], + srcs = ["b64_test.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/support/BUILD b/test/core/support/BUILD index 3bdc1c4186..c1edb7ee8a 100644 --- a/test/core/support/BUILD +++ b/test/core/support/BUILD @@ -20,7 +20,7 @@ grpc_package(name = "test/core/support") grpc_cc_test( name = "alloc_test", - srcs = ["alloc_test.c"], + srcs = ["alloc_test.cc"], language = "C", deps = [ "//:gpr", @@ -30,7 +30,7 @@ grpc_cc_test( grpc_cc_test( name = "avl_test", - srcs = ["avl_test.c"], + srcs = ["avl_test.cc"], language = "C", deps = [ "//:gpr", @@ -40,7 +40,7 @@ grpc_cc_test( grpc_cc_test( name = "cmdline_test", - srcs = ["cmdline_test.c"], + srcs = ["cmdline_test.cc"], language = "C", deps = [ "//:gpr", @@ -50,7 +50,7 @@ grpc_cc_test( grpc_cc_test( name = "cpu_test", - srcs = ["cpu_test.c"], + srcs = ["cpu_test.cc"], language = "C", deps = [ "//:gpr", @@ -60,7 +60,7 @@ grpc_cc_test( grpc_cc_test( name = "env_test", - srcs = ["env_test.c"], + srcs = ["env_test.cc"], language = "C", deps = [ "//:gpr", @@ -70,7 +70,7 @@ grpc_cc_test( grpc_cc_test( name = "histogram_test", - srcs = ["histogram_test.c"], + srcs = ["histogram_test.cc"], language = "C", deps = [ "//:gpr", @@ -80,7 +80,7 @@ grpc_cc_test( grpc_cc_test( name = "host_port_test", - srcs = ["host_port_test.c"], + srcs = ["host_port_test.cc"], language = "C", deps = [ "//:gpr", @@ -90,7 +90,7 @@ grpc_cc_test( grpc_cc_test( name = "log_test", - srcs = ["log_test.c"], + srcs = ["log_test.cc"], language = "C", deps = [ "//:gpr", @@ -100,7 +100,7 @@ grpc_cc_test( grpc_cc_test( name = "mpscq_test", - srcs = ["mpscq_test.c"], + srcs = ["mpscq_test.cc"], language = "C", deps = [ "//:gpr", @@ -110,7 +110,7 @@ grpc_cc_test( grpc_cc_test( name = "murmur_hash_test", - srcs = ["murmur_hash_test.c"], + srcs = ["murmur_hash_test.cc"], language = "C", deps = [ "//:gpr", @@ -120,7 +120,7 @@ grpc_cc_test( grpc_cc_test( name = "stack_lockfree_test", - srcs = ["stack_lockfree_test.c"], + srcs = ["stack_lockfree_test.cc"], language = "C", deps = [ "//:gpr", @@ -130,7 +130,7 @@ grpc_cc_test( grpc_cc_test( name = "string_test", - srcs = ["string_test.c"], + srcs = ["string_test.cc"], language = "C", deps = [ "//:gpr", @@ -140,7 +140,7 @@ grpc_cc_test( grpc_cc_test( name = "spinlock_test", - srcs = ["spinlock_test.c"], + srcs = ["spinlock_test.cc"], language = "C", deps = [ "//:gpr", @@ -150,7 +150,7 @@ grpc_cc_test( grpc_cc_test( name = "sync_test", - srcs = ["sync_test.c"], + srcs = ["sync_test.cc"], language = "C", deps = [ "//:gpr", @@ -160,7 +160,7 @@ grpc_cc_test( grpc_cc_test( name = "thd_test", - srcs = ["thd_test.c"], + srcs = ["thd_test.cc"], language = "C", deps = [ "//:gpr", @@ -170,7 +170,7 @@ grpc_cc_test( grpc_cc_test( name = "time_test", - srcs = ["time_test.c"], + srcs = ["time_test.cc"], language = "C", deps = [ "//:gpr", @@ -180,7 +180,7 @@ grpc_cc_test( grpc_cc_test( name = "tls_test", - srcs = ["tls_test.c"], + srcs = ["tls_test.cc"], language = "C", deps = [ "//:gpr", @@ -190,7 +190,7 @@ grpc_cc_test( grpc_cc_test( name = "useful_test", - srcs = ["useful_test.c"], + srcs = ["useful_test.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/surface/BUILD b/test/core/surface/BUILD index 17db7737f7..3514278113 100644 --- a/test/core/surface/BUILD +++ b/test/core/surface/BUILD @@ -20,7 +20,7 @@ grpc_package(name = "test/core/surface") grpc_cc_test( name = "alarm_test", - srcs = ["alarm_test.c"], + srcs = ["alarm_test.cc"], language = "C", deps = [ "//:gpr", @@ -32,7 +32,7 @@ grpc_cc_test( grpc_cc_test( name = "grpc_byte_buffer_reader_test", - srcs = ["byte_buffer_reader_test.c"], + srcs = ["byte_buffer_reader_test.cc"], language = "C", deps = [ "//:gpr", @@ -44,7 +44,7 @@ grpc_cc_test( grpc_cc_test( name = "channel_create_test", - srcs = ["channel_create_test.c"], + srcs = ["channel_create_test.cc"], language = "C", deps = [ "//:gpr", @@ -56,7 +56,7 @@ grpc_cc_test( grpc_cc_test( name = "grpc_completion_queue_test", - srcs = ["completion_queue_test.c"], + srcs = ["completion_queue_test.cc"], language = "C", deps = [ "//:gpr", @@ -68,7 +68,7 @@ grpc_cc_test( grpc_cc_test( name = "concurrent_connectivity_test", - srcs = ["concurrent_connectivity_test.c"], + srcs = ["concurrent_connectivity_test.cc"], language = "C", deps = [ "//:gpr", @@ -80,7 +80,7 @@ grpc_cc_test( grpc_cc_test( name = "init_test", - srcs = ["init_test.c"], + srcs = ["init_test.cc"], language = "C", deps = [ "//:gpr", @@ -92,7 +92,7 @@ grpc_cc_test( grpc_cc_test( name = "grpc_invalid_channel_args_test", - srcs = ["invalid_channel_args_test.c"], + srcs = ["invalid_channel_args_test.cc"], language = "C", deps = [ "//:gpr", @@ -104,7 +104,7 @@ grpc_cc_test( grpc_cc_test( name = "lame_client_test", - srcs = ["lame_client_test.c"], + srcs = ["lame_client_test.cc"], language = "C", deps = [ "//:gpr", @@ -129,7 +129,7 @@ grpc_cc_test( grpc_cc_test( name = "secure_channel_create_test", - srcs = ["secure_channel_create_test.c"], + srcs = ["secure_channel_create_test.cc"], language = "C", deps = [ "//:gpr", @@ -141,7 +141,7 @@ grpc_cc_test( grpc_cc_test( name = "sequential_connectivity_test", - srcs = ["sequential_connectivity_test.c"], + srcs = ["sequential_connectivity_test.cc"], language = "C", deps = [ "//:gpr", @@ -154,7 +154,7 @@ grpc_cc_test( grpc_cc_test( name = "server_chttp2_test", - srcs = ["server_chttp2_test.c"], + srcs = ["server_chttp2_test.cc"], language = "C", deps = [ "//:gpr", @@ -166,7 +166,7 @@ grpc_cc_test( grpc_cc_test( name = "server_test", - srcs = ["server_test.c"], + srcs = ["server_test.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/transport/BUILD b/test/core/transport/BUILD index edd27b8a5f..d49731a765 100644 --- a/test/core/transport/BUILD +++ b/test/core/transport/BUILD @@ -35,7 +35,7 @@ grpc_cc_test( grpc_cc_test( name = "byte_stream_test", - srcs = ["byte_stream_test.c"], + srcs = ["byte_stream_test.cc"], language = "C", deps = [ "//:gpr", @@ -47,7 +47,7 @@ grpc_cc_test( grpc_cc_test( name = "connectivity_state_test", - srcs = ["connectivity_state_test.c"], + srcs = ["connectivity_state_test.cc"], language = "C", deps = [ "//:gpr", @@ -59,7 +59,7 @@ grpc_cc_test( grpc_cc_test( name = "metadata_test", - srcs = ["metadata_test.c"], + srcs = ["metadata_test.cc"], language = "C", deps = [ "//:gpr", @@ -86,7 +86,7 @@ grpc_cc_test( grpc_cc_test( name = "status_conversion_test", - srcs = ["status_conversion_test.c"], + srcs = ["status_conversion_test.cc"], language = "C", deps = [ "//:gpr", @@ -98,7 +98,7 @@ grpc_cc_test( grpc_cc_test( name = "stream_owned_slice_test", - srcs = ["stream_owned_slice_test.c"], + srcs = ["stream_owned_slice_test.cc"], language = "C", deps = [ "//:gpr", @@ -110,7 +110,7 @@ grpc_cc_test( grpc_cc_test( name = "timeout_encoding_test", - srcs = ["timeout_encoding_test.c"], + srcs = ["timeout_encoding_test.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/transport/chttp2/BUILD b/test/core/transport/chttp2/BUILD index 6081940243..dbb3670856 100644 --- a/test/core/transport/chttp2/BUILD +++ b/test/core/transport/chttp2/BUILD @@ -22,7 +22,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "hpack_parser_fuzzer", - srcs = ["hpack_parser_fuzzer_test.c"], + srcs = ["hpack_parser_fuzzer_test.cc"], corpus = "hpack_parser_corpus", deps = [ "//:grpc", @@ -32,7 +32,7 @@ grpc_fuzzer( grpc_cc_test( name = "alpn_test", - srcs = ["alpn_test.c"], + srcs = ["alpn_test.cc"], language = "C", deps = [ "//:gpr", @@ -44,7 +44,7 @@ grpc_cc_test( grpc_cc_test( name = "bin_decoder_test", - srcs = ["bin_decoder_test.c"], + srcs = ["bin_decoder_test.cc"], language = "C", deps = [ "//:gpr", @@ -56,7 +56,7 @@ grpc_cc_test( grpc_cc_test( name = "bin_encoder_test", - srcs = ["bin_encoder_test.c"], + srcs = ["bin_encoder_test.cc"], language = "C", deps = [ "//:gpr", @@ -68,7 +68,7 @@ grpc_cc_test( grpc_cc_test( name = "hpack_encoder_test", - srcs = ["hpack_encoder_test.c"], + srcs = ["hpack_encoder_test.cc"], language = "C", deps = [ "//:gpr", @@ -80,7 +80,7 @@ grpc_cc_test( grpc_cc_test( name = "hpack_parser_test", - srcs = ["hpack_parser_test.c"], + srcs = ["hpack_parser_test.cc"], language = "C", deps = [ "//:gpr", @@ -92,7 +92,7 @@ grpc_cc_test( grpc_cc_test( name = "hpack_table_test", - srcs = ["hpack_table_test.c"], + srcs = ["hpack_table_test.cc"], language = "C", deps = [ "//:gpr", @@ -104,7 +104,7 @@ grpc_cc_test( grpc_cc_test( name = "stream_map_test", - srcs = ["stream_map_test.c"], + srcs = ["stream_map_test.cc"], language = "C", deps = [ "//:gpr", @@ -116,7 +116,7 @@ grpc_cc_test( grpc_cc_test( name = "varint_test", - srcs = ["varint_test.c"], + srcs = ["varint_test.cc"], language = "C", deps = [ "//:gpr", diff --git a/test/core/tsi/BUILD b/test/core/tsi/BUILD index 0c5509dda6..84878be0dc 100644 --- a/test/core/tsi/BUILD +++ b/test/core/tsi/BUILD @@ -20,7 +20,7 @@ grpc_package(name = "test/core/tsi") grpc_cc_library( name = "transport_security_test_lib", - srcs = ["transport_security_test_lib.c"], + srcs = ["transport_security_test_lib.cc"], hdrs = ["transport_security_test_lib.h"], deps = [ "//:grpc", @@ -30,7 +30,7 @@ grpc_cc_library( grpc_cc_test( name = "fake_transport_security_test", - srcs = ["fake_transport_security_test.c"], + srcs = ["fake_transport_security_test.cc"], language = "C", deps = [ ":transport_security_test_lib", @@ -44,7 +44,7 @@ grpc_cc_test( grpc_cc_test( name = "ssl_transport_security_test", - srcs = ["ssl_transport_security_test.c"], + srcs = ["ssl_transport_security_test.cc"], data = [ "//src/core/tsi/test_creds:badclient.key", "//src/core/tsi/test_creds:badclient.pem", @@ -70,7 +70,7 @@ grpc_cc_test( grpc_cc_test( name = "transport_security_test", - srcs = ["transport_security_test.c"], + srcs = ["transport_security_test.cc"], language = "C", deps = [ "//:grpc", diff --git a/test/core/util/BUILD b/test/core/util/BUILD index 5844a17728..7d8d7ded75 100644 --- a/test/core/util/BUILD +++ b/test/core/util/BUILD @@ -21,8 +21,8 @@ grpc_package(name = "test/core/util", visibility = "public") grpc_cc_library( name = "gpr_test_util", srcs = [ - "memory_counters.c", - "test_config.c", + "memory_counters.cc", + "test_config.cc", ], hdrs = [ "memory_counters.h", @@ -48,16 +48,16 @@ grpc_cc_library( grpc_cc_library( name = "grpc_test_util_base", srcs = [ - "grpc_profiler.c", - "mock_endpoint.c", - "parse_hexstring.c", - "passthru_endpoint.c", - "port.c", - "port_server_client.c", - "reconnect_server.c", - "slice_splitter.c", - "test_tcp_server.c", - "trickle_endpoint.c", + "grpc_profiler.cc", + "mock_endpoint.cc", + "parse_hexstring.cc", + "passthru_endpoint.cc", + "port.cc", + "port_server_client.cc", + "reconnect_server.cc", + "slice_splitter.cc", + "test_tcp_server.cc", + "trickle_endpoint.cc", ], hdrs = [ "grpc_profiler.h", -- cgit v1.2.3 From 4d71636fcc44db62032f673a81eeeb538f02ef0b Mon Sep 17 00:00:00 2001 From: Yash Tibrewal Date: Mon, 30 Oct 2017 18:29:27 -0700 Subject: some BUILD changes and designated initializers --- test/core/channel/minimal_stack_is_minimal_test.cc | 2 +- test/core/end2end/BUILD | 2 +- test/core/end2end/fuzzers/BUILD | 6 ++--- test/core/security/secure_endpoint_test.cc | 2 +- test/core/transport/chttp2/hpack_encoder_test.cc | 28 ++++++++++------------ 5 files changed, 19 insertions(+), 21 deletions(-) (limited to 'test/core/transport') diff --git a/test/core/channel/minimal_stack_is_minimal_test.cc b/test/core/channel/minimal_stack_is_minimal_test.cc index be6670c368..5884893be3 100644 --- a/test/core/channel/minimal_stack_is_minimal_test.cc +++ b/test/core/channel/minimal_stack_is_minimal_test.cc @@ -117,7 +117,7 @@ static int check_stack(const char *file, int line, const char *transport_name, grpc_transport_vtable fake_transport_vtable; memset(&fake_transport_vtable, 0, sizeof(grpc_transport_vtable)); fake_transport_vtable.name = transport_name; - grpc_transport fake_transport = {.vtable = &fake_transport_vtable}; + grpc_transport fake_transport = {&fake_transport_vtable}; grpc_channel_stack_builder_set_target(builder, "foo.test.google.fr"); grpc_channel_args *channel_args = grpc_channel_args_copy(init_args); if (transport_name != NULL) { diff --git a/test/core/end2end/BUILD b/test/core/end2end/BUILD index 1589880e1f..831ba7611d 100644 --- a/test/core/end2end/BUILD +++ b/test/core/end2end/BUILD @@ -39,7 +39,7 @@ grpc_cc_library( "data/client_certs.cc", "data/server1_cert.cc", "data/server1_key.cc", - "data/test_root_cert.c", + "data/test_root_cert.cc", ], hdrs = ["data/ssl_test_data.h"], language = "C", diff --git a/test/core/end2end/fuzzers/BUILD b/test/core/end2end/fuzzers/BUILD index 4ed9a70578..09c175e8d2 100644 --- a/test/core/end2end/fuzzers/BUILD +++ b/test/core/end2end/fuzzers/BUILD @@ -22,7 +22,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "api_fuzzer", - srcs = ["api_fuzzer.c"], + srcs = ["api_fuzzer.cc"], language = "C", corpus = "api_fuzzer_corpus", deps = [ @@ -35,7 +35,7 @@ grpc_fuzzer( grpc_fuzzer( name = "client_fuzzer", - srcs = ["client_fuzzer.c"], + srcs = ["client_fuzzer.cc"], language = "C", corpus = "client_fuzzer_corpus", deps = [ @@ -47,7 +47,7 @@ grpc_fuzzer( grpc_fuzzer( name = "server_fuzzer", - srcs = ["server_fuzzer.c"], + srcs = ["server_fuzzer.cc"], language = "C", corpus = "server_fuzzer_corpus", deps = [ diff --git a/test/core/security/secure_endpoint_test.cc b/test/core/security/secure_endpoint_test.cc index fe7961d1d9..00ff7cf4e8 100644 --- a/test/core/security/secure_endpoint_test.cc +++ b/test/core/security/secure_endpoint_test.cc @@ -56,7 +56,7 @@ static grpc_endpoint_test_fixture secure_endpoint_create_fixture_tcp_socketpair( a[0].key = const_cast(GRPC_ARG_TCP_READ_CHUNK_SIZE); a[0].type = GRPC_ARG_INTEGER; a[0].value.integer = (int)slice_size; - grpc_channel_args args = {.num_args = GPR_ARRAY_SIZE(a), .args = a}; + grpc_channel_args args = {GPR_ARRAY_SIZE(a), a}; tcp = grpc_iomgr_create_endpoint_pair("fixture", &args); grpc_endpoint_add_to_pollset(&exec_ctx, tcp.client, g_pollset); grpc_endpoint_add_to_pollset(&exec_ctx, tcp.server, g_pollset); diff --git a/test/core/transport/chttp2/hpack_encoder_test.cc b/test/core/transport/chttp2/hpack_encoder_test.cc index b203df1892..f950f8a63c 100644 --- a/test/core/transport/chttp2/hpack_encoder_test.cc +++ b/test/core/transport/chttp2/hpack_encoder_test.cc @@ -100,11 +100,11 @@ static void verify(grpc_exec_ctx *exec_ctx, const verify_params params, grpc_transport_one_way_stats stats; memset(&stats, 0, sizeof(stats)); grpc_encode_header_options hopt = { - .stream_id = 0xdeadbeef, - .is_eof = params.eof, - .use_true_binary_metadata = params.use_true_binary_metadata, - .max_frame_size = 16384, - .stats = &stats, + 0xdeadbeef, /* stream_id */ + params.eof, /* is_eof */ + params.use_true_binary_metadata, /* use_true_binary_metadata */ + 16384, /* max_frame_size */ + &stats /* stats */ }; grpc_chttp2_encode_header(exec_ctx, &g_compressor, NULL, 0, &b, &hopt, &output); @@ -131,7 +131,7 @@ static void test_basic_headers(grpc_exec_ctx *exec_ctx) { int i; verify_params params = { - .eof = false, .use_true_binary_metadata = false, .only_intern_key = false, + false, false, false, }; verify(exec_ctx, params, "000005 0104 deadbeef 40 0161 0161", 1, "a", "a"); verify(exec_ctx, params, "000001 0104 deadbeef be", 1, "a", "a"); @@ -167,7 +167,7 @@ static void test_decode_table_overflow(grpc_exec_ctx *exec_ctx) { char *expect; verify_params params = { - .eof = false, .use_true_binary_metadata = false, .only_intern_key = false, + false, false, false, }; for (i = 0; i < 114; i++) { @@ -226,11 +226,11 @@ static void verify_table_size_change_match_elem_size(grpc_exec_ctx *exec_ctx, grpc_transport_one_way_stats stats; memset(&stats, 0, sizeof(stats)); grpc_encode_header_options hopt = { - .stream_id = 0xdeadbeef, - .is_eof = false, - .use_true_binary_metadata = use_true_binary, - .max_frame_size = 16384, - .stats = &stats}; + 0xdeadbeef, /* stream_id */ + false, /* is_eof */ + use_true_binary, /* use_true_binary_metadata */ + 16384, /* max_frame_size */ + &stats /* stats */}; grpc_chttp2_encode_header(exec_ctx, &g_compressor, NULL, 0, &b, &hopt, &output); grpc_slice_buffer_destroy_internal(exec_ctx, &output); @@ -250,9 +250,7 @@ static void test_encode_header_size(grpc_exec_ctx *exec_ctx) { static void test_interned_key_indexed(grpc_exec_ctx *exec_ctx) { int i; - verify_params params = { - .eof = false, .use_true_binary_metadata = false, .only_intern_key = true, - }; + verify_params params = {false, false, true}; verify(exec_ctx, params, "000009 0104 deadbeef 40 0161 0162 0f2f 0163", 2, "a", "b", "a", "c"); for (i = 0; i < 10; i++) { -- cgit v1.2.3 From 77532036b65bc3130c232effb882dc99c302a64a Mon Sep 17 00:00:00 2001 From: Yash Tibrewal Date: Tue, 31 Oct 2017 11:11:18 -0700 Subject: BUILD changes. test languauge to C++ --- Makefile | 14 -------- grpc.gyp | 14 -------- test/core/backoff/BUILD | 2 +- test/core/census/BUILD | 8 ++--- test/core/channel/BUILD | 6 ++-- test/core/client_channel/BUILD | 4 +-- test/core/client_channel/resolvers/BUILD | 8 ++--- test/core/compression/BUILD | 6 ++-- test/core/end2end/BUILD | 8 ++--- test/core/end2end/fuzzers/BUILD | 6 ++-- test/core/end2end/generate_tests.bzl | 4 +-- test/core/fling/BUILD | 4 +-- test/core/handshake/BUILD | 4 +-- test/core/http/BUILD | 10 +++--- test/core/iomgr/BUILD | 42 +++++++++++----------- test/core/json/BUILD | 10 +++--- test/core/nanopb/BUILD | 4 +-- test/core/network_benchmarks/BUILD | 2 +- test/core/security/BUILD | 20 +++++------ test/core/slice/BUILD | 16 ++++----- test/core/support/BUILD | 36 +++++++++---------- test/core/surface/BUILD | 24 ++++++------- test/core/transport/BUILD | 12 +++---- test/core/transport/chttp2/BUILD | 16 ++++----- test/core/tsi/BUILD | 6 ++-- test/core/util/BUILD | 6 ++-- tools/run_tests/generated/sources_and_headers.json | 23 +----------- 27 files changed, 133 insertions(+), 182 deletions(-) (limited to 'test/core/transport') diff --git a/Makefile b/Makefile index af1df7e57b..0e3e9a2e77 100644 --- a/Makefile +++ b/Makefile @@ -8300,20 +8300,6 @@ endif LIBBENCHMARK_SRC = \ - third_party/benchmark/src/benchmark.cc \ - third_party/benchmark/src/benchmark_register.cc \ - third_party/benchmark/src/colorprint.cc \ - third_party/benchmark/src/commandlineflags.cc \ - third_party/benchmark/src/complexity.cc \ - third_party/benchmark/src/console_reporter.cc \ - third_party/benchmark/src/counter.cc \ - third_party/benchmark/src/csv_reporter.cc \ - third_party/benchmark/src/json_reporter.cc \ - third_party/benchmark/src/reporter.cc \ - third_party/benchmark/src/sleep.cc \ - third_party/benchmark/src/string_util.cc \ - third_party/benchmark/src/sysinfo.cc \ - third_party/benchmark/src/timers.cc \ PUBLIC_HEADERS_CXX += \ diff --git a/grpc.gyp b/grpc.gyp index ef7410d60b..2295ebc9c4 100644 --- a/grpc.gyp +++ b/grpc.gyp @@ -2316,20 +2316,6 @@ 'dependencies': [ ], 'sources': [ - 'third_party/benchmark/src/benchmark.cc', - 'third_party/benchmark/src/benchmark_register.cc', - 'third_party/benchmark/src/colorprint.cc', - 'third_party/benchmark/src/commandlineflags.cc', - 'third_party/benchmark/src/complexity.cc', - 'third_party/benchmark/src/console_reporter.cc', - 'third_party/benchmark/src/counter.cc', - 'third_party/benchmark/src/csv_reporter.cc', - 'third_party/benchmark/src/json_reporter.cc', - 'third_party/benchmark/src/reporter.cc', - 'third_party/benchmark/src/sleep.cc', - 'third_party/benchmark/src/string_util.cc', - 'third_party/benchmark/src/sysinfo.cc', - 'third_party/benchmark/src/timers.cc', ], }, { diff --git a/test/core/backoff/BUILD b/test/core/backoff/BUILD index 97a08aecd0..4cd7acf066 100644 --- a/test/core/backoff/BUILD +++ b/test/core/backoff/BUILD @@ -26,7 +26,7 @@ package( grpc_cc_test( name = "backoff_test", srcs = ["backoff_test.cc"], - language = "C", + language = "C++", deps = [ "//:grpc", "//test/core/util:grpc_test_util", diff --git a/test/core/census/BUILD b/test/core/census/BUILD index 52d0b772d1..70a0e79932 100644 --- a/test/core/census/BUILD +++ b/test/core/census/BUILD @@ -21,7 +21,7 @@ licenses(["notice"]) # Apache v2 grpc_cc_test( name = "context_test", srcs = ["context_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -33,7 +33,7 @@ grpc_cc_test( grpc_cc_test( name = "mlog_test", srcs = ["mlog_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -45,7 +45,7 @@ grpc_cc_test( grpc_cc_test( name = "resource_test", srcs = ["resource_test.cc"], - language = "C", + language = "C++", data = [ ":data/resource_empty_name.pb", ":data/resource_full.pb", @@ -65,7 +65,7 @@ grpc_cc_test( grpc_cc_test( name = "trace_context_test", srcs = ["trace_context_test.cc"], - language = "C", + language = "C++", data = [ ":data/context_empty.pb", ":data/context_full.pb", diff --git a/test/core/channel/BUILD b/test/core/channel/BUILD index 14e45bf3c7..92f5907aac 100644 --- a/test/core/channel/BUILD +++ b/test/core/channel/BUILD @@ -21,7 +21,7 @@ licenses(["notice"]) # Apache v2 grpc_cc_test( name = "channel_args_test", srcs = ["channel_args_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -33,7 +33,7 @@ grpc_cc_test( grpc_cc_test( name = "channel_stack_test", srcs = ["channel_stack_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -45,7 +45,7 @@ grpc_cc_test( grpc_cc_test( name = "channel_stack_builder_test", srcs = ["channel_stack_builder_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/client_channel/BUILD b/test/core/client_channel/BUILD index 75628413c5..ec72e0ea72 100644 --- a/test/core/client_channel/BUILD +++ b/test/core/client_channel/BUILD @@ -23,7 +23,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "uri_fuzzer_test", srcs = ["uri_fuzzer_test.cc"], - language = "C", + language = "C++", corpus = "uri_corpus", deps = [ "//:gpr", @@ -35,7 +35,7 @@ grpc_fuzzer( grpc_cc_test( name = "lb_policies_test", srcs = ["lb_policies_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/client_channel/resolvers/BUILD b/test/core/client_channel/resolvers/BUILD index ae3ce0b257..b5269c7ef0 100644 --- a/test/core/client_channel/resolvers/BUILD +++ b/test/core/client_channel/resolvers/BUILD @@ -21,7 +21,7 @@ licenses(["notice"]) # Apache v2 grpc_cc_test( name = "dns_resolver_connectivity_test", srcs = ["dns_resolver_connectivity_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -33,7 +33,7 @@ grpc_cc_test( grpc_cc_test( name = "dns_resolver_test", srcs = ["dns_resolver_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -45,7 +45,7 @@ grpc_cc_test( grpc_cc_test( name = "sockaddr_resolver_test", srcs = ["sockaddr_resolver_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -57,7 +57,7 @@ grpc_cc_test( grpc_cc_test( name = "fake_resolver_test", srcs = ["fake_resolver_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/compression/BUILD b/test/core/compression/BUILD index 60453fc036..ee71eecfeb 100644 --- a/test/core/compression/BUILD +++ b/test/core/compression/BUILD @@ -21,7 +21,7 @@ licenses(["notice"]) # Apache v2 grpc_cc_test( name = "algorithm_test", srcs = ["algorithm_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -33,7 +33,7 @@ grpc_cc_test( grpc_cc_test( name = "compression_test", srcs = ["compression_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -45,7 +45,7 @@ grpc_cc_test( grpc_cc_test( name = "message_compress_test", srcs = ["message_compress_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/end2end/BUILD b/test/core/end2end/BUILD index 831ba7611d..f8281bfe6f 100644 --- a/test/core/end2end/BUILD +++ b/test/core/end2end/BUILD @@ -24,7 +24,7 @@ grpc_cc_library( name = "cq_verifier", srcs = ["cq_verifier.cc"], hdrs = ["cq_verifier.h"], - language = "C", + language = "C++", visibility = ["//test:__subpackages__"], deps = [ "//:gpr", @@ -42,7 +42,7 @@ grpc_cc_library( "data/test_root_cert.cc", ], hdrs = ["data/ssl_test_data.h"], - language = "C", + language = "C++", visibility = ["//test:__subpackages__"], ) @@ -51,7 +51,7 @@ grpc_cc_library( name = "http_proxy", srcs = ["fixtures/http_proxy_fixture.cc"], hdrs = ["fixtures/http_proxy_fixture.h"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -63,7 +63,7 @@ grpc_cc_library( name = "proxy", srcs = ["fixtures/proxy.cc"], hdrs = ["fixtures/proxy.h"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/end2end/fuzzers/BUILD b/test/core/end2end/fuzzers/BUILD index 09c175e8d2..d33e2b0ff4 100644 --- a/test/core/end2end/fuzzers/BUILD +++ b/test/core/end2end/fuzzers/BUILD @@ -23,7 +23,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "api_fuzzer", srcs = ["api_fuzzer.cc"], - language = "C", + language = "C++", corpus = "api_fuzzer_corpus", deps = [ "//:gpr", @@ -36,7 +36,7 @@ grpc_fuzzer( grpc_fuzzer( name = "client_fuzzer", srcs = ["client_fuzzer.cc"], - language = "C", + language = "C++", corpus = "client_fuzzer_corpus", deps = [ "//:gpr", @@ -48,7 +48,7 @@ grpc_fuzzer( grpc_fuzzer( name = "server_fuzzer", srcs = ["server_fuzzer.cc"], - language = "C", + language = "C++", corpus = "server_fuzzer_corpus", deps = [ "//:gpr", diff --git a/test/core/end2end/generate_tests.bzl b/test/core/end2end/generate_tests.bzl index 94f9f98a2a..b9a42bdb88 100755 --- a/test/core/end2end/generate_tests.bzl +++ b/test/core/end2end/generate_tests.bzl @@ -193,7 +193,7 @@ def grpc_end2end_tests(): 'tests/cancel_test_helpers.h', 'end2end_tests.h' ], - language = "C", + language = "C++", deps = [ ':cq_verifier', ':ssl_test_data', @@ -206,7 +206,7 @@ def grpc_end2end_tests(): grpc_cc_binary( name = '%s_test' % f, srcs = ['fixtures/%s.cc' % f], - language = "C", + language = "C++", deps = [ ':end2end_tests', '//test/core/util:grpc_test_util', diff --git a/test/core/fling/BUILD b/test/core/fling/BUILD index beacae7a75..268e94aacc 100644 --- a/test/core/fling/BUILD +++ b/test/core/fling/BUILD @@ -24,7 +24,7 @@ grpc_cc_binary( name = "client", testonly = 1, srcs = ["client.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -38,7 +38,7 @@ grpc_cc_binary( name = "server", testonly = 1, srcs = ["server.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/handshake/BUILD b/test/core/handshake/BUILD index a2ac501927..aea4a27e99 100644 --- a/test/core/handshake/BUILD +++ b/test/core/handshake/BUILD @@ -21,7 +21,7 @@ licenses(["notice"]) # Apache v2 grpc_cc_test( name = "client_ssl", srcs = ["client_ssl.cc"], - language = "C", + language = "C++", data = [ "//src/core/tsi/test_creds:ca.pem", "//src/core/tsi/test_creds:server1.key", @@ -38,7 +38,7 @@ grpc_cc_test( grpc_cc_test( name = "server_ssl", srcs = ["server_ssl.cc"], - language = "C", + language = "C++", data = [ "//src/core/tsi/test_creds:ca.pem", "//src/core/tsi/test_creds:server1.key", diff --git a/test/core/http/BUILD b/test/core/http/BUILD index 4dbba73f31..a5ae6272db 100644 --- a/test/core/http/BUILD +++ b/test/core/http/BUILD @@ -23,7 +23,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "response_fuzzer", srcs = ["response_fuzzer.cc"], - language = "C", + language = "C++", corpus = "response_corpus", deps = [ "//:gpr", @@ -35,7 +35,7 @@ grpc_fuzzer( grpc_fuzzer( name = "request_fuzzer", srcs = ["request_fuzzer.cc"], - language = "C", + language = "C++", corpus = "request_corpus", deps = [ "//:gpr", @@ -65,7 +65,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_cc_test( name = "httpcli_test", srcs = ["httpcli_test.cc"], - language = "C", + language = "C++", data = ["test_server.py"], deps = [ "//:gpr", @@ -79,7 +79,7 @@ grpc_cc_test( grpc_cc_test( name = "httpscli_test", srcs = ["httpscli_test.cc"], - language = "C", + language = "C++", data = ["test_server.py"], deps = [ "//:gpr", @@ -93,7 +93,7 @@ grpc_cc_test( grpc_cc_test( name = "parser_test", srcs = ["parser_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/iomgr/BUILD b/test/core/iomgr/BUILD index b4490e7a5f..41e2607646 100644 --- a/test/core/iomgr/BUILD +++ b/test/core/iomgr/BUILD @@ -24,7 +24,7 @@ grpc_cc_library( name = "endpoint_tests", srcs = ["endpoint_tests.cc"], hdrs = ["endpoint_tests.h"], - language = "C", + language = "C++", visibility = ["//test:__subpackages__"], deps = [ "//:gpr", @@ -37,7 +37,7 @@ grpc_cc_library( grpc_cc_test( name = "combiner_test", srcs = ["combiner_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -49,7 +49,7 @@ grpc_cc_test( grpc_cc_test( name = "endpoint_pair_test", srcs = ["endpoint_pair_test.cc"], - language = "C", + language = "C++", deps = [ ":endpoint_tests", "//:gpr", @@ -68,13 +68,13 @@ grpc_cc_test( "//test/core/util:gpr_test_util", "//test/core/util:grpc_test_util", ], - language = "C", + language = "C++", ) grpc_cc_test( name = "fd_conservation_posix_test", srcs = ["fd_conservation_posix_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -86,7 +86,7 @@ grpc_cc_test( grpc_cc_test( name = "fd_posix_test", srcs = ["fd_posix_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -98,7 +98,7 @@ grpc_cc_test( grpc_cc_test( name = "load_file_test", srcs = ["load_file_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -110,7 +110,7 @@ grpc_cc_test( grpc_cc_test( name = "pollset_set_test", srcs = ["pollset_set_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -122,7 +122,7 @@ grpc_cc_test( grpc_cc_test( name = "resolve_address_posix_test", srcs = ["resolve_address_posix_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -134,7 +134,7 @@ grpc_cc_test( grpc_cc_test( name = "resolve_address_test", srcs = ["resolve_address_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -146,7 +146,7 @@ grpc_cc_test( grpc_cc_test( name = "resource_quota_test", srcs = ["resource_quota_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -158,7 +158,7 @@ grpc_cc_test( grpc_cc_test( name = "sockaddr_utils_test", srcs = ["sockaddr_utils_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -170,7 +170,7 @@ grpc_cc_test( grpc_cc_test( name = "socket_utils_test", srcs = ["socket_utils_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -182,7 +182,7 @@ grpc_cc_test( grpc_cc_test( name = "tcp_client_posix_test", srcs = ["tcp_client_posix_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -194,7 +194,7 @@ grpc_cc_test( grpc_cc_test( name = "tcp_posix_test", srcs = ["tcp_posix_test.cc"], - language = "C", + language = "C++", deps = [ ":endpoint_tests", "//:gpr", @@ -207,7 +207,7 @@ grpc_cc_test( grpc_cc_test( name = "tcp_server_posix_test", srcs = ["tcp_server_posix_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -219,7 +219,7 @@ grpc_cc_test( grpc_cc_test( name = "time_averaged_stats_test", srcs = ["time_averaged_stats_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -231,7 +231,7 @@ grpc_cc_test( grpc_cc_test( name = "timer_heap_test", srcs = ["timer_heap_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -243,7 +243,7 @@ grpc_cc_test( grpc_cc_test( name = "timer_list_test", srcs = ["timer_list_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -255,7 +255,7 @@ grpc_cc_test( grpc_cc_test( name = "udp_server_test", srcs = ["udp_server_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -267,7 +267,7 @@ grpc_cc_test( grpc_cc_test( name = "wakeup_fd_cv_test", srcs = ["wakeup_fd_cv_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/json/BUILD b/test/core/json/BUILD index 6e92fdc069..b8b36c0652 100644 --- a/test/core/json/BUILD +++ b/test/core/json/BUILD @@ -23,7 +23,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "json_fuzzer", srcs = ["fuzzer.cc"], - language = "C", + language = "C++", corpus = "corpus", deps = [ "//:gpr", @@ -36,7 +36,7 @@ grpc_cc_binary( name = "json_rewrite", testonly = 1, srcs = ["json_rewrite.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -48,7 +48,7 @@ grpc_cc_binary( grpc_cc_test( name = "json_rewrite_test", srcs = ["json_rewrite_test.cc"], - language = "C", + language = "C++", data = [ "rewrite_test_input.json", "rewrite_test_output_condensed.json", @@ -66,7 +66,7 @@ grpc_cc_test( grpc_cc_test( name = "json_stream_error_test", srcs = ["json_stream_error_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -78,7 +78,7 @@ grpc_cc_test( grpc_cc_test( name = "json_test", srcs = ["json_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/nanopb/BUILD b/test/core/nanopb/BUILD index a814cd3411..1497f829ab 100644 --- a/test/core/nanopb/BUILD +++ b/test/core/nanopb/BUILD @@ -23,7 +23,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "fuzzer_response", srcs = ["fuzzer_response.cc"], - language = "C", + language = "C++", corpus = "corpus_response", deps = [ "//:gpr", @@ -35,7 +35,7 @@ grpc_fuzzer( grpc_fuzzer( name = "fuzzer_serverlist", srcs = ["fuzzer_serverlist.cc"], - language = "C", + language = "C++", corpus = "corpus_serverlist", deps = [ "//:gpr", diff --git a/test/core/network_benchmarks/BUILD b/test/core/network_benchmarks/BUILD index 0db3ad7940..e1b4953608 100644 --- a/test/core/network_benchmarks/BUILD +++ b/test/core/network_benchmarks/BUILD @@ -23,7 +23,7 @@ licenses(["notice"]) # Apache v2 grpc_cc_binary( name = "low_level_ping_pong", srcs = ["low_level_ping_pong.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/security/BUILD b/test/core/security/BUILD index e771465be2..7cd3ae58da 100644 --- a/test/core/security/BUILD +++ b/test/core/security/BUILD @@ -23,7 +23,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "ssl_server_fuzzer", srcs = ["ssl_server_fuzzer.cc"], - language = "C", + language = "C++", corpus = "corpus", deps = [ "//:gpr", @@ -37,7 +37,7 @@ grpc_cc_library( name = "oauth2_utils", srcs = ["oauth2_utils.cc"], hdrs = ["oauth2_utils.h"], - language = "C", + language = "C++", deps = ["//:grpc"], visibility = ["//test/cpp:__subpackages__"], ) @@ -45,7 +45,7 @@ grpc_cc_library( grpc_cc_test( name = "auth_context_test", srcs = ["auth_context_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -57,7 +57,7 @@ grpc_cc_test( grpc_cc_test( name = "credentials_test", srcs = ["credentials_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -69,7 +69,7 @@ grpc_cc_test( grpc_cc_test( name = "secure_endpoint_test", srcs = ["secure_endpoint_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -82,7 +82,7 @@ grpc_cc_test( grpc_cc_test( name = "security_connector_test", srcs = ["security_connector_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -94,7 +94,7 @@ grpc_cc_test( grpc_cc_test( name = "ssl_credentials_test", srcs = ["ssl_credentials_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -106,7 +106,7 @@ grpc_cc_test( grpc_cc_binary( name = "create_jwt", srcs = ["create_jwt.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -116,7 +116,7 @@ grpc_cc_binary( grpc_cc_binary( name = "fetch_oauth2", srcs = ["fetch_oauth2.cc"], - language = "C", + language = "C++", deps = [ ":oauth2_utils", "//:gpr", @@ -127,7 +127,7 @@ grpc_cc_binary( grpc_cc_binary( name = "verify_jwt", srcs = ["verify_jwt.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/slice/BUILD b/test/core/slice/BUILD index d7bcc37f6b..ba2b553e0b 100644 --- a/test/core/slice/BUILD +++ b/test/core/slice/BUILD @@ -23,7 +23,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "percent_encode_fuzzer", srcs = ["percent_encode_fuzzer.cc"], - language = "C", + language = "C++", corpus = "percent_encode_corpus", deps = [ "//:gpr", @@ -35,7 +35,7 @@ grpc_fuzzer( grpc_fuzzer( name = "percent_decode_fuzzer", srcs = ["percent_decode_fuzzer.cc"], - language = "C", + language = "C++", corpus = "percent_decode_corpus", deps = [ "//:gpr", @@ -47,7 +47,7 @@ grpc_fuzzer( grpc_cc_test( name = "percent_encoding_test", srcs = ["percent_encoding_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -60,13 +60,13 @@ grpc_cc_test( name = "slice_test", srcs = ["slice_test.cc"], deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - language = "C", + language = "C++", ) grpc_cc_test( name = "slice_string_helpers_test", srcs = ["slice_string_helpers_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -79,20 +79,20 @@ grpc_cc_test( name = "slice_buffer_test", srcs = ["slice_buffer_test.cc"], deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - language = "C", + language = "C++", ) grpc_cc_test( name = "slice_hash_table_test", srcs = ["slice_hash_table_test.cc"], deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - language = "C", + language = "C++", ) grpc_cc_test( name = "b64_test", srcs = ["b64_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/support/BUILD b/test/core/support/BUILD index c1edb7ee8a..9d042fdc9f 100644 --- a/test/core/support/BUILD +++ b/test/core/support/BUILD @@ -21,7 +21,7 @@ grpc_package(name = "test/core/support") grpc_cc_test( name = "alloc_test", srcs = ["alloc_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -31,7 +31,7 @@ grpc_cc_test( grpc_cc_test( name = "avl_test", srcs = ["avl_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -41,7 +41,7 @@ grpc_cc_test( grpc_cc_test( name = "cmdline_test", srcs = ["cmdline_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -51,7 +51,7 @@ grpc_cc_test( grpc_cc_test( name = "cpu_test", srcs = ["cpu_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -61,7 +61,7 @@ grpc_cc_test( grpc_cc_test( name = "env_test", srcs = ["env_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -71,7 +71,7 @@ grpc_cc_test( grpc_cc_test( name = "histogram_test", srcs = ["histogram_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -81,7 +81,7 @@ grpc_cc_test( grpc_cc_test( name = "host_port_test", srcs = ["host_port_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -91,7 +91,7 @@ grpc_cc_test( grpc_cc_test( name = "log_test", srcs = ["log_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -101,7 +101,7 @@ grpc_cc_test( grpc_cc_test( name = "mpscq_test", srcs = ["mpscq_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -111,7 +111,7 @@ grpc_cc_test( grpc_cc_test( name = "murmur_hash_test", srcs = ["murmur_hash_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -121,7 +121,7 @@ grpc_cc_test( grpc_cc_test( name = "stack_lockfree_test", srcs = ["stack_lockfree_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -131,7 +131,7 @@ grpc_cc_test( grpc_cc_test( name = "string_test", srcs = ["string_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -141,7 +141,7 @@ grpc_cc_test( grpc_cc_test( name = "spinlock_test", srcs = ["spinlock_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -151,7 +151,7 @@ grpc_cc_test( grpc_cc_test( name = "sync_test", srcs = ["sync_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -161,7 +161,7 @@ grpc_cc_test( grpc_cc_test( name = "thd_test", srcs = ["thd_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -171,7 +171,7 @@ grpc_cc_test( grpc_cc_test( name = "time_test", srcs = ["time_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -181,7 +181,7 @@ grpc_cc_test( grpc_cc_test( name = "tls_test", srcs = ["tls_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", @@ -191,7 +191,7 @@ grpc_cc_test( grpc_cc_test( name = "useful_test", srcs = ["useful_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//test/core/util:gpr_test_util", diff --git a/test/core/surface/BUILD b/test/core/surface/BUILD index 3514278113..6cec7feabc 100644 --- a/test/core/surface/BUILD +++ b/test/core/surface/BUILD @@ -21,7 +21,7 @@ grpc_package(name = "test/core/surface") grpc_cc_test( name = "alarm_test", srcs = ["alarm_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -33,7 +33,7 @@ grpc_cc_test( grpc_cc_test( name = "grpc_byte_buffer_reader_test", srcs = ["byte_buffer_reader_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -45,7 +45,7 @@ grpc_cc_test( grpc_cc_test( name = "channel_create_test", srcs = ["channel_create_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -57,7 +57,7 @@ grpc_cc_test( grpc_cc_test( name = "grpc_completion_queue_test", srcs = ["completion_queue_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -69,7 +69,7 @@ grpc_cc_test( grpc_cc_test( name = "concurrent_connectivity_test", srcs = ["concurrent_connectivity_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -81,7 +81,7 @@ grpc_cc_test( grpc_cc_test( name = "init_test", srcs = ["init_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -93,7 +93,7 @@ grpc_cc_test( grpc_cc_test( name = "grpc_invalid_channel_args_test", srcs = ["invalid_channel_args_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -105,7 +105,7 @@ grpc_cc_test( grpc_cc_test( name = "lame_client_test", srcs = ["lame_client_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -130,7 +130,7 @@ grpc_cc_test( grpc_cc_test( name = "secure_channel_create_test", srcs = ["secure_channel_create_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -142,7 +142,7 @@ grpc_cc_test( grpc_cc_test( name = "sequential_connectivity_test", srcs = ["sequential_connectivity_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -155,7 +155,7 @@ grpc_cc_test( grpc_cc_test( name = "server_chttp2_test", srcs = ["server_chttp2_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -167,7 +167,7 @@ grpc_cc_test( grpc_cc_test( name = "server_test", srcs = ["server_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/transport/BUILD b/test/core/transport/BUILD index d49731a765..b31d4ff899 100644 --- a/test/core/transport/BUILD +++ b/test/core/transport/BUILD @@ -36,7 +36,7 @@ grpc_cc_test( grpc_cc_test( name = "byte_stream_test", srcs = ["byte_stream_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -48,7 +48,7 @@ grpc_cc_test( grpc_cc_test( name = "connectivity_state_test", srcs = ["connectivity_state_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -60,7 +60,7 @@ grpc_cc_test( grpc_cc_test( name = "metadata_test", srcs = ["metadata_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -87,7 +87,7 @@ grpc_cc_test( grpc_cc_test( name = "status_conversion_test", srcs = ["status_conversion_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -99,7 +99,7 @@ grpc_cc_test( grpc_cc_test( name = "stream_owned_slice_test", srcs = ["stream_owned_slice_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -111,7 +111,7 @@ grpc_cc_test( grpc_cc_test( name = "timeout_encoding_test", srcs = ["timeout_encoding_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/transport/chttp2/BUILD b/test/core/transport/chttp2/BUILD index dbb3670856..1ea7d0341d 100644 --- a/test/core/transport/chttp2/BUILD +++ b/test/core/transport/chttp2/BUILD @@ -33,7 +33,7 @@ grpc_fuzzer( grpc_cc_test( name = "alpn_test", srcs = ["alpn_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -45,7 +45,7 @@ grpc_cc_test( grpc_cc_test( name = "bin_decoder_test", srcs = ["bin_decoder_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -57,7 +57,7 @@ grpc_cc_test( grpc_cc_test( name = "bin_encoder_test", srcs = ["bin_encoder_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -69,7 +69,7 @@ grpc_cc_test( grpc_cc_test( name = "hpack_encoder_test", srcs = ["hpack_encoder_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -81,7 +81,7 @@ grpc_cc_test( grpc_cc_test( name = "hpack_parser_test", srcs = ["hpack_parser_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -93,7 +93,7 @@ grpc_cc_test( grpc_cc_test( name = "hpack_table_test", srcs = ["hpack_table_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -105,7 +105,7 @@ grpc_cc_test( grpc_cc_test( name = "stream_map_test", srcs = ["stream_map_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", @@ -117,7 +117,7 @@ grpc_cc_test( grpc_cc_test( name = "varint_test", srcs = ["varint_test.cc"], - language = "C", + language = "C++", deps = [ "//:gpr", "//:grpc", diff --git a/test/core/tsi/BUILD b/test/core/tsi/BUILD index 84878be0dc..e28c0b5f84 100644 --- a/test/core/tsi/BUILD +++ b/test/core/tsi/BUILD @@ -31,7 +31,7 @@ grpc_cc_library( grpc_cc_test( name = "fake_transport_security_test", srcs = ["fake_transport_security_test.cc"], - language = "C", + language = "C++", deps = [ ":transport_security_test_lib", "//:grpc", @@ -58,7 +58,7 @@ grpc_cc_test( "//src/core/tsi/test_creds:server1.key", "//src/core/tsi/test_creds:server1.pem", ], - language = "C", + language = "C++", deps = [ ":transport_security_test_lib", "//:grpc", @@ -71,7 +71,7 @@ grpc_cc_test( grpc_cc_test( name = "transport_security_test", srcs = ["transport_security_test.cc"], - language = "C", + language = "C++", deps = [ "//:grpc", "//:gpr", diff --git a/test/core/util/BUILD b/test/core/util/BUILD index 7d8d7ded75..bc6fe9dd64 100644 --- a/test/core/util/BUILD +++ b/test/core/util/BUILD @@ -71,7 +71,7 @@ grpc_cc_library( "test_tcp_server.h", "trickle_endpoint.h", ], - language = "C", + language = "C++", deps = [ ":gpr_test_util", "//:grpc_common", @@ -83,7 +83,7 @@ grpc_cc_library( name = "grpc_test_util", srcs = [], hdrs = [], - language = "C", + language = "C++", deps = [ ":grpc_test_util_base", "//:grpc", @@ -94,7 +94,7 @@ grpc_cc_library( name = "grpc_test_util_unsecure", srcs = [], hdrs = [], - language = "C", + language = "C++", deps = [ ":grpc_test_util_base", "//:grpc_unsecure", diff --git a/tools/run_tests/generated/sources_and_headers.json b/tools/run_tests/generated/sources_and_headers.json index 7067fdf350..41bccc1d41 100644 --- a/tools/run_tests/generated/sources_and_headers.json +++ b/tools/run_tests/generated/sources_and_headers.json @@ -7450,28 +7450,7 @@ }, { "deps": [], - "headers": [ - "third_party/benchmark/include/benchmark/benchmark.h", - "third_party/benchmark/include/benchmark/benchmark_api.h", - "third_party/benchmark/include/benchmark/reporter.h", - "third_party/benchmark/src/arraysize.h", - "third_party/benchmark/src/benchmark_api_internal.h", - "third_party/benchmark/src/check.h", - "third_party/benchmark/src/colorprint.h", - "third_party/benchmark/src/commandlineflags.h", - "third_party/benchmark/src/complexity.h", - "third_party/benchmark/src/counter.h", - "third_party/benchmark/src/cycleclock.h", - "third_party/benchmark/src/internal_macros.h", - "third_party/benchmark/src/log.h", - "third_party/benchmark/src/mutex.h", - "third_party/benchmark/src/re.h", - "third_party/benchmark/src/sleep.h", - "third_party/benchmark/src/stat.h", - "third_party/benchmark/src/string_util.h", - "third_party/benchmark/src/sysinfo.h", - "third_party/benchmark/src/timers.h" - ], + "headers": [], "is_filegroup": false, "language": "c++", "name": "benchmark", -- cgit v1.2.3 From 11a518995ec0c0fd3d833e00d5ae67b7e446edbc Mon Sep 17 00:00:00 2001 From: Yash Tibrewal Date: Tue, 31 Oct 2017 15:15:41 -0700 Subject: LLVMfuzzer extern C --- test/core/client_channel/uri_fuzzer_test.cc | 2 +- test/core/end2end/fuzzers/api_fuzzer.cc | 2 +- test/core/end2end/fuzzers/client_fuzzer.cc | 2 +- test/core/end2end/fuzzers/server_fuzzer.cc | 2 +- test/core/http/request_fuzzer.cc | 2 +- test/core/http/response_fuzzer.cc | 2 +- test/core/json/fuzzer.cc | 2 +- test/core/nanopb/fuzzer_response.cc | 2 +- test/core/nanopb/fuzzer_serverlist.cc | 2 +- test/core/security/ssl_server_fuzzer.cc | 2 +- test/core/slice/percent_decode_fuzzer.cc | 2 +- test/core/slice/percent_encode_fuzzer.cc | 2 +- test/core/transport/chttp2/hpack_parser_fuzzer_test.cc | 2 +- test/core/util/one_corpus_entry_fuzzer.cc | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) (limited to 'test/core/transport') diff --git a/test/core/client_channel/uri_fuzzer_test.cc b/test/core/client_channel/uri_fuzzer_test.cc index 8c071454bc..9674dadf6c 100644 --- a/test/core/client_channel/uri_fuzzer_test.cc +++ b/test/core/client_channel/uri_fuzzer_test.cc @@ -28,7 +28,7 @@ bool squelch = true; bool leak_check = true; -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { char *s = static_cast(gpr_malloc(size + 1)); memcpy(s, data, size); s[size] = 0; diff --git a/test/core/end2end/fuzzers/api_fuzzer.cc b/test/core/end2end/fuzzers/api_fuzzer.cc index 9d313d0255..69d25533f1 100644 --- a/test/core/end2end/fuzzers/api_fuzzer.cc +++ b/test/core/end2end/fuzzers/api_fuzzer.cc @@ -733,7 +733,7 @@ static validator *make_finished_batch_validator(call_state *cs, return create_validator(finished_batch, bi); } -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_test_only_set_slice_hash_seed(0); char *grpc_trace_fuzzer = gpr_getenv("GRPC_TRACE_FUZZER"); if (squelch && grpc_trace_fuzzer == NULL) gpr_set_log_function(dont_log); diff --git a/test/core/end2end/fuzzers/client_fuzzer.cc b/test/core/end2end/fuzzers/client_fuzzer.cc index 88ba6bad83..bea8ec88b9 100644 --- a/test/core/end2end/fuzzers/client_fuzzer.cc +++ b/test/core/end2end/fuzzers/client_fuzzer.cc @@ -37,7 +37,7 @@ static void *tag(int n) { return (void *)(uintptr_t)n; } static void dont_log(gpr_log_func_args *args) {} -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_test_only_set_slice_hash_seed(0); struct grpc_memory_counters counters; if (squelch) gpr_set_log_function(dont_log); diff --git a/test/core/end2end/fuzzers/server_fuzzer.cc b/test/core/end2end/fuzzers/server_fuzzer.cc index ef4c0a4bfd..36b16afc24 100644 --- a/test/core/end2end/fuzzers/server_fuzzer.cc +++ b/test/core/end2end/fuzzers/server_fuzzer.cc @@ -35,7 +35,7 @@ static int detag(void *p) { return (int)(uintptr_t)p; } static void dont_log(gpr_log_func_args *args) {} -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_test_only_set_slice_hash_seed(0); struct grpc_memory_counters counters; if (squelch) gpr_set_log_function(dont_log); diff --git a/test/core/http/request_fuzzer.cc b/test/core/http/request_fuzzer.cc index aefe9eb0f9..8677fd213a 100644 --- a/test/core/http/request_fuzzer.cc +++ b/test/core/http/request_fuzzer.cc @@ -27,7 +27,7 @@ bool squelch = true; bool leak_check = true; -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_http_parser parser; grpc_http_request request; memset(&request, 0, sizeof(request)); diff --git a/test/core/http/response_fuzzer.cc b/test/core/http/response_fuzzer.cc index d5bb67500d..e84353f45c 100644 --- a/test/core/http/response_fuzzer.cc +++ b/test/core/http/response_fuzzer.cc @@ -26,7 +26,7 @@ bool squelch = true; bool leak_check = true; -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_http_parser parser; grpc_http_response response; memset(&response, 0, sizeof(response)); diff --git a/test/core/json/fuzzer.cc b/test/core/json/fuzzer.cc index a8b75f72a2..58c34e51d1 100644 --- a/test/core/json/fuzzer.cc +++ b/test/core/json/fuzzer.cc @@ -29,7 +29,7 @@ bool squelch = true; bool leak_check = true; -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { char *s; struct grpc_memory_counters counters; grpc_memory_counters_init(); diff --git a/test/core/nanopb/fuzzer_response.cc b/test/core/nanopb/fuzzer_response.cc index c9b63979a1..9a52c3399a 100644 --- a/test/core/nanopb/fuzzer_response.cc +++ b/test/core/nanopb/fuzzer_response.cc @@ -28,7 +28,7 @@ bool leak_check = true; static void dont_log(gpr_log_func_args *args) {} -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (squelch) gpr_set_log_function(dont_log); grpc_slice slice = grpc_slice_from_copied_buffer((const char *)data, size); grpc_grpclb_initial_response *response; diff --git a/test/core/nanopb/fuzzer_serverlist.cc b/test/core/nanopb/fuzzer_serverlist.cc index dd70f0c331..75b0bbeceb 100644 --- a/test/core/nanopb/fuzzer_serverlist.cc +++ b/test/core/nanopb/fuzzer_serverlist.cc @@ -28,7 +28,7 @@ bool leak_check = true; static void dont_log(gpr_log_func_args *args) {} -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (squelch) gpr_set_log_function(dont_log); grpc_slice slice = grpc_slice_from_copied_buffer((const char *)data, size); grpc_grpclb_serverlist *serverlist; diff --git a/test/core/security/ssl_server_fuzzer.cc b/test/core/security/ssl_server_fuzzer.cc index 9d43a416c3..8f34e2e420 100644 --- a/test/core/security/ssl_server_fuzzer.cc +++ b/test/core/security/ssl_server_fuzzer.cc @@ -51,7 +51,7 @@ static void on_handshake_done(grpc_exec_ctx *exec_ctx, void *arg, GPR_ASSERT(error != GRPC_ERROR_NONE); } -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { struct grpc_memory_counters counters; if (squelch) gpr_set_log_function(dont_log); if (leak_check) grpc_memory_counters_init(); diff --git a/test/core/slice/percent_decode_fuzzer.cc b/test/core/slice/percent_decode_fuzzer.cc index ad4e3fed7a..2aae335891 100644 --- a/test/core/slice/percent_decode_fuzzer.cc +++ b/test/core/slice/percent_decode_fuzzer.cc @@ -29,7 +29,7 @@ bool squelch = true; bool leak_check = true; -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { struct grpc_memory_counters counters; grpc_memory_counters_init(); grpc_slice input = grpc_slice_from_copied_buffer((const char *)data, size); diff --git a/test/core/slice/percent_encode_fuzzer.cc b/test/core/slice/percent_encode_fuzzer.cc index db3dc3bb3f..4813d1218b 100644 --- a/test/core/slice/percent_encode_fuzzer.cc +++ b/test/core/slice/percent_encode_fuzzer.cc @@ -51,7 +51,7 @@ static void test(const uint8_t *data, size_t size, const uint8_t *dict) { GPR_ASSERT(counters.total_size_relative == 0); } -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { test(data, size, grpc_url_percent_encoding_unreserved_bytes); test(data, size, grpc_compatible_percent_encoding_unreserved_bytes); return 0; diff --git a/test/core/transport/chttp2/hpack_parser_fuzzer_test.cc b/test/core/transport/chttp2/hpack_parser_fuzzer_test.cc index 03834084cb..bad7491162 100644 --- a/test/core/transport/chttp2/hpack_parser_fuzzer_test.cc +++ b/test/core/transport/chttp2/hpack_parser_fuzzer_test.cc @@ -34,7 +34,7 @@ static void onhdr(grpc_exec_ctx *exec_ctx, void *ud, grpc_mdelem md) { } static void dont_log(gpr_log_func_args *args) {} -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_test_only_set_slice_hash_seed(0); if (squelch) gpr_set_log_function(dont_log); grpc_init(); diff --git a/test/core/util/one_corpus_entry_fuzzer.cc b/test/core/util/one_corpus_entry_fuzzer.cc index 42467390f2..aebc1bfc29 100644 --- a/test/core/util/one_corpus_entry_fuzzer.cc +++ b/test/core/util/one_corpus_entry_fuzzer.cc @@ -21,7 +21,7 @@ #include #include "src/core/lib/iomgr/load_file.h" -extern int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); extern bool squelch; extern bool leak_check; -- cgit v1.2.3