From d21e1fd877904297ce009acf0a1ebdd82b354c38 Mon Sep 17 00:00:00 2001 From: Xin Zhuang Date: Wed, 8 Jan 2020 23:09:06 -0500 Subject: [PATCH 1/4] add messageValidationContext into CommonFactoryContext so xDS could use dynamic validator Signed-off-by: Xin Zhuang --- include/envoy/server/filter_config.h | 6 ++++++ source/common/router/rds_impl.cc | 16 ++++++++-------- source/common/router/rds_impl.h | 3 +-- source/common/router/scoped_rds.cc | 11 ++++++----- source/common/upstream/upstream_impl.cc | 4 ++++ source/server/filter_chain_manager_impl.cc | 3 +++ source/server/filter_chain_manager_impl.h | 1 + source/server/listener_impl.cc | 13 +++++++++---- source/server/listener_impl.h | 3 ++- source/server/listener_manager_impl.cc | 8 +++----- source/server/server.h | 6 ++++-- test/common/router/BUILD | 2 ++ test/common/router/rds_impl_test.cc | 8 ++++++++ test/common/router/scoped_rds_test.cc | 10 ++++++++++ test/mocks/server/mocks.h | 2 ++ 15 files changed, 69 insertions(+), 27 deletions(-) diff --git a/include/envoy/server/filter_config.h b/include/envoy/server/filter_config.h index 4d9e28f523371..f89f96e4710aa 100644 --- a/include/envoy/server/filter_config.h +++ b/include/envoy/server/filter_config.h @@ -54,6 +54,12 @@ class CommonFactoryContext { */ virtual const LocalInfo::LocalInfo& localInfo() const PURE; + /** + * @return ProtobufMessage::ValidationContext& validation visitor for xDS&static configuration + * messages. + */ + virtual ProtobufMessage::ValidationContext& messageValidationContext() PURE; + /** * @return RandomGenerator& the random generator for the server. */ diff --git a/source/common/router/rds_impl.cc b/source/common/router/rds_impl.cc index 154cd5e83a7a6..6152d7ee361b8 100644 --- a/source/common/router/rds_impl.cc +++ b/source/common/router/rds_impl.cc @@ -48,7 +48,8 @@ StaticRouteConfigProviderImpl::StaticRouteConfigProviderImpl( Server::Configuration::FactoryContext& factory_context, RouteConfigProviderManagerImpl& route_config_provider_manager) : config_(new ConfigImpl(config, factory_context.getServerFactoryContext(), - factory_context.messageValidationVisitor(), true)), + factory_context.messageValidationContext().staticValidationVisitor(), + true)), route_config_proto_{config}, last_updated_(factory_context.timeSource().systemTime()), route_config_provider_manager_(route_config_provider_manager) { @@ -63,11 +64,11 @@ StaticRouteConfigProviderImpl::~StaticRouteConfigProviderImpl() { RdsRouteConfigSubscription::RdsRouteConfigSubscription( const envoy::extensions::filters::network::http_connection_manager::v3alpha::Rds& rds, const uint64_t manager_identifier, Server::Configuration::ServerFactoryContext& factory_context, - ProtobufMessage::ValidationVisitor& validator, Init::Manager& init_manager, - const std::string& stat_prefix, + Init::Manager& init_manager, const std::string& stat_prefix, Envoy::Router::RouteConfigProviderManagerImpl& route_config_provider_manager) : route_config_name_(rds.route_config_name()), factory_context_(factory_context), - validator_(validator), init_manager_(init_manager), + validator_(factory_context.messageValidationContext().dynamicValidationVisitor()), + init_manager_(init_manager), init_target_(fmt::format("RdsRouteConfigSubscription {}", route_config_name_), [this]() { subscription_->start({route_config_name_}); }), scope_(factory_context.scope().createScope(stat_prefix + "rds." + route_config_name_ + ".")), @@ -80,7 +81,7 @@ RdsRouteConfigSubscription::RdsRouteConfigSubscription( rds.config_source(), loadTypeUrl(rds.config_source().resource_api_version()), *scope_, *this); config_update_info_ = - std::make_unique(factory_context.timeSource(), validator); + std::make_unique(factory_context.timeSource(), validator_); } RdsRouteConfigSubscription::~RdsRouteConfigSubscription() { @@ -227,7 +228,7 @@ RdsRouteConfigProviderImpl::RdsRouteConfigProviderImpl( : subscription_(std::move(subscription)), config_update_info_(subscription_->routeConfigUpdate()), factory_context_(factory_context.getServerFactoryContext()), - validator_(factory_context.messageValidationVisitor()), + validator_(factory_context.messageValidationContext().dynamicValidationVisitor()), tls_(factory_context.threadLocal().allocateSlot()) { ConfigConstSharedPtr initial_config; if (config_update_info_->configInfo().has_value()) { @@ -293,8 +294,7 @@ Router::RouteConfigProviderSharedPtr RouteConfigProviderManagerImpl::createRdsRo // of simplicity. RdsRouteConfigSubscriptionSharedPtr subscription(new RdsRouteConfigSubscription( rds, manager_identifier, factory_context.getServerFactoryContext(), - factory_context.messageValidationVisitor(), factory_context.initManager(), stat_prefix, - *this)); + factory_context.initManager(), stat_prefix, *this)); init_manager.add(subscription->init_target_); std::shared_ptr new_provider{ new RdsRouteConfigProviderImpl(std::move(subscription), factory_context)}; diff --git a/source/common/router/rds_impl.h b/source/common/router/rds_impl.h index 8601c4194b093..7f1eb5347de2b 100644 --- a/source/common/router/rds_impl.h +++ b/source/common/router/rds_impl.h @@ -141,8 +141,7 @@ class RdsRouteConfigSubscription : Envoy::Config::SubscriptionCallbacks, RdsRouteConfigSubscription( const envoy::extensions::filters::network::http_connection_manager::v3alpha::Rds& rds, const uint64_t manager_identifier, - Server::Configuration::ServerFactoryContext& factory_context, - ProtobufMessage::ValidationVisitor& validator, Init::Manager& init_manager, + Server::Configuration::ServerFactoryContext& factory_context, Init::Manager& init_manager, const std::string& stat_prefix, RouteConfigProviderManagerImpl& route_config_provider_manager); diff --git a/source/common/router/scoped_rds.cc b/source/common/router/scoped_rds.cc index 5acae3ff004d0..adc5c73446318 100644 --- a/source/common/router/scoped_rds.cc +++ b/source/common/router/scoped_rds.cc @@ -102,8 +102,8 @@ ScopedRdsConfigSubscription::ScopedRdsConfigSubscription( scope_(factory_context.scope().createScope(stat_prefix + "scoped_rds." + name + ".")), stats_({ALL_SCOPED_RDS_STATS(POOL_COUNTER(*scope_))}), rds_config_source_(std::move(rds_config_source)), - validation_visitor_(factory_context.messageValidationVisitor()), stat_prefix_(stat_prefix), - route_config_provider_manager_(route_config_provider_manager) { + validation_visitor_(factory_context.messageValidationContext().dynamicValidationVisitor()), + stat_prefix_(stat_prefix), route_config_provider_manager_(route_config_provider_manager) { subscription_ = factory_context.clusterManager().subscriptionFactory().subscriptionFromConfigSource( scoped_rds.scoped_rds_config_source(), @@ -290,9 +290,10 @@ void ScopedRdsConfigSubscription::onRdsConfigUpdate(const std::string& scope_nam fmt::format("trying to update route config for non-existing scope {}", scope_name)); auto new_scoped_route_info = std::make_shared( envoy::config::route::v3alpha::ScopedRouteConfiguration(iter->second->configProto()), - std::make_shared(rds_subscription.routeConfigUpdate()->routeConfiguration(), - factory_context_.getServerFactoryContext(), - factory_context_.messageValidationVisitor(), false)); + std::make_shared( + rds_subscription.routeConfigUpdate()->routeConfiguration(), + factory_context_.getServerFactoryContext(), + factory_context_.messageValidationContext().dynamicValidationVisitor(), false)); applyConfigUpdate([new_scoped_route_info](ConfigProvider::ConfigConstSharedPtr config) -> ConfigProvider::ConfigConstSharedPtr { auto* thread_local_scoped_config = diff --git a/source/common/upstream/upstream_impl.cc b/source/common/upstream/upstream_impl.cc index 5a8d847ee9d9c..1c1f476d44465 100644 --- a/source/common/upstream/upstream_impl.cc +++ b/source/common/upstream/upstream_impl.cc @@ -613,6 +613,10 @@ class FactoryContextImpl : public Server::Configuration::CommonFactoryContext { ThreadLocal::SlotAllocator& threadLocal() override { return tls_; } Server::Admin& admin() override { return admin_; } TimeSource& timeSource() override { return api().timeSource(); } + ProtobufMessage::ValidationContext& messageValidationContext() override { + // Not used. + NOT_IMPLEMENTED_GCOVR_EXCL_LINE; + } Api::Api& api() override { return api_; } private: diff --git a/source/server/filter_chain_manager_impl.cc b/source/server/filter_chain_manager_impl.cc index 0a0fcdb3ce0f2..418a411aeca58 100644 --- a/source/server/filter_chain_manager_impl.cc +++ b/source/server/filter_chain_manager_impl.cc @@ -54,6 +54,9 @@ envoy::config::core::v3alpha::TrafficDirection FilterChainFactoryContextImpl::di return parent_context_.direction(); } +ProtobufMessage::ValidationContext& FilterChainFactoryContextImpl::messageValidationContext() { + return parent_context_.messageValidationContext(); +} ProtobufMessage::ValidationVisitor& FilterChainFactoryContextImpl::messageValidationVisitor() { return parent_context_.messageValidationVisitor(); } diff --git a/source/server/filter_chain_manager_impl.h b/source/server/filter_chain_manager_impl.h index f23f9cbe59341..c2c6740ad6589 100644 --- a/source/server/filter_chain_manager_impl.h +++ b/source/server/filter_chain_manager_impl.h @@ -63,6 +63,7 @@ class FilterChainFactoryContextImpl : public Configuration::FilterChainFactoryCo envoy::config::core::v3alpha::TrafficDirection direction() const override; TimeSource& timeSource() override; ProtobufMessage::ValidationVisitor& messageValidationVisitor() override; + ProtobufMessage::ValidationContext& messageValidationContext() override; Api::Api& api() override; ServerLifecycleNotifier& lifecycleNotifier() override; OptProcessContextRef processContext() override; diff --git a/source/server/listener_impl.cc b/source/server/listener_impl.cc index 13ac76a248ca2..cda9bd784f17a 100644 --- a/source/server/listener_impl.cc +++ b/source/server/listener_impl.cc @@ -126,8 +126,7 @@ Network::SocketSharedPtr ListenSocketFactoryImpl::getListenSocket() { ListenerImpl::ListenerImpl(const envoy::config::listener::v3alpha::Listener& config, const std::string& version_info, ListenerManagerImpl& parent, const std::string& name, bool added_via_api, bool workers_started, - uint64_t hash, ProtobufMessage::ValidationVisitor& validation_visitor, - uint32_t concurrency) + uint64_t hash, uint32_t concurrency) : parent_(parent), address_(Network::Address::resolveProtoAddress(config.address())), filter_chain_manager_(address_, *this), global_scope_(parent_.server_.stats().createScope("")), @@ -139,7 +138,10 @@ ListenerImpl::ListenerImpl(const envoy::config::listener::v3alpha::Listener& con per_connection_buffer_limit_bytes_( PROTOBUF_GET_WRAPPED_OR_DEFAULT(config, per_connection_buffer_limit_bytes, 1024 * 1024)), listener_tag_(parent_.factory_.nextListenerTag()), name_(name), added_via_api_(added_via_api), - workers_started_(workers_started), hash_(hash), validation_visitor_(validation_visitor), + workers_started_(workers_started), hash_(hash), + validation_visitor_( + added_via_api_ ? parent_.server_.messageValidationContext().dynamicValidationVisitor() + : parent_.server_.messageValidationContext().staticValidationVisitor()), dynamic_init_manager_(fmt::format("Listener {}", name)), init_watcher_(std::make_unique( "ListenerImpl", [this] { parent_.onListenerWarmed(*this); })), @@ -226,7 +228,7 @@ ListenerImpl::ListenerImpl(const envoy::config::listener::v3alpha::Listener& con parent_.server_.admin(), parent_.server_.sslContextManager(), *listener_scope_, parent_.server_.clusterManager(), parent_.server_.localInfo(), parent_.server_.dispatcher(), parent_.server_.random(), parent_.server_.stats(), parent_.server_.singletonManager(), - parent_.server_.threadLocal(), validation_visitor, parent_.server_.api()); + parent_.server_.threadLocal(), validation_visitor_, parent_.server_.api()); transport_factory_context.setInitManager(initManager()); // The init manager is a little messy. Will refactor when filter chain manager could accept // network filter chain update. @@ -342,6 +344,9 @@ envoy::config::core::v3alpha::TrafficDirection ListenerImpl::direction() const { TimeSource& ListenerImpl::timeSource() { return api().timeSource(); } const Network::ListenerConfig& ListenerImpl::listenerConfig() const { return *this; } +ProtobufMessage::ValidationContext& ListenerImpl::messageValidationContext() { + return getServerFactoryContext().messageValidationContext(); +} ProtobufMessage::ValidationVisitor& ListenerImpl::messageValidationVisitor() { return validation_visitor_; } diff --git a/source/server/listener_impl.h b/source/server/listener_impl.h index 3fb321dd25598..9c0db5c636197 100644 --- a/source/server/listener_impl.h +++ b/source/server/listener_impl.h @@ -96,7 +96,7 @@ class ListenerImpl : public Network::ListenerConfig, ListenerImpl(const envoy::config::listener::v3alpha::Listener& config, const std::string& version_info, ListenerManagerImpl& parent, const std::string& name, bool added_via_api, bool workers_started, uint64_t hash, - ProtobufMessage::ValidationVisitor& validation_visitor, uint32_t concurrency); + uint32_t concurrency); ~ListenerImpl() override; /** @@ -173,6 +173,7 @@ class ListenerImpl : public Network::ListenerConfig, envoy::config::core::v3alpha::TrafficDirection direction() const override; TimeSource& timeSource() override; const Network::ListenerConfig& listenerConfig() const override; + ProtobufMessage::ValidationContext& messageValidationContext() override; ProtobufMessage::ValidationVisitor& messageValidationVisitor() override; Api::Api& api() override; ServerLifecycleNotifier& lifecycleNotifier() override; diff --git a/source/server/listener_manager_impl.cc b/source/server/listener_manager_impl.cc index ebbc30e03f80f..4d271a0aaae02 100644 --- a/source/server/listener_manager_impl.cc +++ b/source/server/listener_manager_impl.cc @@ -371,11 +371,9 @@ bool ListenerManagerImpl::addOrUpdateListenerInternal( return false; } - ListenerImplPtr new_listener( - new ListenerImpl(config, version_info, *this, name, added_via_api, workers_started_, hash, - added_via_api ? server_.messageValidationContext().dynamicValidationVisitor() - : server_.messageValidationContext().staticValidationVisitor(), - server_.options().concurrency())); + ListenerImplPtr new_listener(new ListenerImpl(config, version_info, *this, name, added_via_api, + workers_started_, hash, + server_.options().concurrency())); ListenerImpl& new_listener_ref = *new_listener; // We mandate that a listener with the same name must have the same configured address. This diff --git a/source/server/server.h b/source/server/server.h index 8c75a42754594..11b912976e5de 100644 --- a/source/server/server.h +++ b/source/server/server.h @@ -153,6 +153,9 @@ class ServerFactoryContextImpl : public Configuration::ServerFactoryContext { Upstream::ClusterManager& clusterManager() override { return server_.clusterManager(); } Event::Dispatcher& dispatcher() override { return server_.dispatcher(); } const LocalInfo::LocalInfo& localInfo() const override { return server_.localInfo(); } + ProtobufMessage::ValidationContext& messageValidationContext() override { + return server_.messageValidationContext(); + } Envoy::Runtime::RandomGenerator& random() override { return server_.random(); } Envoy::Runtime::Loader& runtime() override { return server_.runtime(); } Stats::Scope& scope() override { return *server_scope_; } @@ -250,8 +253,7 @@ class InstanceImpl final : Logger::Loggable, void loadServerFlags(const absl::optional& flags_path); void startWorkers(); void terminate(); - void notifyCallbacksForStage( - Stage stage, Event::PostCb completion_cb = [] {}); + void notifyCallbacksForStage(Stage stage, Event::PostCb completion_cb = [] {}); using LifecycleNotifierCallbacks = std::list; using LifecycleNotifierCompletionCallbacks = std::list; diff --git a/test/common/router/BUILD b/test/common/router/BUILD index 8671698350714..0df42e1dd738a 100644 --- a/test/common/router/BUILD +++ b/test/common/router/BUILD @@ -68,6 +68,7 @@ envoy_cc_test( "//source/common/router:rds_lib", "//source/server/http:admin_lib", "//test/mocks/local_info:local_info_mocks", + "//test/mocks/protobuf:protobuf_mocks", "//test/mocks/server:server_mocks", "//test/mocks/thread_local:thread_local_mocks", "//test/mocks/upstream:upstream_mocks", @@ -112,6 +113,7 @@ envoy_cc_test( "//source/server/http:admin_lib", "//test/mocks/config:config_mocks", "//test/mocks/init:init_mocks", + "//test/mocks/protobuf:protobuf_mocks", "//test/mocks/router:router_mocks", "//test/mocks/server:server_mocks", "//test/test_common:simulated_time_system_lib", diff --git a/test/common/router/rds_impl_test.cc b/test/common/router/rds_impl_test.cc index 5f2ccc0058408..406292bb8890c 100644 --- a/test/common/router/rds_impl_test.cc +++ b/test/common/router/rds_impl_test.cc @@ -18,6 +18,7 @@ #include "test/mocks/init/mocks.h" #include "test/mocks/local_info/mocks.h" #include "test/mocks/server/mocks.h" +#include "test/mocks/protobuf/mocks.h" #include "test/mocks/thread_local/mocks.h" #include "test/mocks/upstream/mocks.h" #include "test/test_common/printers.h" @@ -54,6 +55,12 @@ class RdsTestBase : public testing::Test { .WillByDefault(ReturnRef(server_factory_context_)); ON_CALL(server_factory_context_, scope()).WillByDefault(ReturnRef(scope_)); ON_CALL(mock_factory_context_, scope()).WillByDefault(ReturnRef(scope_)); + ON_CALL(server_factory_context_, messageValidationContext()) + .WillByDefault(ReturnRef(validation_context_)); + ON_CALL(mock_factory_context_, messageValidationContext()) + .WillByDefault(ReturnRef(validation_context_)); + EXPECT_CALL(validation_context_, dynamicValidationVisitor()) + .WillRepeatedly(ReturnRef(ProtobufMessage::getStrictValidationVisitor())); ON_CALL(mock_factory_context_, initManager()).WillByDefault(ReturnRef(outer_init_manager_)); ON_CALL(outer_init_manager_, add(_)).WillByDefault(Invoke([this](const Init::Target& target) { @@ -67,6 +74,7 @@ class RdsTestBase : public testing::Test { Event::SimulatedTimeSystem& timeSystem() { return time_system_; } Event::SimulatedTimeSystem time_system_; + NiceMock validation_context_; NiceMock mock_factory_context_; NiceMock outer_init_manager_; NiceMock server_factory_context_; diff --git a/test/common/router/scoped_rds_test.cc b/test/common/router/scoped_rds_test.cc index 5e77f0a4e9705..22b5cdafded5f 100644 --- a/test/common/router/scoped_rds_test.cc +++ b/test/common/router/scoped_rds_test.cc @@ -15,10 +15,12 @@ #include "common/config/api_version.h" #include "common/config/grpc_mux_impl.h" #include "common/router/scoped_rds.h" +#include "common/protobuf/message_validator_impl.h" #include "test/mocks/config/mocks.h" #include "test/mocks/router/mocks.h" #include "test/mocks/server/mocks.h" +#include "test/mocks/protobuf/mocks.h" #include "test/test_common/simulated_time_system.h" #include "test/test_common/utility.h" @@ -34,6 +36,7 @@ using testing::Invoke; using testing::IsNull; using testing::NiceMock; using testing::Return; +using testing::ReturnRef; namespace Envoy { namespace Router { @@ -67,6 +70,12 @@ class ScopedRoutesTestBase : public testing::Test { ON_CALL(factory_context_, initManager()).WillByDefault(ReturnRef(context_init_manager_)); ON_CALL(factory_context_, getServerFactoryContext()) .WillByDefault(ReturnRef(server_factory_context_)); + ON_CALL(factory_context_, messageValidationContext()) + .WillByDefault(ReturnRef(validation_context_)); + ON_CALL(server_factory_context_, messageValidationContext()) + .WillByDefault(ReturnRef(validation_context_)); + EXPECT_CALL(validation_context_, dynamicValidationVisitor()) + .WillRepeatedly(ReturnRef(ProtobufMessage::getStrictValidationVisitor())); EXPECT_CALL(factory_context_.admin_.config_tracker_, add_("routes", _)); route_config_provider_manager_ = @@ -101,6 +110,7 @@ class ScopedRoutesTestBase : public testing::Test { NiceMock context_init_manager_; // factory_context_ is used by srds NiceMock factory_context_; + NiceMock validation_context_; // server_factory_context_ is used by rds NiceMock server_factory_context_; std::unique_ptr route_config_provider_manager_; diff --git a/test/mocks/server/mocks.h b/test/mocks/server/mocks.h index 788529f3f5395..5b167a7ecef63 100644 --- a/test/mocks/server/mocks.h +++ b/test/mocks/server/mocks.h @@ -483,6 +483,7 @@ class MockServerFactoryContext : public virtual ServerFactoryContext { MOCK_METHOD0(admin, Server::Admin&()); MOCK_METHOD0(timeSource, TimeSource&()); Event::TestTimeSystem& timeSystem() { return time_system_; } + MOCK_METHOD0(messageValidationContext, ProtobufMessage::ValidationContext&()); MOCK_METHOD0(messageValidationVisitor, ProtobufMessage::ValidationVisitor&()); MOCK_METHOD0(api, Api::Api&()); @@ -530,6 +531,7 @@ class MockFactoryContext : public virtual FactoryContext { Grpc::Context& grpcContext() override { return grpc_context_; } Http::Context& httpContext() override { return http_context_; } MOCK_METHOD0(processContext, OptProcessContextRef()); + MOCK_METHOD0(messageValidationContext, ProtobufMessage::ValidationContext&()); MOCK_METHOD0(messageValidationVisitor, ProtobufMessage::ValidationVisitor&()); MOCK_METHOD0(api, Api::Api&()); From db33091c6cf8be5bb794dc89e7bef401443bc17b Mon Sep 17 00:00:00 2001 From: Xin Zhuang Date: Thu, 9 Jan 2020 09:08:44 -0500 Subject: [PATCH 2/4] fix format Signed-off-by: Xin Zhuang --- source/server/server.h | 3 ++- test/common/router/rds_impl_test.cc | 2 +- test/common/router/scoped_rds_test.cc | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/source/server/server.h b/source/server/server.h index 11b912976e5de..274e89d65aac0 100644 --- a/source/server/server.h +++ b/source/server/server.h @@ -253,7 +253,8 @@ class InstanceImpl final : Logger::Loggable, void loadServerFlags(const absl::optional& flags_path); void startWorkers(); void terminate(); - void notifyCallbacksForStage(Stage stage, Event::PostCb completion_cb = [] {}); + void notifyCallbacksForStage( + Stage stage, Event::PostCb completion_cb = [] {}); using LifecycleNotifierCallbacks = std::list; using LifecycleNotifierCompletionCallbacks = std::list; diff --git a/test/common/router/rds_impl_test.cc b/test/common/router/rds_impl_test.cc index 406292bb8890c..44d9e5d02d2ae 100644 --- a/test/common/router/rds_impl_test.cc +++ b/test/common/router/rds_impl_test.cc @@ -17,8 +17,8 @@ #include "test/mocks/init/mocks.h" #include "test/mocks/local_info/mocks.h" -#include "test/mocks/server/mocks.h" #include "test/mocks/protobuf/mocks.h" +#include "test/mocks/server/mocks.h" #include "test/mocks/thread_local/mocks.h" #include "test/mocks/upstream/mocks.h" #include "test/test_common/printers.h" diff --git a/test/common/router/scoped_rds_test.cc b/test/common/router/scoped_rds_test.cc index 22b5cdafded5f..fcbe0426f3232 100644 --- a/test/common/router/scoped_rds_test.cc +++ b/test/common/router/scoped_rds_test.cc @@ -14,13 +14,13 @@ #include "common/config/api_version.h" #include "common/config/grpc_mux_impl.h" -#include "common/router/scoped_rds.h" #include "common/protobuf/message_validator_impl.h" +#include "common/router/scoped_rds.h" #include "test/mocks/config/mocks.h" +#include "test/mocks/protobuf/mocks.h" #include "test/mocks/router/mocks.h" #include "test/mocks/server/mocks.h" -#include "test/mocks/protobuf/mocks.h" #include "test/test_common/simulated_time_system.h" #include "test/test_common/utility.h" From e148ac16c6fe34b8ebfc065374e79646aff084e9 Mon Sep 17 00:00:00 2001 From: Xin Zhuang Date: Thu, 9 Jan 2020 10:06:29 -0500 Subject: [PATCH 3/4] add default action for serverFactoryContext and FactoryContext mocks Signed-off-by: Xin Zhuang --- test/mocks/server/mocks.cc | 2 ++ test/mocks/server/mocks.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/test/mocks/server/mocks.cc b/test/mocks/server/mocks.cc index 12d49b0fca3a1..70370589b3f0b 100644 --- a/test/mocks/server/mocks.cc +++ b/test/mocks/server/mocks.cc @@ -204,6 +204,7 @@ MockServerFactoryContext::MockServerFactoryContext() ON_CALL(*this, admin()).WillByDefault(ReturnRef(admin_)); ON_CALL(*this, api()).WillByDefault(ReturnRef(api_)); ON_CALL(*this, timeSource()).WillByDefault(ReturnRef(time_system_)); + ON_CALL(*this, messageValidationContext()).WillByDefault(ReturnRef(validation_context_)); ON_CALL(*this, messageValidationVisitor()) .WillByDefault(ReturnRef(ProtobufMessage::getStrictValidationVisitor())); ON_CALL(*this, api()).WillByDefault(ReturnRef(api_)); @@ -230,6 +231,7 @@ MockFactoryContext::MockFactoryContext() ON_CALL(*this, api()).WillByDefault(ReturnRef(api_)); ON_CALL(*this, timeSource()).WillByDefault(ReturnRef(time_system_)); ON_CALL(*this, overloadManager()).WillByDefault(ReturnRef(overload_manager_)); + ON_CALL(*this, messageValidationContext()).WillByDefault(ReturnRef(validation_context_)); ON_CALL(*this, messageValidationVisitor()) .WillByDefault(ReturnRef(ProtobufMessage::getStrictValidationVisitor())); ON_CALL(*this, api()).WillByDefault(ReturnRef(api_)); diff --git a/test/mocks/server/mocks.h b/test/mocks/server/mocks.h index 5b167a7ecef63..0c2de04a844ef 100644 --- a/test/mocks/server/mocks.h +++ b/test/mocks/server/mocks.h @@ -495,6 +495,7 @@ class MockServerFactoryContext : public virtual ServerFactoryContext { testing::NiceMock runtime_loader_; testing::NiceMock scope_; testing::NiceMock thread_local_; + testing::NiceMock validation_context_; Singleton::ManagerPtr singleton_manager_; testing::NiceMock admin_; Event::GlobalTimeSystem time_system_; @@ -551,6 +552,7 @@ class MockFactoryContext : public virtual FactoryContext { testing::NiceMock admin_; Stats::IsolatedStoreImpl listener_scope_; Event::GlobalTimeSystem time_system_; + testing::NiceMock validation_context_; testing::NiceMock overload_manager_; Grpc::ContextImpl grpc_context_; Http::ContextImpl http_context_; From 455dc264a885a74b06b82bd83a0229980d157e95 Mon Sep 17 00:00:00 2001 From: Xin Zhuang Date: Thu, 9 Jan 2020 14:53:16 -0500 Subject: [PATCH 4/4] use factoryContext.validator for static route config provider Signed-off-by: Xin Zhuang --- source/common/router/rds_impl.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/common/router/rds_impl.cc b/source/common/router/rds_impl.cc index 6152d7ee361b8..942dfe34acfb1 100644 --- a/source/common/router/rds_impl.cc +++ b/source/common/router/rds_impl.cc @@ -48,8 +48,7 @@ StaticRouteConfigProviderImpl::StaticRouteConfigProviderImpl( Server::Configuration::FactoryContext& factory_context, RouteConfigProviderManagerImpl& route_config_provider_manager) : config_(new ConfigImpl(config, factory_context.getServerFactoryContext(), - factory_context.messageValidationContext().staticValidationVisitor(), - true)), + factory_context.messageValidationVisitor(), true)), route_config_proto_{config}, last_updated_(factory_context.timeSource().systemTime()), route_config_provider_manager_(route_config_provider_manager) {