From e19d6d841728a4954b92bc4445f31ec2cb7b556b Mon Sep 17 00:00:00 2001 From: wbpcode Date: Wed, 11 Jan 2023 06:51:04 +0000 Subject: [PATCH 1/6] tracing: make the tracer & tracer manager protocol independent Signed-off-by: wbpcode --- envoy/tracing/BUILD | 15 +- envoy/tracing/http_tracer.h | 27 +- envoy/tracing/http_tracer_manager.h | 29 -- envoy/tracing/tracer.h | 34 ++ envoy/tracing/tracer_manager.h | 29 ++ source/common/access_log/access_log_impl.cc | 2 +- source/common/http/conn_manager_impl.cc | 2 +- source/common/tracing/BUILD | 44 +- source/common/tracing/http_tracer_impl.cc | 57 --- source/common/tracing/http_tracer_impl.h | 60 +-- .../common/tracing/http_tracer_manager_impl.h | 40 -- source/common/tracing/tracer_impl.cc | 159 ++++++++ source/common/tracing/tracer_impl.h | 88 ++++ ...manager_impl.cc => tracer_manager_impl.cc} | 27 +- source/common/tracing/tracer_manager_impl.h | 38 ++ .../network/http_connection_manager/BUILD | 2 +- .../network/http_connection_manager/config.cc | 24 +- .../network/http_connection_manager/config.h | 10 +- test/common/tracing/BUILD | 28 +- test/common/tracing/http_tracer_impl_test.cc | 206 ---------- test/common/tracing/tracer_impl_test.cc | 377 ++++++++++++++++++ ...pl_test.cc => tracer_manager_impl_test.cc} | 89 ++--- .../config_filter_chain_test.cc | 39 +- .../config_filter_dependencies_test.cc | 48 +-- .../http_connection_manager/config_test.cc | 164 ++++---- .../config_test_base.h | 8 +- test/mocks/tracing/BUILD | 4 +- test/mocks/tracing/mocks.cc | 8 +- test/mocks/tracing/mocks.h | 25 +- 29 files changed, 1007 insertions(+), 676 deletions(-) delete mode 100644 envoy/tracing/http_tracer_manager.h create mode 100644 envoy/tracing/tracer.h create mode 100644 envoy/tracing/tracer_manager.h delete mode 100644 source/common/tracing/http_tracer_manager_impl.h create mode 100644 source/common/tracing/tracer_impl.cc create mode 100644 source/common/tracing/tracer_impl.h rename source/common/tracing/{http_tracer_manager_impl.cc => tracer_manager_impl.cc} (67%) create mode 100644 source/common/tracing/tracer_manager_impl.h create mode 100644 test/common/tracing/tracer_impl_test.cc rename test/common/tracing/{http_tracer_manager_impl_test.cc => tracer_manager_impl_test.cc} (64%) diff --git a/envoy/tracing/BUILD b/envoy/tracing/BUILD index c84765b78b18a..be60ab48802c6 100644 --- a/envoy/tracing/BUILD +++ b/envoy/tracing/BUILD @@ -11,18 +11,25 @@ envoy_package() envoy_cc_library( name = "http_tracer_interface", hdrs = ["http_tracer.h"], + deps = [ + ":tracer_interface", + ], +) + +envoy_cc_library( + name = "tracer_interface", + hdrs = ["tracer.h"], deps = [ ":trace_driver_interface", "//envoy/access_log:access_log_interface", - "//envoy/http:header_map_interface", ], ) envoy_cc_library( - name = "http_tracer_manager_interface", - hdrs = ["http_tracer_manager.h"], + name = "tracer_manager_interface", + hdrs = ["tracer_manager.h"], deps = [ - ":http_tracer_interface", + ":tracer_interface", "@envoy_api//envoy/config/trace/v3:pkg_cc_proto", ], ) diff --git a/envoy/tracing/http_tracer.h b/envoy/tracing/http_tracer.h index 34409fac312e4..ad06f9fe44f00 100644 --- a/envoy/tracing/http_tracer.h +++ b/envoy/tracing/http_tracer.h @@ -1,31 +1,10 @@ -#pragma once - -#include -#include -#include - -#include "envoy/access_log/access_log.h" -#include "envoy/common/pure.h" -#include "envoy/http/header_map.h" -#include "envoy/tracing/trace_driver.h" -#include "envoy/tracing/trace_reason.h" +#include "envoy/tracing/tracer.h" namespace Envoy { namespace Tracing { -/** - * HttpTracer is responsible for handling traces and delegate actions to the - * corresponding drivers. - */ -class HttpTracer { -public: - virtual ~HttpTracer() = default; - - virtual SpanPtr startSpan(const Config& config, Http::RequestHeaderMap& request_headers, - const StreamInfo::StreamInfo& stream_info, - const Tracing::Decision tracing_decision) PURE; -}; - +// Alias name of Tracer to reduce unnecessary changes in the current code. +using HttpTracer = Tracer; using HttpTracerSharedPtr = std::shared_ptr; } // namespace Tracing diff --git a/envoy/tracing/http_tracer_manager.h b/envoy/tracing/http_tracer_manager.h deleted file mode 100644 index a19d384bb34fa..0000000000000 --- a/envoy/tracing/http_tracer_manager.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include "envoy/config/trace/v3/http_tracer.pb.h" -#include "envoy/tracing/http_tracer.h" - -namespace Envoy { -namespace Tracing { - -/** - * An HttpTracer manager which ensures existence of at most one - * HttpTracer instance for a given configuration. - */ -class HttpTracerManager { -public: - virtual ~HttpTracerManager() = default; - - /** - * Get an existing HttpTracer or create a new one for a given configuration. - * @param config supplies the configuration for the tracing provider. - * @return HttpTracerSharedPtr. - */ - virtual HttpTracerSharedPtr - getOrCreateHttpTracer(const envoy::config::trace::v3::Tracing_Http* config) PURE; -}; - -using HttpTracerManagerSharedPtr = std::shared_ptr; - -} // namespace Tracing -} // namespace Envoy diff --git a/envoy/tracing/tracer.h b/envoy/tracing/tracer.h new file mode 100644 index 0000000000000..08c83ab6e8c54 --- /dev/null +++ b/envoy/tracing/tracer.h @@ -0,0 +1,34 @@ +#pragma once + +#include +#include +#include + +#include "envoy/access_log/access_log.h" +#include "envoy/common/pure.h" +#include "envoy/tracing/trace_driver.h" +#include "envoy/tracing/trace_reason.h" + +#include "trace_context.h" +#include "tracer.h" + +namespace Envoy { +namespace Tracing { + +/** + * Tracer is responsible for handling traces and delegate actions to the + * corresponding drivers. + */ +class Tracer { +public: + virtual ~Tracer() = default; + + virtual SpanPtr startSpan(const Config& config, TraceContext& trace_context, + const StreamInfo::StreamInfo& stream_info, + const Tracing::Decision tracing_decision) PURE; +}; + +using TracerSharedPtr = std::shared_ptr; + +} // namespace Tracing +} // namespace Envoy diff --git a/envoy/tracing/tracer_manager.h b/envoy/tracing/tracer_manager.h new file mode 100644 index 0000000000000..34f366864ec6c --- /dev/null +++ b/envoy/tracing/tracer_manager.h @@ -0,0 +1,29 @@ +#pragma once + +#include "envoy/config/trace/v3/http_tracer.pb.h" +#include "envoy/tracing/tracer.h" + +namespace Envoy { +namespace Tracing { + +/** + * An Tracer manager which ensures existence of at most one Tracer instance + * for a given configuration. + */ +class TracerManager { +public: + virtual ~TracerManager() = default; + + /** + * Get an existing Tracer or create a new one for a given configuration. + * @param config supplies the configuration for the tracing provider. + * @return TracerSharedPtr. + */ + virtual TracerSharedPtr + getOrCreateTracer(const envoy::config::trace::v3::Tracing_Http* config) PURE; +}; + +using TracerManagerSharedPtr = std::shared_ptr; + +} // namespace Tracing +} // namespace Envoy diff --git a/source/common/access_log/access_log_impl.cc b/source/common/access_log/access_log_impl.cc index 260f328840d5b..906ee1be6c198 100644 --- a/source/common/access_log/access_log_impl.cc +++ b/source/common/access_log/access_log_impl.cc @@ -97,7 +97,7 @@ FilterPtr FilterFactory::fromProto(const envoy::config::accesslog::v3::AccessLog bool TraceableRequestFilter::evaluate(const StreamInfo::StreamInfo& info, const Http::RequestHeaderMap&, const Http::ResponseHeaderMap&, const Http::ResponseTrailerMap&) const { - const Tracing::Decision decision = Tracing::HttpTracerUtility::shouldTraceRequest(info); + const Tracing::Decision decision = Tracing::TracerUtility::shouldTraceRequest(info); return decision.traced && decision.reason == Tracing::Reason::ServiceForced; } diff --git a/source/common/http/conn_manager_impl.cc b/source/common/http/conn_manager_impl.cc index 88afaa8a22533..578a6a2222a2d 100644 --- a/source/common/http/conn_manager_impl.cc +++ b/source/common/http/conn_manager_impl.cc @@ -1186,7 +1186,7 @@ void ConnectionManagerImpl::ActiveStream::decodeHeaders(RequestHeaderMapPtr&& he void ConnectionManagerImpl::ActiveStream::traceRequest() { const Tracing::Decision tracing_decision = - Tracing::HttpTracerUtility::shouldTraceRequest(filter_manager_.streamInfo()); + Tracing::TracerUtility::shouldTraceRequest(filter_manager_.streamInfo()); ConnectionManagerImpl::chargeTracingStats(tracing_decision.reason, connection_manager_.config_.tracingStats()); diff --git a/source/common/tracing/BUILD b/source/common/tracing/BUILD index 94b8eee2e5cfa..97b5bc3f77e4e 100644 --- a/source/common/tracing/BUILD +++ b/source/common/tracing/BUILD @@ -38,34 +38,36 @@ envoy_cc_library( "http_tracer_impl.h", ], deps = [ - ":common_values_lib", - ":null_span_lib", - "//envoy/http:request_id_extension_interface", - "//envoy/local_info:local_info_interface", - "//envoy/runtime:runtime_interface", - "//envoy/thread_local:thread_local_interface", + ":tracer_lib", "//envoy/tracing:http_tracer_interface", - "//envoy/upstream:cluster_manager_interface", - "//source/common/buffer:zero_copy_input_stream_lib", - "//source/common/common:base64_lib", - "//source/common/common:macros", - "//source/common/common:utility_lib", "//source/common/formatter:substitution_formatter_lib", "//source/common/grpc:common_lib", "//source/common/http:codes_lib", "//source/common/http:header_map_lib", - "//source/common/http:headers_lib", - "//source/common/http:message_lib", - "//source/common/http:utility_lib", - "//source/common/json:json_loader_lib", - "//source/common/protobuf:utility_lib", - "//source/common/stream_info:utility_lib", "@envoy_api//envoy/config/core/v3:pkg_cc_proto", "@envoy_api//envoy/type/metadata/v3:pkg_cc_proto", "@envoy_api//envoy/type/tracing/v3:pkg_cc_proto", ], ) +envoy_cc_library( + name = "tracer_lib", + srcs = [ + "tracer_impl.cc", + ], + hdrs = [ + "tracer_impl.h", + ], + deps = [ + ":common_values_lib", + ":null_span_lib", + "//envoy/local_info:local_info_interface", + "//envoy/tracing:tracer_interface", + "//envoy/upstream:upstream_interface", + "//source/common/stream_info:utility_lib", + ], +) + envoy_cc_library( name = "tracer_config_lib", hdrs = [ @@ -77,17 +79,17 @@ envoy_cc_library( ) envoy_cc_library( - name = "http_tracer_manager_lib", + name = "tracer_manager_lib", srcs = [ - "http_tracer_manager_impl.cc", + "tracer_manager_impl.cc", ], hdrs = [ - "http_tracer_manager_impl.h", + "tracer_manager_impl.h", ], deps = [ "//envoy/server:tracer_config_interface", "//envoy/singleton:instance_interface", - "//envoy/tracing:http_tracer_manager_interface", + "//envoy/tracing:tracer_manager_interface", "//source/common/common:minimal_logger_lib", "//source/common/config:utility_lib", "//source/common/tracing:http_tracer_lib", diff --git a/source/common/tracing/http_tracer_impl.cc b/source/common/tracing/http_tracer_impl.cc index 9cf5fd49ae099..ba067013d9fca 100644 --- a/source/common/tracing/http_tracer_impl.cc +++ b/source/common/tracing/http_tracer_impl.cc @@ -12,7 +12,6 @@ #include "source/common/common/fmt.h" #include "source/common/common/macros.h" #include "source/common/common/utility.h" -#include "source/common/formatter/substitution_formatter.h" #include "source/common/grpc/common.h" #include "source/common/http/codes.h" #include "source/common/http/header_map_impl.h" @@ -37,37 +36,6 @@ static absl::string_view valueOrDefault(const Http::HeaderEntry* header, return header ? header->value().getStringView() : default_value; } -const std::string HttpTracerUtility::IngressOperation = "ingress"; -const std::string HttpTracerUtility::EgressOperation = "egress"; - -const std::string& HttpTracerUtility::toString(OperationName operation_name) { - switch (operation_name) { - case OperationName::Ingress: - return IngressOperation; - case OperationName::Egress: - return EgressOperation; - } - - return EMPTY_STRING; // Make the compiler happy. -} - -Decision HttpTracerUtility::shouldTraceRequest(const StreamInfo::StreamInfo& stream_info) { - // Exclude health check requests immediately. - if (stream_info.healthCheck()) { - return {Reason::HealthCheck, false}; - } - - const Tracing::Reason trace_reason = stream_info.traceReason(); - switch (trace_reason) { - case Reason::ClientForced: - case Reason::ServiceForced: - case Reason::Sampling: - return {trace_reason, true}; - default: - return {trace_reason, false}; - } -} - static void addTagIfNotNull(Span& span, const std::string& tag, const Http::HeaderEntry* entry) { if (entry != nullptr) { span.setTag(tag, entry->value().getStringView()); @@ -278,30 +246,5 @@ void HttpTracerUtility::setCommonTags(Span& span, const StreamInfo::StreamInfo& } } -HttpTracerImpl::HttpTracerImpl(DriverSharedPtr driver, const LocalInfo::LocalInfo& local_info) - : driver_(std::move(driver)), local_info_(local_info) {} - -SpanPtr HttpTracerImpl::startSpan(const Config& config, Http::RequestHeaderMap& request_headers, - const StreamInfo::StreamInfo& stream_info, - const Tracing::Decision tracing_decision) { - std::string span_name = HttpTracerUtility::toString(config.operationName()); - - if (config.operationName() == OperationName::Egress) { - span_name.append(" "); - span_name.append(std::string(request_headers.getHostValue())); - } - - SpanPtr active_span = driver_->startSpan(config, request_headers, span_name, - stream_info.startTime(), tracing_decision); - - // Set tags related to the local environment - if (active_span) { - active_span->setTag(Tracing::Tags::get().NodeId, local_info_.nodeName()); - active_span->setTag(Tracing::Tags::get().Zone, local_info_.zoneName()); - } - - return active_span; -} - } // namespace Tracing } // namespace Envoy diff --git a/source/common/tracing/http_tracer_impl.h b/source/common/tracing/http_tracer_impl.h index 9d1615b49e852..f9f82009b0b94 100644 --- a/source/common/tracing/http_tracer_impl.h +++ b/source/common/tracing/http_tracer_impl.h @@ -4,38 +4,21 @@ #include "envoy/common/platform.h" #include "envoy/config/core/v3/base.pb.h" -#include "envoy/http/request_id_extension.h" #include "envoy/local_info/local_info.h" #include "envoy/runtime/runtime.h" -#include "envoy/thread_local/thread_local.h" #include "envoy/tracing/http_tracer.h" -#include "envoy/upstream/cluster_manager.h" #include "source/common/http/header_map_impl.h" -#include "source/common/json/json_loader.h" #include "source/common/tracing/common_values.h" #include "source/common/tracing/null_span_impl.h" +#include "source/common/tracing/tracer_impl.h" +#include "source/common/formatter/substitution_formatter.h" namespace Envoy { namespace Tracing { class HttpTracerUtility { public: - /** - * Get string representation of the operation. - * @param operation name to convert. - * @return string representation of the operation. - */ - static const std::string& toString(OperationName operation_name); - - /** - * Request might be traceable if the request ID is traceable or we do sampling tracing. - * Note: there is a global switch which turns off tracing completely on server side. - * - * @return decision if request is traceable or not and Reason why. - **/ - static Decision shouldTraceRequest(const StreamInfo::StreamInfo& stream_info); - /** * Adds information obtained from the downstream request headers as tags to the active span. * Then finishes the span. @@ -70,45 +53,6 @@ class HttpTracerUtility { private: static void setCommonTags(Span& span, const StreamInfo::StreamInfo& stream_info, const Config& tracing_config); - - static const std::string IngressOperation; - static const std::string EgressOperation; -}; - -class EgressConfigImpl : public Config { -public: - // Tracing::Config - Tracing::OperationName operationName() const override { return Tracing::OperationName::Egress; } - const CustomTagMap* customTags() const override { return nullptr; } - bool verbose() const override { return false; } - uint32_t maxPathTagLength() const override { return Tracing::DefaultMaxPathTagLength; } -}; - -using EgressConfig = ConstSingleton; - -class HttpNullTracer : public HttpTracer { -public: - // Tracing::HttpTracer - SpanPtr startSpan(const Config&, Http::RequestHeaderMap&, const StreamInfo::StreamInfo&, - const Tracing::Decision) override { - return SpanPtr{new NullSpan()}; - } -}; - -class HttpTracerImpl : public HttpTracer { -public: - HttpTracerImpl(DriverSharedPtr driver, const LocalInfo::LocalInfo& local_info); - - // Tracing::HttpTracer - SpanPtr startSpan(const Config& config, Http::RequestHeaderMap& request_headers, - const StreamInfo::StreamInfo& stream_info, - const Tracing::Decision tracing_decision) override; - - DriverSharedPtr driverForTest() const { return driver_; } - -private: - DriverSharedPtr driver_; - const LocalInfo::LocalInfo& local_info_; }; } // namespace Tracing diff --git a/source/common/tracing/http_tracer_manager_impl.h b/source/common/tracing/http_tracer_manager_impl.h deleted file mode 100644 index 2080e56d00777..0000000000000 --- a/source/common/tracing/http_tracer_manager_impl.h +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once - -#include "envoy/server/tracer_config.h" -#include "envoy/singleton/instance.h" -#include "envoy/tracing/http_tracer_manager.h" - -#include "source/common/common/logger.h" -#include "source/common/tracing/http_tracer_impl.h" - -namespace Envoy { -namespace Tracing { - -class HttpTracerManagerImpl : public HttpTracerManager, - public Singleton::Instance, - Logger::Loggable { -public: - HttpTracerManagerImpl(Server::Configuration::TracerFactoryContextPtr factory_context); - - // HttpTracerManager - HttpTracerSharedPtr - getOrCreateHttpTracer(const envoy::config::trace::v3::Tracing_Http* config) override; - - // Take a peek into the cache of HttpTracers. This should only be used in tests. - const absl::flat_hash_map>& - peekCachedTracersForTest() const { - return http_tracers_; - } - -private: - void removeExpiredCacheEntries(); - - Server::Configuration::TracerFactoryContextPtr factory_context_; - const HttpTracerSharedPtr null_tracer_{std::make_shared()}; - - // HttpTracers indexed by the hash of their configuration. - absl::flat_hash_map> http_tracers_; -}; - -} // namespace Tracing -} // namespace Envoy diff --git a/source/common/tracing/tracer_impl.cc b/source/common/tracing/tracer_impl.cc new file mode 100644 index 0000000000000..12f4041d47aa3 --- /dev/null +++ b/source/common/tracing/tracer_impl.cc @@ -0,0 +1,159 @@ +#include "source/common/tracing/tracer_impl.h" + +#include "envoy/upstream/upstream.h" + +#include "source/common/stream_info/utility.h" + +#include "absl/strings/str_cat.h" + +namespace Envoy { +namespace Tracing { + +namespace { + +static void annotateVerbose(Span& span, const StreamInfo::StreamInfo& stream_info) { + const auto start_time = stream_info.startTime(); + StreamInfo::TimingUtility timing(stream_info); + if (timing.lastDownstreamRxByteReceived()) { + span.log(start_time + std::chrono::duration_cast( + *timing.lastDownstreamRxByteReceived()), + Tracing::Logs::get().LastDownstreamRxByteReceived); + } + if (timing.firstUpstreamTxByteSent()) { + span.log(start_time + std::chrono::duration_cast( + *timing.firstUpstreamTxByteSent()), + Tracing::Logs::get().FirstUpstreamTxByteSent); + } + if (timing.lastUpstreamTxByteSent()) { + span.log(start_time + + std::chrono::duration_cast(*timing.lastUpstreamTxByteSent()), + Tracing::Logs::get().LastUpstreamTxByteSent); + } + if (timing.firstUpstreamRxByteReceived()) { + span.log(start_time + std::chrono::duration_cast( + *timing.firstUpstreamRxByteReceived()), + Tracing::Logs::get().FirstUpstreamRxByteReceived); + } + if (timing.lastUpstreamRxByteReceived()) { + span.log(start_time + std::chrono::duration_cast( + *timing.lastUpstreamRxByteReceived()), + Tracing::Logs::get().LastUpstreamRxByteReceived); + } + if (timing.firstDownstreamTxByteSent()) { + span.log(start_time + std::chrono::duration_cast( + *timing.firstDownstreamTxByteSent()), + Tracing::Logs::get().FirstDownstreamTxByteSent); + } + if (timing.lastDownstreamTxByteSent()) { + span.log(start_time + std::chrono::duration_cast( + *timing.lastDownstreamTxByteSent()), + Tracing::Logs::get().LastDownstreamTxByteSent); + } +} + +} // namespace + +const std::string TracerUtility::IngressOperation = "ingress"; +const std::string TracerUtility::EgressOperation = "egress"; + +const std::string& TracerUtility::toString(OperationName operation_name) { + switch (operation_name) { + case OperationName::Ingress: + return IngressOperation; + case OperationName::Egress: + return EgressOperation; + } + + return EMPTY_STRING; // Make the compiler happy. +} + +Decision TracerUtility::shouldTraceRequest(const StreamInfo::StreamInfo& stream_info) { + // Exclude health check requests immediately. + if (stream_info.healthCheck()) { + return {Reason::HealthCheck, false}; + } + + const Tracing::Reason trace_reason = stream_info.traceReason(); + switch (trace_reason) { + case Reason::ClientForced: + case Reason::ServiceForced: + case Reason::Sampling: + return {trace_reason, true}; + default: + return {trace_reason, false}; + } +} + +void TracerUtility::finalizeSpan(Span& span, const TraceContext& trace_context, + const StreamInfo::StreamInfo& stream_info, + const Config& tracing_config, bool upstream_span) { + span.setTag(Tracing::Tags::get().Component, Tracing::Tags::get().Proxy); + + // Response flag. + span.setTag(Tracing::Tags::get().ResponseFlags, + StreamInfo::ResponseFlagUtils::toShortString(stream_info)); + + // Downstream info. + if (!upstream_span) { + const auto& remote_address = stream_info.downstreamAddressProvider().directRemoteAddress(); + span.setTag(Tracing::Tags::get().PeerAddress, remote_address->asStringView()); + } + + // Upstream info. + if (stream_info.upstreamInfo() && stream_info.upstreamInfo()->upstreamHost()) { + span.setTag(Tracing::Tags::get().UpstreamCluster, + stream_info.upstreamInfo()->upstreamHost()->cluster().name()); + span.setTag(Tracing::Tags::get().UpstreamClusterName, + stream_info.upstreamInfo()->upstreamHost()->cluster().observabilityName()); + + auto upstream_address = stream_info.upstreamInfo()->upstreamHost()->address(); + + span.setTag(Tracing::Tags::get().UpstreamAddress, upstream_address->asStringView()); + + // Upstream address would be 'peer.address' in the case of an upstream span. + if (upstream_span) { + span.setTag(Tracing::Tags::get().PeerAddress, upstream_address->asStringView()); + } + } + + // Verbose timing log. + if (tracing_config.verbose()) { + annotateVerbose(span, stream_info); + } + + // Custom tag from configuration. + CustomTagContext ctx{&trace_context, stream_info}; + if (const CustomTagMap* custom_tag_map = tracing_config.customTags(); custom_tag_map) { + for (const auto& it : *custom_tag_map) { + it.second->applySpan(span, ctx); + } + } +} + +TracerImpl::TracerImpl(DriverSharedPtr driver, const LocalInfo::LocalInfo& local_info) + : driver_(std::move(driver)), local_info_(local_info) {} + +SpanPtr TracerImpl::startSpan(const Config& config, TraceContext& trace_context, + const StreamInfo::StreamInfo& stream_info, + const Tracing::Decision tracing_decision) { + std::string span_name = TracerUtility::toString(config.operationName()); + + if (config.operationName() == OperationName::Egress) { + span_name.append(" "); + span_name.append(std::string(trace_context.authority())); + } + + SpanPtr active_span = driver_->startSpan(config, trace_context, span_name, + stream_info.startTime(), tracing_decision); + + // Set tags related to the local environment + if (active_span) { + active_span->setTag(Tracing::Tags::get().NodeId, local_info_.nodeName()); + active_span->setTag(Tracing::Tags::get().Zone, local_info_.zoneName()); + } + + return active_span; +} + +} // namespace Tracing +} // namespace Envoy diff --git a/source/common/tracing/tracer_impl.h b/source/common/tracing/tracer_impl.h new file mode 100644 index 0000000000000..05af90bb1f8b0 --- /dev/null +++ b/source/common/tracing/tracer_impl.h @@ -0,0 +1,88 @@ +#pragma once + +#include + +#include "envoy/local_info/local_info.h" +#include "envoy/tracing/tracer.h" + +#include "source/common/tracing/common_values.h" +#include "source/common/tracing/null_span_impl.h" + +namespace Envoy { +namespace Tracing { + +/** + * Protocol independent tracer utility functions. + */ +class TracerUtility { +public: + /** + * Get string representation of the operation. + * @param operation name to convert. + * @return string representation of the operation. + */ + static const std::string& toString(OperationName operation_name); + + /** + * Request might be traceable if the request ID is traceable or we do sampling tracing. + * Note: there is a global switch which turns off tracing completely on server side. + * + * @return decision if request is traceable or not and Reason why. + **/ + static Decision shouldTraceRequest(const StreamInfo::StreamInfo& stream_info); + + /** + * Finalize span and set protocol independent tags to the span. + * @param span the downstream or upstream span. + * @param context traceable stream context. + * @param stream_info stream info. + * @param config tracing configuration. + * @param upstream_span true if the span is an upstream span. + */ + static void finalizeSpan(Span& span, const TraceContext& context, + const StreamInfo::StreamInfo& stream_info, const Config& config, + bool upstream_span); + +private: + static const std::string IngressOperation; + static const std::string EgressOperation; +}; + +class EgressConfigImpl : public Config { +public: + // Tracing::Config + Tracing::OperationName operationName() const override { return Tracing::OperationName::Egress; } + const CustomTagMap* customTags() const override { return nullptr; } + bool verbose() const override { return false; } + uint32_t maxPathTagLength() const override { return Tracing::DefaultMaxPathTagLength; } +}; + +using EgressConfig = ConstSingleton; + +class NullTracer : public Tracer { +public: + // Tracing::HttpTracer + SpanPtr startSpan(const Config&, TraceContext&, const StreamInfo::StreamInfo&, + const Tracing::Decision) override { + return SpanPtr{new NullSpan()}; + } +}; + +class TracerImpl : public Tracer { +public: + TracerImpl(DriverSharedPtr driver, const LocalInfo::LocalInfo& local_info); + + // Tracing::HttpTracer + SpanPtr startSpan(const Config& config, TraceContext& trace_context, + const StreamInfo::StreamInfo& stream_info, + const Tracing::Decision tracing_decision) override; + + DriverSharedPtr driverForTest() const { return driver_; } + +private: + DriverSharedPtr driver_; + const LocalInfo::LocalInfo& local_info_; +}; + +} // namespace Tracing +} // namespace Envoy diff --git a/source/common/tracing/http_tracer_manager_impl.cc b/source/common/tracing/tracer_manager_impl.cc similarity index 67% rename from source/common/tracing/http_tracer_manager_impl.cc rename to source/common/tracing/tracer_manager_impl.cc index e746ff89d6662..61877d83c0351 100644 --- a/source/common/tracing/http_tracer_manager_impl.cc +++ b/source/common/tracing/tracer_manager_impl.cc @@ -1,23 +1,22 @@ -#include "source/common/tracing/http_tracer_manager_impl.h" +#include "source/common/tracing/tracer_manager_impl.h" #include "source/common/config/utility.h" namespace Envoy { namespace Tracing { -HttpTracerManagerImpl::HttpTracerManagerImpl( - Server::Configuration::TracerFactoryContextPtr factory_context) +TracerManagerImpl::TracerManagerImpl(Server::Configuration::TracerFactoryContextPtr factory_context) : factory_context_(std::move(factory_context)) {} -HttpTracerSharedPtr -HttpTracerManagerImpl::getOrCreateHttpTracer(const envoy::config::trace::v3::Tracing_Http* config) { +TracerSharedPtr +TracerManagerImpl::getOrCreateTracer(const envoy::config::trace::v3::Tracing_Http* config) { if (!config) { return null_tracer_; } const auto cache_key = MessageUtil::hash(*config); - const auto it = http_tracers_.find(cache_key); - if (it != http_tracers_.end()) { + const auto it = tracers_.find(cache_key); + if (it != tracers_.end()) { auto http_tracer = it->second.lock(); if (http_tracer) { // HttpTracer might have been released since it's a weak reference return http_tracer; @@ -46,15 +45,15 @@ HttpTracerManagerImpl::getOrCreateHttpTracer(const envoy::config::trace::v3::Tra ProtobufTypes::MessagePtr message = Envoy::Config::Utility::translateToFactoryConfig( *config, factory_context_->messageValidationVisitor(), factory); - HttpTracerSharedPtr http_tracer = std::make_shared( - factory.createTracerDriver(*message, *factory_context_), - factory_context_->serverFactoryContext().localInfo()); - http_tracers_.emplace(cache_key, http_tracer); // cache a weak reference - return http_tracer; + HttpTracerSharedPtr tracer = + std::make_shared(factory.createTracerDriver(*message, *factory_context_), + factory_context_->serverFactoryContext().localInfo()); + tracers_.emplace(cache_key, tracer); // cache a weak reference + return tracer; } -void HttpTracerManagerImpl::removeExpiredCacheEntries() { - absl::erase_if(http_tracers_, +void TracerManagerImpl::removeExpiredCacheEntries() { + absl::erase_if(tracers_, [](const std::pair>& entry) { return entry.second.expired(); }); diff --git a/source/common/tracing/tracer_manager_impl.h b/source/common/tracing/tracer_manager_impl.h new file mode 100644 index 0000000000000..354b66f99ab82 --- /dev/null +++ b/source/common/tracing/tracer_manager_impl.h @@ -0,0 +1,38 @@ +#pragma once + +#include "envoy/server/tracer_config.h" +#include "envoy/singleton/instance.h" +#include "envoy/tracing/tracer_manager.h" + +#include "source/common/common/logger.h" +#include "source/common/tracing/tracer_impl.h" + +namespace Envoy { +namespace Tracing { + +class TracerManagerImpl : public TracerManager, + public Singleton::Instance, + Logger::Loggable { +public: + TracerManagerImpl(Server::Configuration::TracerFactoryContextPtr factory_context); + + // TracerManager + TracerSharedPtr getOrCreateTracer(const envoy::config::trace::v3::Tracing_Http* config) override; + + // Take a peek into the cache of HttpTracers. This should only be used in tests. + const absl::flat_hash_map>& peekCachedTracersForTest() const { + return tracers_; + } + +private: + void removeExpiredCacheEntries(); + + Server::Configuration::TracerFactoryContextPtr factory_context_; + const TracerSharedPtr null_tracer_{std::make_shared()}; + + // HttpTracers indexed by the hash of their configuration. + absl::flat_hash_map> tracers_; +}; + +} // namespace Tracing +} // namespace Envoy diff --git a/source/extensions/filters/network/http_connection_manager/BUILD b/source/extensions/filters/network/http_connection_manager/BUILD index 564b04d840c06..0d589272e0cb8 100644 --- a/source/extensions/filters/network/http_connection_manager/BUILD +++ b/source/extensions/filters/network/http_connection_manager/BUILD @@ -54,8 +54,8 @@ envoy_cc_extension( "//source/common/runtime:runtime_lib", "//source/common/tracing:custom_tag_lib", "//source/common/tracing:http_tracer_lib", - "//source/common/tracing:http_tracer_manager_lib", "//source/common/tracing:tracer_config_lib", + "//source/common/tracing:tracer_manager_lib", "//source/extensions/filters/network:well_known_names", "//source/extensions/filters/network/common:factory_base_lib", "//source/extensions/http/header_validators/envoy_default:config", diff --git a/source/extensions/filters/network/http_connection_manager/config.cc b/source/extensions/filters/network/http_connection_manager/config.cc index 69c50dc94f4e8..92bc966dac378 100644 --- a/source/extensions/filters/network/http_connection_manager/config.cc +++ b/source/extensions/filters/network/http_connection_manager/config.cc @@ -37,8 +37,8 @@ #include "source/common/router/scoped_rds.h" #include "source/common/runtime/runtime_impl.h" #include "source/common/tracing/custom_tag_impl.h" -#include "source/common/tracing/http_tracer_manager_impl.h" #include "source/common/tracing/tracer_config_impl.h" +#include "source/common/tracing/tracer_manager_impl.h" namespace Envoy { namespace Extensions { @@ -191,7 +191,7 @@ Http::HeaderValidatorFactoryPtr createHeaderValidatorFactory( SINGLETON_MANAGER_REGISTRATION(date_provider); SINGLETON_MANAGER_REGISTRATION(route_config_provider_manager); SINGLETON_MANAGER_REGISTRATION(scoped_routes_config_provider_manager); -SINGLETON_MANAGER_REGISTRATION(http_tracer_manager); +SINGLETON_MANAGER_REGISTRATION(tracer_manager); Utility::Singletons Utility::createSingletons(Server::Configuration::FactoryContext& context) { std::shared_ptr date_provider = @@ -215,9 +215,9 @@ Utility::Singletons Utility::createSingletons(Server::Configuration::FactoryCont context.admin(), *route_config_provider_manager); }); - auto http_tracer_manager = context.singletonManager().getTyped( - SINGLETON_MANAGER_REGISTERED_NAME(http_tracer_manager), [&context] { - return std::make_shared( + auto tracer_manager = context.singletonManager().getTyped( + SINGLETON_MANAGER_REGISTERED_NAME(tracer_manager), [&context] { + return std::make_shared( std::make_unique( context.getServerFactoryContext(), context.messageValidationVisitor())); }); @@ -227,7 +227,7 @@ Utility::Singletons Utility::createSingletons(Server::Configuration::FactoryCont context.getServerFactoryContext()); return {date_provider, route_config_provider_manager, scoped_routes_config_provider_manager, - http_tracer_manager, filter_config_provider_manager}; + tracer_manager, filter_config_provider_manager}; } std::shared_ptr Utility::createConfig( @@ -236,11 +236,11 @@ std::shared_ptr Utility::createConfig( Server::Configuration::FactoryContext& context, Http::DateProvider& date_provider, Router::RouteConfigProviderManager& route_config_provider_manager, Config::ConfigProviderManager& scoped_routes_config_provider_manager, - Tracing::HttpTracerManager& http_tracer_manager, + Tracing::TracerManager& tracer_manager, FilterConfigProviderManager& filter_config_provider_manager) { return std::make_shared( proto_config, context, date_provider, route_config_provider_manager, - scoped_routes_config_provider_manager, http_tracer_manager, filter_config_provider_manager); + scoped_routes_config_provider_manager, tracer_manager, filter_config_provider_manager); } Network::FilterFactoryCb @@ -260,7 +260,7 @@ HttpConnectionManagerFilterConfigFactory::createFilterFactoryFromProtoAndHopByHo auto filter_config = Utility::createConfig( proto_config, context, *singletons.date_provider_, *singletons.route_config_provider_manager_, - *singletons.scoped_routes_config_provider_manager_, *singletons.http_tracer_manager_, + *singletons.scoped_routes_config_provider_manager_, *singletons.tracer_manager_, *singletons.filter_config_provider_manager_); // This lambda captures the shared_ptrs created above, thus preserving the @@ -307,7 +307,7 @@ HttpConnectionManagerConfig::HttpConnectionManagerConfig( Server::Configuration::FactoryContext& context, Http::DateProvider& date_provider, Router::RouteConfigProviderManager& route_config_provider_manager, Config::ConfigProviderManager& scoped_routes_config_provider_manager, - Tracing::HttpTracerManager& http_tracer_manager, + Tracing::TracerManager& tracer_manager, FilterConfigProviderManager& filter_config_provider_manager) : context_(context), stats_prefix_(fmt::format("http.{}.", config.stat_prefix())), stats_(Http::ConnectionManagerImpl::generateStats(stats_prefix_, context_.scope())), @@ -540,7 +540,7 @@ HttpConnectionManagerConfig::HttpConnectionManagerConfig( } if (config.has_tracing()) { - http_tracer_ = http_tracer_manager.getOrCreateHttpTracer(getPerFilterTracerConfig(config)); + http_tracer_ = tracer_manager.getOrCreateTracer(getPerFilterTracerConfig(config)); const auto& tracing_config = config.tracing(); @@ -794,7 +794,7 @@ HttpConnectionManagerFactory::createHttpConnectionManagerFactoryFromProto( auto filter_config = Utility::createConfig( proto_config, context, *singletons.date_provider_, *singletons.route_config_provider_manager_, - *singletons.scoped_routes_config_provider_manager_, *singletons.http_tracer_manager_, + *singletons.scoped_routes_config_provider_manager_, *singletons.tracer_manager_, *singletons.filter_config_provider_manager_); // This lambda captures the shared_ptrs created above, thus preserving the diff --git a/source/extensions/filters/network/http_connection_manager/config.h b/source/extensions/filters/network/http_connection_manager/config.h index 2256c6e651f85..4730d959fa014 100644 --- a/source/extensions/filters/network/http_connection_manager/config.h +++ b/source/extensions/filters/network/http_connection_manager/config.h @@ -18,7 +18,7 @@ #include "envoy/http/original_ip_detection.h" #include "envoy/http/request_id_extension.h" #include "envoy/router/route_config_provider_manager.h" -#include "envoy/tracing/http_tracer_manager.h" +#include "envoy/tracing/tracer_manager.h" #include "source/common/common/logger.h" #include "source/common/filter/config_discovery_impl.h" @@ -131,7 +131,7 @@ class HttpConnectionManagerConfig : Logger::Loggable, Server::Configuration::FactoryContext& context, Http::DateProvider& date_provider, Router::RouteConfigProviderManager& route_config_provider_manager, Config::ConfigProviderManager& scoped_routes_config_provider_manager, - Tracing::HttpTracerManager& http_tracer_manager, + Tracing::TracerManager& tracer_manager, FilterConfigProviderManager& filter_config_provider_manager); // Http::FilterChainFactory @@ -300,7 +300,7 @@ class HttpConnectionManagerConfig : Logger::Loggable, HttpConnectionManagerProto::OVERWRITE}; std::string server_name_; absl::optional scheme_to_set_; - Tracing::HttpTracerSharedPtr http_tracer_{std::make_shared()}; + Tracing::HttpTracerSharedPtr http_tracer_{std::make_shared()}; Http::TracingConnectionManagerConfigPtr tracing_config_; absl::optional user_agent_; const uint32_t max_request_headers_kb_; @@ -367,7 +367,7 @@ class Utility { std::shared_ptr date_provider_; Router::RouteConfigProviderManagerSharedPtr route_config_provider_manager_; Router::ScopedRoutesConfigProviderManagerSharedPtr scoped_routes_config_provider_manager_; - Tracing::HttpTracerManagerSharedPtr http_tracer_manager_; + Tracing::TracerManagerSharedPtr tracer_manager_; std::shared_ptr filter_config_provider_manager_; }; @@ -395,7 +395,7 @@ class Utility { Server::Configuration::FactoryContext& context, Http::DateProvider& date_provider, Router::RouteConfigProviderManager& route_config_provider_manager, Config::ConfigProviderManager& scoped_routes_config_provider_manager, - Tracing::HttpTracerManager& http_tracer_manager, + Tracing::TracerManager& tracer_manager, FilterConfigProviderManager& filter_config_provider_manager); }; diff --git a/test/common/tracing/BUILD b/test/common/tracing/BUILD index 9160a233ce0ef..3fc76d0739134 100644 --- a/test/common/tracing/BUILD +++ b/test/common/tracing/BUILD @@ -37,14 +37,36 @@ envoy_cc_test( ) envoy_cc_test( - name = "http_tracer_manager_impl_test", + name = "tracer_impl_test", srcs = [ - "http_tracer_manager_impl_test.cc", + "tracer_impl_test.cc", ], deps = [ + "//source/common/network:address_lib", + "//source/common/tracing:custom_tag_lib", "//source/common/tracing:http_tracer_lib", - "//source/common/tracing:http_tracer_manager_lib", + "//source/common/tracing:tracer_lib", + "//test/mocks/http:http_mocks", + "//test/mocks/local_info:local_info_mocks", + "//test/mocks/router:router_mocks", + "//test/mocks/runtime:runtime_mocks", + "//test/mocks/stats:stats_mocks", + "//test/mocks/thread_local:thread_local_mocks", + "//test/mocks/tracing:tracing_mocks", + "//test/test_common:environment_lib", + "//test/test_common:utility_lib", + ], +) + +envoy_cc_test( + name = "tracer_manager_impl_test", + srcs = [ + "tracer_manager_impl_test.cc", + ], + deps = [ "//source/common/tracing:tracer_config_lib", + "//source/common/tracing:tracer_lib", + "//source/common/tracing:tracer_manager_lib", "//test/mocks/server:instance_mocks", "//test/mocks/server:tracer_factory_mocks", "//test/mocks/tracing:tracing_mocks", diff --git a/test/common/tracing/http_tracer_impl_test.cc b/test/common/tracing/http_tracer_impl_test.cc index ca714f00acf82..402542c7eb223 100644 --- a/test/common/tracing/http_tracer_impl_test.cc +++ b/test/common/tracing/http_tracer_impl_test.cc @@ -35,66 +35,11 @@ using testing::InSequence; using testing::NiceMock; using testing::Return; using testing::ReturnPointee; -using testing::ReturnRef; namespace Envoy { namespace Tracing { namespace { -TEST(HttpTracerUtilityTest, IsTracing) { - StreamInfo::MockStreamInfo stream_info; - NiceMock stats; - - // Force traced. - { - EXPECT_CALL(stream_info, healthCheck()).WillOnce(Return(false)); - EXPECT_CALL(stream_info, traceReason()).WillOnce(Return(Reason::ServiceForced)); - - Decision result = HttpTracerUtility::shouldTraceRequest(stream_info); - EXPECT_EQ(Reason::ServiceForced, result.reason); - EXPECT_TRUE(result.traced); - } - - // Sample traced. - { - EXPECT_CALL(stream_info, healthCheck()).WillOnce(Return(false)); - EXPECT_CALL(stream_info, traceReason()).WillOnce(Return(Reason::Sampling)); - - Decision result = HttpTracerUtility::shouldTraceRequest(stream_info); - EXPECT_EQ(Reason::Sampling, result.reason); - EXPECT_TRUE(result.traced); - } - - // Health Check request. - { - EXPECT_CALL(stream_info, healthCheck()).WillOnce(Return(true)); - - Decision result = HttpTracerUtility::shouldTraceRequest(stream_info); - EXPECT_EQ(Reason::HealthCheck, result.reason); - EXPECT_FALSE(result.traced); - } - - // Client traced. - { - EXPECT_CALL(stream_info, healthCheck()).WillOnce(Return(false)); - EXPECT_CALL(stream_info, traceReason()).WillOnce(Return(Reason::ClientForced)); - - Decision result = HttpTracerUtility::shouldTraceRequest(stream_info); - EXPECT_EQ(Reason::ClientForced, result.reason); - EXPECT_TRUE(result.traced); - } - - // No request id. - { - EXPECT_CALL(stream_info, healthCheck()).WillOnce(Return(false)); - EXPECT_CALL(stream_info, traceReason()).WillOnce(Return(Reason::NotTraceable)); - - Decision result = HttpTracerUtility::shouldTraceRequest(stream_info); - EXPECT_EQ(Reason::NotTraceable, result.reason); - EXPECT_FALSE(result.traced); - } -} - class HttpConnManFinalizerImplTest : public testing::Test { protected: HttpConnManFinalizerImplTest() { @@ -701,157 +646,6 @@ TEST_F(HttpConnManFinalizerImplTest, GrpcTrailersOnly) { &response_trailers, stream_info, config); } -TEST(HttpTracerUtilityTest, operationTypeToString) { - EXPECT_EQ("ingress", HttpTracerUtility::toString(OperationName::Ingress)); - EXPECT_EQ("egress", HttpTracerUtility::toString(OperationName::Egress)); -} - -TEST(EgressConfigImplTest, EgressConfigImplTest) { - EgressConfigImpl config_impl; - - EXPECT_EQ(OperationName::Egress, config_impl.operationName()); - EXPECT_EQ(nullptr, config_impl.customTags()); - EXPECT_EQ(false, config_impl.verbose()); - EXPECT_EQ(Tracing::DefaultMaxPathTagLength, config_impl.maxPathTagLength()); -} - -TEST(HttpNullTracerTest, BasicFunctionality) { - HttpNullTracer null_tracer; - MockConfig config; - StreamInfo::MockStreamInfo stream_info; - Http::TestRequestHeaderMapImpl request_headers; - Http::TestResponseHeaderMapImpl response_headers; - Http::TestResponseTrailerMapImpl response_trailers; - Upstream::HostDescriptionConstSharedPtr host{ - new testing::NiceMock()}; - - SpanPtr span_ptr = - null_tracer.startSpan(config, request_headers, stream_info, {Reason::Sampling, true}); - EXPECT_TRUE(dynamic_cast(span_ptr.get()) != nullptr); - - span_ptr->setOperation("foo"); - span_ptr->setTag("foo", "bar"); - span_ptr->setBaggage("key", "value"); - ASSERT_EQ("", span_ptr->getBaggage("baggage_key")); - ASSERT_EQ(span_ptr->getTraceIdAsHex(), ""); - span_ptr->injectContext(request_headers, host); - span_ptr->log(SystemTime(), "fake_event"); - - EXPECT_NE(nullptr, span_ptr->spawnChild(config, "foo", SystemTime())); -} - -class HttpTracerImplTest : public testing::Test { -public: - HttpTracerImplTest() { - driver_ = new NiceMock(); - DriverPtr driver_ptr(driver_); - tracer_ = std::make_shared(std::move(driver_ptr), local_info_); - Upstream::HostDescriptionConstSharedPtr shared_host(host_); - stream_info_.upstreamInfo()->setUpstreamHost(shared_host); - } - Http::TestRequestHeaderMapImpl request_headers_{ - {":path", "/"}, {":method", "GET"}, {"x-request-id", "foo"}, {":authority", "test"}}; - Http::TestResponseHeaderMapImpl response_headers_{{":status", "200"}, - {"content-type", "application/grpc"}, - {"grpc-status", "14"}, - {"grpc-message", "unavailable"}}; - Http::TestResponseTrailerMapImpl response_trailers_; - NiceMock stream_info_; - NiceMock local_info_; - NiceMock config_; - NiceMock* driver_; - HttpTracerSharedPtr tracer_; - Upstream::MockHostDescription* host_{new NiceMock()}; -}; - -TEST_F(HttpTracerImplTest, BasicFunctionalityNullSpan) { - EXPECT_CALL(config_, operationName()).Times(2); - EXPECT_CALL(stream_info_, startTime()); - const std::string operation_name = "ingress"; - EXPECT_CALL(*driver_, startSpan_(_, _, operation_name, stream_info_.start_time_, _)) - .WillOnce(Return(nullptr)); - tracer_->startSpan(config_, request_headers_, stream_info_, {Reason::Sampling, true}); -} - -TEST_F(HttpTracerImplTest, BasicFunctionalityNodeSet) { - EXPECT_CALL(stream_info_, startTime()); - EXPECT_CALL(local_info_, nodeName()); - EXPECT_CALL(config_, operationName()).Times(2).WillRepeatedly(Return(OperationName::Egress)); - - NiceMock* span = new NiceMock(); - const std::string operation_name = "egress test"; - EXPECT_CALL(*driver_, startSpan_(_, _, operation_name, stream_info_.start_time_, _)) - .WillOnce(Return(span)); - EXPECT_CALL(*span, setTag(_, _)).Times(testing::AnyNumber()); - EXPECT_CALL(*span, setTag(Eq(Tracing::Tags::get().NodeId), Eq("node_name"))); - - tracer_->startSpan(config_, request_headers_, stream_info_, {Reason::Sampling, true}); -} - -TEST_F(HttpTracerImplTest, ChildGrpcUpstreamSpanTest) { - EXPECT_CALL(stream_info_, startTime()); - EXPECT_CALL(local_info_, nodeName()); - EXPECT_CALL(config_, operationName()).Times(2).WillRepeatedly(Return(OperationName::Egress)); - - NiceMock* span = new NiceMock(); - const std::string operation_name = "egress test"; - EXPECT_CALL(*driver_, startSpan_(_, _, operation_name, stream_info_.start_time_, _)) - .WillOnce(Return(span)); - EXPECT_CALL(*span, setTag(_, _)).Times(testing::AnyNumber()); - EXPECT_CALL(*span, setTag(Eq(Tracing::Tags::get().NodeId), Eq("node_name"))); - - auto parent_span = - tracer_->startSpan(config_, request_headers_, stream_info_, {Reason::Sampling, true}); - - NiceMock* second_span = new NiceMock(); - - EXPECT_CALL(*span, spawnChild_(_, _, _)).WillOnce(Return(second_span)); - auto child_span = - parent_span->spawnChild(config_, "fake child of egress test", stream_info_.start_time_); - - const std::string expected_ip = "10.0.0.100"; - const auto remote_address = Network::Address::InstanceConstSharedPtr{ - new Network::Address::Ipv4Instance(expected_ip, 0, nullptr)}; - - absl::optional protocol = Http::Protocol::Http2; - absl::optional response_code(200); - const std::string cluster_name = "fake cluster"; - const std::string ob_cluster_name = "ob fake cluster"; - EXPECT_CALL(stream_info_, responseCode()).WillRepeatedly(ReturnPointee(&response_code)); - EXPECT_CALL(stream_info_, protocol()).WillRepeatedly(ReturnPointee(&protocol)); - EXPECT_CALL(*host_, address()).WillOnce(Return(remote_address)); - EXPECT_CALL(host_->cluster_, name()).WillOnce(ReturnRef(cluster_name)); - EXPECT_CALL(host_->cluster_, observabilityName()).WillOnce(ReturnRef(ob_cluster_name)); - - EXPECT_CALL(*second_span, setTag(_, _)).Times(testing::AnyNumber()); - EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().HttpProtocol), Eq("HTTP/2"))); - EXPECT_CALL(*second_span, - setTag(Eq(Tracing::Tags::get().UpstreamAddress), Eq(expected_ip + ":0"))); - EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().PeerAddress), Eq(expected_ip + ":0"))); - EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().UpstreamCluster), Eq("fake cluster"))); - EXPECT_CALL(*second_span, - setTag(Eq(Tracing::Tags::get().UpstreamClusterName), Eq("ob fake cluster"))); - EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().HttpStatusCode), Eq("200"))); - EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().GrpcStatusCode), Eq("14"))); - EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().GrpcMessage), Eq("unavailable"))); - EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().Error), Eq(Tracing::Tags::get().True))); - - HttpTracerUtility::onUpstreamResponseHeaders(*child_span, &response_headers_); - HttpTracerUtility::onUpstreamResponseTrailers(*child_span, &response_trailers_); - HttpTracerUtility::finalizeUpstreamSpan(*child_span, stream_info_, config_); -} - -TEST_F(HttpTracerImplTest, MetadataCustomTagReturnsDefaultValue) { - envoy::type::tracing::v3::CustomTag::Metadata testing_metadata; - testing_metadata.mutable_metadata_key()->set_key("key"); - *testing_metadata.mutable_default_value() = "default_value"; - MetadataCustomTag tag("testing", testing_metadata); - StreamInfo::MockStreamInfo testing_info_; - Http::TestRequestHeaderMapImpl header_map_; - CustomTagContext context{&header_map_, testing_info_}; - EXPECT_EQ(tag.value(context), "default_value"); -} - TEST_F(HttpConnManFinalizerImplTest, CustomTagOverwritesCommonTag) { Http::TestRequestHeaderMapImpl request_headers{ diff --git a/test/common/tracing/tracer_impl_test.cc b/test/common/tracing/tracer_impl_test.cc new file mode 100644 index 0000000000000..aea233d01e496 --- /dev/null +++ b/test/common/tracing/tracer_impl_test.cc @@ -0,0 +1,377 @@ +#include "source/common/network/address_impl.h" +#include "source/common/tracing/custom_tag_impl.h" +#include "source/common/tracing/http_tracer_impl.h" +#include "source/common/tracing/tracer_impl.h" + +#include "test/mocks/http/mocks.h" +#include "test/mocks/local_info/mocks.h" +#include "test/mocks/router/mocks.h" +#include "test/mocks/runtime/mocks.h" +#include "test/mocks/stats/mocks.h" +#include "test/mocks/thread_local/mocks.h" +#include "test/mocks/tracing/mocks.h" +#include "test/test_common/environment.h" +#include "test/test_common/printers.h" +#include "test/test_common/utility.h" + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +using testing::_; +using testing::AnyNumber; +using testing::Eq; +using testing::NiceMock; +using testing::Return; +using testing::ReturnPointee; +using testing::ReturnRef; + +namespace Envoy { +namespace Tracing { + +TEST(TracerUtilityTest, SimpleTest) { + StreamInfo::MockStreamInfo stream_info; + NiceMock stats; + + // Force traced. + { + EXPECT_CALL(stream_info, healthCheck()).WillOnce(Return(false)); + EXPECT_CALL(stream_info, traceReason()).WillOnce(Return(Reason::ServiceForced)); + + Decision result = TracerUtility::shouldTraceRequest(stream_info); + EXPECT_EQ(Reason::ServiceForced, result.reason); + EXPECT_TRUE(result.traced); + } + + // Sample traced. + { + EXPECT_CALL(stream_info, healthCheck()).WillOnce(Return(false)); + EXPECT_CALL(stream_info, traceReason()).WillOnce(Return(Reason::Sampling)); + + Decision result = TracerUtility::shouldTraceRequest(stream_info); + EXPECT_EQ(Reason::Sampling, result.reason); + EXPECT_TRUE(result.traced); + } + + // Health Check request. + { + EXPECT_CALL(stream_info, healthCheck()).WillOnce(Return(true)); + + Decision result = TracerUtility::shouldTraceRequest(stream_info); + EXPECT_EQ(Reason::HealthCheck, result.reason); + EXPECT_FALSE(result.traced); + } + + // Client traced. + { + EXPECT_CALL(stream_info, healthCheck()).WillOnce(Return(false)); + EXPECT_CALL(stream_info, traceReason()).WillOnce(Return(Reason::ClientForced)); + + Decision result = TracerUtility::shouldTraceRequest(stream_info); + EXPECT_EQ(Reason::ClientForced, result.reason); + EXPECT_TRUE(result.traced); + } + + // No request id. + { + EXPECT_CALL(stream_info, healthCheck()).WillOnce(Return(false)); + EXPECT_CALL(stream_info, traceReason()).WillOnce(Return(Reason::NotTraceable)); + + Decision result = TracerUtility::shouldTraceRequest(stream_info); + EXPECT_EQ(Reason::NotTraceable, result.reason); + EXPECT_FALSE(result.traced); + } + + // Operation name. + { + EXPECT_EQ("ingress", TracerUtility::toString(OperationName::Ingress)); + EXPECT_EQ("egress", TracerUtility::toString(OperationName::Egress)); + } +} + +class FinalizerImplTest : public testing::Test { +protected: + FinalizerImplTest() { + Upstream::HostDescriptionConstSharedPtr shared_host(host_); + stream_info.upstreamInfo()->setUpstreamHost(shared_host); + } + struct CustomTagCase { + std::string custom_tag; + bool set; + std::string value; + }; + + void expectSetCustomTags(const std::vector& cases) { + for (const CustomTagCase& cas : cases) { + envoy::type::tracing::v3::CustomTag custom_tag; + TestUtility::loadFromYaml(cas.custom_tag, custom_tag); + config.custom_tags_.emplace(custom_tag.tag(), CustomTagUtility::createCustomTag(custom_tag)); + if (cas.set) { + EXPECT_CALL(span, setTag(Eq(custom_tag.tag()), Eq(cas.value))); + } else { + EXPECT_CALL(span, setTag(Eq(custom_tag.tag()), _)).Times(0); + } + } + } + + NiceMock span; + NiceMock config; + NiceMock stream_info; + Upstream::MockHostDescription* host_{new NiceMock()}; +}; + +TEST_F(FinalizerImplTest, TestAll) { + TestEnvironment::setEnvVar("E_CC", "c", 1); + + Tracing::TestTraceContextImpl trace_context{{"x-request-id", "id"}, {"x-bb", "b"}}; + trace_context.context_authority_ = "test.com"; + trace_context.context_method_ = "method"; + trace_context.context_path_ = "TestService"; + trace_context.context_protocol_ = "test"; + + // Set upstream cluster. + host_->cluster_.name_ = "my_upstream_cluster"; + host_->cluster_.observability_name_ = "my_upstream_cluster_observable"; + + // Enable verbose logs. + EXPECT_CALL(config, verbose).Times(2).WillRepeatedly(Return(true)); + + // Downstream address. + const std::string downstream_ip = "10.0.0.100"; + const auto remote_address = Network::Address::InstanceConstSharedPtr{ + new Network::Address::Ipv4Instance(downstream_ip, 0, nullptr)}; + stream_info.downstream_connection_info_provider_->setDirectRemoteAddressForTest(remote_address); + + // Timestamps of stream. + const auto start_timestamp = + SystemTime{std::chrono::duration_cast(std::chrono::hours{123})}; + EXPECT_CALL(stream_info, startTime()).WillRepeatedly(Return(start_timestamp)); + const absl::optional nanoseconds = std::chrono::nanoseconds{10}; + const MonotonicTime time = MonotonicTime(nanoseconds.value()); + MockTimeSystem time_system; + EXPECT_CALL(time_system, monotonicTime()) + .Times(AnyNumber()) + .WillRepeatedly(Return(MonotonicTime(std::chrono::nanoseconds(10)))); + auto& timing = stream_info.upstream_info_->upstreamTiming(); + timing.first_upstream_tx_byte_sent_ = time; + timing.last_upstream_tx_byte_sent_ = time; + timing.first_upstream_rx_byte_received_ = time; + timing.last_upstream_rx_byte_received_ = time; + stream_info.downstream_timing_.onFirstDownstreamTxByteSent(time_system); + stream_info.downstream_timing_.onLastDownstreamTxByteSent(time_system); + stream_info.downstream_timing_.onLastDownstreamRxByteReceived(time_system); + + { + EXPECT_CALL(span, setTag(Eq(Tracing::Tags::get().Component), Eq(Tracing::Tags::get().Proxy))); + EXPECT_CALL(span, setTag(Eq(Tracing::Tags::get().ResponseFlags), Eq("-"))); + EXPECT_CALL(span, setTag(Eq(Tracing::Tags::get().UpstreamCluster), Eq("my_upstream_cluster"))); + EXPECT_CALL(span, setTag(Eq(Tracing::Tags::get().UpstreamClusterName), + Eq("my_upstream_cluster_observable"))); + EXPECT_CALL(span, setTag(Eq(Tracing::Tags::get().UpstreamAddress), _)); + EXPECT_CALL(span, setTag(Eq(Tracing::Tags::get().PeerAddress), + Eq("10.0.0.1:443"))); // Upstream address as 'peer.address' + + const auto log_timestamp = + start_timestamp + std::chrono::duration_cast(*nanoseconds); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().LastDownstreamRxByteReceived)); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().FirstUpstreamTxByteSent)); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().LastUpstreamTxByteSent)); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().FirstUpstreamRxByteReceived)); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().LastUpstreamRxByteReceived)); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().FirstDownstreamTxByteSent)); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().LastDownstreamTxByteSent)); + + expectSetCustomTags({ + {"{ tag: aa, literal: { value: a } }", true, "a"}, + {"{ tag: bb-1, request_header: { name: X-Bb, default_value: _b } }", true, "b"}, + {"{ tag: bb-2, request_header: { name: X-Bb-Not-Found, default_value: b2 } }", true, "b2"}, + {"{ tag: bb-3, request_header: { name: X-Bb-Not-Found } }", false, ""}, + {"{ tag: cc-1, environment: { name: E_CC } }", true, "c"}, + {"{ tag: cc-1-a, environment: { name: E_CC, default_value: _c } }", true, "c"}, + {"{ tag: cc-2, environment: { name: E_CC_NOT_FOUND, default_value: c2 } }", true, "c2"}, + {"{ tag: cc-3, environment: { name: E_CC_NOT_FOUND} }", false, ""}, + }); + + TracerUtility::finalizeSpan(span, trace_context, stream_info, config, true); + } + + { + EXPECT_CALL(span, setTag(Eq(Tracing::Tags::get().Component), Eq(Tracing::Tags::get().Proxy))); + EXPECT_CALL(span, setTag(Eq(Tracing::Tags::get().ResponseFlags), Eq("-"))); + EXPECT_CALL(span, setTag(Eq(Tracing::Tags::get().PeerAddress), + remote_address->asString())); // Downstream address as 'peer.address' + EXPECT_CALL(span, setTag(Eq(Tracing::Tags::get().UpstreamCluster), Eq("my_upstream_cluster"))); + EXPECT_CALL(span, setTag(Eq(Tracing::Tags::get().UpstreamClusterName), + Eq("my_upstream_cluster_observable"))); + EXPECT_CALL(span, setTag(Eq(Tracing::Tags::get().UpstreamAddress), _)); + + const auto log_timestamp = + start_timestamp + std::chrono::duration_cast(*nanoseconds); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().LastDownstreamRxByteReceived)); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().FirstUpstreamTxByteSent)); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().LastUpstreamTxByteSent)); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().FirstUpstreamRxByteReceived)); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().LastUpstreamRxByteReceived)); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().FirstDownstreamTxByteSent)); + EXPECT_CALL(span, log(log_timestamp, Tracing::Logs::get().LastDownstreamTxByteSent)); + + expectSetCustomTags({ + {"{ tag: aa, literal: { value: a } }", true, "a"}, + {"{ tag: bb-1, request_header: { name: X-Bb, default_value: _b } }", true, "b"}, + {"{ tag: bb-2, request_header: { name: X-Bb-Not-Found, default_value: b2 } }", true, "b2"}, + {"{ tag: bb-3, request_header: { name: X-Bb-Not-Found } }", false, ""}, + {"{ tag: cc-1, environment: { name: E_CC } }", true, "c"}, + {"{ tag: cc-1-a, environment: { name: E_CC, default_value: _c } }", true, "c"}, + {"{ tag: cc-2, environment: { name: E_CC_NOT_FOUND, default_value: c2 } }", true, "c2"}, + {"{ tag: cc-3, environment: { name: E_CC_NOT_FOUND} }", false, ""}, + }); + + TracerUtility::finalizeSpan(span, trace_context, stream_info, config, false); + } +} + +TEST(EgressConfigImplTest, EgressConfigImplTest) { + EgressConfigImpl config_impl; + + EXPECT_EQ(OperationName::Egress, config_impl.operationName()); + EXPECT_EQ(nullptr, config_impl.customTags()); + EXPECT_EQ(false, config_impl.verbose()); + EXPECT_EQ(Tracing::DefaultMaxPathTagLength, config_impl.maxPathTagLength()); +} + +TEST(NullTracerTest, BasicFunctionality) { + NullTracer null_tracer; + MockConfig config; + StreamInfo::MockStreamInfo stream_info; + Tracing::TestTraceContextImpl trace_context{}; + Upstream::HostDescriptionConstSharedPtr host{ + new testing::NiceMock()}; + + SpanPtr span_ptr = + null_tracer.startSpan(config, trace_context, stream_info, {Reason::Sampling, true}); + EXPECT_TRUE(dynamic_cast(span_ptr.get()) != nullptr); + + span_ptr->setOperation("foo"); + span_ptr->setTag("foo", "bar"); + span_ptr->setBaggage("key", "value"); + ASSERT_EQ("", span_ptr->getBaggage("baggage_key")); + ASSERT_EQ(span_ptr->getTraceIdAsHex(), ""); + span_ptr->injectContext(trace_context, host); + span_ptr->log(SystemTime(), "fake_event"); + + EXPECT_NE(nullptr, span_ptr->spawnChild(config, "foo", SystemTime())); +} + +class TracerImplTest : public testing::Test { +public: + TracerImplTest() { + driver_ = new NiceMock(); + DriverPtr driver_ptr(driver_); + tracer_ = std::make_shared(std::move(driver_ptr), local_info_); + Upstream::HostDescriptionConstSharedPtr shared_host(host_); + stream_info_.upstreamInfo()->setUpstreamHost(shared_host); + } + Http::TestRequestHeaderMapImpl request_headers_{ + {":path", "/"}, {":method", "GET"}, {"x-request-id", "foo"}, {":authority", "test"}}; + Http::TestResponseHeaderMapImpl response_headers_{{":status", "200"}, + {"content-type", "application/grpc"}, + {"grpc-status", "14"}, + {"grpc-message", "unavailable"}}; + Http::TestResponseTrailerMapImpl response_trailers_; + NiceMock stream_info_; + NiceMock local_info_; + NiceMock config_; + NiceMock* driver_; + HttpTracerSharedPtr tracer_; + Upstream::MockHostDescription* host_{new NiceMock()}; +}; + +TEST_F(TracerImplTest, BasicFunctionalityNullSpan) { + EXPECT_CALL(config_, operationName()).Times(2); + EXPECT_CALL(stream_info_, startTime()); + const std::string operation_name = "ingress"; + EXPECT_CALL(*driver_, startSpan_(_, _, operation_name, stream_info_.start_time_, _)) + .WillOnce(Return(nullptr)); + tracer_->startSpan(config_, request_headers_, stream_info_, {Reason::Sampling, true}); +} + +TEST_F(TracerImplTest, BasicFunctionalityNodeSet) { + EXPECT_CALL(stream_info_, startTime()); + EXPECT_CALL(local_info_, nodeName()); + EXPECT_CALL(config_, operationName()).Times(2).WillRepeatedly(Return(OperationName::Egress)); + + NiceMock* span = new NiceMock(); + const std::string operation_name = "egress test"; + EXPECT_CALL(*driver_, startSpan_(_, _, operation_name, stream_info_.start_time_, _)) + .WillOnce(Return(span)); + EXPECT_CALL(*span, setTag(_, _)).Times(testing::AnyNumber()); + EXPECT_CALL(*span, setTag(Eq(Tracing::Tags::get().NodeId), Eq("node_name"))); + + tracer_->startSpan(config_, request_headers_, stream_info_, {Reason::Sampling, true}); +} + +TEST_F(TracerImplTest, ChildGrpcUpstreamSpanTest) { + EXPECT_CALL(stream_info_, startTime()); + EXPECT_CALL(local_info_, nodeName()); + EXPECT_CALL(config_, operationName()).Times(2).WillRepeatedly(Return(OperationName::Egress)); + + NiceMock* span = new NiceMock(); + const std::string operation_name = "egress test"; + EXPECT_CALL(*driver_, startSpan_(_, _, operation_name, stream_info_.start_time_, _)) + .WillOnce(Return(span)); + EXPECT_CALL(*span, setTag(_, _)).Times(testing::AnyNumber()); + EXPECT_CALL(*span, setTag(Eq(Tracing::Tags::get().NodeId), Eq("node_name"))); + + auto parent_span = + tracer_->startSpan(config_, request_headers_, stream_info_, {Reason::Sampling, true}); + + NiceMock* second_span = new NiceMock(); + + EXPECT_CALL(*span, spawnChild_(_, _, _)).WillOnce(Return(second_span)); + auto child_span = + parent_span->spawnChild(config_, "fake child of egress test", stream_info_.start_time_); + + const std::string expected_ip = "10.0.0.100"; + const auto remote_address = Network::Address::InstanceConstSharedPtr{ + new Network::Address::Ipv4Instance(expected_ip, 0, nullptr)}; + + absl::optional protocol = Http::Protocol::Http2; + absl::optional response_code(200); + const std::string cluster_name = "fake cluster"; + const std::string ob_cluster_name = "ob fake cluster"; + EXPECT_CALL(stream_info_, responseCode()).WillRepeatedly(ReturnPointee(&response_code)); + EXPECT_CALL(stream_info_, protocol()).WillRepeatedly(ReturnPointee(&protocol)); + EXPECT_CALL(*host_, address()).WillOnce(Return(remote_address)); + EXPECT_CALL(host_->cluster_, name()).WillOnce(ReturnRef(cluster_name)); + EXPECT_CALL(host_->cluster_, observabilityName()).WillOnce(ReturnRef(ob_cluster_name)); + + EXPECT_CALL(*second_span, setTag(_, _)).Times(testing::AnyNumber()); + EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().HttpProtocol), Eq("HTTP/2"))); + EXPECT_CALL(*second_span, + setTag(Eq(Tracing::Tags::get().UpstreamAddress), Eq(expected_ip + ":0"))); + EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().PeerAddress), Eq(expected_ip + ":0"))); + EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().UpstreamCluster), Eq("fake cluster"))); + EXPECT_CALL(*second_span, + setTag(Eq(Tracing::Tags::get().UpstreamClusterName), Eq("ob fake cluster"))); + EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().HttpStatusCode), Eq("200"))); + EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().GrpcStatusCode), Eq("14"))); + EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().GrpcMessage), Eq("unavailable"))); + EXPECT_CALL(*second_span, setTag(Eq(Tracing::Tags::get().Error), Eq(Tracing::Tags::get().True))); + + HttpTracerUtility::onUpstreamResponseHeaders(*child_span, &response_headers_); + HttpTracerUtility::onUpstreamResponseTrailers(*child_span, &response_trailers_); + HttpTracerUtility::finalizeUpstreamSpan(*child_span, stream_info_, config_); +} + +TEST_F(TracerImplTest, MetadataCustomTagReturnsDefaultValue) { + envoy::type::tracing::v3::CustomTag::Metadata testing_metadata; + testing_metadata.mutable_metadata_key()->set_key("key"); + *testing_metadata.mutable_default_value() = "default_value"; + MetadataCustomTag tag("testing", testing_metadata); + StreamInfo::MockStreamInfo testing_info_; + Http::TestRequestHeaderMapImpl header_map_; + CustomTagContext context{&header_map_, testing_info_}; + EXPECT_EQ(tag.value(context), "default_value"); +} + +} // namespace Tracing +} // namespace Envoy diff --git a/test/common/tracing/http_tracer_manager_impl_test.cc b/test/common/tracing/tracer_manager_impl_test.cc similarity index 64% rename from test/common/tracing/http_tracer_manager_impl_test.cc rename to test/common/tracing/tracer_manager_impl_test.cc index c08e6dbceb8b9..27113036df82c 100644 --- a/test/common/tracing/http_tracer_manager_impl_test.cc +++ b/test/common/tracing/tracer_manager_impl_test.cc @@ -1,6 +1,6 @@ -#include "source/common/tracing/http_tracer_impl.h" -#include "source/common/tracing/http_tracer_manager_impl.h" #include "source/common/tracing/tracer_config_impl.h" +#include "source/common/tracing/tracer_impl.h" +#include "source/common/tracing/tracer_manager_impl.h" #include "test/mocks/server/instance.h" #include "test/mocks/server/tracer_factory.h" @@ -44,10 +44,10 @@ class SampleTracerFactory : public Server::Configuration::TracerFactory { } }; -class HttpTracerManagerImplTest : public testing::Test { +class TracerManagerImplTest : public testing::Test { public: NiceMock server_factory_context_; - HttpTracerManagerImpl http_tracer_manager_{std::make_unique( + TracerManagerImpl tracer_manager_{std::make_unique( server_factory_context_, ProtobufMessage::getStrictValidationVisitor())}; private: @@ -56,81 +56,79 @@ class HttpTracerManagerImplTest : public testing::Test { sample_tracer_factory_}; }; -TEST_F(HttpTracerManagerImplTest, - ShouldReturnHttpNullTracerWhenNoTracingProviderHasBeenConfigured) { - auto http_tracer = http_tracer_manager_.getOrCreateHttpTracer(nullptr); +TEST_F(TracerManagerImplTest, ShouldReturnWhenNoTracingProviderHasBeenConfigured) { + auto http_tracer = tracer_manager_.getOrCreateTracer(nullptr); - // Should return a null object (Tracing::HttpNullTracer) rather than nullptr. - EXPECT_THAT(http_tracer.get(), WhenDynamicCastTo(NotNull())); + // Should return a null object (Tracing::) rather than nullptr. + EXPECT_THAT(http_tracer.get(), WhenDynamicCastTo(NotNull())); } -TEST_F(HttpTracerManagerImplTest, ShouldUseProperTracerFactory) { +TEST_F(TracerManagerImplTest, ShouldUseProperTracerFactory) { TestScopedRuntime scoped_runtime; scoped_runtime.mergeValues({{"envoy.reloadable_features.no_extension_lookup_by_name", "false"}}); envoy::config::trace::v3::Tracing_Http tracing_config; tracing_config.set_name("envoy.tracers.sample"); - auto http_tracer = http_tracer_manager_.getOrCreateHttpTracer(&tracing_config); + auto http_tracer = tracer_manager_.getOrCreateTracer(&tracing_config); - EXPECT_THAT(http_tracer.get(), WhenDynamicCastTo(NotNull())); - auto http_tracer_impl = dynamic_cast(http_tracer.get()); + EXPECT_THAT(http_tracer.get(), WhenDynamicCastTo(NotNull())); + auto tracer_impl = dynamic_cast(http_tracer.get()); // Should use proper TracerFactory. - EXPECT_THAT(http_tracer_impl->driverForTest().get(), WhenDynamicCastTo(NotNull())); + EXPECT_THAT(tracer_impl->driverForTest().get(), WhenDynamicCastTo(NotNull())); } -TEST_F(HttpTracerManagerImplTest, ShouldCacheAndReuseTracers) { +TEST_F(TracerManagerImplTest, ShouldCacheAndReuseTracers) { envoy::config::trace::v3::Tracing_Http tracing_config; tracing_config.set_name("envoy.tracers.sample"); tracing_config.mutable_typed_config()->PackFrom(MessageUtil::keyValueStruct("key1", "value1")); - auto http_tracer_one = http_tracer_manager_.getOrCreateHttpTracer(&tracing_config); + auto http_tracer_one = tracer_manager_.getOrCreateTracer(&tracing_config); // Expect a new HttpTracer to be added to the cache. - EXPECT_THAT(http_tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); + EXPECT_THAT(tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); - auto http_tracer_two = http_tracer_manager_.getOrCreateHttpTracer(&tracing_config); + auto http_tracer_two = tracer_manager_.getOrCreateTracer(&tracing_config); // Expect no changes to the cache. - EXPECT_THAT(http_tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); + EXPECT_THAT(tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); // Should reuse previously created HttpTracer instance. EXPECT_EQ(http_tracer_two, http_tracer_one); } -TEST_F(HttpTracerManagerImplTest, ShouldCacheTracersBasedOnFullConfig) { +TEST_F(TracerManagerImplTest, ShouldCacheTracersBasedOnFullConfig) { envoy::config::trace::v3::Tracing_Http tracing_config_one; tracing_config_one.set_name("envoy.tracers.sample"); tracing_config_one.mutable_typed_config()->PackFrom( MessageUtil::keyValueStruct("key1", "value1")); - auto http_tracer_one = http_tracer_manager_.getOrCreateHttpTracer(&tracing_config_one); + auto http_tracer_one = tracer_manager_.getOrCreateTracer(&tracing_config_one); // Expect a new HttpTracer to be added to the cache. - EXPECT_THAT(http_tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); + EXPECT_THAT(tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); envoy::config::trace::v3::Tracing_Http tracing_config_two; tracing_config_two.set_name("envoy.tracers.sample"); tracing_config_two.mutable_typed_config()->PackFrom( MessageUtil::keyValueStruct("key2", "value2")); - auto http_tracer_two = http_tracer_manager_.getOrCreateHttpTracer(&tracing_config_two); + auto http_tracer_two = tracer_manager_.getOrCreateTracer(&tracing_config_two); // Expect a new HttpTracer to be added to the cache. - EXPECT_THAT(http_tracer_manager_.peekCachedTracersForTest(), SizeIs(2)); + EXPECT_THAT(tracer_manager_.peekCachedTracersForTest(), SizeIs(2)); // Any changes to config must result in a new HttpTracer instance. EXPECT_NE(http_tracer_two, http_tracer_one); } -TEST_F(HttpTracerManagerImplTest, ShouldFailIfTracerProviderIsUnknown) { +TEST_F(TracerManagerImplTest, ShouldFailIfTracerProviderIsUnknown) { TestScopedRuntime scoped_runtime; scoped_runtime.mergeValues({{"envoy.reloadable_features.no_extension_lookup_by_name", "false"}}); envoy::config::trace::v3::Tracing_Http tracing_config; tracing_config.set_name("invalid"); - EXPECT_THROW_WITH_MESSAGE(http_tracer_manager_.getOrCreateHttpTracer(&tracing_config), - EnvoyException, + EXPECT_THROW_WITH_MESSAGE(tracer_manager_.getOrCreateTracer(&tracing_config), EnvoyException, "Didn't find a registered implementation for name: 'invalid'"); } -TEST_F(HttpTracerManagerImplTest, ShouldFailIfProviderSpecificConfigIsNotValid) { +TEST_F(TracerManagerImplTest, ShouldFailIfProviderSpecificConfigIsNotValid) { TestScopedRuntime scoped_runtime; scoped_runtime.mergeValues({{"envoy.reloadable_features.no_extension_lookup_by_name", "false"}}); @@ -140,15 +138,14 @@ TEST_F(HttpTracerManagerImplTest, ShouldFailIfProviderSpecificConfigIsNotValid) ProtobufWkt::Any expected_any_proto; expected_any_proto.PackFrom(ValueUtil::stringValue("value")); - EXPECT_THROW_WITH_MESSAGE(http_tracer_manager_.getOrCreateHttpTracer(&tracing_config), - EnvoyException, + EXPECT_THROW_WITH_MESSAGE(tracer_manager_.getOrCreateTracer(&tracing_config), EnvoyException, fmt::format("Unable to unpack as google.protobuf.Struct: {}", expected_any_proto.DebugString())); } -class HttpTracerManagerImplCacheTest : public testing::Test { +class TracerManagerImplCacheTest : public testing::Test { public: - HttpTracerManagerImplCacheTest() { + TracerManagerImplCacheTest() { tracing_config_one_.set_name("envoy.tracers.mock"); tracing_config_one_.mutable_typed_config()->PackFrom( MessageUtil::keyValueStruct("key1", "value1")); @@ -159,7 +156,7 @@ class HttpTracerManagerImplCacheTest : public testing::Test { } NiceMock server_factory_context_; - HttpTracerManagerImpl http_tracer_manager_{std::make_unique( + TracerManagerImpl tracer_manager_{std::make_unique( server_factory_context_, ProtobufMessage::getStrictValidationVisitor())}; NiceMock tracer_factory_{"envoy.tracers.mock"}; @@ -172,7 +169,7 @@ class HttpTracerManagerImplCacheTest : public testing::Test { tracer_factory_}; }; -TEST_F(HttpTracerManagerImplCacheTest, ShouldCacheHttpTracersUsingWeakReferences) { +TEST_F(TracerManagerImplCacheTest, ShouldCacheHttpTracersUsingWeakReferences) { Driver* expected_driver = new NiceMock(); // Expect HttpTracerManager to create a new HttpTracer. @@ -180,20 +177,20 @@ TEST_F(HttpTracerManagerImplCacheTest, ShouldCacheHttpTracersUsingWeakReferences .WillOnce(InvokeWithoutArgs( [expected_driver] { return std::shared_ptr(expected_driver); })); - auto actual_tracer_one = http_tracer_manager_.getOrCreateHttpTracer(&tracing_config_one_); + auto actual_tracer_one = tracer_manager_.getOrCreateTracer(&tracing_config_one_); - EXPECT_EQ(dynamic_cast(actual_tracer_one.get())->driverForTest().get(), + EXPECT_EQ(dynamic_cast(actual_tracer_one.get())->driverForTest().get(), expected_driver); // Expect a new HttpTracer to be added to the cache. - EXPECT_THAT(http_tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); + EXPECT_THAT(tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); // Expect HttpTracerManager to re-use cached value. - auto actual_tracer_two = http_tracer_manager_.getOrCreateHttpTracer(&tracing_config_one_); + auto actual_tracer_two = tracer_manager_.getOrCreateTracer(&tracing_config_one_); - EXPECT_EQ(dynamic_cast(actual_tracer_one.get())->driverForTest().get(), + EXPECT_EQ(dynamic_cast(actual_tracer_one.get())->driverForTest().get(), expected_driver); // Expect no changes to the cache. - EXPECT_THAT(http_tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); + EXPECT_THAT(tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); // Expect HttpTracerManager to use weak references under the hood and release HttpTracer as soon // as it's no longer in use. @@ -215,20 +212,20 @@ TEST_F(HttpTracerManagerImplCacheTest, ShouldCacheHttpTracersUsingWeakReferences [expected_other_driver] { return std::shared_ptr(expected_other_driver); })); // Use a different config to guarantee that a new cache entry will be added anyway. - auto actual_tracer_three = http_tracer_manager_.getOrCreateHttpTracer(&tracing_config_two_); + auto actual_tracer_three = tracer_manager_.getOrCreateTracer(&tracing_config_two_); - EXPECT_EQ(dynamic_cast(actual_tracer_three.get())->driverForTest().get(), + EXPECT_EQ(dynamic_cast(actual_tracer_three.get())->driverForTest().get(), expected_other_driver); // Expect expired cache entries to be removed and a new HttpTracer to be added to the cache. - EXPECT_THAT(http_tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); + EXPECT_THAT(tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); // Expect HttpTracerManager to keep the right value in the cache. - auto actual_tracer_four = http_tracer_manager_.getOrCreateHttpTracer(&tracing_config_two_); + auto actual_tracer_four = tracer_manager_.getOrCreateTracer(&tracing_config_two_); - EXPECT_EQ(dynamic_cast(actual_tracer_four.get())->driverForTest().get(), + EXPECT_EQ(dynamic_cast(actual_tracer_four.get())->driverForTest().get(), expected_other_driver); // Expect no changes to the cache. - EXPECT_THAT(http_tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); + EXPECT_THAT(tracer_manager_.peekCachedTracersForTest(), SizeIs(1)); } } // namespace diff --git a/test/extensions/filters/network/http_connection_manager/config_filter_chain_test.cc b/test/extensions/filters/network/http_connection_manager/config_filter_chain_test.cc index b7a18ea30bdab..2d9f468a55039 100644 --- a/test/extensions/filters/network/http_connection_manager/config_filter_chain_test.cc +++ b/test/extensions/filters/network/http_connection_manager/config_filter_chain_test.cc @@ -47,7 +47,7 @@ stat_prefix: router TEST_F(FilterChainTest, CreateFilterChain) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(basic_config_), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); NiceMock manager; @@ -87,7 +87,7 @@ stat_prefix: router )EOF"; HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); NiceMock manager; @@ -114,10 +114,9 @@ TEST_F(FilterChainTest, CreateUpgradeFilterChain) { auto hcm_config = parseHttpConnectionManagerFromYaml(basic_config_); hcm_config.add_upgrade_configs()->set_upgrade_type("websocket"); - HttpConnectionManagerConfig config(hcm_config, context_, date_provider_, - route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, - filter_config_provider_manager_); + HttpConnectionManagerConfig config( + hcm_config, context_, date_provider_, route_config_provider_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); NiceMock manager; ; @@ -163,10 +162,9 @@ TEST_F(FilterChainTest, CreateUpgradeFilterChainHCMDisabled) { hcm_config.add_upgrade_configs()->set_upgrade_type("websocket"); hcm_config.mutable_upgrade_configs(0)->mutable_enabled()->set_value(false); - HttpConnectionManagerConfig config(hcm_config, context_, date_provider_, - route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, - filter_config_provider_manager_); + HttpConnectionManagerConfig config( + hcm_config, context_, date_provider_, route_config_provider_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); NiceMock manager; ; @@ -219,10 +217,9 @@ TEST_F(FilterChainTest, CreateCustomUpgradeFilterChain) { "\x19" "envoy.filters.http.router"); - HttpConnectionManagerConfig config(hcm_config, context_, date_provider_, - route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, - filter_config_provider_manager_); + HttpConnectionManagerConfig config( + hcm_config, context_, date_provider_, route_config_provider_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); { NiceMock manager; @@ -264,10 +261,9 @@ TEST_F(FilterChainTest, CreateCustomUpgradeFilterChainWithRouterNotLast) { "encoder-decoder-buffer-filter"); EXPECT_THROW_WITH_MESSAGE( - HttpConnectionManagerConfig(hcm_config, context_, date_provider_, - route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, - filter_config_provider_manager_), + HttpConnectionManagerConfig( + hcm_config, context_, date_provider_, route_config_provider_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_), EnvoyException, "Error: terminal filter named envoy.filters.http.router of type envoy.filters.http.router " "must be the last filter in a http upgrade filter chain."); @@ -279,10 +275,9 @@ TEST_F(FilterChainTest, InvalidConfig) { hcm_config.add_upgrade_configs()->set_upgrade_type("websocket"); EXPECT_THROW_WITH_MESSAGE( - HttpConnectionManagerConfig(hcm_config, context_, date_provider_, - route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, - filter_config_provider_manager_), + HttpConnectionManagerConfig( + hcm_config, context_, date_provider_, route_config_provider_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_), EnvoyException, "Error: multiple upgrade configs with the same name: 'websocket'"); } diff --git a/test/extensions/filters/network/http_connection_manager/config_filter_dependencies_test.cc b/test/extensions/filters/network/http_connection_manager/config_filter_dependencies_test.cc index 02eb09d4c961d..597834fdd8057 100644 --- a/test/extensions/filters/network/http_connection_manager/config_filter_dependencies_test.cc +++ b/test/extensions/filters/network/http_connection_manager/config_filter_dependencies_test.cc @@ -83,10 +83,9 @@ TEST_F(HttpConnectionManagerConfigTest, UnregisteredFilterException) { hcm_config.add_http_filters()->set_name("envoy.filters.http.router"); EXPECT_THROW_WITH_MESSAGE( - HttpConnectionManagerConfig(hcm_config, context_, date_provider_, - route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, - filter_config_provider_manager_), + HttpConnectionManagerConfig( + hcm_config, context_, date_provider_, route_config_provider_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_), EnvoyException, "Didn't find a registered implementation for name: 'test.pantry'"); } @@ -103,7 +102,7 @@ TEST_F(HttpConnectionManagerConfigTest, AllDependenciesSatisfiedOk) { Registry::InjectFactory rc(cf); HttpConnectionManagerConfig(hcm_config, context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); } @@ -117,7 +116,7 @@ TEST_F(HttpConnectionManagerConfigTest, UnusedProvidencyOk) { Registry::InjectFactory rf(pf); HttpConnectionManagerConfig(hcm_config, context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); } @@ -131,10 +130,9 @@ TEST_F(HttpConnectionManagerConfigTest, UnmetDependencyError) { Registry::InjectFactory rc(cf); EXPECT_THROW_WITH_MESSAGE( - HttpConnectionManagerConfig(hcm_config, context_, date_provider_, - route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, - filter_config_provider_manager_), + HttpConnectionManagerConfig( + hcm_config, context_, date_provider_, route_config_provider_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_), EnvoyException, "Dependency violation: filter 'test.chef' requires a FILTER_STATE_KEY named 'potato'"); } @@ -153,10 +151,9 @@ TEST_F(HttpConnectionManagerConfigTest, MisorderedDependenciesError) { Registry::InjectFactory rc(cf); EXPECT_THROW_WITH_MESSAGE( - HttpConnectionManagerConfig(hcm_config, context_, date_provider_, - route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, - filter_config_provider_manager_), + HttpConnectionManagerConfig( + hcm_config, context_, date_provider_, route_config_provider_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_), EnvoyException, "Dependency violation: filter 'test.chef' requires a FILTER_STATE_KEY named 'potato'"); } @@ -173,10 +170,9 @@ TEST_F(HttpConnectionManagerConfigTest, UpgradeUnmetDependencyError) { Registry::InjectFactory rc(cf); EXPECT_THROW_WITH_MESSAGE( - HttpConnectionManagerConfig(hcm_config, context_, date_provider_, - route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, - filter_config_provider_manager_), + HttpConnectionManagerConfig( + hcm_config, context_, date_provider_, route_config_provider_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_), EnvoyException, "Dependency violation: filter 'test.chef' requires a FILTER_STATE_KEY named 'potato'"); } @@ -195,7 +191,7 @@ TEST_F(HttpConnectionManagerConfigTest, UpgradeDependencyOK) { Registry::InjectFactory rc(cf); HttpConnectionManagerConfig(hcm_config, context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); } @@ -217,10 +213,9 @@ TEST_F(HttpConnectionManagerConfigTest, UpgradeFilterChainDependenciesIsolatedFr Registry::InjectFactory rc(cf); EXPECT_THROW_WITH_MESSAGE( - HttpConnectionManagerConfig(hcm_config, context_, date_provider_, - route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, - filter_config_provider_manager_), + HttpConnectionManagerConfig( + hcm_config, context_, date_provider_, route_config_provider_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_), EnvoyException, "Dependency violation: filter 'test.chef' requires a FILTER_STATE_KEY named 'potato'"); } @@ -245,10 +240,9 @@ TEST_F(HttpConnectionManagerConfigTest, UpgradeFilterChainDependenciesIsolatedFr Registry::InjectFactory rc(cf); EXPECT_THROW_WITH_MESSAGE( - HttpConnectionManagerConfig(hcm_config, context_, date_provider_, - route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, - filter_config_provider_manager_), + HttpConnectionManagerConfig( + hcm_config, context_, date_provider_, route_config_provider_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_), EnvoyException, "Dependency violation: filter 'test.chef' requires a FILTER_STATE_KEY named 'potato'"); } diff --git a/test/extensions/filters/network/http_connection_manager/config_test.cc b/test/extensions/filters/network/http_connection_manager/config_test.cc index 1d33ace0e2409..bc50b85457ef4 100644 --- a/test/extensions/filters/network/http_connection_manager/config_test.cc +++ b/test/extensions/filters/network/http_connection_manager/config_test.cc @@ -176,7 +176,7 @@ stat_prefix: router HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(128, config.tracingConfig()->max_path_tag_length_); @@ -217,21 +217,21 @@ stat_prefix: router HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, scoped_routes_config_provider_manager_, - http_tracer_manager_, filter_config_provider_manager_), + tracer_manager_, filter_config_provider_manager_), EnvoyException, "HTTP/3 codec configured on non-QUIC listener."); } { EXPECT_CALL(context_, isQuicListener()).WillOnce(Return(true)); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); } #else EXPECT_THROW_WITH_MESSAGE( HttpConnectionManagerConfig(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_), EnvoyException, "HTTP3 configured but not enabled in the build."); #endif @@ -264,7 +264,7 @@ stat_prefix: router HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, scoped_routes_config_provider_manager_, - http_tracer_manager_, filter_config_provider_manager_), + tracer_manager_, filter_config_provider_manager_), EnvoyException, "Non-HTTP/3 codec configured on QUIC listener."); } @@ -291,15 +291,15 @@ stat_prefix: router // When tracing is not enabled on a given "envoy.filters.network.http_connection_manager" filter, // there is no reason to obtain an actual HttpTracer. - EXPECT_CALL(http_tracer_manager_, getOrCreateHttpTracer(_)).Times(0); + EXPECT_CALL(tracer_manager_, getOrCreateTracer(_)).Times(0); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); - // By default, tracer must be a null object (Tracing::HttpNullTracer) rather than nullptr. - EXPECT_THAT(config.tracer().get(), WhenDynamicCastTo(NotNull())); + // By default, tracer must be a null object (Tracing::NullTracer) rather than nullptr. + EXPECT_THAT(config.tracer().get(), WhenDynamicCastTo(NotNull())); } TEST_F(HttpConnectionManagerConfigTest, TracingNotEnabledWhileThereIsTracingConfigInBootstrap) { @@ -332,18 +332,18 @@ stat_prefix: router // When tracing is not enabled on a given "envoy.filters.network.http_connection_manager" filter, // there is no reason to obtain an actual HttpTracer. - EXPECT_CALL(http_tracer_manager_, getOrCreateHttpTracer(_)).Times(0); + EXPECT_CALL(tracer_manager_, getOrCreateTracer(_)).Times(0); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); // Even though tracer provider is configured in the bootstrap config, a given filter instance // should not have a tracer associated with it. - // By default, tracer must be a null object (Tracing::HttpNullTracer) rather than nullptr. - EXPECT_THAT(config.tracer().get(), WhenDynamicCastTo(NotNull())); + // By default, tracer must be a null object (Tracing::NullTracer) rather than nullptr. + EXPECT_THAT(config.tracer().get(), WhenDynamicCastTo(NotNull())); } TEST_F(HttpConnectionManagerConfigTest, TracingIsEnabledWhileThereIsNoTracingConfigInBootstrap) { @@ -370,11 +370,11 @@ tracing: {} # notice that tracing is enabled // When tracing is enabled on a given "envoy.filters.network.http_connection_manager" filter, // an actual HttpTracer must be obtained from the HttpTracerManager. - EXPECT_CALL(http_tracer_manager_, getOrCreateHttpTracer(nullptr)).WillOnce(Return(http_tracer_)); + EXPECT_CALL(tracer_manager_, getOrCreateTracer(nullptr)).WillOnce(Return(http_tracer_)); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); // Actual HttpTracer must be obtained from the HttpTracerManager. @@ -412,12 +412,12 @@ tracing: {} # notice that tracing is enabled // When tracing is enabled on a given "envoy.filters.network.http_connection_manager" filter, // an actual HttpTracer must be obtained from the HttpTracerManager. - EXPECT_CALL(http_tracer_manager_, getOrCreateHttpTracer(Pointee(ProtoEq(tracing_config.http())))) + EXPECT_CALL(tracer_manager_, getOrCreateTracer(Pointee(ProtoEq(tracing_config.http())))) .WillOnce(Return(http_tracer_)); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); // Actual HttpTracer must be obtained from the HttpTracerManager. @@ -473,12 +473,12 @@ stat_prefix: router // When tracing is enabled on a given "envoy.filters.network.http_connection_manager" filter, // an actual HttpTracer must be obtained from the HttpTracerManager. // Expect inlined tracer provider configuration to take precedence over bootstrap configuration. - EXPECT_CALL(http_tracer_manager_, getOrCreateHttpTracer(Pointee(ProtoEq(inlined_tracing_config)))) + EXPECT_CALL(tracer_manager_, getOrCreateTracer(Pointee(ProtoEq(inlined_tracing_config)))) .WillOnce(Return(http_tracer_)); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); // Actual HttpTracer must be obtained from the HttpTracerManager. @@ -510,7 +510,7 @@ stat_prefix: router )EOF"; HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); std::vector custom_tags{"ltag", "etag", "rtag", "mtag"}; @@ -536,7 +536,7 @@ TEST_F(HttpConnectionManagerConfigTest, SamplingDefault) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(100, config.tracingConfig()->client_sampling_.numerator()); @@ -573,7 +573,7 @@ TEST_F(HttpConnectionManagerConfigTest, SamplingConfigured) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(1, config.tracingConfig()->client_sampling_.numerator()); @@ -609,7 +609,7 @@ TEST_F(HttpConnectionManagerConfigTest, FractionalSamplingConfigured) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(0, config.tracingConfig()->client_sampling_.numerator()); @@ -645,7 +645,7 @@ TEST_F(HttpConnectionManagerConfigTest, OverallSampling) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); Stats::TestUtil::TestStore store; @@ -692,7 +692,7 @@ TEST_F(HttpConnectionManagerConfigTest, UnixSocketInternalAddress) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); Network::Address::PipeInstance unixAddress{"/foo"}; Network::Address::Ipv4Instance internalIpAddress{"127.0.0.1", 0, nullptr}; @@ -720,7 +720,7 @@ TEST_F(HttpConnectionManagerConfigTest, CidrRangeBasedInternalAddress) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); Network::Address::Ipv4Instance firstInternalIpAddress{"100.64.0.10", 0, nullptr}; Network::Address::Ipv4Instance secondInternalIpAddress{"50.20.0.5", 0, nullptr}; @@ -752,7 +752,7 @@ TEST_F(HttpConnectionManagerConfigTest, MaxRequestHeadersKbDefault) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(60, config.maxRequestHeadersKb()); } @@ -771,7 +771,7 @@ TEST_F(HttpConnectionManagerConfigTest, MaxRequestHeadersKbConfigured) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(16, config.maxRequestHeadersKb()); } @@ -790,7 +790,7 @@ TEST_F(HttpConnectionManagerConfigTest, MaxRequestHeadersKbMaxConfigurable) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(8192, config.maxRequestHeadersKb()); } @@ -810,7 +810,7 @@ TEST_F(HttpConnectionManagerConfigTest, DisabledStreamIdleTimeout) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(0, config.streamIdleTimeout().count()); } @@ -831,7 +831,7 @@ TEST_F(HttpConnectionManagerConfigTest, CommonHttpProtocolIdleTimeout) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(1000, config.idleTimeout().value().count()); } @@ -850,7 +850,7 @@ TEST_F(HttpConnectionManagerConfigTest, CommonHttpProtocolIdleTimeoutDefault) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(std::chrono::hours(1), config.idleTimeout().value()); } @@ -871,7 +871,7 @@ TEST_F(HttpConnectionManagerConfigTest, CommonHttpProtocolIdleTimeoutOff) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_FALSE(config.idleTimeout().has_value()); } @@ -890,7 +890,7 @@ TEST_F(HttpConnectionManagerConfigTest, DefaultMaxRequestHeaderCount) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(100, config.maxRequestHeadersCount()); } @@ -911,7 +911,7 @@ TEST_F(HttpConnectionManagerConfigTest, MaxRequestHeaderCountConfigurable) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(200, config.maxRequestHeadersCount()); } @@ -930,7 +930,7 @@ TEST_F(HttpConnectionManagerConfigTest, DefaultMaxRequestPerConnection) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(0, config.maxRequestsPerConnection()); } @@ -951,7 +951,7 @@ TEST_F(HttpConnectionManagerConfigTest, MaxRequestPerConnectionConfigurable) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(5, config.maxRequestsPerConnection()); } @@ -973,7 +973,7 @@ TEST_F(HttpConnectionManagerConfigTest, ServerOverwrite) { &Runtime::MockSnapshot::featureEnabledDefault)); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(HttpConnectionManagerConfig::HttpConnectionManagerProto::OVERWRITE, config.serverHeaderTransformation()); @@ -996,7 +996,7 @@ TEST_F(HttpConnectionManagerConfigTest, ServerAppendIfAbsent) { &Runtime::MockSnapshot::featureEnabledDefault)); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(HttpConnectionManagerConfig::HttpConnectionManagerProto::APPEND_IF_ABSENT, config.serverHeaderTransformation()); @@ -1019,7 +1019,7 @@ TEST_F(HttpConnectionManagerConfigTest, ServerPassThrough) { &Runtime::MockSnapshot::featureEnabledDefault)); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(HttpConnectionManagerConfig::HttpConnectionManagerProto::PASS_THROUGH, config.serverHeaderTransformation()); @@ -1043,7 +1043,7 @@ TEST_F(HttpConnectionManagerConfigTest, SchemeOverwrite) { &Runtime::MockSnapshot::featureEnabledDefault)); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(config.schemeToSet(), "http"); } @@ -1066,7 +1066,7 @@ TEST_F(HttpConnectionManagerConfigTest, NormalizePathDefault) { &Runtime::MockSnapshot::featureEnabledDefault)); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); #ifdef ENVOY_NORMALIZE_PATH_BY_DEFAULT EXPECT_TRUE(config.shouldNormalizePath()); @@ -1095,7 +1095,7 @@ TEST_F(HttpConnectionManagerConfigTest, NormalizePathRuntime) { .WillOnce(Return(true)); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_TRUE(config.shouldNormalizePath()); } @@ -1121,7 +1121,7 @@ TEST_F(HttpConnectionManagerConfigTest, NormalizePathTrue) { .Times(0); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_TRUE(config.shouldNormalizePath()); } @@ -1147,7 +1147,7 @@ TEST_F(HttpConnectionManagerConfigTest, NormalizePathFalse) { .Times(0); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_FALSE(config.shouldNormalizePath()); } @@ -1166,7 +1166,7 @@ TEST_F(HttpConnectionManagerConfigTest, MergeSlashesDefault) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_FALSE(config.shouldMergeSlashes()); } @@ -1186,7 +1186,7 @@ TEST_F(HttpConnectionManagerConfigTest, MergeSlashesTrue) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_TRUE(config.shouldMergeSlashes()); } @@ -1206,7 +1206,7 @@ TEST_F(HttpConnectionManagerConfigTest, MergeSlashesFalse) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_FALSE(config.shouldMergeSlashes()); } @@ -1225,7 +1225,7 @@ TEST_F(HttpConnectionManagerConfigTest, RemovePortDefault) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(Http::StripPortType::None, config.stripPortType()); } @@ -1245,7 +1245,7 @@ TEST_F(HttpConnectionManagerConfigTest, RemovePortTrue) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(Http::StripPortType::MatchingHost, config.stripPortType()); } @@ -1267,7 +1267,7 @@ TEST_F(HttpConnectionManagerConfigTest, BothStripOptionsAreSet) { EXPECT_THROW_WITH_MESSAGE( HttpConnectionManagerConfig(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_), EnvoyException, "Error: Only one of `strip_matching_host_port` or `strip_any_host_port` can be set."); @@ -1288,7 +1288,7 @@ TEST_F(HttpConnectionManagerConfigTest, RemovePortFalse) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(Http::StripPortType::None, config.stripPortType()); } @@ -1308,7 +1308,7 @@ TEST_F(HttpConnectionManagerConfigTest, RemoveAnyPortTrue) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(Http::StripPortType::Any, config.stripPortType()); } @@ -1328,7 +1328,7 @@ TEST_F(HttpConnectionManagerConfigTest, RemoveAnyPortFalse) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(Http::StripPortType::None, config.stripPortType()); } @@ -1347,7 +1347,7 @@ TEST_F(HttpConnectionManagerConfigTest, RemoveTrailingDotDefault) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(false, config.shouldStripTrailingHostDot()); } @@ -1367,7 +1367,7 @@ TEST_F(HttpConnectionManagerConfigTest, RemoveTrailingDotTrue) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(true, config.shouldStripTrailingHostDot()); } @@ -1387,7 +1387,7 @@ TEST_F(HttpConnectionManagerConfigTest, RemoveTrailingDotFalse) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(false, config.shouldStripTrailingHostDot()); } @@ -1406,7 +1406,7 @@ TEST_F(HttpConnectionManagerConfigTest, HeadersWithUnderscoresAllowedByDefault) HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(envoy::config::core::v3::HttpProtocolOptions::ALLOW, config.headersWithUnderscoresAction()); @@ -1428,7 +1428,7 @@ TEST_F(HttpConnectionManagerConfigTest, HeadersWithUnderscoresDroppedByConfig) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(envoy::config::core::v3::HttpProtocolOptions::DROP_HEADER, config.headersWithUnderscoresAction()); @@ -1450,7 +1450,7 @@ TEST_F(HttpConnectionManagerConfigTest, HeadersWithUnderscoresRequestRejectedByC HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(envoy::config::core::v3::HttpProtocolOptions::REJECT_REQUEST, config.headersWithUnderscoresAction()); @@ -1470,7 +1470,7 @@ TEST_F(HttpConnectionManagerConfigTest, ConfiguredRequestTimeout) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(53 * 1000, config.requestTimeout().count()); } @@ -1489,7 +1489,7 @@ TEST_F(HttpConnectionManagerConfigTest, DisabledRequestTimeout) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(0, config.requestTimeout().count()); } @@ -1507,7 +1507,7 @@ TEST_F(HttpConnectionManagerConfigTest, UnconfiguredRequestTimeout) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(0, config.requestTimeout().count()); } @@ -1874,7 +1874,7 @@ TEST_F(HttpConnectionManagerConfigTest, AlwaysSetRequestIdInResponseDefault) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_FALSE(config.alwaysSetRequestIdInResponse()); } @@ -1893,7 +1893,7 @@ TEST_F(HttpConnectionManagerConfigTest, AlwaysSetRequestIdInResponseConfigured) HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_TRUE(config.alwaysSetRequestIdInResponse()); } @@ -1966,7 +1966,7 @@ TEST_F(HttpConnectionManagerConfigTest, CustomRequestIDExtension) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); auto request_id_extension = dynamic_cast(config.requestIDExtension().get()); @@ -2032,7 +2032,7 @@ TEST_F(HttpConnectionManagerConfigTest, DefaultRequestIDExtension) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); auto request_id_extension = dynamic_cast( config.requestIDExtension().get()); @@ -2059,7 +2059,7 @@ TEST_F(HttpConnectionManagerConfigTest, DefaultRequestIDExtensionWithParams) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); auto request_id_extension = dynamic_cast( config.requestIDExtension().get()); @@ -2210,7 +2210,7 @@ TEST_F(HttpConnectionManagerConfigTest, OriginalIPDetectionExtension) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); const auto& original_ip_detection_extensions = config.originalIpDetectionExtensions(); @@ -2236,7 +2236,7 @@ TEST_F(HttpConnectionManagerConfigTest, EarlyHeaderMutationExtension) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); const auto& early_header_mutation_extensions = config.earlyHeaderMutationExtensions(); @@ -2555,7 +2555,7 @@ TEST_F(HttpConnectionManagerConfigTest, PathWithEscapedSlashesActionDefault) { .WillOnce(Return(0)); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(envoy::extensions::filters::network::http_connection_manager::v3:: HttpConnectionManager::KEEP_UNCHANGED, @@ -2583,7 +2583,7 @@ TEST_F(HttpConnectionManagerConfigTest, PathWithEscapedSlashesActionDefaultOverr .WillOnce(Return(3)); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(envoy::extensions::filters::network::http_connection_manager::v3:: HttpConnectionManager::UNESCAPE_AND_REDIRECT, @@ -2595,7 +2595,7 @@ TEST_F(HttpConnectionManagerConfigTest, PathWithEscapedSlashesActionDefaultOverr .WillOnce(Return(4)); HttpConnectionManagerConfig config1(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(envoy::extensions::filters::network::http_connection_manager::v3:: HttpConnectionManager::UNESCAPE_AND_FORWARD, @@ -2627,7 +2627,7 @@ TEST_F(HttpConnectionManagerConfigTest, .Times(0); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(envoy::extensions::filters::network::http_connection_manager::v3:: HttpConnectionManager::REJECT_REQUEST, @@ -2660,7 +2660,7 @@ TEST_F(HttpConnectionManagerConfigTest, PathWithEscapedSlashesActionDefaultOverr .Times(0); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(envoy::extensions::filters::network::http_connection_manager::v3:: HttpConnectionManager::KEEP_UNCHANGED, @@ -2684,7 +2684,7 @@ TEST_F(HttpConnectionManagerConfigTest, SetCurrentClientCertDetailsCertAndChain) HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_EQ(Http::ForwardClientCertType::AppendForward, config.forwardClientCert()); EXPECT_EQ(2, config.setCurrentClientCertDetails().size()); @@ -2776,7 +2776,7 @@ TEST_F(HttpConnectionManagerConfigTest, HeaderValidatorConfig) { #ifdef ENVOY_ENABLE_UHV HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); EXPECT_NE(nullptr, config.makeHeaderValidator(Http::Protocol::Http2)); #else @@ -2786,7 +2786,7 @@ TEST_F(HttpConnectionManagerConfigTest, HeaderValidatorConfig) { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, scoped_routes_config_provider_manager_, - http_tracer_manager_, filter_config_provider_manager_); + tracer_manager_, filter_config_provider_manager_); }, EnvoyException); #endif @@ -2813,7 +2813,7 @@ TEST_F(HttpConnectionManagerConfigTest, DefaultHeaderValidatorConfig) { EXPECT_CALL(context_.runtime_loader_.snapshot_, getInteger(_, _)).Times(AnyNumber()); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); #ifdef ENVOY_ENABLE_UHV EXPECT_NE(nullptr, config.makeHeaderValidator(Http::Protocol::Http2)); @@ -2856,7 +2856,7 @@ TEST_F(HttpConnectionManagerConfigTest, TranslateLegacyConfigToDefaultHeaderVali EXPECT_CALL(context_.runtime_loader_.snapshot_, getInteger(_, _)).Times(AnyNumber()); HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); #ifdef ENVOY_ENABLE_UHV EXPECT_NE(nullptr, config.makeHeaderValidator(Http::Protocol::Http2)); @@ -2894,7 +2894,7 @@ TEST_F(HcmUtilityTest, EnsureCreateSingletonsActuallyReturnsTheSameInstances) { EXPECT_THAT(singletons_one.date_provider_.get(), NotNull()); EXPECT_THAT(singletons_one.route_config_provider_manager_.get(), NotNull()); EXPECT_THAT(singletons_one.scoped_routes_config_provider_manager_.get(), NotNull()); - EXPECT_THAT(singletons_one.http_tracer_manager_.get(), NotNull()); + EXPECT_THAT(singletons_one.tracer_manager_.get(), NotNull()); // Simulate `HttpConnectionManagerFilterConfigFactory::createFilterFactoryFromProtoTyped()` // call for filter instance "two". @@ -2906,7 +2906,7 @@ TEST_F(HcmUtilityTest, EnsureCreateSingletonsActuallyReturnsTheSameInstances) { singletons_one.route_config_provider_manager_); EXPECT_EQ(singletons_two.scoped_routes_config_provider_manager_, singletons_one.scoped_routes_config_provider_manager_); - EXPECT_EQ(singletons_two.http_tracer_manager_, singletons_one.http_tracer_manager_); + EXPECT_EQ(singletons_two.tracer_manager_, singletons_one.tracer_manager_); } class HttpConnectionManagerMobileConfigTest : public HttpConnectionManagerConfigTest, diff --git a/test/extensions/filters/network/http_connection_manager/config_test_base.h b/test/extensions/filters/network/http_connection_manager/config_test_base.h index 5780599bff956..fda877605fe52 100644 --- a/test/extensions/filters/network/http_connection_manager/config_test_base.h +++ b/test/extensions/filters/network/http_connection_manager/config_test_base.h @@ -42,15 +42,15 @@ class HttpConnectionManagerConfigTest : public testing::Test { Http::SlowDateProviderImpl date_provider_{context_.mainThreadDispatcher().timeSource()}; NiceMock route_config_provider_manager_; NiceMock scoped_routes_config_provider_manager_; - NiceMock http_tracer_manager_; + NiceMock tracer_manager_; Filter::HttpFilterConfigProviderManagerImpl filter_config_provider_manager_; - std::shared_ptr> http_tracer_{ - std::make_shared>()}; + std::shared_ptr> http_tracer_{ + std::make_shared>()}; TestScopedRuntime scoped_runtime_; void createHttpConnectionManagerConfig(const std::string& yaml) { HttpConnectionManagerConfig(parseHttpConnectionManagerFromYaml(yaml), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, http_tracer_manager_, + scoped_routes_config_provider_manager_, tracer_manager_, filter_config_provider_manager_); } }; diff --git a/test/mocks/tracing/BUILD b/test/mocks/tracing/BUILD index b89ea160d951b..d5984f2e047bc 100644 --- a/test/mocks/tracing/BUILD +++ b/test/mocks/tracing/BUILD @@ -13,7 +13,7 @@ envoy_cc_mock( srcs = ["mocks.cc"], hdrs = ["mocks.h"], deps = [ - "//envoy/tracing:http_tracer_interface", - "//envoy/tracing:http_tracer_manager_interface", + "//envoy/tracing:tracer_interface", + "//envoy/tracing:tracer_manager_interface", ], ) diff --git a/test/mocks/tracing/mocks.cc b/test/mocks/tracing/mocks.cc index 22c42b78d21d2..ac6f157014392 100644 --- a/test/mocks/tracing/mocks.cc +++ b/test/mocks/tracing/mocks.cc @@ -19,14 +19,14 @@ MockConfig::MockConfig() { } MockConfig::~MockConfig() = default; -MockHttpTracer::MockHttpTracer() = default; -MockHttpTracer::~MockHttpTracer() = default; +MockTracer::MockTracer() = default; +MockTracer::~MockTracer() = default; MockDriver::MockDriver() = default; MockDriver::~MockDriver() = default; -MockHttpTracerManager::MockHttpTracerManager() = default; -MockHttpTracerManager::~MockHttpTracerManager() = default; +MockTracerManager::MockTracerManager() = default; +MockTracerManager::~MockTracerManager() = default; } // namespace Tracing } // namespace Envoy diff --git a/test/mocks/tracing/mocks.h b/test/mocks/tracing/mocks.h index c43a310322d7b..26b310c5c1bb7 100644 --- a/test/mocks/tracing/mocks.h +++ b/test/mocks/tracing/mocks.h @@ -3,9 +3,9 @@ #include #include -#include "envoy/tracing/http_tracer.h" -#include "envoy/tracing/http_tracer_manager.h" #include "envoy/tracing/trace_driver.h" +#include "envoy/tracing/tracer.h" +#include "envoy/tracing/tracer_manager.h" #include "gmock/gmock.h" @@ -53,19 +53,19 @@ class MockSpan : public Span { (const Config& config, const std::string& name, SystemTime start_time)); }; -class MockHttpTracer : public HttpTracer { +class MockTracer : public Tracer { public: - MockHttpTracer(); - ~MockHttpTracer() override; + MockTracer(); + ~MockTracer() override; - SpanPtr startSpan(const Config& config, Http::RequestHeaderMap& request_headers, + SpanPtr startSpan(const Config& config, TraceContext& trace_context, const StreamInfo::StreamInfo& stream_info, const Tracing::Decision tracing_decision) override { - return SpanPtr{startSpan_(config, request_headers, stream_info, tracing_decision)}; + return SpanPtr{startSpan_(config, trace_context, stream_info, tracing_decision)}; } MOCK_METHOD(Span*, startSpan_, - (const Config& config, Http::RequestHeaderMap& request_headers, + (const Config& config, TraceContext& trace_context, const StreamInfo::StreamInfo& stream_info, const Tracing::Decision tracing_decision)); }; @@ -86,13 +86,12 @@ class MockDriver : public Driver { SystemTime start_time, const Tracing::Decision tracing_decision)); }; -class MockHttpTracerManager : public HttpTracerManager { +class MockTracerManager : public TracerManager { public: - MockHttpTracerManager(); - ~MockHttpTracerManager() override; + MockTracerManager(); + ~MockTracerManager() override; - MOCK_METHOD(HttpTracerSharedPtr, getOrCreateHttpTracer, - (const envoy::config::trace::v3::Tracing_Http*)); + MOCK_METHOD(TracerSharedPtr, getOrCreateTracer, (const envoy::config::trace::v3::Tracing_Http*)); }; } // namespace Tracing From ff58da422d384878ca0c14bacd3f1d6c80900af4 Mon Sep 17 00:00:00 2001 From: wbpcode Date: Wed, 11 Jan 2023 07:25:25 +0000 Subject: [PATCH 2/6] fix format Signed-off-by: wbpcode --- source/common/tracing/http_tracer_impl.h | 2 +- .../network/http_connection_manager/config_test.cc | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/source/common/tracing/http_tracer_impl.h b/source/common/tracing/http_tracer_impl.h index f9f82009b0b94..ab1d3b313313c 100644 --- a/source/common/tracing/http_tracer_impl.h +++ b/source/common/tracing/http_tracer_impl.h @@ -8,11 +8,11 @@ #include "envoy/runtime/runtime.h" #include "envoy/tracing/http_tracer.h" +#include "source/common/formatter/substitution_formatter.h" #include "source/common/http/header_map_impl.h" #include "source/common/tracing/common_values.h" #include "source/common/tracing/null_span_impl.h" #include "source/common/tracing/tracer_impl.h" -#include "source/common/formatter/substitution_formatter.h" namespace Envoy { namespace Tracing { diff --git a/test/extensions/filters/network/http_connection_manager/config_test.cc b/test/extensions/filters/network/http_connection_manager/config_test.cc index bc50b85457ef4..6bef67e716947 100644 --- a/test/extensions/filters/network/http_connection_manager/config_test.cc +++ b/test/extensions/filters/network/http_connection_manager/config_test.cc @@ -216,8 +216,8 @@ stat_prefix: router EXPECT_THROW_WITH_MESSAGE( HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, - tracer_manager_, filter_config_provider_manager_), + scoped_routes_config_provider_manager_, tracer_manager_, + filter_config_provider_manager_), EnvoyException, "HTTP/3 codec configured on non-QUIC listener."); } { @@ -263,8 +263,8 @@ stat_prefix: router EXPECT_THROW_WITH_MESSAGE( HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, - tracer_manager_, filter_config_provider_manager_), + scoped_routes_config_provider_manager_, tracer_manager_, + filter_config_provider_manager_), EnvoyException, "Non-HTTP/3 codec configured on QUIC listener."); } @@ -2785,8 +2785,8 @@ TEST_F(HttpConnectionManagerConfigTest, HeaderValidatorConfig) { { HttpConnectionManagerConfig config(parseHttpConnectionManagerFromYaml(yaml_string), context_, date_provider_, route_config_provider_manager_, - scoped_routes_config_provider_manager_, - tracer_manager_, filter_config_provider_manager_); + scoped_routes_config_provider_manager_, tracer_manager_, + filter_config_provider_manager_); }, EnvoyException); #endif From f405684727129bbb8bcc40e2c915859f16ad2a6b Mon Sep 17 00:00:00 2001 From: wbpcode Date: Thu, 12 Jan 2023 13:33:19 +0000 Subject: [PATCH 3/6] minor update Signed-off-by: wbpcode --- source/extensions/tracers/xray/tracer.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/extensions/tracers/xray/tracer.cc b/source/extensions/tracers/xray/tracer.cc index 30608ff6b596d..f1ff3c10dd07e 100644 --- a/source/extensions/tracers/xray/tracer.cc +++ b/source/extensions/tracers/xray/tracer.cc @@ -113,7 +113,7 @@ Tracing::SpanPtr Span::spawnChild(const Tracing::Config& config, const std::stri auto child_span = std::make_unique(time_source_, random_, broker_); child_span->setName(operation_name); child_span->setOperation(operation_name); - child_span->setDirection(Tracing::HttpTracerUtility::toString(config.operationName())); + child_span->setDirection(Tracing::TracerUtility::toString(config.operationName())); child_span->setStartTime(start_time); child_span->setParentId(id()); child_span->setTraceId(traceId()); @@ -130,7 +130,7 @@ Tracing::SpanPtr Tracer::startSpan(const Tracing::Config& config, const std::str auto span_ptr = std::make_unique(time_source_, random_, *daemon_broker_); span_ptr->setName(segment_name_); span_ptr->setOperation(operation_name); - span_ptr->setDirection(Tracing::HttpTracerUtility::toString(config.operationName())); + span_ptr->setDirection(Tracing::TracerUtility::toString(config.operationName())); // Even though we have a TimeSource member in the tracer, we assume the start_time argument has a // more precise value than calling the systemTime() at this point in time. span_ptr->setStartTime(start_time); From c68027fd50c06afe5f999209bfe36d127d58c426 Mon Sep 17 00:00:00 2001 From: wbpcode Date: Thu, 12 Jan 2023 14:20:55 +0000 Subject: [PATCH 4/6] fix build Signed-off-by: wbpcode --- source/common/tracing/BUILD | 1 + 1 file changed, 1 insertion(+) diff --git a/source/common/tracing/BUILD b/source/common/tracing/BUILD index 97b5bc3f77e4e..79efea291748d 100644 --- a/source/common/tracing/BUILD +++ b/source/common/tracing/BUILD @@ -44,6 +44,7 @@ envoy_cc_library( "//source/common/grpc:common_lib", "//source/common/http:codes_lib", "//source/common/http:header_map_lib", + "//source/common/json:json_loader_lib", "@envoy_api//envoy/config/core/v3:pkg_cc_proto", "@envoy_api//envoy/type/metadata/v3:pkg_cc_proto", "@envoy_api//envoy/type/tracing/v3:pkg_cc_proto", From 079f4648f0dd0e1dfe43057c23317dd9b34634ad Mon Sep 17 00:00:00 2001 From: wbpcode Date: Fri, 13 Jan 2023 04:53:30 +0000 Subject: [PATCH 5/6] fix build 2 Signed-off-by: wbpcode --- test/common/http/conn_manager_impl_fuzz_test.cc | 2 +- test/common/http/conn_manager_impl_test_base.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/common/http/conn_manager_impl_fuzz_test.cc b/test/common/http/conn_manager_impl_fuzz_test.cc index f0003f83fdeea..413dae7b7bd0e 100644 --- a/test/common/http/conn_manager_impl_fuzz_test.cc +++ b/test/common/http/conn_manager_impl_fuzz_test.cc @@ -262,7 +262,7 @@ class FuzzConfig : public ConnectionManagerConfig { std::vector set_current_client_cert_details_; Network::Address::Ipv4Instance local_address_{"127.0.0.1"}; absl::optional user_agent_; - Tracing::HttpTracerSharedPtr http_tracer_{std::make_shared>()}; + Tracing::HttpTracerSharedPtr http_tracer_{std::make_shared>()}; TracingConnectionManagerConfigPtr tracing_config_; bool proxy_100_continue_{true}; bool stream_error_on_invalid_http_messaging_ = false; diff --git a/test/common/http/conn_manager_impl_test_base.h b/test/common/http/conn_manager_impl_test_base.h index 8b1e9b0e2d0f9..e48499953be56 100644 --- a/test/common/http/conn_manager_impl_test_base.h +++ b/test/common/http/conn_manager_impl_test_base.h @@ -220,8 +220,8 @@ class HttpConnectionManagerImplTest : public testing::Test, public ConnectionMan NiceMock factory_context_; RequestDecoder* decoder_{}; std::shared_ptr ssl_connection_; - std::shared_ptr> tracer_{ - std::make_shared>()}; + std::shared_ptr> tracer_{ + std::make_shared>()}; TracingConnectionManagerConfigPtr tracing_config_; SlowDateProviderImpl date_provider_{test_time_.timeSystem()}; NiceMock stream_; From ce1aa50cae05c0e2c47b63f6e3afd854a272f10b Mon Sep 17 00:00:00 2001 From: wbpcode Date: Fri, 13 Jan 2023 07:21:28 +0000 Subject: [PATCH 6/6] fix build 3 Signed-off-by: wbpcode --- test/common/http/conn_manager_impl_test.cc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/common/http/conn_manager_impl_test.cc b/test/common/http/conn_manager_impl_test.cc index 41d6a2bca5297..5d1f246e1cc1f 100644 --- a/test/common/http/conn_manager_impl_test.cc +++ b/test/common/http/conn_manager_impl_test.cc @@ -1384,7 +1384,7 @@ TEST_F(HttpConnectionManagerImplTest, StartAndFinishSpanNormalFlow) { auto* span = new NiceMock(); EXPECT_CALL(*tracer_, startSpan_(_, _, _, _)) .WillOnce( - Invoke([&](const Tracing::Config& config, const RequestHeaderMap&, + Invoke([&](const Tracing::Config& config, Tracing::TraceContext&, const StreamInfo::StreamInfo&, const Tracing::Decision) -> Tracing::Span* { EXPECT_EQ(Tracing::OperationName::Ingress, config.operationName()); @@ -1544,7 +1544,7 @@ TEST_F(HttpConnectionManagerImplTest, StartAndFinishSpanNormalFlowIngressDecorat auto* span = new NiceMock(); EXPECT_CALL(*tracer_, startSpan_(_, _, _, _)) .WillOnce( - Invoke([&](const Tracing::Config& config, const RequestHeaderMap&, + Invoke([&](const Tracing::Config& config, Tracing::TraceContext&, const StreamInfo::StreamInfo&, const Tracing::Decision) -> Tracing::Span* { EXPECT_EQ(Tracing::OperationName::Ingress, config.operationName()); @@ -1612,7 +1612,7 @@ TEST_F(HttpConnectionManagerImplTest, StartAndFinishSpanNormalFlowIngressDecorat auto* span = new NiceMock(); EXPECT_CALL(*tracer_, startSpan_(_, _, _, _)) .WillOnce( - Invoke([&](const Tracing::Config& config, const RequestHeaderMap&, + Invoke([&](const Tracing::Config& config, Tracing::TraceContext&, const StreamInfo::StreamInfo&, const Tracing::Decision) -> Tracing::Span* { EXPECT_EQ(Tracing::OperationName::Ingress, config.operationName()); @@ -1681,7 +1681,7 @@ TEST_F(HttpConnectionManagerImplTest, StartAndFinishSpanNormalFlowIngressDecorat auto* span = new NiceMock(); EXPECT_CALL(*tracer_, startSpan_(_, _, _, _)) .WillOnce( - Invoke([&](const Tracing::Config& config, const RequestHeaderMap&, + Invoke([&](const Tracing::Config& config, Tracing::TraceContext&, const StreamInfo::StreamInfo&, const Tracing::Decision) -> Tracing::Span* { EXPECT_EQ(Tracing::OperationName::Ingress, config.operationName()); @@ -1764,7 +1764,7 @@ TEST_F(HttpConnectionManagerImplTest, StartAndFinishSpanNormalFlowEgressDecorato auto* span = new NiceMock(); EXPECT_CALL(*tracer_, startSpan_(_, _, _, _)) .WillOnce( - Invoke([&](const Tracing::Config& config, const RequestHeaderMap&, + Invoke([&](const Tracing::Config& config, Tracing::TraceContext&, const StreamInfo::StreamInfo&, const Tracing::Decision) -> Tracing::Span* { EXPECT_EQ(Tracing::OperationName::Egress, config.operationName()); @@ -1848,7 +1848,7 @@ TEST_F(HttpConnectionManagerImplTest, StartAndFinishSpanNormalFlowEgressDecorato auto* span = new NiceMock(); EXPECT_CALL(*tracer_, startSpan_(_, _, _, _)) .WillOnce( - Invoke([&](const Tracing::Config& config, const RequestHeaderMap&, + Invoke([&](const Tracing::Config& config, Tracing::TraceContext&, const StreamInfo::StreamInfo&, const Tracing::Decision) -> Tracing::Span* { EXPECT_EQ(Tracing::OperationName::Egress, config.operationName()); @@ -1934,7 +1934,7 @@ TEST_F(HttpConnectionManagerImplTest, StartAndFinishSpanNormalFlowEgressDecorato auto* span = new NiceMock(); EXPECT_CALL(*tracer_, startSpan_(_, _, _, _)) .WillOnce( - Invoke([&](const Tracing::Config& config, const RequestHeaderMap&, + Invoke([&](const Tracing::Config& config, Tracing::TraceContext&, const StreamInfo::StreamInfo&, const Tracing::Decision) -> Tracing::Span* { EXPECT_EQ(Tracing::OperationName::Egress, config.operationName());