diff --git a/.circleci/config.yml b/.circleci/config.yml index e9a9340663db7..eb5118768384a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,8 +1,175 @@ version: 2.1 +orbs: + aws-ecr: circleci/aws-ecr@8.1.3 + aws-cli: circleci/aws-cli@2.0.6 + +workflows: + build: + jobs: + - build: + name: build_arm64 + filters: + tags: + only: + - /^v.*/ + branches: + ignore: + - /.*/ + context: circleci-soda-bot + machine-type: arm64 + - build: + name: build_x64 + filters: + tags: + only: + - /^v.*/ + branches: + ignore: + - /.*/ + context: circleci-soda-bot + machine-type: amd64 + - upload_docker: + filters: + tags: + only: + - /^v.*/ + branches: + ignore: + - /.*/ + context: circleci-soda-bot + requires: + - build_arm64 + - build_x64 + + +executors: + arm64: + machine: + resource_class: arm.2xlarge + image: ubuntu-2204:current + amd64: + machine: + resource_class: 2xlarge + image: ubuntu-2204:current + + jobs: + upload_docker: + machine: + image: ubuntu-2204:current + steps: + - checkout + - aws-cli/setup: + aws-access-key-id: AWS_ACCESS_KEY_ID + aws-secret-access-key: AWS_SECRET_ACCESS_KEY + profile-name: default + configure-default-region: false + + - run: + name: Set environment + command: | + echo 'export AWS_REGION=us-east-1' >> $BASH_ENV + echo 'export AWS_ROLE_ARN="$AWS_ROLE_CI_OPS"' >> $BASH_ENV + echo "export ECR_ACCOUNT_NUM=$(echo $AWS_ROLE_CI_OPS | grep -Eo '[0-9]{12}')" >> $BASH_ENV + echo 'export ECR_HOST=${ECR_ACCOUNT_NUM}.dkr.ecr.${AWS_REGION}.amazonaws.com' >> $BASH_ENV + + - run: + name: Set AWS credentials + command: | + mkdir -p ~/.aws + echo ' + [profile circleci] + source_profile=default + role_arn='"$AWS_ROLE_CI_OPS"' + ' >> ~/.aws/config + + - run: + name: Set envoy build environment + command: | + export VERSION=$(echo $CIRCLE_TAG | sed 's/v//') + echo "export DOCKER_IMAGE_PREFIX=mesg/envoy" >> $BASH_ENV + echo "export DOCKER_REGISTRY=${ECR_HOST}" >> $BASH_ENV + echo "export DOCKERHUB_USERNAME=AWS" >> $BASH_ENV + echo "export CI_BRANCH=refs/heads/release/v${VERSION}" >> $BASH_ENV + echo "export CI_SHA1=${CIRCLE_SHA1}" >> $BASH_ENV + echo "export ENVOY_DOCKER_IN_DOCKER=1" >> $BASH_ENV + echo "export ENVOY_VERSION=${VERSION}" >> $BASH_ENV + cat $BASH_ENV + echo "export DOCKERHUB_PASSWORD=$(aws ecr get-login-password --region us-east-1 --profile circleci)" >> $BASH_ENV + + - attach_workspace: + at: /tmp/workspace + - run: + name: copy files from previous steps + command: | + mkdir -p /tmp/envoy-docker-build/envoy/x64/bin + mkdir -p /tmp/envoy-docker-build/envoy/arm64/bin + cp /tmp/workspace/release_archive/release_x64.tar.zst /tmp/envoy-docker-build/envoy/x64/bin/release.tar.zst + cp /tmp/workspace/release_archive/release_arm64.tar.zst /tmp/envoy-docker-build/envoy/arm64/bin/release.tar.zst + + - run: + name: Build docker image + command: ./ci/run_envoy_docker.sh 'ci/do_ci.sh docker' + build: - docker: - - image: debian:bullseye-slim@sha256:d3d0d14f49b49a4dd98a436711f5646dc39e1c99203ef223d1b6620061e2c0e5 + parameters: + machine-type: + type: executor + executor: << parameters.machine-type >> + steps: - - run: echo "no circle on this branch" + - checkout + - aws-cli/setup: + aws-access-key-id: AWS_ACCESS_KEY_ID + aws-secret-access-key: AWS_SECRET_ACCESS_KEY + profile-name: default + configure-default-region: false + + - run: + name: Set environment + command: | + echo 'export AWS_REGION=us-east-1' >> $BASH_ENV + echo 'export AWS_ROLE_ARN="$AWS_ROLE_CI_OPS"' >> $BASH_ENV + echo "export ECR_ACCOUNT_NUM=$(echo $AWS_ROLE_CI_OPS | grep -Eo '[0-9]{12}')" >> $BASH_ENV + echo 'export ECR_HOST=${ECR_ACCOUNT_NUM}.dkr.ecr.${AWS_REGION}.amazonaws.com' >> $BASH_ENV + + - run: + name: Set AWS credentials + command: | + mkdir -p ~/.aws + echo ' + [profile circleci] + source_profile=default + role_arn='"$AWS_ROLE_CI_OPS"' + ' >> ~/.aws/config + + - run: + name: Set envoy build environment + command: | + export VERSION=$(echo $CIRCLE_TAG | sed 's/v//') + echo "export DOCKER_IMAGE_PREFIX=mesg/envoy" >> $BASH_ENV + echo "export DOCKER_REGISTRY=${ECR_HOST}" >> $BASH_ENV + echo "export DOCKERHUB_USERNAME=AWS" >> $BASH_ENV + echo "export CI_BRANCH=refs/heads/release/v${VERSION}" >> $BASH_ENV + echo "export CI_SHA1=${CIRCLE_SHA1}" >> $BASH_ENV + echo "export ENVOY_DOCKER_IN_DOCKER=1" >> $BASH_ENV + echo "export ENVOY_VERSION=${VERSION}" >> $BASH_ENV + cat $BASH_ENV + echo "export DOCKERHUB_PASSWORD=$(aws ecr get-login-password --region us-east-1 --profile circleci)" >> $BASH_ENV + + - run: + name: Building envoy + command: | + ./ci/run_envoy_docker.sh 'ci/do_ci.sh release test/extensions/tracers/opentelemetry:*' + mkdir release_archive + ARCH=$(uname -m) + if [[ ${ARCH} == "x86_64" ]]; then + cp /tmp/envoy-docker-build/envoy/x64/bin/release.tar.zst release_archive/release_x64.tar.zst + else + cp /tmp/envoy-docker-build/envoy/arm64/bin/release.tar.zst release_archive/release_arm64.tar.zst + fi + + - persist_to_workspace: + root: . + paths: release_archive diff --git a/ci/docker_ci.sh b/ci/docker_ci.sh index 1917459d4db75..c50cdc99211cc 100755 --- a/ci/docker_ci.sh +++ b/ci/docker_ci.sh @@ -23,6 +23,8 @@ set -e # Workaround for https://github.com/envoyproxy/envoy/issues/26634 DOCKER_BUILD_TIMEOUT="${DOCKER_BUILD_TIMEOUT:-500}" +DOCKERHUB_REGISTRY="${DOCKERHUB_REGISTRY:-docker.io}" + DOCKER_PLATFORM="${DOCKER_PLATFORM:-linux/arm64,linux/amd64}" function is_windows() { @@ -107,7 +109,7 @@ if is_windows; then BUILD_COMMAND=("build") else # "-google-vrp" must come afer "" to ensure we rebuild the local base image dependency. - BUILD_TYPES=("" "-debug" "-contrib" "-contrib-debug" "-distroless" "-google-vrp" "-tools") + BUILD_TYPES=("") # Configure docker-buildx tools BUILD_COMMAND=("buildx" "build") @@ -378,7 +380,7 @@ build_and_maybe_push_image_and_variants () { login_docker () { echo ">> LOGIN" if [[ -z "$DOCKER_CI_DRYRUN" ]]; then - docker login -u "$DOCKERHUB_USERNAME" -p "$DOCKERHUB_PASSWORD" + docker login -u "$DOCKERHUB_USERNAME" -p "$DOCKERHUB_PASSWORD" "$DOCKER_REGISTRY" fi } diff --git a/ci/run_envoy_docker.sh b/ci/run_envoy_docker.sh index 7d90dbd820282..80825d7f1d8e9 100755 --- a/ci/run_envoy_docker.sh +++ b/ci/run_envoy_docker.sh @@ -136,10 +136,13 @@ docker run --rm \ -e CI_BRANCH \ -e CI_SHA1 \ -e CI_TARGET_BRANCH \ + -e DOCKER_IMAGE_PREFIX \ + -e DOCKER_REGISTRY \ -e DOCKERHUB_USERNAME \ -e DOCKERHUB_PASSWORD \ -e ENVOY_DOCKER_SAVE_IMAGE \ -e ENVOY_STDLIB \ + -e ENVOY_VERSION \ -e BUILD_REASON \ -e BAZEL_REMOTE_INSTANCE \ -e GCP_SERVICE_ACCOUNT_KEY \ diff --git a/source/extensions/filters/network/common/redis/supported_commands.h b/source/extensions/filters/network/common/redis/supported_commands.h index 14a8a86867244..b1aa240dfd99e 100644 --- a/source/extensions/filters/network/common/redis/supported_commands.h +++ b/source/extensions/filters/network/common/redis/supported_commands.h @@ -41,7 +41,7 @@ struct SupportedCommands { * @return commands which hash on the fourth argument */ static const absl::flat_hash_set& evalCommands() { - CONSTRUCT_ON_FIRST_USE(absl::flat_hash_set, "eval", "evalsha"); + CONSTRUCT_ON_FIRST_USE(absl::flat_hash_set, "eval", "evalsha", "eval_ro", "evalsha_ro"); } /** diff --git a/source/extensions/tracers/opentelemetry/span_context_extractor.h b/source/extensions/tracers/opentelemetry/span_context_extractor.h index dffeb6218c921..517a9700bafaf 100644 --- a/source/extensions/tracers/opentelemetry/span_context_extractor.h +++ b/source/extensions/tracers/opentelemetry/span_context_extractor.h @@ -15,8 +15,8 @@ namespace OpenTelemetry { class OpenTelemetryConstantValues { public: - const Tracing::TraceContextHandler TRACE_PARENT{"traceparent"}; - const Tracing::TraceContextHandler TRACE_STATE{"tracestate"}; + const Tracing::TraceContextHandler TRACE_PARENT{"x-sendbird-traceparent"}; + const Tracing::TraceContextHandler TRACE_STATE{"x-sendbird-tracestate"}; }; using OpenTelemetryConstants = ConstSingleton; diff --git a/source/extensions/tracers/opentelemetry/tracer.cc b/source/extensions/tracers/opentelemetry/tracer.cc index 1bfb366ae6344..7ed82304fe5f7 100644 --- a/source/extensions/tracers/opentelemetry/tracer.cc +++ b/source/extensions/tracers/opentelemetry/tracer.cc @@ -26,11 +26,11 @@ using opentelemetry::proto::collector::trace::v1::ExportTraceServiceRequest; namespace { const Tracing::TraceContextHandler& traceParentHeader() { - CONSTRUCT_ON_FIRST_USE(Tracing::TraceContextHandler, "traceparent"); + CONSTRUCT_ON_FIRST_USE(Tracing::TraceContextHandler, "x-sendbird-traceparent"); } const Tracing::TraceContextHandler& traceStateHeader() { - CONSTRUCT_ON_FIRST_USE(Tracing::TraceContextHandler, "tracestate"); + CONSTRUCT_ON_FIRST_USE(Tracing::TraceContextHandler, "x-sendbird-tracestate"); } void callSampler(SamplerSharedPtr sampler, const absl::optional span_context, diff --git a/test/extensions/clusters/redis/redis_cluster_lb_test.cc b/test/extensions/clusters/redis/redis_cluster_lb_test.cc index f837f774f0591..4b1bd809f3083 100644 --- a/test/extensions/clusters/redis/redis_cluster_lb_test.cc +++ b/test/extensions/clusters/redis/redis_cluster_lb_test.cc @@ -561,6 +561,31 @@ TEST_F(RedisLoadBalancerContextImplTest, EnforceHashTag) { EXPECT_EQ(NetworkFilters::Common::Redis::Client::ReadPolicy::Primary, context2.readPolicy()); } +TEST_F(RedisLoadBalancerContextImplTest, ReadOnlyCommand) { + std::vector eval_ro_foo(4); + eval_ro_foo[0].type(NetworkFilters::Common::Redis::RespType::BulkString); + eval_ro_foo[0].asString() = "eval_ro"; + eval_ro_foo[1].type(NetworkFilters::Common::Redis::RespType::BulkString); + eval_ro_foo[1].asString() = "return {KEYS[1]}"; + eval_ro_foo[2].type(NetworkFilters::Common::Redis::RespType::BulkString); + eval_ro_foo[2].asString() = "foo"; + eval_ro_foo[3].type(NetworkFilters::Common::Redis::RespType::BulkString); + eval_ro_foo[3].asString() = "0"; + + NetworkFilters::Common::Redis::RespValue eval_ro_request; + eval_ro_request.type(NetworkFilters::Common::Redis::RespType::Array); + eval_ro_request.asArray().swap(eval_ro_foo); + + RedisLoadBalancerContextImpl context1( + "foo", true, true, eval_ro_request, + NetworkFilters::Common::Redis::Client::ReadPolicy::PreferReplica); + + EXPECT_EQ(absl::optional(44950), context1.computeHashKey()); + EXPECT_EQ(true, context1.isReadCommand()); + EXPECT_EQ(NetworkFilters::Common::Redis::Client::ReadPolicy::PreferReplica, + context1.readPolicy()); +} + } // namespace Redis } // namespace Clusters } // namespace Extensions diff --git a/test/extensions/filters/network/redis_proxy/command_splitter_impl_test.cc b/test/extensions/filters/network/redis_proxy/command_splitter_impl_test.cc index 7a24ed7416ba5..4c0d88c6d643a 100644 --- a/test/extensions/filters/network/redis_proxy/command_splitter_impl_test.cc +++ b/test/extensions/filters/network/redis_proxy/command_splitter_impl_test.cc @@ -491,6 +491,50 @@ TEST_F(RedisSingleServerRequestTest, EvalShaSuccess) { store_.counter(fmt::format("redis.foo.command.{}.success", lower_command)).value()); }; +TEST_F(RedisSingleServerRequestTest, EvalRoSuccess) { + InSequence s; + + Common::Redis::RespValuePtr request{new Common::Redis::RespValue()}; + makeBulkStringArray(*request, {"eval_ro", "return {ARGV[1]}", "1", "key", "arg"}); + makeRequest("key", std::move(request)); + EXPECT_NE(nullptr, handle_); + + std::string lower_command = absl::AsciiStrToLower("eval_ro"); + + time_system_.setMonotonicTime(std::chrono::milliseconds(10)); + EXPECT_CALL(store_, deliverHistogramToSinks( + Property(&Stats::Metric::name, + fmt::format("redis.foo.command.{}.latency", lower_command)), + 10)); + respond(); + + EXPECT_EQ(1UL, store_.counter(fmt::format("redis.foo.command.{}.total", lower_command)).value()); + EXPECT_EQ(1UL, + store_.counter(fmt::format("redis.foo.command.{}.success", lower_command)).value()); +}; + +TEST_F(RedisSingleServerRequestTest, EvalShaRoSuccess) { + InSequence s; + + Common::Redis::RespValuePtr request{new Common::Redis::RespValue()}; + makeBulkStringArray(*request, {"EVALSHA_RO", "return {ARGV[1]}", "1", "keykey", "arg"}); + makeRequest("keykey", std::move(request)); + EXPECT_NE(nullptr, handle_); + + std::string lower_command = absl::AsciiStrToLower("evalsha_ro"); + + time_system_.setMonotonicTime(std::chrono::milliseconds(10)); + EXPECT_CALL(store_, deliverHistogramToSinks( + Property(&Stats::Metric::name, + fmt::format("redis.foo.command.{}.latency", lower_command)), + 10)); + respond(); + + EXPECT_EQ(1UL, store_.counter(fmt::format("redis.foo.command.{}.total", lower_command)).value()); + EXPECT_EQ(1UL, + store_.counter(fmt::format("redis.foo.command.{}.success", lower_command)).value()); +}; + TEST_F(RedisSingleServerRequestTest, EvalWrongNumberOfArgs) { InSequence s; diff --git a/test/extensions/tracers/opentelemetry/samplers/always_on/always_on_sampler_integration_test.cc b/test/extensions/tracers/opentelemetry/samplers/always_on/always_on_sampler_integration_test.cc index 051a21b6846f5..987ce82d240d5 100644 --- a/test/extensions/tracers/opentelemetry/samplers/always_on/always_on_sampler_integration_test.cc +++ b/test/extensions/tracers/opentelemetry/samplers/always_on/always_on_sampler_integration_test.cc @@ -61,7 +61,7 @@ INSTANTIATE_TEST_SUITE_P(IpVersions, AlwaysOnSamplerIntegrationTest, TEST_P(AlwaysOnSamplerIntegrationTest, TestWithTraceparentAndTracestate) { Http::TestRequestHeaderMapImpl request_headers{ {":method", "GET"}, {":path", "/test/long/url"}, {":scheme", "http"}, - {":authority", "host"}, {"tracestate", "key=value"}, {"traceparent", TRACEPARENT_VALUE}}; + {":authority", "host"}, {"x-sendbird-tracestate", "key=value"}, {"x-sendbird-traceparent", TRACEPARENT_VALUE}}; auto response = sendRequestAndWaitForResponse(request_headers, 0, default_response_headers_, 0); @@ -71,14 +71,14 @@ TEST_P(AlwaysOnSamplerIntegrationTest, TestWithTraceparentAndTracestate) { // traceparent should be set: traceid should be re-used, span id should be different absl::string_view traceparent_value = upstream_request_->headers() - .get(Http::LowerCaseString("traceparent"))[0] + .get(Http::LowerCaseString("x-sendbird-traceparent"))[0] ->value() .getStringView(); EXPECT_TRUE(absl::StartsWith(traceparent_value, TRACEPARENT_VALUE_START)); EXPECT_NE(TRACEPARENT_VALUE, traceparent_value); // tracestate should be forwarded absl::string_view tracestate_value = upstream_request_->headers() - .get(Http::LowerCaseString("tracestate"))[0] + .get(Http::LowerCaseString("x-sendbird-tracestate"))[0] ->value() .getStringView(); EXPECT_EQ("key=value", tracestate_value); @@ -90,7 +90,7 @@ TEST_P(AlwaysOnSamplerIntegrationTest, TestWithTraceparentOnly) { {":path", "/test/long/url"}, {":scheme", "http"}, {":authority", "host"}, - {"traceparent", TRACEPARENT_VALUE}}; + {"x-sendbird-traceparent", TRACEPARENT_VALUE}}; auto response = sendRequestAndWaitForResponse(request_headers, 0, default_response_headers_, 0); ASSERT_TRUE(response->waitForEndStream()); @@ -99,14 +99,14 @@ TEST_P(AlwaysOnSamplerIntegrationTest, TestWithTraceparentOnly) { // traceparent should be set: traceid should be re-used, span id should be different absl::string_view traceparent_value = upstream_request_->headers() - .get(Http::LowerCaseString("traceparent"))[0] + .get(Http::LowerCaseString("x-sendbird-traceparent"))[0] ->value() .getStringView(); EXPECT_TRUE(absl::StartsWith(traceparent_value, TRACEPARENT_VALUE_START)); EXPECT_NE(TRACEPARENT_VALUE, traceparent_value); // OTLP tracer adds an empty tracestate absl::string_view tracestate_value = upstream_request_->headers() - .get(Http::LowerCaseString("tracestate"))[0] + .get(Http::LowerCaseString("x-sendbird-tracestate"))[0] ->value() .getStringView(); EXPECT_EQ("", tracestate_value); @@ -125,11 +125,11 @@ TEST_P(AlwaysOnSamplerIntegrationTest, TestWithoutTraceparentAndTracestate) { // traceparent will be added, trace_id and span_id will be generated, so there is nothing we can // assert - EXPECT_EQ(upstream_request_->headers().get(::Envoy::Http::LowerCaseString("traceparent")).size(), + EXPECT_EQ(upstream_request_->headers().get(::Envoy::Http::LowerCaseString("x-sendbird-traceparent")).size(), 1); // OTLP tracer adds an empty tracestate absl::string_view tracestate_value = upstream_request_->headers() - .get(Http::LowerCaseString("tracestate"))[0] + .get(Http::LowerCaseString("x-sendbird-tracestate"))[0] ->value() .getStringView(); EXPECT_EQ("", tracestate_value); diff --git a/test/extensions/tracers/opentelemetry/samplers/dynatrace/dynatrace_sampler_integration_test.cc b/test/extensions/tracers/opentelemetry/samplers/dynatrace/dynatrace_sampler_integration_test.cc index a3887eaf5ab4e..33cf7c8e006bb 100644 --- a/test/extensions/tracers/opentelemetry/samplers/dynatrace/dynatrace_sampler_integration_test.cc +++ b/test/extensions/tracers/opentelemetry/samplers/dynatrace/dynatrace_sampler_integration_test.cc @@ -63,7 +63,7 @@ TEST_P(DynatraceSamplerIntegrationTest, TestWithTraceparentAndTracestate) { // tracestate does not contain a Dynatrace tag Http::TestRequestHeaderMapImpl request_headers{ {":method", "GET"}, {":path", "/test/long/url"}, {":scheme", "http"}, - {":authority", "host"}, {"tracestate", "key=value"}, {"traceparent", TRACEPARENT_VALUE}}; + {":authority", "host"}, {"x-sendbird-tracestate", "key=value"}, {"x-sendbird-traceparent", TRACEPARENT_VALUE}}; auto response = sendRequestAndWaitForResponse(request_headers, 0, default_response_headers_, 0); @@ -73,14 +73,14 @@ TEST_P(DynatraceSamplerIntegrationTest, TestWithTraceparentAndTracestate) { // traceparent should be set: traceid should be re-used, span id should be different absl::string_view traceparent_value = upstream_request_->headers() - .get(Http::LowerCaseString("traceparent"))[0] + .get(Http::LowerCaseString("x-sendbird-traceparent"))[0] ->value() .getStringView(); EXPECT_TRUE(absl::StartsWith(traceparent_value, TRACEPARENT_VALUE_START)); EXPECT_NE(TRACEPARENT_VALUE, traceparent_value); // Dynatrace tracestate should be added to existing tracestate absl::string_view tracestate_value = upstream_request_->headers() - .get(Http::LowerCaseString("tracestate"))[0] + .get(Http::LowerCaseString("x-sendbird-tracestate"))[0] ->value() .getStringView(); // use StartsWith because path-info (last element in trace state) contains a random value @@ -96,7 +96,7 @@ TEST_P(DynatraceSamplerIntegrationTest, TestWithTraceparentOnly) { {":path", "/test/long/url"}, {":scheme", "http"}, {":authority", "host"}, - {"traceparent", TRACEPARENT_VALUE}}; + {"x-sendbird-traceparent", TRACEPARENT_VALUE}}; auto response = sendRequestAndWaitForResponse(request_headers, 0, default_response_headers_, 0); ASSERT_TRUE(response->waitForEndStream()); @@ -105,14 +105,14 @@ TEST_P(DynatraceSamplerIntegrationTest, TestWithTraceparentOnly) { // traceparent should be set: traceid should be re-used, span id should be different absl::string_view traceparent_value = upstream_request_->headers() - .get(Http::LowerCaseString("traceparent"))[0] + .get(Http::LowerCaseString("x-sendbird-traceparent"))[0] ->value() .getStringView(); EXPECT_TRUE(absl::StartsWith(traceparent_value, TRACEPARENT_VALUE_START)); EXPECT_NE(TRACEPARENT_VALUE, traceparent_value); // Dynatrace tag should be added to tracestate absl::string_view tracestate_value = upstream_request_->headers() - .get(Http::LowerCaseString("tracestate"))[0] + .get(Http::LowerCaseString("x-sendbird-tracestate"))[0] ->value() .getStringView(); // use StartsWith because path-info (last element in trace state contains a random value) @@ -133,11 +133,11 @@ TEST_P(DynatraceSamplerIntegrationTest, TestWithoutTraceparentAndTracestate) { // traceparent will be added, trace_id and span_id will be generated, so there is nothing we can // assert - EXPECT_EQ(upstream_request_->headers().get(::Envoy::Http::LowerCaseString("traceparent")).size(), + EXPECT_EQ(upstream_request_->headers().get(::Envoy::Http::LowerCaseString("x-sendbird-traceparent")).size(), 1); // Dynatrace tag should be added to tracestate absl::string_view tracestate_value = upstream_request_->headers() - .get(Http::LowerCaseString("tracestate"))[0] + .get(Http::LowerCaseString("x-sendbird-tracestate"))[0] ->value() .getStringView(); EXPECT_TRUE(absl::StartsWith(tracestate_value, "5b3f9fed-980df25c@dt=fw4;0;0;0;0;0;0;")) diff --git a/test/extensions/tracers/opentelemetry/span_context_extractor_test.cc b/test/extensions/tracers/opentelemetry/span_context_extractor_test.cc index b87f984768ebe..a3c173a9510a2 100644 --- a/test/extensions/tracers/opentelemetry/span_context_extractor_test.cc +++ b/test/extensions/tracers/opentelemetry/span_context_extractor_test.cc @@ -23,7 +23,7 @@ constexpr absl::string_view trace_flags = "01"; TEST(SpanContextExtractorTest, ExtractSpanContext) { Tracing::TestTraceContextImpl request_headers{ - {"traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}}; + {"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}}; SpanContextExtractor span_context_extractor(request_headers); absl::StatusOr span_context = span_context_extractor.extractSpanContext(); @@ -38,7 +38,7 @@ TEST(SpanContextExtractorTest, ExtractSpanContext) { TEST(SpanContextExtractorTest, ExtractSpanContextNotSampled) { const std::string trace_flags_unsampled{"00"}; Tracing::TestTraceContextImpl request_headers{ - {"traceparent", + {"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags_unsampled)}}; SpanContextExtractor span_context_extractor(request_headers); absl::StatusOr span_context = span_context_extractor.extractSpanContext(); @@ -62,7 +62,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithoutHeader) { TEST(SpanContextExtractorTest, ThrowsExceptionWithTooLongHeader) { Tracing::TestTraceContextImpl request_headers{ - {"traceparent", fmt::format("000{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}}; + {"x-sendbird-traceparent", fmt::format("000{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}}; SpanContextExtractor span_context_extractor(request_headers); absl::StatusOr span_context = span_context_extractor.extractSpanContext(); @@ -73,7 +73,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithTooLongHeader) { TEST(SpanContextExtractorTest, ThrowsExceptionWithTooShortHeader) { Tracing::TestTraceContextImpl request_headers{ - {"traceparent", fmt::format("{}-{}-{}", trace_id, parent_id, trace_flags)}}; + {"x-sendbird-traceparent", fmt::format("{}-{}-{}", trace_id, parent_id, trace_flags)}}; SpanContextExtractor span_context_extractor(request_headers); absl::StatusOr span_context = span_context_extractor.extractSpanContext(); @@ -84,7 +84,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithTooShortHeader) { TEST(SpanContextExtractorTest, ThrowsExceptionWithInvalidHyphenation) { Tracing::TestTraceContextImpl request_headers{ - {"traceparent", fmt::format("{}{}-{}-{}", version, trace_id, parent_id, trace_flags)}}; + {"x-sendbird-traceparent", fmt::format("{}{}-{}-{}", version, trace_id, parent_id, trace_flags)}}; SpanContextExtractor span_context_extractor(request_headers); absl::StatusOr span_context = span_context_extractor.extractSpanContext(); @@ -97,7 +97,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithInvalidSizes) { const std::string invalid_version{"0"}; const std::string invalid_trace_flags{"001"}; Tracing::TestTraceContextImpl request_headers{ - {"traceparent", + {"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", invalid_version, trace_id, parent_id, invalid_trace_flags)}}; SpanContextExtractor span_context_extractor(request_headers); @@ -110,7 +110,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithInvalidSizes) { TEST(SpanContextExtractorTest, ThrowsExceptionWithInvalidHex) { const std::string invalid_version{"ZZ"}; Tracing::TestTraceContextImpl request_headers{ - {"traceparent", + {"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", invalid_version, trace_id, parent_id, trace_flags)}}; SpanContextExtractor span_context_extractor(request_headers); @@ -123,7 +123,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithInvalidHex) { TEST(SpanContextExtractorTest, ThrowsExceptionWithAllZeroTraceId) { const std::string invalid_trace_id{"00000000000000000000000000000000"}; Tracing::TestTraceContextImpl request_headers{ - {"traceparent", + {"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", version, invalid_trace_id, parent_id, trace_flags)}}; SpanContextExtractor span_context_extractor(request_headers); @@ -136,7 +136,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithAllZeroTraceId) { TEST(SpanContextExtractorTest, ThrowsExceptionWithAllZeroParentId) { const std::string invalid_parent_id{"0000000000000000"}; Tracing::TestTraceContextImpl request_headers{ - {"traceparent", + {"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, invalid_parent_id, trace_flags)}}; SpanContextExtractor span_context_extractor(request_headers); @@ -148,7 +148,7 @@ TEST(SpanContextExtractorTest, ThrowsExceptionWithAllZeroParentId) { TEST(SpanContextExtractorTest, ExtractSpanContextWithEmptyTracestate) { Tracing::TestTraceContextImpl request_headers{ - {"traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}}; + {"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}}; SpanContextExtractor span_context_extractor(request_headers); absl::StatusOr span_context = span_context_extractor.extractSpanContext(); @@ -158,8 +158,8 @@ TEST(SpanContextExtractorTest, ExtractSpanContextWithEmptyTracestate) { TEST(SpanContextExtractorTest, ExtractSpanContextWithTracestate) { Tracing::TestTraceContextImpl request_headers{ - {"traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}, - {"tracestate", "sample-tracestate"}}; + {"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}, + {"x-sendbird-tracestate", "sample-tracestate"}}; SpanContextExtractor span_context_extractor(request_headers); absl::StatusOr span_context = span_context_extractor.extractSpanContext(); @@ -168,7 +168,7 @@ TEST(SpanContextExtractorTest, ExtractSpanContextWithTracestate) { } TEST(SpanContextExtractorTest, IgnoreTracestateWithoutTraceparent) { - Tracing::TestTraceContextImpl request_headers{{"tracestate", "sample-tracestate"}}; + Tracing::TestTraceContextImpl request_headers{{"x-sendbird-tracestate", "sample-tracestate"}}; SpanContextExtractor span_context_extractor(request_headers); absl::StatusOr span_context = span_context_extractor.extractSpanContext(); @@ -178,9 +178,9 @@ TEST(SpanContextExtractorTest, IgnoreTracestateWithoutTraceparent) { TEST(SpanContextExtractorTest, ExtractSpanContextWithMultipleTracestateEntries) { Http::TestRequestHeaderMapImpl request_headers{ - {"traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}, - {"tracestate", "sample-tracestate"}, - {"tracestate", "sample-tracestate-2"}}; + {"x-sendbird-traceparent", fmt::format("{}-{}-{}-{}", version, trace_id, parent_id, trace_flags)}, + {"x-sendbird-tracestate", "sample-tracestate"}, + {"x-sendbird-tracestate", "sample-tracestate-2"}}; Tracing::HttpTraceContext trace_context(request_headers); SpanContextExtractor span_context_extractor(trace_context); absl::StatusOr span_context = span_context_extractor.extractSpanContext();