From 598443e60216609ecab9ebb1cb1d13381727275c Mon Sep 17 00:00:00 2001 From: Derek Argueta Date: Mon, 29 Apr 2019 00:22:04 -0700 Subject: [PATCH 01/10] update uses of parseBootstrapJson Signed-off-by: Derek Argueta --- test/common/upstream/BUILD | 1 + .../upstream/cluster_manager_impl_test.cc | 53 ++++++++++++------- 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/test/common/upstream/BUILD b/test/common/upstream/BUILD index 31eb24e081f5c..eca8d6e772e57 100644 --- a/test/common/upstream/BUILD +++ b/test/common/upstream/BUILD @@ -42,6 +42,7 @@ envoy_cc_test( "//source/common/network:socket_option_lib", "//source/common/network:transport_socket_options_lib", "//source/common/network:utility_lib", + "//source/common/protobuf:utility_lib", "//source/common/stats:stats_lib", "//source/common/upstream:cluster_factory_lib", "//source/common/upstream:cluster_manager_lib", diff --git a/test/common/upstream/cluster_manager_impl_test.cc b/test/common/upstream/cluster_manager_impl_test.cc index fc2c2c7720176..90acb4a0dc05e 100644 --- a/test/common/upstream/cluster_manager_impl_test.cc +++ b/test/common/upstream/cluster_manager_impl_test.cc @@ -13,6 +13,7 @@ #include "common/network/socket_option_impl.h" #include "common/network/transport_socket_options_impl.h" #include "common/network/utility.h" +#include "common/protobuf/utility.h" #include "common/singleton/manager_impl.h" #include "common/upstream/cluster_factory_impl.h" #include "common/upstream/cluster_manager_impl.h" @@ -288,6 +289,12 @@ envoy::config::bootstrap::v2::Bootstrap parseBootstrapFromJson(const std::string return bootstrap; } +envoy::config::bootstrap::v2::Bootstrap parseV2BootstrapFromJson(const std::string& json_string) { + envoy::config::bootstrap::v2::Bootstrap bootstrap; + MessageUtil::loadFromJson(json_string, bootstrap); + return bootstrap; +} + TEST_F(ClusterManagerImplTest, MultipleProtocolClusterFail) { const std::string yaml = R"EOF( static_resources: @@ -359,15 +366,19 @@ TEST_F(ClusterManagerImplTest, MultipleProtocolCluster) { TEST_F(ClusterManagerImplTest, OutlierEventLog) { const std::string json = R"EOF( { - "outlier_detection": { - "event_log_path": "foo" + "cluster_manager": { + "outlier_detection": { + "event_log_path": "foo" + } }, - "clusters": [] + "static_resources": { + "clusters": [] + } } )EOF"; EXPECT_CALL(log_manager_, createAccessLog("foo")); - create(parseBootstrapFromJson(json)); + create(parseV2BootstrapFromJson(json)); } TEST_F(ClusterManagerImplTest, NoSdsConfig) { @@ -379,17 +390,19 @@ TEST_F(ClusterManagerImplTest, NoSdsConfig) { TEST_F(ClusterManagerImplTest, UnknownClusterType) { const std::string json = R"EOF( { - "clusters": [ - { - "name": "cluster_1", - "connect_timeout_ms": 250, - "type": "foo", - "lb_type": "round_robin" - }] - } + "static_resources": { + "clusters": [ + { + "name": "cluster_1", + "connect_timeout": "0.250s", + "type": "foo", + "lb_policy": "round_robin" + }] + } + } )EOF"; - EXPECT_THROW(create(parseBootstrapFromJson(json)), EnvoyException); + EXPECT_THROW_WITH_REGEX(create(parseV2BootstrapFromJson(json)), EnvoyException, "invalid value \"foo\" for type TYPE_ENUM"); } TEST_F(ClusterManagerImplTest, LocalClusterNotDefined) { @@ -408,15 +421,19 @@ TEST_F(ClusterManagerImplTest, LocalClusterNotDefined) { TEST_F(ClusterManagerImplTest, BadClusterManagerConfig) { const std::string json = R"EOF( { - "outlier_detection": { - "event_log_path": "foo" + "cluster_manager": { + "outlier_detection": { + "event_log_path": "foo" + }, + "fake_property" : "fake_property" }, - "clusters": [], - "fake_property" : "fake_property" + "static_resources": { + "clusters": [] + } } )EOF"; - EXPECT_THROW(create(parseBootstrapFromJson(json)), Json::Exception); + EXPECT_THROW_WITH_REGEX(create(parseV2BootstrapFromJson(json)), EnvoyException, "fake_property: Cannot find field"); } TEST_F(ClusterManagerImplTest, LocalClusterDefined) { From 7014bd3483e2ec88b775ad0067975ce886a9c0fd Mon Sep 17 00:00:00 2001 From: Derek Argueta Date: Tue, 21 May 2019 17:12:37 -0500 Subject: [PATCH 02/10] finish removing v1 configs in cluster manager tests Signed-off-by: Derek Argueta --- .../upstream/cluster_manager_impl_test.cc | 497 +++++++++--------- test/common/upstream/utility.h | 24 +- 2 files changed, 263 insertions(+), 258 deletions(-) diff --git a/test/common/upstream/cluster_manager_impl_test.cc b/test/common/upstream/cluster_manager_impl_test.cc index 90acb4a0dc05e..8bed42e119766 100644 --- a/test/common/upstream/cluster_manager_impl_test.cc +++ b/test/common/upstream/cluster_manager_impl_test.cc @@ -1,6 +1,8 @@ #include #include +#include "envoy/api/v2/core/base.pb.h" + #include "envoy/admin/v2alpha/config_dump.pb.h" #include "envoy/network/listen_socket.h" #include "envoy/upstream/upstream.h" @@ -282,19 +284,21 @@ class ClusterManagerImplTest : public testing::Test { Http::ContextImpl http_context_; }; -envoy::config::bootstrap::v2::Bootstrap parseBootstrapFromJson(const std::string& json_string) { - envoy::config::bootstrap::v2::Bootstrap bootstrap; - auto json_object_ptr = Json::Factory::loadFromString(json_string); - Config::BootstrapJson::translateClusterManagerBootstrap(*json_object_ptr, bootstrap); - return bootstrap; -} - envoy::config::bootstrap::v2::Bootstrap parseV2BootstrapFromJson(const std::string& json_string) { envoy::config::bootstrap::v2::Bootstrap bootstrap; MessageUtil::loadFromJson(json_string, bootstrap); return bootstrap; } +envoy::config::bootstrap::v2::Bootstrap defaultConfig() { + const std::string yaml = R"EOF( +static_resources: + clusters: [] + )EOF"; + + return parseBootstrapFromV2Yaml(yaml); +} + TEST_F(ClusterManagerImplTest, MultipleProtocolClusterFail) { const std::string yaml = R"EOF( static_resources: @@ -382,9 +386,16 @@ TEST_F(ClusterManagerImplTest, OutlierEventLog) { } TEST_F(ClusterManagerImplTest, NoSdsConfig) { - const std::string json = fmt::sprintf("{%s}", clustersJson({defaultSdsClusterJson("cluster_1")})); - EXPECT_THROW_WITH_MESSAGE(create(parseBootstrapFromJson(json)), EnvoyException, - "cannot create sds cluster with no sds config"); + const std::string yaml = R"EOF( +static_resources: + clusters: + - name: cluster_1 + connect_timeout: 0.250s + type: eds + lb_policy: round_robin + )EOF"; + EXPECT_THROW_WITH_MESSAGE(create(parseBootstrapFromV2Yaml(yaml)), EnvoyException, + "cannot create an EDS cluster without an EDS config"); } TEST_F(ClusterManagerImplTest, UnknownClusterType) { @@ -409,13 +420,17 @@ TEST_F(ClusterManagerImplTest, LocalClusterNotDefined) { const std::string json = fmt::sprintf( R"EOF( { - "local_cluster_name": "new_cluster", - %s + "cluster_manager": { + "local_cluster_name": "new_cluster", + }, + "static_resources": { + %s + } } )EOF", clustersJson({defaultStaticClusterJson("cluster_1"), defaultStaticClusterJson("cluster_2")})); - EXPECT_THROW(create(parseBootstrapFromJson(json)), EnvoyException); + EXPECT_THROW(create(parseV2BootstrapFromJson(json)), EnvoyException); } TEST_F(ClusterManagerImplTest, BadClusterManagerConfig) { @@ -440,61 +455,45 @@ TEST_F(ClusterManagerImplTest, LocalClusterDefined) { const std::string json = fmt::sprintf( R"EOF( { - "local_cluster_name": "new_cluster", - %s + "cluster_manager": { + "local_cluster_name": "new_cluster", + }, + "static_resources": { + %s + } } )EOF", clustersJson({defaultStaticClusterJson("cluster_1"), defaultStaticClusterJson("cluster_2"), defaultStaticClusterJson("new_cluster")})); - create(parseBootstrapFromJson(json)); + create(parseV2BootstrapFromJson(json)); checkStats(3 /*added*/, 0 /*modified*/, 0 /*removed*/, 3 /*active*/, 0 /*warming*/); factory_.tls_.shutdownThread(); } TEST_F(ClusterManagerImplTest, DuplicateCluster) { - const std::string json = fmt::sprintf( - "{%s}", - clustersJson({defaultStaticClusterJson("cluster_1"), defaultStaticClusterJson("cluster_1")})); - EXPECT_THROW(create(parseBootstrapFromJson(json)), EnvoyException); -} - -TEST_F(ClusterManagerImplTest, UnknownHcType) { - const std::string json = R"EOF( - { - "clusters": [ - { - "name": "cluster_1", - "connect_timeout_ms": 250, - "type": "static", - "lb_type": "round_robin", - "hosts": [{"url": "tcp://127.0.0.1:11001"}], - "health_check": { - "type": "foo" - } - }] - } - )EOF"; - - EXPECT_THROW(create(parseBootstrapFromJson(json)), EnvoyException); + const std::string json = + fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("cluster_1"),defaultStaticClusterJson("cluster_1")})); + const auto config = parseV2BootstrapFromJson(json); + EXPECT_THROW(create(config), EnvoyException); } TEST_F(ClusterManagerImplTest, ValidClusterName) { - const std::string json = R"EOF( - { - "clusters": [ - { - "name": "cluster:name", - "connect_timeout_ms": 250, - "type": "static", - "lb_type": "round_robin", - "hosts": [{"url": "tcp://127.0.0.1:11001"}] - }] - } + const std::string yaml = R"EOF( +static_resources: + clusters: + - name: cluster:name + connect_timeout: 0.250s + type: static + lb_policy: round_robin + hosts: + - socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; - create(parseBootstrapFromJson(json)); + create(parseBootstrapFromV2Yaml(yaml)); cluster_manager_->clusters() .find("cluster:name") ->second.get() @@ -506,57 +505,57 @@ TEST_F(ClusterManagerImplTest, ValidClusterName) { } TEST_F(ClusterManagerImplTest, OriginalDstLbRestriction) { - const std::string json = R"EOF( - { - "clusters": [ - { - "name": "cluster_1", - "connect_timeout_ms": 250, - "type": "original_dst", - "lb_type": "round_robin" - }] - } + const std::string yaml = R"EOF( +static_resources: + clusters: + - name: cluster_1 + connect_timeout: 0.250s + type: original_dst + lb_policy: round_robin )EOF"; EXPECT_THROW_WITH_MESSAGE( - create(parseBootstrapFromJson(json)), EnvoyException, + create(parseBootstrapFromV2Yaml(yaml)), EnvoyException, "cluster: cluster type 'original_dst' may only be used with LB type 'original_dst_lb'"); } TEST_F(ClusterManagerImplTest, OriginalDstLbRestriction2) { - const std::string json = R"EOF( - { - "clusters": [ - { - "name": "cluster_1", - "connect_timeout_ms": 250, - "type": "static", - "lb_type": "original_dst_lb", - "hosts": [{"url": "tcp://127.0.0.1:11001"}] - }] - } + const std::string yaml = R"EOF( +static_resources: + clusters: + - name: cluster_1 + connect_timeout: 0.250s + type: static + lb_policy: original_dst_lb + hosts: + - socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; EXPECT_THROW_WITH_MESSAGE( - create(parseBootstrapFromJson(json)), EnvoyException, + create(parseBootstrapFromV2Yaml(yaml)), EnvoyException, "cluster: LB type 'original_dst_lb' may only be used with cluster type 'original_dst'"); } TEST_F(ClusterManagerImplTest, SubsetLoadBalancerInitialization) { - const std::string json = R"EOF( - { - "clusters": [ - { - "name": "cluster_1", - "connect_timeout_ms": 250, - "type": "static", - "lb_type": "round_robin", - "hosts": [{"url": "tcp://127.0.0.1:8000"}, {"url": "tcp://127.0.0.1:8001"}] - }] - } + const std::string yaml = R"EOF( +static_resources: + clusters: + - name: cluster_1 + connect_timeout: 0.250s + type: static + lb_policy: round_robin + hosts: + - socket_address: + address: 127.0.0.1 + port_value: 8000 + - socket_address: + address: 127.0.0.1 + port_value: 8001 )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap = parseBootstrapFromJson(json); + envoy::config::bootstrap::v2::Bootstrap bootstrap = parseBootstrapFromV2Yaml(yaml); envoy::api::v2::Cluster::LbSubsetConfig* subset_config = bootstrap.mutable_static_resources()->mutable_clusters(0)->mutable_lb_subset_config(); subset_config->set_fallback_policy(envoy::api::v2::Cluster::LbSubsetConfig::ANY_ENDPOINT); @@ -569,19 +568,16 @@ TEST_F(ClusterManagerImplTest, SubsetLoadBalancerInitialization) { } TEST_F(ClusterManagerImplTest, SubsetLoadBalancerRestriction) { - const std::string json = R"EOF( - { - "clusters": [ - { - "name": "cluster_1", - "connect_timeout_ms": 250, - "type": "original_dst", - "lb_type": "original_dst_lb" - }] - } + const std::string yaml = R"EOF( +static_resources: + clusters: + - name: cluster_1 + connect_timeout: 0.250s + type: original_dst + lb_policy: original_dst_lb )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap = parseBootstrapFromJson(json); + envoy::config::bootstrap::v2::Bootstrap bootstrap = parseBootstrapFromV2Yaml(yaml); envoy::api::v2::Cluster::LbSubsetConfig* subset_config = bootstrap.mutable_static_resources()->mutable_clusters(0)->mutable_lb_subset_config(); subset_config->set_fallback_policy(envoy::api::v2::Cluster::LbSubsetConfig::ANY_ENDPOINT); @@ -593,20 +589,23 @@ TEST_F(ClusterManagerImplTest, SubsetLoadBalancerRestriction) { } TEST_F(ClusterManagerImplTest, SubsetLoadBalancerLocalityAware) { - const std::string json = R"EOF( - { - "clusters": [ - { - "name": "cluster_1", - "connect_timeout_ms": 250, - "type": "static", - "lb_type": "round_robin", - "hosts": [{"url": "tcp://127.0.0.1:8000"}, {"url": "tcp://127.0.0.1:8001"}] - }] - } + const std::string yaml = R"EOF( +static_resources: + clusters: + - name: cluster_1 + connect_timeout: 0.250s + type: STATIC + lb_policy: ROUND_ROBIN + hosts: + - socket_address: + address: 127.0.0.1 + port_value: 8000 + - socket_address: + address: 127.0.0.1 + port_value: 8001 )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap = parseBootstrapFromJson(json); + envoy::config::bootstrap::v2::Bootstrap bootstrap = parseBootstrapFromV2Yaml(yaml); envoy::api::v2::Cluster::LbSubsetConfig* subset_config = bootstrap.mutable_static_resources()->mutable_clusters(0)->mutable_lb_subset_config(); subset_config->set_locality_weight_aware(true); @@ -617,21 +616,24 @@ TEST_F(ClusterManagerImplTest, SubsetLoadBalancerLocalityAware) { } TEST_F(ClusterManagerImplTest, RingHashLoadBalancerInitialization) { - const std::string json = R"EOF( - { - "clusters": [{ - "name": "redis_cluster", - "lb_type": "ring_hash", - "ring_hash_lb_config": { - "minimum_ring_size": 125 - }, - "connect_timeout_ms": 250, - "type": "static", - "hosts": [{"url": "tcp://127.0.0.1:8000"}, {"url": "tcp://127.0.0.1:8001"}] - }] - } + const std::string yaml = R"EOF( +static_resources: + clusters: + - name: redis_cluster + lb_policy: RING_HASH + ring_hash_lb_config: + minimum_ring_size: 125 + connect_timeout: 0.250s + type: STATIC + hosts: + - socket_address: + address: 127.0.0.1 + port_value: 8000 + - socket_address: + address: 127.0.0.1 + port_value: 8001 )EOF"; - create(parseBootstrapFromJson(json)); + create(parseBootstrapFromV2Yaml(yaml)); } TEST_F(ClusterManagerImplTest, RingHashLoadBalancerV2Initialization) { @@ -672,7 +674,7 @@ class ClusterManagerImplThreadAwareLbTest : public ClusterManagerImplTest { public: void doTest(LoadBalancerType lb_type) { const std::string json = - fmt::sprintf("{%s}", clustersJson({defaultStaticClusterJson("cluster_0")})); + fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("cluster_0")})); std::shared_ptr cluster1( new NiceMock()); @@ -682,7 +684,7 @@ class ClusterManagerImplThreadAwareLbTest : public ClusterManagerImplTest { InSequence s; EXPECT_CALL(factory_, clusterFromProto_(_, _, _, _)).WillOnce(Return(cluster1)); ON_CALL(*cluster1, initializePhase()).WillByDefault(Return(Cluster::InitializePhase::Primary)); - create(parseBootstrapFromJson(json)); + create(parseV2BootstrapFromJson(json)); EXPECT_EQ(nullptr, cluster_manager_->get("cluster_0")->loadBalancer().chooseHost(nullptr)); @@ -709,30 +711,27 @@ TEST_F(ClusterManagerImplThreadAwareLbTest, MaglevLoadBalancerThreadAwareUpdate) } TEST_F(ClusterManagerImplTest, TcpHealthChecker) { - const std::string json = R"EOF( - { - "clusters": [ - { - "name": "cluster_1", - "connect_timeout_ms": 250, - "type": "static", - "lb_type": "round_robin", - "hosts": [{"url": "tcp://127.0.0.1:11001"}], - "health_check": { - "type": "tcp", - "timeout_ms": 1000, - "interval_ms": 1000, - "unhealthy_threshold": 2, - "healthy_threshold": 2, - "send": [ - {"binary": "01"} - ], - "receive": [ - {"binary": "02"} - ] - } - }] - } + const std::string yaml = R"EOF( +static_resources: + clusters: + - name: cluster_1 + connect_timeout: 0.250s + type: STATIC + lb_policy: ROUND_ROBIN + hosts: + - socket_address: + address: 127.0.0.1 + port_value: 11001 + health_checks: + - timeout: 1s + interval: 1s + unhealthy_threshold: 2 + healthy_threshold: 2 + tcp_health_check: + send: + text: '01' + receive: + - text: '02' )EOF"; Network::MockClientConnection* connection = new NiceMock(); @@ -740,30 +739,29 @@ TEST_F(ClusterManagerImplTest, TcpHealthChecker) { createClientConnection_( PointeesEq(Network::Utility::resolveUrl("tcp://127.0.0.1:11001")), _, _, _)) .WillOnce(Return(connection)); - create(parseBootstrapFromJson(json)); + create(parseBootstrapFromV2Yaml(yaml)); factory_.tls_.shutdownThread(); } TEST_F(ClusterManagerImplTest, HttpHealthChecker) { - const std::string json = R"EOF( - { - "clusters": [ - { - "name": "cluster_1", - "connect_timeout_ms": 250, - "type": "static", - "lb_type": "round_robin", - "hosts": [{"url": "tcp://127.0.0.1:11001"}], - "health_check": { - "type": "http", - "timeout_ms": 1000, - "interval_ms": 1000, - "unhealthy_threshold": 2, - "healthy_threshold": 2, - "path": "/healthcheck" - } - }] - } + const std::string yaml = R"EOF( +static_resources: + clusters: + - name: cluster_1 + connect_timeout: 0.250s + type: STATIC + lb_policy: ROUND_ROBIN + hosts: + - socket_address: + address: 127.0.0.1 + port_value: 11001 + health_checks: + - timeout: 1s + interval: 1s + unhealthy_threshold: 2 + healthy_threshold: 2 + http_health_check: + path: "/healthcheck" )EOF"; Network::MockClientConnection* connection = new NiceMock(); @@ -771,15 +769,15 @@ TEST_F(ClusterManagerImplTest, HttpHealthChecker) { createClientConnection_( PointeesEq(Network::Utility::resolveUrl("tcp://127.0.0.1:11001")), _, _, _)) .WillOnce(Return(connection)); - create(parseBootstrapFromJson(json)); + create(parseBootstrapFromV2Yaml(yaml)); factory_.tls_.shutdownThread(); } TEST_F(ClusterManagerImplTest, UnknownCluster) { const std::string json = - fmt::sprintf("{%s}", clustersJson({defaultStaticClusterJson("cluster_1")})); + fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("cluster_1")})); - create(parseBootstrapFromJson(json)); + create(parseV2BootstrapFromJson(json)); EXPECT_EQ(nullptr, cluster_manager_->get("hello")); EXPECT_EQ(nullptr, cluster_manager_->httpConnPoolForCluster("hello", ResourcePriority::Default, Http::Protocol::Http2, nullptr)); @@ -803,21 +801,21 @@ TEST_F(ClusterManagerImplTest, UnknownCluster) { * Test that buffer limits are set on new TCP connections. */ TEST_F(ClusterManagerImplTest, VerifyBufferLimits) { - const std::string json = R"EOF( - { - "clusters": [ - { - "name": "cluster_1", - "connect_timeout_ms": 250, - "per_connection_buffer_limit_bytes": 8192, - "type": "static", - "lb_type": "round_robin", - "hosts": [{"url": "tcp://127.0.0.1:11001"}] - }] - } + const std::string yaml = R"EOF( +static_resources: + clusters: + - name: cluster_1 + connect_timeout: 0.250s + type: static + lb_policy: round_robin + per_connection_buffer_limit_bytes: 8192 + hosts: + - socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; - create(parseBootstrapFromJson(json)); + create(parseBootstrapFromV2Yaml(yaml)); Network::MockClientConnection* connection = new NiceMock(); EXPECT_CALL(*connection, setBufferLimits(8192)); EXPECT_CALL(factory_.tls_.dispatcher_, createClientConnection_(_, _, _, _)) @@ -829,9 +827,9 @@ TEST_F(ClusterManagerImplTest, VerifyBufferLimits) { TEST_F(ClusterManagerImplTest, ShutdownOrder) { const std::string json = - fmt::sprintf("{%s}", clustersJson({defaultStaticClusterJson("cluster_1")})); + fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("cluster_1")})); - create(parseBootstrapFromJson(json)); + create(parseV2BootstrapFromJson(json)); Cluster& cluster = cluster_manager_->activeClusters().begin()->second; EXPECT_EQ("cluster_1", cluster.info()->name()); EXPECT_EQ(cluster.info(), cluster_manager_->get("cluster_1")->info()); @@ -856,13 +854,22 @@ TEST_F(ClusterManagerImplTest, InitializeOrder) { const std::string json = fmt::sprintf( R"EOF( { - "cds": {"cluster": %s}, - %s + "dynamic_resources": { + "cds_config": { + "api_config_source": { + "api_type": "UNSUPPORTED_REST_LEGACY", + "refresh_delay": "30s", + "cluster_names": ["cds_cluster"] + } + } + }, + "static_resources": { + %s + } } )EOF", - defaultStaticClusterJson("cds_cluster"), clustersJson( - {defaultStaticClusterJson("fake_cluster"), defaultStaticClusterJson("fake_cluster2")})); + {defaultStaticClusterJson("cds_cluster"), defaultStaticClusterJson("fake_cluster"), defaultStaticClusterJson("fake_cluster2")})); MockCdsApi* cds = new MockCdsApi(); std::shared_ptr cds_cluster( @@ -886,7 +893,7 @@ TEST_F(ClusterManagerImplTest, InitializeOrder) { EXPECT_CALL(*cds_cluster, initialize(_)); EXPECT_CALL(*cluster1, initialize(_)); - create(parseBootstrapFromJson(json)); + create(parseV2BootstrapFromJson(json)); ReadyWatcher initialized; cluster_manager_->setInitializedCb([&]() -> void { initialized.ready(); }); @@ -935,7 +942,6 @@ version_info: version3 - socket_address: address: "127.0.0.1" port_value: 11001 - dns_lookup_family: V4_ONLY last_updated: seconds: 1234567891 nanos: 234000000 @@ -947,7 +953,6 @@ version_info: version3 - socket_address: address: "127.0.0.1" port_value: 11001 - dns_lookup_family: V4_ONLY last_updated: seconds: 1234567891 nanos: 234000000 @@ -959,7 +964,6 @@ version_info: version3 - socket_address: address: "127.0.0.1" port_value: 11001 - dns_lookup_family: V4_ONLY last_updated: seconds: 1234567891 nanos: 234000000 @@ -1031,8 +1035,12 @@ TEST_F(ClusterManagerImplTest, DynamicRemoveWithLocalCluster) { // Setup a cluster manager with a static local cluster. const std::string json = fmt::sprintf(R"EOF( { - "local_cluster_name": "foo", - %s + "cluster_manager": { + "local_cluster_name": "foo" + }, + "static_resources": { + %s + } } )EOF", clustersJson({defaultStaticClusterJson("fake")})); @@ -1043,7 +1051,7 @@ TEST_F(ClusterManagerImplTest, DynamicRemoveWithLocalCluster) { ON_CALL(*foo, initializePhase()).WillByDefault(Return(Cluster::InitializePhase::Primary)); EXPECT_CALL(*foo, initialize(_)); - create(parseBootstrapFromJson(json)); + create(parseV2BootstrapFromJson(json)); foo->initialize_callback_(); // Now add a dynamic cluster. This cluster will have a member update callback from the local @@ -1080,14 +1088,7 @@ TEST_F(ClusterManagerImplTest, DynamicRemoveWithLocalCluster) { TEST_F(ClusterManagerImplTest, RemoveWarmingCluster) { time_system_.setSystemTime(std::chrono::milliseconds(1234567891234)); - - const std::string json = R"EOF( - { - "clusters": [] - } - )EOF"; - - create(parseBootstrapFromJson(json)); + create(defaultConfig()); InSequence s; ReadyWatcher initialized; @@ -1127,13 +1128,7 @@ TEST_F(ClusterManagerImplTest, RemoveWarmingCluster) { // Verify that shutting down the cluster manager destroys warming clusters. TEST_F(ClusterManagerImplTest, ShutdownWithWarming) { - const std::string json = R"EOF( - { - "clusters": [] - } - )EOF"; - - create(parseBootstrapFromJson(json)); + create(defaultConfig()); InSequence s; ReadyWatcher initialized; @@ -1154,13 +1149,7 @@ TEST_F(ClusterManagerImplTest, ShutdownWithWarming) { } TEST_F(ClusterManagerImplTest, DynamicAddRemove) { - const std::string json = R"EOF( - { - "clusters": [] - } - )EOF"; - - create(parseBootstrapFromJson(json)); + create(defaultConfig()); InSequence s; ReadyWatcher initialized; @@ -1272,14 +1261,14 @@ TEST_F(ClusterManagerImplTest, DynamicAddRemove) { TEST_F(ClusterManagerImplTest, addOrUpdateClusterStaticExists) { const std::string json = - fmt::sprintf("{%s}", clustersJson({defaultStaticClusterJson("some_cluster")})); + fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("fake_cluster")})); std::shared_ptr cluster1(new NiceMock()); InSequence s; EXPECT_CALL(factory_, clusterFromProto_(_, _, _, _)).WillOnce(Return(cluster1)); ON_CALL(*cluster1, initializePhase()).WillByDefault(Return(Cluster::InitializePhase::Primary)); EXPECT_CALL(*cluster1, initialize(_)); - create(parseBootstrapFromJson(json)); + create(parseV2BootstrapFromJson(json)); ReadyWatcher initialized; cluster_manager_->setInitializedCb([&]() -> void { initialized.ready(); }); @@ -1301,14 +1290,14 @@ TEST_F(ClusterManagerImplTest, addOrUpdateClusterStaticExists) { // Verifies that we correctly propagate the host_set state to the TLS clusters. TEST_F(ClusterManagerImplTest, HostsPostedToTlsCluster) { const std::string json = - fmt::sprintf("{%s}", clustersJson({defaultStaticClusterJson("fake_cluster")})); + fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("fake_cluster")})); std::shared_ptr cluster1(new NiceMock()); InSequence s; EXPECT_CALL(factory_, clusterFromProto_(_, _, _, _)).WillOnce(Return(cluster1)); ON_CALL(*cluster1, initializePhase()).WillByDefault(Return(Cluster::InitializePhase::Primary)); EXPECT_CALL(*cluster1, initialize(_)); - create(parseBootstrapFromJson(json)); + create(parseV2BootstrapFromJson(json)); ReadyWatcher initialized; cluster_manager_->setInitializedCb([&]() -> void { initialized.ready(); }); @@ -1348,7 +1337,7 @@ TEST_F(ClusterManagerImplTest, HostsPostedToTlsCluster) { // Test that we close all HTTP connection pool connections when there is a host health failure. TEST_F(ClusterManagerImplTest, CloseHttpConnectionsOnHealthFailure) { const std::string json = - fmt::sprintf("{%s}", clustersJson({defaultStaticClusterJson("some_cluster")})); + fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("some_cluster")})); std::shared_ptr cluster1(new NiceMock()); cluster1->info_->name_ = "some_cluster"; HostSharedPtr test_host = makeTestHost(cluster1->info_, "tcp://127.0.0.1:80"); @@ -1375,7 +1364,7 @@ TEST_F(ClusterManagerImplTest, CloseHttpConnectionsOnHealthFailure) { // Test inline init. initialize_callback(); })); - create(parseBootstrapFromJson(json)); + create(parseV2BootstrapFromJson(json)); EXPECT_CALL(factory_, allocateConnPool_(_, _)).WillOnce(Return(cp1)); cluster_manager_->httpConnPoolForCluster("some_cluster", ResourcePriority::Default, @@ -1410,7 +1399,7 @@ TEST_F(ClusterManagerImplTest, CloseHttpConnectionsOnHealthFailure) { // Test that we close all TCP connection pool connections when there is a host health failure. TEST_F(ClusterManagerImplTest, CloseTcpConnectionPoolsOnHealthFailure) { const std::string json = - fmt::sprintf("{%s}", clustersJson({defaultStaticClusterJson("some_cluster")})); + fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("some_cluster")})); std::shared_ptr cluster1(new NiceMock()); cluster1->info_->name_ = "some_cluster"; HostSharedPtr test_host = makeTestHost(cluster1->info_, "tcp://127.0.0.1:80"); @@ -1437,7 +1426,7 @@ TEST_F(ClusterManagerImplTest, CloseTcpConnectionPoolsOnHealthFailure) { // Test inline init. initialize_callback(); })); - create(parseBootstrapFromJson(json)); + create(parseV2BootstrapFromJson(json)); EXPECT_CALL(factory_, allocateTcpConnPool_(_)).WillOnce(Return(cp1)); cluster_manager_->tcpConnPoolForCluster("some_cluster", ResourcePriority::Default, nullptr, @@ -1598,18 +1587,21 @@ TEST_F(ClusterManagerImplTest, DoNotCloseTcpConnectionsOnHealthFailure) { } TEST_F(ClusterManagerImplTest, DynamicHostRemove) { - const std::string json = R"EOF( - { - "clusters": [ - { - "name": "cluster_1", - "connect_timeout_ms": 250, - "type": "strict_dns", - "dns_resolvers": [ "1.2.3.4:80" ], - "lb_type": "round_robin", - "hosts": [{"url": "tcp://localhost:11001"}] - }] - } + const std::string yaml = R"EOF( + static_resources: + clusters: + - name: cluster_1 + connect_timeout: 0.250s + type: STRICT_DNS + lb_policy: ROUND_ROBIN + dns_resolvers: + - socket_address: + address: 1.2.3.4 + port_value: 80 + hosts: + - socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; std::shared_ptr dns_resolver(new Network::MockDnsResolver()); @@ -1620,7 +1612,7 @@ TEST_F(ClusterManagerImplTest, DynamicHostRemove) { Network::MockActiveDnsQuery active_dns_query; EXPECT_CALL(*dns_resolver, resolve(_, _, _)) .WillRepeatedly(DoAll(SaveArg<2>(&dns_callback), Return(&active_dns_query))); - create(parseBootstrapFromJson(json)); + create(parseBootstrapFromV2Yaml(yaml)); EXPECT_FALSE(cluster_manager_->get("cluster_1")->info()->addedViaApi()); // Test for no hosts returning the correct values before we have hosts. @@ -2103,22 +2095,25 @@ TEST_F(ClusterManagerImplTest, ConnPoolDestroyWithDraining) { } TEST_F(ClusterManagerImplTest, OriginalDstInitialization) { - const std::string json = R"EOF( + const std::string yaml = R"EOF( { - "clusters": [ - { - "name": "cluster_1", - "connect_timeout_ms": 250, - "type": "original_dst", - "lb_type": "original_dst_lb" - }] + "static_resources": { + "clusters": [ + { + "name": "cluster_1", + "connect_timeout": "0.250s", + "type": "original_dst", + "lb_policy": "original_dst_lb" + } + ] + } } )EOF"; ReadyWatcher initialized; EXPECT_CALL(initialized, ready()); - create(parseBootstrapFromJson(json)); + create(parseBootstrapFromV2Yaml(yaml)); // Set up for an initialize callback. cluster_manager_->setInitializedCb([&]() -> void { initialized.ready(); }); diff --git a/test/common/upstream/utility.h b/test/common/upstream/utility.h index 658e871326ddc..32e43123933ce 100644 --- a/test/common/upstream/utility.h +++ b/test/common/upstream/utility.h @@ -14,13 +14,16 @@ namespace Envoy { namespace Upstream { namespace { -inline std::string defaultSdsClusterJson(const std::string& name) { +inline std::string defaultStaticClusterJsonV1(const std::string& name) { return fmt::sprintf(R"EOF( { "name": "%s", "connect_timeout_ms": 250, - "type": "sds", - "lb_type": "round_robin" + "type": "static", + "lb_type": "round_robin", + "hosts": [ + {"url": "tcp://127.0.0.1:11001"} + ] } )EOF", name); @@ -30,10 +33,17 @@ inline std::string defaultStaticClusterJson(const std::string& name) { return fmt::sprintf(R"EOF( { "name": "%s", - "connect_timeout_ms": 250, + "connect_timeout": "0.250s", "type": "static", - "lb_type": "round_robin", - "hosts": [{"url": "tcp://127.0.0.1:11001"}] + "lb_policy": "round_robin", + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 11001 + } + } + ] } )EOF", name); @@ -58,7 +68,7 @@ inline envoy::api::v2::Cluster parseClusterFromV2Yaml(const std::string& yaml) { } inline envoy::api::v2::Cluster defaultStaticCluster(const std::string& name) { - return parseClusterFromJson(defaultStaticClusterJson(name)); + return parseClusterFromJson(defaultStaticClusterJsonV1(name)); } inline envoy::api::v2::Cluster From 1e2c2b70abec03f770f246874b4a44cb71435015 Mon Sep 17 00:00:00 2001 From: Derek Argueta Date: Wed, 22 May 2019 19:00:34 -0700 Subject: [PATCH 03/10] remove v1 bootstrap configs from server config impl tests Signed-off-by: Derek Argueta --- test/server/configuration_impl_test.cc | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/test/server/configuration_impl_test.cc b/test/server/configuration_impl_test.cc index ebd92436935f1..8459448c2815b 100644 --- a/test/server/configuration_impl_test.cc +++ b/test/server/configuration_impl_test.cc @@ -234,17 +234,24 @@ TEST_F(ConfigurationImplTest, ConfigurationFailsWhenInvalidTracerSpecified) { TEST_F(ConfigurationImplTest, ProtoSpecifiedStatsSink) { std::string json = R"EOF( { - "listeners": [], - - "cluster_manager": { + "static_resources": { + "listeners": [], "clusters": [] }, - - "admin": {"access_log_path": "/dev/null", "address": "tcp://1.2.3.4:5678"} + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "1.2.3.4", + "port_value": 5678 + } + } + } } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap = TestUtility::parseBootstrapFromJson(json); + envoy::config::bootstrap::v2::Bootstrap bootstrap; + MessageUtil::loadFromJson(json, bootstrap); auto& sink = *bootstrap.mutable_stats_sinks()->Add(); sink.set_name(Extensions::StatSinks::StatsSinkNames::get().Statsd); From d73d524e6480b66fa5a81b516c27f5cfc2bb7459 Mon Sep 17 00:00:00 2001 From: Derek Argueta Date: Fri, 24 May 2019 01:46:26 -0700 Subject: [PATCH 04/10] clean translateBootstrap from server config tests Signed-off-by: Derek Argueta --- source/common/config/BUILD | 19 -- source/common/config/bootstrap_json.cc | 127 ----------- source/common/config/bootstrap_json.h | 29 --- source/server/BUILD | 1 - source/server/config_validation/BUILD | 1 - source/server/config_validation/server.cc | 1 - source/server/server.cc | 1 - test/common/upstream/BUILD | 1 - .../upstream/cluster_manager_impl_test.cc | 1 - test/server/configuration_impl_test.cc | 204 +++++++++++------- test/test_common/BUILD | 2 +- test/test_common/utility.cc | 9 - test/test_common/utility.h | 8 - tools/testdata/check_format/header_order.cc | 1 - .../check_format/header_order.cc.gold | 1 - 15 files changed, 133 insertions(+), 273 deletions(-) delete mode 100644 source/common/config/bootstrap_json.cc delete mode 100644 source/common/config/bootstrap_json.h diff --git a/source/common/config/BUILD b/source/common/config/BUILD index 3c1a943351cb0..9b5c61d184215 100644 --- a/source/common/config/BUILD +++ b/source/common/config/BUILD @@ -21,25 +21,6 @@ envoy_cc_library( ], ) -envoy_cc_library( - name = "bootstrap_json_lib", - srcs = ["bootstrap_json.cc"], - hdrs = ["bootstrap_json.h"], - deps = [ - ":address_json_lib", - ":cds_json_lib", - ":json_utility_lib", - ":lds_json_lib", - ":utility_lib", - "//include/envoy/json:json_object_interface", - "//source/common/common:assert_lib", - "//source/common/json:config_schemas_lib", - "//source/common/protobuf:utility_lib", - "//source/extensions/stat_sinks:well_known_names", - "@envoy_api//envoy/config/bootstrap/v2:bootstrap_cc", - ], -) - envoy_cc_library( name = "base_json_lib", srcs = ["base_json.cc"], diff --git a/source/common/config/bootstrap_json.cc b/source/common/config/bootstrap_json.cc deleted file mode 100644 index e42c8fe53b983..0000000000000 --- a/source/common/config/bootstrap_json.cc +++ /dev/null @@ -1,127 +0,0 @@ -#include "common/config/bootstrap_json.h" - -#include "common/common/assert.h" -#include "common/config/address_json.h" -#include "common/config/cds_json.h" -#include "common/config/json_utility.h" -#include "common/config/lds_json.h" -#include "common/config/utility.h" -#include "common/json/config_schemas.h" -#include "common/protobuf/utility.h" - -#include "extensions/stat_sinks/well_known_names.h" - -namespace Envoy { -namespace Config { - -void BootstrapJson::translateClusterManagerBootstrap( - const Json::Object& json_cluster_manager, envoy::config::bootstrap::v2::Bootstrap& bootstrap) { - json_cluster_manager.validateSchema(Json::Schema::CLUSTER_MANAGER_SCHEMA); - - absl::optional eds_config; - if (json_cluster_manager.hasObject("sds")) { - const auto json_sds = json_cluster_manager.getObject("sds"); - auto* cluster = bootstrap.mutable_static_resources()->mutable_clusters()->Add(); - Config::CdsJson::translateCluster(*json_sds->getObject("cluster"), - absl::optional(), - *cluster); - } - - if (json_cluster_manager.hasObject("cds")) { - const auto json_cds = json_cluster_manager.getObject("cds"); - auto* cluster = bootstrap.mutable_static_resources()->mutable_clusters()->Add(); - Config::CdsJson::translateCluster(*json_cds->getObject("cluster"), eds_config, *cluster); - Config::Utility::translateCdsConfig( - *json_cds, *bootstrap.mutable_dynamic_resources()->mutable_cds_config()); - } - - for (const Json::ObjectSharedPtr& json_cluster : - json_cluster_manager.getObjectArray("clusters")) { - auto* cluster = bootstrap.mutable_static_resources()->mutable_clusters()->Add(); - Config::CdsJson::translateCluster(*json_cluster, eds_config, *cluster); - } - - auto* cluster_manager = bootstrap.mutable_cluster_manager(); - JSON_UTIL_SET_STRING(json_cluster_manager, *cluster_manager, local_cluster_name); - if (json_cluster_manager.hasObject("outlier_detection")) { - JSON_UTIL_SET_STRING(*json_cluster_manager.getObject("outlier_detection"), - *cluster_manager->mutable_outlier_detection(), event_log_path); - } -} - -void BootstrapJson::translateBootstrap(const Json::Object& json_config, - envoy::config::bootstrap::v2::Bootstrap& bootstrap) { - json_config.validateSchema(Json::Schema::TOP_LEVEL_CONFIG_SCHEMA); - - translateClusterManagerBootstrap(*json_config.getObject("cluster_manager"), bootstrap); - - if (json_config.hasObject("lds")) { - auto* lds_config = bootstrap.mutable_dynamic_resources()->mutable_lds_config(); - Config::Utility::translateLdsConfig(*json_config.getObject("lds"), *lds_config); - } - - for (const auto json_listener : json_config.getObjectArray("listeners")) { - auto* listener = bootstrap.mutable_static_resources()->mutable_listeners()->Add(); - Config::LdsJson::translateListener(*json_listener, *listener); - } - - JSON_UTIL_SET_STRING(json_config, bootstrap, flags_path); - - auto* stats_sinks = bootstrap.mutable_stats_sinks(); - if (json_config.hasObject("statsd_udp_ip_address")) { - auto* stats_sink = stats_sinks->Add(); - stats_sink->set_name(Extensions::StatSinks::StatsSinkNames::get().Statsd); - envoy::config::metrics::v2::StatsdSink statsd_sink; - AddressJson::translateAddress(json_config.getString("statsd_udp_ip_address"), false, true, - *statsd_sink.mutable_address()); - MessageUtil::jsonConvert(statsd_sink, *stats_sink->mutable_config()); - } - - if (json_config.hasObject("statsd_tcp_cluster_name")) { - auto* stats_sink = stats_sinks->Add(); - stats_sink->set_name(Extensions::StatSinks::StatsSinkNames::get().Statsd); - envoy::config::metrics::v2::StatsdSink statsd_sink; - statsd_sink.set_tcp_cluster_name(json_config.getString("statsd_tcp_cluster_name")); - MessageUtil::jsonConvert(statsd_sink, *stats_sink->mutable_config()); - } - - JSON_UTIL_SET_DURATION(json_config, bootstrap, stats_flush_interval); - - auto* watchdog = bootstrap.mutable_watchdog(); - JSON_UTIL_SET_DURATION(json_config, *watchdog, miss_timeout); - JSON_UTIL_SET_DURATION(json_config, *watchdog, megamiss_timeout); - JSON_UTIL_SET_DURATION(json_config, *watchdog, kill_timeout); - JSON_UTIL_SET_DURATION(json_config, *watchdog, multikill_timeout); - - const auto http = json_config.getObject("tracing", true)->getObject("http", true); - if (http->hasObject("driver")) { - const auto driver = http->getObject("driver"); - auto* http_tracing = bootstrap.mutable_tracing()->mutable_http(); - http_tracing->set_name("envoy." + driver->getString("type")); - MessageUtil::loadFromJson(driver->getObject("config")->asJsonString(), - *http_tracing->mutable_config()); - } - - if (json_config.hasObject("rate_limit_service")) { - const auto json_rate_limit_service = json_config.getObject("rate_limit_service"); - ASSERT(json_rate_limit_service->getString("type") == "grpc_service"); - } - - const auto json_admin = json_config.getObject("admin"); - auto* admin = bootstrap.mutable_admin(); - JSON_UTIL_SET_STRING(*json_admin, *admin, access_log_path); - JSON_UTIL_SET_STRING(*json_admin, *admin, profile_path); - AddressJson::translateAddress(json_admin->getString("address"), true, true, - *admin->mutable_address()); - - if (json_config.hasObject("runtime")) { - const auto json_runtime = json_config.getObject("runtime"); - auto* runtime = bootstrap.mutable_runtime(); - JSON_UTIL_SET_STRING(*json_runtime, *runtime, symlink_root); - JSON_UTIL_SET_STRING(*json_runtime, *runtime, subdirectory); - JSON_UTIL_SET_STRING(*json_runtime, *runtime, override_subdirectory); - } -} - -} // namespace Config -} // namespace Envoy diff --git a/source/common/config/bootstrap_json.h b/source/common/config/bootstrap_json.h deleted file mode 100644 index 80c567d7264ad..0000000000000 --- a/source/common/config/bootstrap_json.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include "envoy/config/bootstrap/v2/bootstrap.pb.h" -#include "envoy/json/json_object.h" - -namespace Envoy { -namespace Config { - -class BootstrapJson { -public: - /** - * Translate a v1 JSON cluster manager object to v2 envoy::config::bootstrap::v2::Bootstrap. - * @param json_cluster_manager source v1 JSON cluster manager object. - * @param bootstrap destination v2 envoy::config::bootstrap::v2::Bootstrap. - */ - static void translateClusterManagerBootstrap(const Json::Object& json_cluster_manager, - envoy::config::bootstrap::v2::Bootstrap& bootstrap); - - /** - * Translate a v1 JSON static config object to v2 envoy::config::bootstrap::v2::Bootstrap. - * @param json_config source v1 JSON static config object. - * @param bootstrap destination v2 envoy::config::bootstrap::v2::Bootstrap. - */ - static void translateBootstrap(const Json::Object& json_config, - envoy::config::bootstrap::v2::Bootstrap& bootstrap); -}; - -} // namespace Config -} // namespace Envoy diff --git a/source/server/BUILD b/source/server/BUILD index 28b136d9d2805..a41b2f3852da8 100644 --- a/source/server/BUILD +++ b/source/server/BUILD @@ -336,7 +336,6 @@ envoy_cc_library( "//source/common/common:mutex_tracer_lib", "//source/common/common:utility_lib", "//source/common/common:version_lib", - "//source/common/config:bootstrap_json_lib", "//source/common/config:utility_lib", "//source/common/grpc:async_client_manager_lib", "//source/common/http:codes_lib", diff --git a/source/server/config_validation/BUILD b/source/server/config_validation/BUILD index e33d9430fdd7e..3899e1a6e8236 100644 --- a/source/server/config_validation/BUILD +++ b/source/server/config_validation/BUILD @@ -96,7 +96,6 @@ envoy_cc_library( "//source/common/common:assert_lib", "//source/common/common:utility_lib", "//source/common/common:version_lib", - "//source/common/config:bootstrap_json_lib", "//source/common/config:utility_lib", "//source/common/local_info:local_info_lib", "//source/common/protobuf:utility_lib", diff --git a/source/server/config_validation/server.cc b/source/server/config_validation/server.cc index 37c0903bcfca5..8218f7572880f 100644 --- a/source/server/config_validation/server.cc +++ b/source/server/config_validation/server.cc @@ -7,7 +7,6 @@ #include "common/common/utility.h" #include "common/common/version.h" -#include "common/config/bootstrap_json.h" #include "common/config/utility.h" #include "common/event/real_time_system.h" #include "common/local_info/local_info_impl.h" diff --git a/source/server/server.cc b/source/server/server.cc index 805d6bfa5bd44..5b25e27b3bf77 100644 --- a/source/server/server.cc +++ b/source/server/server.cc @@ -25,7 +25,6 @@ #include "common/common/mutex_tracer_impl.h" #include "common/common/utility.h" #include "common/common/version.h" -#include "common/config/bootstrap_json.h" #include "common/config/resources.h" #include "common/config/utility.h" #include "common/http/codes.h" diff --git a/test/common/upstream/BUILD b/test/common/upstream/BUILD index eca8d6e772e57..9a474f5da23c0 100644 --- a/test/common/upstream/BUILD +++ b/test/common/upstream/BUILD @@ -36,7 +36,6 @@ envoy_cc_test( "//include/envoy/stats:stats_interface", "//include/envoy/upstream:upstream_interface", "//source/common/api:api_lib", - "//source/common/config:bootstrap_json_lib", "//source/common/config:utility_lib", "//source/common/event:dispatcher_lib", "//source/common/network:socket_option_lib", diff --git a/test/common/upstream/cluster_manager_impl_test.cc b/test/common/upstream/cluster_manager_impl_test.cc index e60005149fba8..9fdf5f549c4b1 100644 --- a/test/common/upstream/cluster_manager_impl_test.cc +++ b/test/common/upstream/cluster_manager_impl_test.cc @@ -8,7 +8,6 @@ #include "envoy/upstream/upstream.h" #include "common/api/api_impl.h" -#include "common/config/bootstrap_json.h" #include "common/config/utility.h" #include "common/http/context_impl.h" #include "common/network/socket_option_factory.h" diff --git a/test/server/configuration_impl_test.cc b/test/server/configuration_impl_test.cc index 8459448c2815b..84d1058a40f90 100644 --- a/test/server/configuration_impl_test.cc +++ b/test/server/configuration_impl_test.cc @@ -3,7 +3,6 @@ #include #include "common/api/api_impl.h" -#include "common/config/bootstrap_json.h" #include "common/config/well_known_names.h" #include "common/json/json_loader.h" #include "common/upstream/cluster_manager_impl.h" @@ -78,19 +77,22 @@ TEST_F(ConfigurationImplTest, DefaultStatsFlushInterval) { TEST_F(ConfigurationImplTest, CustomStatsFlushInterval) { std::string json = R"EOF( { - "listeners": [], + "stats_flush_interval": "0.500s", - "stats_flush_interval_ms": 500, - - "cluster_manager": { - "clusters": [] - }, - - "admin": {"access_log_path": "/dev/null", "address": "tcp://1.2.3.4:5678"} + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "1.2.3.4", + "port_value": 5678 + } + } + } } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap = TestUtility::parseBootstrapFromJson(json); + envoy::config::bootstrap::v2::Bootstrap bootstrap; + MessageUtil::loadFromJson(json, bootstrap); MainImpl config; config.initialize(bootstrap, server_, cluster_manager_factory_); @@ -101,26 +103,40 @@ TEST_F(ConfigurationImplTest, CustomStatsFlushInterval) { TEST_F(ConfigurationImplTest, SetUpstreamClusterPerConnectionBufferLimit) { const std::string json = R"EOF( { - "listeners" : [], - "cluster_manager": { + "static_resources": { + "listeners" : [], "clusters": [ { "name": "test_cluster", "type": "static", - "connect_timeout_ms": 1, + "connect_timeout": "0.01s", "per_connection_buffer_limit_bytes": 8192, - "lb_type": "round_robin", + "lb_policy": "round_robin", "hosts": [ - { "url" : "tcp://127.0.0.1:9999" } + { + "socket_address" : { + "address": "127.0.0.1", + "port_value": 9999 + } + } ] } ] }, - "admin": {"access_log_path": "/dev/null", "address": "tcp://1.2.3.4:5678"} + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "1.2.3.4", + "port_value": 5678 + } + } + } } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap = TestUtility::parseBootstrapFromJson(json); + envoy::config::bootstrap::v2::Bootstrap bootstrap; + MessageUtil::loadFromJson(json, bootstrap); MainImpl config; config.initialize(bootstrap, server_, cluster_manager_factory_); @@ -138,20 +154,34 @@ TEST_F(ConfigurationImplTest, SetUpstreamClusterPerConnectionBufferLimit) { TEST_F(ConfigurationImplTest, NullTracerSetWhenTracingConfigurationAbsent) { std::string json = R"EOF( { - "listeners" : [ - { - "address": "tcp://127.0.0.1:1234", - "filters": [] - } - ], - "cluster_manager": { + "static_resources": { + "listeners" : [ + { + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 1234 + } + }, + "filter_chains": [] + } + ], "clusters": [] }, - "admin": {"access_log_path": "/dev/null", "address": "tcp://1.2.3.4:5678"} + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "1.2.3.4", + "port_value": 5678 + } + } + } } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap = TestUtility::parseBootstrapFromJson(json); + envoy::config::bootstrap::v2::Bootstrap bootstrap; + MessageUtil::loadFromJson(json, bootstrap); server_.local_info_.node_.set_cluster(""); MainImpl config; @@ -163,31 +193,35 @@ TEST_F(ConfigurationImplTest, NullTracerSetWhenTracingConfigurationAbsent) { TEST_F(ConfigurationImplTest, NullTracerSetWhenHttpKeyAbsentFromTracerConfiguration) { std::string json = R"EOF( { - "listeners" : [ - { - "address": "tcp://127.0.0.1:1234", - "filters": [] - } - ], - "cluster_manager": { + "static_resources": { + "listeners" : [ + { + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 1234 + } + }, + "filter_chains": [] + } + ], "clusters": [] }, - "tracing": { - "not_http": { - "driver": { - "type": "lightstep", - "config": { - "collector_cluster": "cluster_0", - "access_token_file": "/etc/envoy/envoy.cfg" - } + "tracing": {}, + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "1.2.3.4", + "port_value": 5678 } } - }, - "admin": {"access_log_path": "/dev/null", "address": "tcp://1.2.3.4:5678"} + } } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap = TestUtility::parseBootstrapFromJson(json); + envoy::config::bootstrap::v2::Bootstrap bootstrap; + MessageUtil::loadFromJson(json, bootstrap); server_.local_info_.node_.set_cluster(""); MainImpl config; @@ -199,32 +233,44 @@ TEST_F(ConfigurationImplTest, NullTracerSetWhenHttpKeyAbsentFromTracerConfigurat TEST_F(ConfigurationImplTest, ConfigurationFailsWhenInvalidTracerSpecified) { std::string json = R"EOF( { - "listeners" : [ - { - "address": "tcp://127.0.0.1:1234", - "filters": [] - } - ], - "cluster_manager": { + "static_resources": { + "listeners" : [ + { + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 1234 + } + }, + "filter_chains": [] + } + ], "clusters": [] }, "tracing": { "http": { - "driver": { - "type": "lightstep", - "config": { - "collector_cluster": "cluster_0", - "access_token_file": "/etc/envoy/envoy.cfg" - } + "name": "invalid", + "typed_config": { + "@type": "type.googleapis.com/envoy.config.trace.v2.LightstepConfig", + "collector_cluster": "cluster_0", + "access_token_file": "/etc/envoy/envoy.cfg" } } }, - "admin": {"access_log_path": "/dev/null", "address": "tcp://1.2.3.4:5678"} + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "1.2.3.4", + "port_value": 5678 + } + } + } } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap = TestUtility::parseBootstrapFromJson(json); - bootstrap.mutable_tracing()->mutable_http()->set_name("invalid"); + envoy::config::bootstrap::v2::Bootstrap bootstrap; + MessageUtil::loadFromJson(json, bootstrap); MainImpl config; EXPECT_THROW_WITH_MESSAGE(config.initialize(bootstrap, server_, cluster_manager_factory_), EnvoyException, @@ -267,17 +313,24 @@ TEST_F(ConfigurationImplTest, ProtoSpecifiedStatsSink) { TEST_F(ConfigurationImplTest, StatsSinkWithInvalidName) { std::string json = R"EOF( { - "listeners": [], - - "cluster_manager": { + "static_resources": { + "listeners": [], "clusters": [] }, - - "admin": {"access_log_path": "/dev/null", "address": "tcp://1.2.3.4:5678"} + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "1.2.3.4", + "port_value": 5678 + } + } + } } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap = TestUtility::parseBootstrapFromJson(json); + envoy::config::bootstrap::v2::Bootstrap bootstrap; + MessageUtil::loadFromJson(json, bootstrap); envoy::config::metrics::v2::StatsSink& sink = *bootstrap.mutable_stats_sinks()->Add(); sink.set_name("envoy.invalid"); @@ -293,17 +346,24 @@ TEST_F(ConfigurationImplTest, StatsSinkWithInvalidName) { TEST_F(ConfigurationImplTest, StatsSinkWithNoName) { std::string json = R"EOF( { - "listeners": [], - - "cluster_manager": { + "static_resources": { + "listeners": [], "clusters": [] }, - - "admin": {"access_log_path": "/dev/null", "address": "tcp://1.2.3.4:5678"} + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "1.2.3.4", + "port_value": 5678 + } + } + } } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap = TestUtility::parseBootstrapFromJson(json); + envoy::config::bootstrap::v2::Bootstrap bootstrap; + MessageUtil::loadFromJson(json, bootstrap); auto& sink = *bootstrap.mutable_stats_sinks()->Add(); auto& field_map = *sink.mutable_config()->mutable_fields(); diff --git a/test/test_common/BUILD b/test/test_common/BUILD index 3a5a823c5d54f..a25726bfc7ab8 100644 --- a/test/test_common/BUILD +++ b/test/test_common/BUILD @@ -101,7 +101,7 @@ envoy_cc_test_library( "//source/common/common:empty_string", "//source/common/common:thread_lib", "//source/common/common:utility_lib", - "//source/common/config:bootstrap_json_lib", + "//source/common/config:resources_lib", "//source/common/filesystem:directory_lib", "//source/common/filesystem:filesystem_lib", "//source/common/http:header_map_lib", diff --git a/test/test_common/utility.cc b/test/test_common/utility.cc index 67d0a1d715ee3..f8bfb6c667cbf 100644 --- a/test/test_common/utility.cc +++ b/test/test_common/utility.cc @@ -34,7 +34,6 @@ #include "common/common/stack_array.h" #include "common/common/thread_impl.h" #include "common/common/utility.h" -#include "common/config/bootstrap_json.h" #include "common/config/resources.h" #include "common/json/json_loader.h" #include "common/network/address_impl.h" @@ -179,14 +178,6 @@ std::vector TestUtility::listFiles(const std::string& path, bool re return file_names; } -envoy::config::bootstrap::v2::Bootstrap -TestUtility::parseBootstrapFromJson(const std::string& json_string) { - envoy::config::bootstrap::v2::Bootstrap bootstrap; - auto json_object_ptr = Json::Factory::loadFromString(json_string); - Config::BootstrapJson::translateBootstrap(*json_object_ptr, bootstrap); - return bootstrap; -} - std::string TestUtility::xdsResourceName(const ProtobufWkt::Any& resource) { if (resource.type_url() == Config::TypeUrl::get().Listener) { return MessageUtil::anyConvert(resource).name(); diff --git a/test/test_common/utility.h b/test/test_common/utility.h index 9563ec296faca..73ea2d507e31a 100644 --- a/test/test_common/utility.h +++ b/test/test_common/utility.h @@ -295,14 +295,6 @@ class TestUtility { return AssertionSuccess(); } - /** - * Parse bootstrap config from v1 JSON static config string. - * @param json_string source v1 JSON static config string. - * @return envoy::config::bootstrap::v2::Bootstrap. - */ - static envoy::config::bootstrap::v2::Bootstrap - parseBootstrapFromJson(const std::string& json_string); - /** * Returns the closest thing to a sensible "name" field for the given xDS resource. * @param resource the resource to extract the name of. diff --git a/tools/testdata/check_format/header_order.cc b/tools/testdata/check_format/header_order.cc index b66c79c3ccd53..da6b58d7c8078 100644 --- a/tools/testdata/check_format/header_order.cc +++ b/tools/testdata/check_format/header_order.cc @@ -3,7 +3,6 @@ #include "common/api/os_sys_calls_impl.h" #include "common/common/utility.h" #include "common/common/version.h" -#include "common/config/bootstrap_json.h" #include "common/config/resources.h" #include "common/config/utility.h" #include "common/local_info/local_info_impl.h" diff --git a/tools/testdata/check_format/header_order.cc.gold b/tools/testdata/check_format/header_order.cc.gold index 518fb01cfd203..5bb3823b5be00 100644 --- a/tools/testdata/check_format/header_order.cc.gold +++ b/tools/testdata/check_format/header_order.cc.gold @@ -19,7 +19,6 @@ #include "common/api/os_sys_calls_impl.h" #include "common/common/utility.h" #include "common/common/version.h" -#include "common/config/bootstrap_json.h" #include "common/config/resources.h" #include "common/config/utility.h" #include "common/local_info/local_info_impl.h" From 484bd700811bf5f0eadb7c30e58434102a273e1a Mon Sep 17 00:00:00 2001 From: Derek Argueta Date: Fri, 24 May 2019 02:04:02 -0700 Subject: [PATCH 05/10] more cleanup Signed-off-by: Derek Argueta --- source/common/config/BUILD | 18 --- source/common/config/lds_json.cc | 62 -------- source/common/config/lds_json.h | 22 --- source/common/config/utility.cc | 17 -- source/common/config/utility.h | 16 -- source/common/json/config_schemas.cc | 146 ------------------ source/common/json/config_schemas.h | 7 - source/server/BUILD | 1 - source/server/configuration_impl.cc | 1 - test/common/config/BUILD | 1 - test/common/config/utility_test.cc | 1 - .../upstream/cluster_manager_impl_test.cc | 32 ++-- test/common/upstream/utility.h | 9 -- 13 files changed, 16 insertions(+), 317 deletions(-) delete mode 100644 source/common/config/lds_json.cc delete mode 100644 source/common/config/lds_json.h diff --git a/source/common/config/BUILD b/source/common/config/BUILD index 9b5c61d184215..fa9513ef4e1cd 100644 --- a/source/common/config/BUILD +++ b/source/common/config/BUILD @@ -243,24 +243,6 @@ envoy_cc_library( ], ) -envoy_cc_library( - name = "lds_json_lib", - srcs = ["lds_json.cc"], - hdrs = ["lds_json.h"], - deps = [ - ":address_json_lib", - ":json_utility_lib", - ":tls_context_json_lib", - ":utility_lib", - "//include/envoy/json:json_object_interface", - "//source/common/common:assert_lib", - "//source/common/json:config_schemas_lib", - "//source/common/network:utility_lib", - "//source/extensions/filters/network:well_known_names", - "@envoy_api//envoy/api/v2:lds_cc", - ], -) - envoy_cc_library( name = "metadata_lib", srcs = ["metadata.cc"], diff --git a/source/common/config/lds_json.cc b/source/common/config/lds_json.cc deleted file mode 100644 index a8bfab61d99b5..0000000000000 --- a/source/common/config/lds_json.cc +++ /dev/null @@ -1,62 +0,0 @@ -#include "common/config/lds_json.h" - -#include "common/common/assert.h" -#include "common/config/address_json.h" -#include "common/config/json_utility.h" -#include "common/config/tls_context_json.h" -#include "common/config/utility.h" -#include "common/json/config_schemas.h" -#include "common/network/utility.h" -#include "common/protobuf/utility.h" - -#include "extensions/filters/network/well_known_names.h" - -namespace Envoy { -namespace Config { - -void LdsJson::translateListener(const Json::Object& json_listener, - envoy::api::v2::Listener& listener) { - json_listener.validateSchema(Json::Schema::LISTENER_SCHEMA); - - const std::string name = json_listener.getString("name", ""); - listener.set_name(name); - - AddressJson::translateAddress(json_listener.getString("address"), true, true, - *listener.mutable_address()); - - auto* filter_chain = listener.mutable_filter_chains()->Add(); - if (json_listener.hasObject("ssl_context")) { - TlsContextJson::translateDownstreamTlsContext(*json_listener.getObject("ssl_context"), - *filter_chain->mutable_tls_context()); - } - - for (const auto& json_filter : json_listener.getObjectArray("filters", true)) { - auto* filter = filter_chain->mutable_filters()->Add(); - - // Translate v1 name to v2 name. - filter->set_name(Extensions::NetworkFilters::NetworkFilterNames::get().v1_converter_.getV2Name( - json_filter->getString("name"))); - - const std::string json_config = - "{\"deprecated_v1\": true, \"value\": " + json_filter->getObject("config")->asJsonString() + - "}"; - // JSON schema has already validated that this is a valid JSON object. - MessageUtil::loadFromJson(json_config, *filter->mutable_config()); - } - - const std::string drain_type = json_listener.getString("drain_type", "default"); - if (drain_type == "modify_only") { - listener.set_drain_type(envoy::api::v2::Listener_DrainType_MODIFY_ONLY); - } else { - ASSERT(drain_type == "default"); - } - - JSON_UTIL_SET_BOOL(json_listener, *filter_chain, use_proxy_proto); - JSON_UTIL_SET_BOOL(json_listener, listener, use_original_dst); - JSON_UTIL_SET_BOOL(json_listener, *listener.mutable_deprecated_v1(), bind_to_port); - JSON_UTIL_SET_INTEGER(json_listener, listener, per_connection_buffer_limit_bytes); - JSON_UTIL_SET_BOOL(json_listener, listener, transparent); -} - -} // namespace Config -} // namespace Envoy diff --git a/source/common/config/lds_json.h b/source/common/config/lds_json.h deleted file mode 100644 index 4848192acf570..0000000000000 --- a/source/common/config/lds_json.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "envoy/api/v2/lds.pb.h" -#include "envoy/api/v2/listener/listener.pb.h" -#include "envoy/json/json_object.h" - -namespace Envoy { -namespace Config { - -class LdsJson { -public: - /** - * Translate a v1 JSON Listener to v2 envoy::api::v2::Listener. - * @param json_listener source v1 JSON Listener object. - * @param listener destination v2 envoy::api::v2::Listener. - */ - static void translateListener(const Json::Object& json_listener, - envoy::api::v2::Listener& listener); -}; - -} // namespace Config -} // namespace Envoy diff --git a/source/common/config/utility.cc b/source/common/config/utility.cc index 6ebc2d43d3ef1..42effcf43de4b 100644 --- a/source/common/config/utility.cc +++ b/source/common/config/utility.cc @@ -184,14 +184,6 @@ Utility::configSourceInitialFetchTimeout(const envoy::api::v2::core::ConfigSourc PROTOBUF_GET_MS_OR_DEFAULT(config_source, initial_fetch_timeout, 0)); } -void Utility::translateCdsConfig(const Json::Object& json_config, - envoy::api::v2::core::ConfigSource& cds_config) { - translateApiConfigSource(json_config.getObject("cluster")->getString("name"), - json_config.getInteger("refresh_delay_ms", 30000), - json_config.getString("api_type", ApiType::get().UnsupportedRestLegacy), - *cds_config.mutable_api_config_source()); -} - void Utility::translateRdsConfig( const Json::Object& json_rds, envoy::config::filter::network::http_connection_manager::v2::Rds& rds) { @@ -206,15 +198,6 @@ void Utility::translateRdsConfig( *rds.mutable_config_source()->mutable_api_config_source()); } -void Utility::translateLdsConfig(const Json::Object& json_lds, - envoy::api::v2::core::ConfigSource& lds_config) { - json_lds.validateSchema(Json::Schema::LDS_CONFIG_SCHEMA); - translateApiConfigSource(json_lds.getString("cluster"), - json_lds.getInteger("refresh_delay_ms", 30000), - json_lds.getString("api_type", ApiType::get().UnsupportedRestLegacy), - *lds_config.mutable_api_config_source()); -} - RateLimitSettings Utility::parseRateLimitSettings(const envoy::api::v2::core::ApiConfigSource& api_config_source) { RateLimitSettings rate_limit_settings; diff --git a/source/common/config/utility.h b/source/common/config/utility.h index 4e4861994d456..631af554b41c3 100644 --- a/source/common/config/utility.h +++ b/source/common/config/utility.h @@ -187,14 +187,6 @@ class Utility { const Upstream::ClusterManager::ClusterInfoMap& clusters, const envoy::api::v2::core::ApiConfigSource& api_config_source); - /** - * Convert a v1 CDS JSON config to v2 CDS envoy::api::v2::core::ConfigSource. - * @param json_config source v1 CDS JSON config. - * @param cds_config destination v2 CDS envoy::api::v2::core::ConfigSource. - */ - static void translateCdsConfig(const Json::Object& json_config, - envoy::api::v2::core::ConfigSource& cds_config); - /** * Convert a v1 RDS JSON config to v2 RDS * envoy::config::filter::network::http_connection_manager::v2::Rds. @@ -205,14 +197,6 @@ class Utility { translateRdsConfig(const Json::Object& json_rds, envoy::config::filter::network::http_connection_manager::v2::Rds& rds); - /** - * Convert a v1 LDS JSON config to v2 LDS envoy::api::v2::core::ConfigSource. - * @param json_lds source v1 LDS JSON config. - * @param lds_config destination v2 LDS envoy::api::v2::core::ConfigSource. - */ - static void translateLdsConfig(const Json::Object& json_lds, - envoy::api::v2::core::ConfigSource& lds_config); - /** * Parses RateLimit configuration from envoy::api::v2::core::ApiConfigSource to RateLimitSettings. * @param api_config_source ApiConfigSource. diff --git a/source/common/json/config_schemas.cc b/source/common/json/config_schemas.cc index 8e2977b73e2ad..906e12977022b 100644 --- a/source/common/json/config_schemas.cc +++ b/source/common/json/config_schemas.cc @@ -1127,101 +1127,6 @@ const std::string Json::Schema::ROUTER_HTTP_FILTER_SCHEMA(R"EOF( } )EOF"); -const std::string Json::Schema::CLUSTER_MANAGER_SCHEMA(R"EOF( - { - "$schema": "http://json-schema.org/schema#", - "definitions" : { - "sds" : { - "type" : "object", - "properties" : { - "cluster" : {"type" : "object"}, - "refresh_delay_ms" : { - "type" : "integer", - "minimum" : 0, - "exclusiveMinimum" : true - } - }, - "required" : ["cluster", "refresh_delay_ms"], - "additionalProperties" : false - }, - "cds" : { - "type" : "object", - "properties" : { - "cluster" : {"type" : "object"}, - "refresh_delay_ms" : { - "type" : "integer", - "minimum" : 0, - "exclusiveMinimum" : true - }, - "api_type" : { - "type" : "string", - "enum" : ["REST", "GRPC"] - } - }, - "required" : ["cluster"], - "additionalProperties" : false - } - }, - "type" : "object", - "properties" : { - "clusters" : { - "type" : "array", - "items" : {"type": "object"} - }, - "sds" : {"$ref" : "#/definitions/sds"}, - "local_cluster_name" : {"type" : "string"}, - "outlier_detection" : { - "type" : "object", - "properties" : { - "event_log_path" : {"type" : "string"} - }, - "additionalProperties" : false - }, - "cds" : {"$ref" : "#/definitions/cds"} - }, - "required" : ["clusters"], - "additionalProperties" : false - } - )EOF"); - -const std::string Json::Schema::LDS_SCHEMA(R"EOF( - { - "$schema": "http://json-schema.org/schema#", - "type" : "object", - "properties" : { - "listeners" : { - "type" : "array", - "items" : {"type" : "object"} - } - }, - "required" : ["listeners"], - "additionalProperties" : false - } - )EOF"); - -const std::string Json::Schema::LDS_CONFIG_SCHEMA(R"EOF( - { - "$schema": "http://json-schema.org/schema#", - "type" : "object", - "properties" : { - "api_type" : { - "type" : "string", - "enum" : ["REST", "GRPC"] - }, - "cluster" : { - "type" : "string" - }, - "refresh_delay_ms" : { - "type" : "integer", - "minimum" : 0, - "exclusiveMinimum" : true - } - }, - "required" : ["cluster"], - "additionalProperties" : false - } - )EOF"); - const std::string Json::Schema::TOP_LEVEL_CONFIG_SCHEMA(R"EOF( { "$schema": "http://json-schema.org/schema#", @@ -1620,55 +1525,4 @@ const std::string Json::Schema::CLUSTER_SCHEMA(R"EOF( "additionalProperties" : false } )EOF"); - -const std::string Json::Schema::CDS_SCHEMA(R"EOF( - { - "$schema": "http://json-schema.org/schema#", - "type" : "object", - "properties" : { - "clusters" : { - "type" : "array", - "items" : {"type" : "object"} - } - }, - "required" : ["clusters"], - "additionalProperties" : false - } - )EOF"); - -const std::string Json::Schema::SDS_SCHEMA(R"EOF( - { - "$schema": "http://json-schema.org/schema#", - "definitions" : { - "host" : { - "type" : "object", - "properties" : { - "ip_address" : {"type" : "string"}, - "port" : {"type" : "integer"}, - "tags" : { - "type" : "object", - "properties" : { - "az" : {"type" : "string"}, - "canary" : {"type" : "boolean"}, - "load_balancing_weight": { - "type" : "integer", - "minimum" : 1, - "maximum" : 100 - } - } - } - }, - "required" : ["ip_address", "port"] - } - }, - "type" : "object", - "properties" : { - "hosts" : { - "type" : "array", - "items" : {"$ref" : "#/definitions/host"} - } - }, - "required" : ["hosts"] - } - )EOF"); } // namespace Envoy diff --git a/source/common/json/config_schemas.h b/source/common/json/config_schemas.h index df0259685fd65..58e69d54466c1 100644 --- a/source/common/json/config_schemas.h +++ b/source/common/json/config_schemas.h @@ -15,8 +15,6 @@ class Schema { // Listener Schema static const std::string LISTENER_SCHEMA; - static const std::string LDS_SCHEMA; - static const std::string LDS_CONFIG_SCHEMA; // Network Filter Schemas static const std::string CLIENT_SSL_NETWORK_FILTER_SCHEMA; @@ -46,14 +44,9 @@ class Schema { static const std::string SQUASH_HTTP_FILTER_SCHEMA; // Cluster Schemas - static const std::string CLUSTER_MANAGER_SCHEMA; static const std::string CLUSTER_HEALTH_CHECK_SCHEMA; static const std::string CLUSTER_SCHEMA; - // Discovery Service Schemas - static const std::string CDS_SCHEMA; - static const std::string SDS_SCHEMA; - // Redis Schemas static const std::string REDIS_CONN_POOL_SCHEMA; }; diff --git a/source/server/BUILD b/source/server/BUILD index a41b2f3852da8..a6569d44ca554 100644 --- a/source/server/BUILD +++ b/source/server/BUILD @@ -38,7 +38,6 @@ envoy_cc_library( "//source/common/common:assert_lib", "//source/common/common:minimal_logger_lib", "//source/common/common:utility_lib", - "//source/common/config:lds_json_lib", "//source/common/config:utility_lib", "//source/common/network:resolver_lib", "//source/common/network:utility_lib", diff --git a/source/server/configuration_impl.cc b/source/server/configuration_impl.cc index 96fd283011a6a..2145b65a2d3ec 100644 --- a/source/server/configuration_impl.cc +++ b/source/server/configuration_impl.cc @@ -15,7 +15,6 @@ #include "common/common/assert.h" #include "common/common/utility.h" -#include "common/config/lds_json.h" #include "common/config/utility.h" #include "common/protobuf/utility.h" #include "common/tracing/http_tracer_impl.h" diff --git a/test/common/config/BUILD b/test/common/config/BUILD index 4f902249ef071..e913c8d035514 100644 --- a/test/common/config/BUILD +++ b/test/common/config/BUILD @@ -247,7 +247,6 @@ envoy_cc_test( srcs = ["utility_test.cc"], deps = [ "//source/common/config:cds_json_lib", - "//source/common/config:lds_json_lib", "//source/common/config:rds_json_lib", "//source/common/config:utility_lib", "//source/common/config:well_known_names", diff --git a/test/common/config/utility_test.cc b/test/common/config/utility_test.cc index c576c8f9fd25f..947e14dfbf91b 100644 --- a/test/common/config/utility_test.cc +++ b/test/common/config/utility_test.cc @@ -3,7 +3,6 @@ #include "common/common/fmt.h" #include "common/config/cds_json.h" -#include "common/config/lds_json.h" #include "common/config/rds_json.h" #include "common/config/utility.h" #include "common/config/well_known_names.h" diff --git a/test/common/upstream/cluster_manager_impl_test.cc b/test/common/upstream/cluster_manager_impl_test.cc index 9fdf5f549c4b1..744d98748778a 100644 --- a/test/common/upstream/cluster_manager_impl_test.cc +++ b/test/common/upstream/cluster_manager_impl_test.cc @@ -284,7 +284,7 @@ class ClusterManagerImplTest : public testing::Test { Http::ContextImpl http_context_; }; -envoy::config::bootstrap::v2::Bootstrap parseV2BootstrapFromJson(const std::string& json_string) { +envoy::config::bootstrap::v2::Bootstrap parseBootstrapFromV2Json(const std::string& json_string) { envoy::config::bootstrap::v2::Bootstrap bootstrap; MessageUtil::loadFromJson(json_string, bootstrap); return bootstrap; @@ -382,7 +382,7 @@ TEST_F(ClusterManagerImplTest, OutlierEventLog) { )EOF"; EXPECT_CALL(log_manager_, createAccessLog("foo")); - create(parseV2BootstrapFromJson(json)); + create(parseBootstrapFromV2Json(json)); } TEST_F(ClusterManagerImplTest, NoSdsConfig) { @@ -413,7 +413,7 @@ TEST_F(ClusterManagerImplTest, UnknownClusterType) { } )EOF"; - EXPECT_THROW_WITH_REGEX(create(parseV2BootstrapFromJson(json)), EnvoyException, "invalid value \"foo\" for type TYPE_ENUM"); + EXPECT_THROW_WITH_REGEX(create(parseBootstrapFromV2Json(json)), EnvoyException, "invalid value \"foo\" for type TYPE_ENUM"); } TEST_F(ClusterManagerImplTest, LocalClusterNotDefined) { @@ -430,7 +430,7 @@ TEST_F(ClusterManagerImplTest, LocalClusterNotDefined) { )EOF", clustersJson({defaultStaticClusterJson("cluster_1"), defaultStaticClusterJson("cluster_2")})); - EXPECT_THROW(create(parseV2BootstrapFromJson(json)), EnvoyException); + EXPECT_THROW(create(parseBootstrapFromV2Json(json)), EnvoyException); } TEST_F(ClusterManagerImplTest, BadClusterManagerConfig) { @@ -448,7 +448,7 @@ TEST_F(ClusterManagerImplTest, BadClusterManagerConfig) { } )EOF"; - EXPECT_THROW_WITH_REGEX(create(parseV2BootstrapFromJson(json)), EnvoyException, "fake_property: Cannot find field"); + EXPECT_THROW_WITH_REGEX(create(parseBootstrapFromV2Json(json)), EnvoyException, "fake_property: Cannot find field"); } TEST_F(ClusterManagerImplTest, LocalClusterDefined) { @@ -466,7 +466,7 @@ TEST_F(ClusterManagerImplTest, LocalClusterDefined) { clustersJson({defaultStaticClusterJson("cluster_1"), defaultStaticClusterJson("cluster_2"), defaultStaticClusterJson("new_cluster")})); - create(parseV2BootstrapFromJson(json)); + create(parseBootstrapFromV2Json(json)); checkStats(3 /*added*/, 0 /*modified*/, 0 /*removed*/, 3 /*active*/, 0 /*warming*/); factory_.tls_.shutdownThread(); @@ -475,7 +475,7 @@ TEST_F(ClusterManagerImplTest, LocalClusterDefined) { TEST_F(ClusterManagerImplTest, DuplicateCluster) { const std::string json = fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("cluster_1"),defaultStaticClusterJson("cluster_1")})); - const auto config = parseV2BootstrapFromJson(json); + const auto config = parseBootstrapFromV2Json(json); EXPECT_THROW(create(config), EnvoyException); } @@ -684,7 +684,7 @@ class ClusterManagerImplThreadAwareLbTest : public ClusterManagerImplTest { InSequence s; EXPECT_CALL(factory_, clusterFromProto_(_, _, _, _)).WillOnce(Return(cluster1)); ON_CALL(*cluster1, initializePhase()).WillByDefault(Return(Cluster::InitializePhase::Primary)); - create(parseV2BootstrapFromJson(json)); + create(parseBootstrapFromV2Json(json)); EXPECT_EQ(nullptr, cluster_manager_->get("cluster_0")->loadBalancer().chooseHost(nullptr)); @@ -777,7 +777,7 @@ TEST_F(ClusterManagerImplTest, UnknownCluster) { const std::string json = fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("cluster_1")})); - create(parseV2BootstrapFromJson(json)); + create(parseBootstrapFromV2Json(json)); EXPECT_EQ(nullptr, cluster_manager_->get("hello")); EXPECT_EQ(nullptr, cluster_manager_->httpConnPoolForCluster("hello", ResourcePriority::Default, Http::Protocol::Http2, nullptr)); @@ -829,7 +829,7 @@ TEST_F(ClusterManagerImplTest, ShutdownOrder) { const std::string json = fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("cluster_1")})); - create(parseV2BootstrapFromJson(json)); + create(parseBootstrapFromV2Json(json)); Cluster& cluster = cluster_manager_->activeClusters().begin()->second; EXPECT_EQ("cluster_1", cluster.info()->name()); EXPECT_EQ(cluster.info(), cluster_manager_->get("cluster_1")->info()); @@ -893,7 +893,7 @@ TEST_F(ClusterManagerImplTest, InitializeOrder) { EXPECT_CALL(*cds_cluster, initialize(_)); EXPECT_CALL(*cluster1, initialize(_)); - create(parseV2BootstrapFromJson(json)); + create(parseBootstrapFromV2Json(json)); ReadyWatcher initialized; cluster_manager_->setInitializedCb([&]() -> void { initialized.ready(); }); @@ -1051,7 +1051,7 @@ TEST_F(ClusterManagerImplTest, DynamicRemoveWithLocalCluster) { ON_CALL(*foo, initializePhase()).WillByDefault(Return(Cluster::InitializePhase::Primary)); EXPECT_CALL(*foo, initialize(_)); - create(parseV2BootstrapFromJson(json)); + create(parseBootstrapFromV2Json(json)); foo->initialize_callback_(); // Now add a dynamic cluster. This cluster will have a member update callback from the local @@ -1268,7 +1268,7 @@ TEST_F(ClusterManagerImplTest, addOrUpdateClusterStaticExists) { ON_CALL(*cluster1, initializePhase()).WillByDefault(Return(Cluster::InitializePhase::Primary)); EXPECT_CALL(*cluster1, initialize(_)); - create(parseV2BootstrapFromJson(json)); + create(parseBootstrapFromV2Json(json)); ReadyWatcher initialized; cluster_manager_->setInitializedCb([&]() -> void { initialized.ready(); }); @@ -1297,7 +1297,7 @@ TEST_F(ClusterManagerImplTest, HostsPostedToTlsCluster) { ON_CALL(*cluster1, initializePhase()).WillByDefault(Return(Cluster::InitializePhase::Primary)); EXPECT_CALL(*cluster1, initialize(_)); - create(parseV2BootstrapFromJson(json)); + create(parseBootstrapFromV2Json(json)); ReadyWatcher initialized; cluster_manager_->setInitializedCb([&]() -> void { initialized.ready(); }); @@ -1364,7 +1364,7 @@ TEST_F(ClusterManagerImplTest, CloseHttpConnectionsOnHealthFailure) { // Test inline init. initialize_callback(); })); - create(parseV2BootstrapFromJson(json)); + create(parseBootstrapFromV2Json(json)); EXPECT_CALL(factory_, allocateConnPool_(_, _)).WillOnce(Return(cp1)); cluster_manager_->httpConnPoolForCluster("some_cluster", ResourcePriority::Default, @@ -1426,7 +1426,7 @@ TEST_F(ClusterManagerImplTest, CloseTcpConnectionPoolsOnHealthFailure) { // Test inline init. initialize_callback(); })); - create(parseV2BootstrapFromJson(json)); + create(parseBootstrapFromV2Json(json)); EXPECT_CALL(factory_, allocateTcpConnPool_(_)).WillOnce(Return(cp1)); cluster_manager_->tcpConnPoolForCluster("some_cluster", ResourcePriority::Default, nullptr, diff --git a/test/common/upstream/utility.h b/test/common/upstream/utility.h index 32e43123933ce..93818eaa9302d 100644 --- a/test/common/upstream/utility.h +++ b/test/common/upstream/utility.h @@ -71,15 +71,6 @@ inline envoy::api::v2::Cluster defaultStaticCluster(const std::string& name) { return parseClusterFromJson(defaultStaticClusterJsonV1(name)); } -inline envoy::api::v2::Cluster -parseSdsClusterFromJson(const std::string& json_string, - const envoy::api::v2::core::ConfigSource eds_config) { - envoy::api::v2::Cluster cluster; - auto json_object_ptr = Json::Factory::loadFromString(json_string); - Config::CdsJson::translateCluster(*json_object_ptr, eds_config, cluster); - return cluster; -} - inline HostSharedPtr makeTestHost(ClusterInfoConstSharedPtr cluster, const std::string& url, uint32_t weight = 1) { return HostSharedPtr{new HostImpl( From 53859873fcc34112f887162add29ec4e62e50b53 Mon Sep 17 00:00:00 2001 From: Derek Argueta Date: Fri, 24 May 2019 02:23:32 -0700 Subject: [PATCH 06/10] re-use Upstream::parseBootstrapFromV2Json Signed-off-by: Derek Argueta --- .../upstream/cluster_manager_impl_test.cc | 14 +++------- test/common/upstream/utility.h | 27 +++++-------------- test/server/BUILD | 1 + test/server/configuration_impl_test.cc | 25 +++++++---------- 4 files changed, 20 insertions(+), 47 deletions(-) diff --git a/test/common/upstream/cluster_manager_impl_test.cc b/test/common/upstream/cluster_manager_impl_test.cc index 744d98748778a..456ef3992606f 100644 --- a/test/common/upstream/cluster_manager_impl_test.cc +++ b/test/common/upstream/cluster_manager_impl_test.cc @@ -194,6 +194,10 @@ envoy::config::bootstrap::v2::Bootstrap parseBootstrapFromV2Yaml(const std::stri return bootstrap; } +std::string clustersJson(const std::vector& clusters) { + return fmt::sprintf("\"clusters\": [%s]", StringUtil::join(clusters, ",")); +} + const ClusterManager::ClusterWarmingCallback dummyWarmingCb = [](auto, auto) {}; class ClusterManagerImplTest : public testing::Test { @@ -284,12 +288,6 @@ class ClusterManagerImplTest : public testing::Test { Http::ContextImpl http_context_; }; -envoy::config::bootstrap::v2::Bootstrap parseBootstrapFromV2Json(const std::string& json_string) { - envoy::config::bootstrap::v2::Bootstrap bootstrap; - MessageUtil::loadFromJson(json_string, bootstrap); - return bootstrap; -} - envoy::config::bootstrap::v2::Bootstrap defaultConfig() { const std::string yaml = R"EOF( static_resources: @@ -977,7 +975,6 @@ version_info: version3 - socket_address: address: "127.0.0.1" port_value: 11001 - dns_lookup_family: V4_ONLY last_updated: seconds: 1234567891 nanos: 234000000 @@ -990,7 +987,6 @@ version_info: version3 - socket_address: address: "127.0.0.1" port_value: 11001 - dns_lookup_family: V4_ONLY last_updated: seconds: 1234567891 nanos: 234000000 @@ -1003,7 +999,6 @@ version_info: version3 - socket_address: address: "127.0.0.1" port_value: 11001 - dns_lookup_family: V4_ONLY last_updated: seconds: 1234567891 nanos: 234000000 @@ -1114,7 +1109,6 @@ TEST_F(ClusterManagerImplTest, RemoveWarmingCluster) { - socket_address: address: "127.0.0.1" port_value: 11001 - dns_lookup_family: V4_ONLY last_updated: seconds: 1234567891 nanos: 234000000 diff --git a/test/common/upstream/utility.h b/test/common/upstream/utility.h index 93818eaa9302d..e97ad5a560963 100644 --- a/test/common/upstream/utility.h +++ b/test/common/upstream/utility.h @@ -14,21 +14,6 @@ namespace Envoy { namespace Upstream { namespace { -inline std::string defaultStaticClusterJsonV1(const std::string& name) { - return fmt::sprintf(R"EOF( - { - "name": "%s", - "connect_timeout_ms": 250, - "type": "static", - "lb_type": "round_robin", - "hosts": [ - {"url": "tcp://127.0.0.1:11001"} - ] - } - )EOF", - name); -} - inline std::string defaultStaticClusterJson(const std::string& name) { return fmt::sprintf(R"EOF( { @@ -49,15 +34,15 @@ inline std::string defaultStaticClusterJson(const std::string& name) { name); } -inline std::string clustersJson(const std::vector& clusters) { - return fmt::sprintf("\"clusters\": [%s]", StringUtil::join(clusters, ",")); +inline envoy::config::bootstrap::v2::Bootstrap parseBootstrapFromV2Json(const std::string& json_string) { + envoy::config::bootstrap::v2::Bootstrap bootstrap; + MessageUtil::loadFromJson(json_string, bootstrap); + return bootstrap; } inline envoy::api::v2::Cluster parseClusterFromJson(const std::string& json_string) { envoy::api::v2::Cluster cluster; - auto json_object_ptr = Json::Factory::loadFromString(json_string); - Config::CdsJson::translateCluster(*json_object_ptr, - absl::optional(), cluster); + MessageUtil::loadFromJson(json_string, cluster); return cluster; } @@ -68,7 +53,7 @@ inline envoy::api::v2::Cluster parseClusterFromV2Yaml(const std::string& yaml) { } inline envoy::api::v2::Cluster defaultStaticCluster(const std::string& name) { - return parseClusterFromJson(defaultStaticClusterJsonV1(name)); + return parseClusterFromJson(defaultStaticClusterJson(name)); } inline HostSharedPtr makeTestHost(ClusterInfoConstSharedPtr cluster, const std::string& url, diff --git a/test/server/BUILD b/test/server/BUILD index f9fa7745c2ef0..99f6f60efda85 100644 --- a/test/server/BUILD +++ b/test/server/BUILD @@ -36,6 +36,7 @@ envoy_cc_test( "//source/extensions/stat_sinks/statsd:config", "//source/extensions/transport_sockets/raw_buffer:config", "//source/server:configuration_lib", + "//test/common/upstream:utility_lib", "//test/mocks:common_lib", "//test/mocks/network:network_mocks", "//test/mocks/server:server_mocks", diff --git a/test/server/configuration_impl_test.cc b/test/server/configuration_impl_test.cc index 84d1058a40f90..53a07efde93fd 100644 --- a/test/server/configuration_impl_test.cc +++ b/test/server/configuration_impl_test.cc @@ -11,6 +11,7 @@ #include "extensions/stat_sinks/well_known_names.h" +#include "test/common/upstream/utility.h" #include "test/mocks/common.h" #include "test/mocks/network/mocks.h" #include "test/mocks/server/mocks.h" @@ -91,8 +92,7 @@ TEST_F(ConfigurationImplTest, CustomStatsFlushInterval) { } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap; - MessageUtil::loadFromJson(json, bootstrap); + auto bootstrap = Upstream::parseBootstrapFromV2Json(json); MainImpl config; config.initialize(bootstrap, server_, cluster_manager_factory_); @@ -135,8 +135,7 @@ TEST_F(ConfigurationImplTest, SetUpstreamClusterPerConnectionBufferLimit) { } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap; - MessageUtil::loadFromJson(json, bootstrap); + auto bootstrap = Upstream::parseBootstrapFromV2Json(json); MainImpl config; config.initialize(bootstrap, server_, cluster_manager_factory_); @@ -180,8 +179,7 @@ TEST_F(ConfigurationImplTest, NullTracerSetWhenTracingConfigurationAbsent) { } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap; - MessageUtil::loadFromJson(json, bootstrap); + auto bootstrap = Upstream::parseBootstrapFromV2Json(json); server_.local_info_.node_.set_cluster(""); MainImpl config; @@ -220,8 +218,7 @@ TEST_F(ConfigurationImplTest, NullTracerSetWhenHttpKeyAbsentFromTracerConfigurat } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap; - MessageUtil::loadFromJson(json, bootstrap); + auto bootstrap = Upstream::parseBootstrapFromV2Json(json); server_.local_info_.node_.set_cluster(""); MainImpl config; @@ -269,8 +266,7 @@ TEST_F(ConfigurationImplTest, ConfigurationFailsWhenInvalidTracerSpecified) { } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap; - MessageUtil::loadFromJson(json, bootstrap); + auto bootstrap = Upstream::parseBootstrapFromV2Json(json); MainImpl config; EXPECT_THROW_WITH_MESSAGE(config.initialize(bootstrap, server_, cluster_manager_factory_), EnvoyException, @@ -296,8 +292,7 @@ TEST_F(ConfigurationImplTest, ProtoSpecifiedStatsSink) { } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap; - MessageUtil::loadFromJson(json, bootstrap); + auto bootstrap = Upstream::parseBootstrapFromV2Json(json); auto& sink = *bootstrap.mutable_stats_sinks()->Add(); sink.set_name(Extensions::StatSinks::StatsSinkNames::get().Statsd); @@ -329,8 +324,7 @@ TEST_F(ConfigurationImplTest, StatsSinkWithInvalidName) { } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap; - MessageUtil::loadFromJson(json, bootstrap); + auto bootstrap = Upstream::parseBootstrapFromV2Json(json); envoy::config::metrics::v2::StatsSink& sink = *bootstrap.mutable_stats_sinks()->Add(); sink.set_name("envoy.invalid"); @@ -362,8 +356,7 @@ TEST_F(ConfigurationImplTest, StatsSinkWithNoName) { } )EOF"; - envoy::config::bootstrap::v2::Bootstrap bootstrap; - MessageUtil::loadFromJson(json, bootstrap); + auto bootstrap = Upstream::parseBootstrapFromV2Json(json); auto& sink = *bootstrap.mutable_stats_sinks()->Add(); auto& field_map = *sink.mutable_config()->mutable_fields(); From 1fd92ff5ff221e118894181a9693ff3e24d7d8c7 Mon Sep 17 00:00:00 2001 From: Derek Argueta Date: Fri, 24 May 2019 02:26:26 -0700 Subject: [PATCH 07/10] formatting Signed-off-by: Derek Argueta --- .../upstream/cluster_manager_impl_test.cc | 49 ++++++++++--------- test/common/upstream/utility.h | 3 +- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/test/common/upstream/cluster_manager_impl_test.cc b/test/common/upstream/cluster_manager_impl_test.cc index 456ef3992606f..bdabdb326188b 100644 --- a/test/common/upstream/cluster_manager_impl_test.cc +++ b/test/common/upstream/cluster_manager_impl_test.cc @@ -1,9 +1,8 @@ #include #include -#include "envoy/api/v2/core/base.pb.h" - #include "envoy/admin/v2alpha/config_dump.pb.h" +#include "envoy/api/v2/core/base.pb.h" #include "envoy/network/listen_socket.h" #include "envoy/upstream/upstream.h" @@ -289,7 +288,7 @@ class ClusterManagerImplTest : public testing::Test { }; envoy::config::bootstrap::v2::Bootstrap defaultConfig() { - const std::string yaml = R"EOF( + const std::string yaml = R"EOF( static_resources: clusters: [] )EOF"; @@ -411,7 +410,8 @@ TEST_F(ClusterManagerImplTest, UnknownClusterType) { } )EOF"; - EXPECT_THROW_WITH_REGEX(create(parseBootstrapFromV2Json(json)), EnvoyException, "invalid value \"foo\" for type TYPE_ENUM"); + EXPECT_THROW_WITH_REGEX(create(parseBootstrapFromV2Json(json)), EnvoyException, + "invalid value \"foo\" for type TYPE_ENUM"); } TEST_F(ClusterManagerImplTest, LocalClusterNotDefined) { @@ -446,7 +446,8 @@ TEST_F(ClusterManagerImplTest, BadClusterManagerConfig) { } )EOF"; - EXPECT_THROW_WITH_REGEX(create(parseBootstrapFromV2Json(json)), EnvoyException, "fake_property: Cannot find field"); + EXPECT_THROW_WITH_REGEX(create(parseBootstrapFromV2Json(json)), EnvoyException, + "fake_property: Cannot find field"); } TEST_F(ClusterManagerImplTest, LocalClusterDefined) { @@ -471,8 +472,9 @@ TEST_F(ClusterManagerImplTest, LocalClusterDefined) { } TEST_F(ClusterManagerImplTest, DuplicateCluster) { - const std::string json = - fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("cluster_1"),defaultStaticClusterJson("cluster_1")})); + const std::string json = fmt::sprintf( + "{\"static_resources\":{%s}}", + clustersJson({defaultStaticClusterJson("cluster_1"), defaultStaticClusterJson("cluster_1")})); const auto config = parseBootstrapFromV2Json(json); EXPECT_THROW(create(config), EnvoyException); } @@ -671,8 +673,8 @@ TEST_F(ClusterManagerImplTest, EdsClustersRequireEdsConfig) { class ClusterManagerImplThreadAwareLbTest : public ClusterManagerImplTest { public: void doTest(LoadBalancerType lb_type) { - const std::string json = - fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("cluster_0")})); + const std::string json = fmt::sprintf("{\"static_resources\":{%s}}", + clustersJson({defaultStaticClusterJson("cluster_0")})); std::shared_ptr cluster1( new NiceMock()); @@ -772,8 +774,8 @@ TEST_F(ClusterManagerImplTest, HttpHealthChecker) { } TEST_F(ClusterManagerImplTest, UnknownCluster) { - const std::string json = - fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("cluster_1")})); + const std::string json = fmt::sprintf("{\"static_resources\":{%s}}", + clustersJson({defaultStaticClusterJson("cluster_1")})); create(parseBootstrapFromV2Json(json)); EXPECT_EQ(nullptr, cluster_manager_->get("hello")); @@ -824,8 +826,8 @@ TEST_F(ClusterManagerImplTest, VerifyBufferLimits) { } TEST_F(ClusterManagerImplTest, ShutdownOrder) { - const std::string json = - fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("cluster_1")})); + const std::string json = fmt::sprintf("{\"static_resources\":{%s}}", + clustersJson({defaultStaticClusterJson("cluster_1")})); create(parseBootstrapFromV2Json(json)); Cluster& cluster = cluster_manager_->activeClusters().begin()->second; @@ -866,8 +868,9 @@ TEST_F(ClusterManagerImplTest, InitializeOrder) { } } )EOF", - clustersJson( - {defaultStaticClusterJson("cds_cluster"), defaultStaticClusterJson("fake_cluster"), defaultStaticClusterJson("fake_cluster2")})); + clustersJson({defaultStaticClusterJson("cds_cluster"), + defaultStaticClusterJson("fake_cluster"), + defaultStaticClusterJson("fake_cluster2")})); MockCdsApi* cds = new MockCdsApi(); std::shared_ptr cds_cluster( @@ -1254,8 +1257,8 @@ TEST_F(ClusterManagerImplTest, DynamicAddRemove) { } TEST_F(ClusterManagerImplTest, addOrUpdateClusterStaticExists) { - const std::string json = - fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("fake_cluster")})); + const std::string json = fmt::sprintf("{\"static_resources\":{%s}}", + clustersJson({defaultStaticClusterJson("fake_cluster")})); std::shared_ptr cluster1(new NiceMock()); InSequence s; EXPECT_CALL(factory_, clusterFromProto_(_, _, _, _)).WillOnce(Return(cluster1)); @@ -1283,8 +1286,8 @@ TEST_F(ClusterManagerImplTest, addOrUpdateClusterStaticExists) { // Verifies that we correctly propagate the host_set state to the TLS clusters. TEST_F(ClusterManagerImplTest, HostsPostedToTlsCluster) { - const std::string json = - fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("fake_cluster")})); + const std::string json = fmt::sprintf("{\"static_resources\":{%s}}", + clustersJson({defaultStaticClusterJson("fake_cluster")})); std::shared_ptr cluster1(new NiceMock()); InSequence s; EXPECT_CALL(factory_, clusterFromProto_(_, _, _, _)).WillOnce(Return(cluster1)); @@ -1330,8 +1333,8 @@ TEST_F(ClusterManagerImplTest, HostsPostedToTlsCluster) { // Test that we close all HTTP connection pool connections when there is a host health failure. TEST_F(ClusterManagerImplTest, CloseHttpConnectionsOnHealthFailure) { - const std::string json = - fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("some_cluster")})); + const std::string json = fmt::sprintf("{\"static_resources\":{%s}}", + clustersJson({defaultStaticClusterJson("some_cluster")})); std::shared_ptr cluster1(new NiceMock()); cluster1->info_->name_ = "some_cluster"; HostSharedPtr test_host = makeTestHost(cluster1->info_, "tcp://127.0.0.1:80"); @@ -1392,8 +1395,8 @@ TEST_F(ClusterManagerImplTest, CloseHttpConnectionsOnHealthFailure) { // Test that we close all TCP connection pool connections when there is a host health failure. TEST_F(ClusterManagerImplTest, CloseTcpConnectionPoolsOnHealthFailure) { - const std::string json = - fmt::sprintf("{\"static_resources\":{%s}}", clustersJson({defaultStaticClusterJson("some_cluster")})); + const std::string json = fmt::sprintf("{\"static_resources\":{%s}}", + clustersJson({defaultStaticClusterJson("some_cluster")})); std::shared_ptr cluster1(new NiceMock()); cluster1->info_->name_ = "some_cluster"; HostSharedPtr test_host = makeTestHost(cluster1->info_, "tcp://127.0.0.1:80"); diff --git a/test/common/upstream/utility.h b/test/common/upstream/utility.h index e97ad5a560963..cb0d29f08903e 100644 --- a/test/common/upstream/utility.h +++ b/test/common/upstream/utility.h @@ -34,7 +34,8 @@ inline std::string defaultStaticClusterJson(const std::string& name) { name); } -inline envoy::config::bootstrap::v2::Bootstrap parseBootstrapFromV2Json(const std::string& json_string) { +inline envoy::config::bootstrap::v2::Bootstrap +parseBootstrapFromV2Json(const std::string& json_string) { envoy::config::bootstrap::v2::Bootstrap bootstrap; MessageUtil::loadFromJson(json_string, bootstrap); return bootstrap; From 3e1da9a33a500bb8591fb472b09976babef4ddf0 Mon Sep 17 00:00:00 2001 From: Derek Argueta Date: Fri, 24 May 2019 02:48:04 -0700 Subject: [PATCH 08/10] fix build Signed-off-by: Derek Argueta --- test/config/BUILD | 1 + 1 file changed, 1 insertion(+) diff --git a/test/config/BUILD b/test/config/BUILD index 17d8b7107e884..4a63025133800 100644 --- a/test/config/BUILD +++ b/test/config/BUILD @@ -32,6 +32,7 @@ envoy_cc_test_library( "@envoy_api//envoy/api/v2:eds_cc", "@envoy_api//envoy/config/accesslog/v2:file_cc", "@envoy_api//envoy/config/bootstrap/v2:bootstrap_cc", + "@envoy_api//envoy/config/filter/network/http_connection_manager/v2:http_connection_manager_cc", "@envoy_api//envoy/config/transport_socket/tap/v2alpha:tap_cc", ], ) From 8ddf4462bf0cbb05a3bf01ef732a5277857a89c1 Mon Sep 17 00:00:00 2001 From: Derek Argueta Date: Fri, 24 May 2019 03:31:28 -0700 Subject: [PATCH 09/10] another build fix Signed-off-by: Derek Argueta --- test/common/upstream/utility.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/test/common/upstream/utility.h b/test/common/upstream/utility.h index cb0d29f08903e..1c25b376fec7a 100644 --- a/test/common/upstream/utility.h +++ b/test/common/upstream/utility.h @@ -42,6 +42,14 @@ parseBootstrapFromV2Json(const std::string& json_string) { } inline envoy::api::v2::Cluster parseClusterFromJson(const std::string& json_string) { + envoy::api::v2::Cluster cluster; + auto json_object_ptr = Json::Factory::loadFromString(json_string); + Config::CdsJson::translateCluster(*json_object_ptr, + absl::optional(), cluster); + return cluster; +} + +inline envoy::api::v2::Cluster parseClusterFromV2Json(const std::string& json_string) { envoy::api::v2::Cluster cluster; MessageUtil::loadFromJson(json_string, cluster); return cluster; @@ -54,7 +62,7 @@ inline envoy::api::v2::Cluster parseClusterFromV2Yaml(const std::string& yaml) { } inline envoy::api::v2::Cluster defaultStaticCluster(const std::string& name) { - return parseClusterFromJson(defaultStaticClusterJson(name)); + return parseClusterFromV2Json(defaultStaticClusterJson(name)); } inline HostSharedPtr makeTestHost(ClusterInfoConstSharedPtr cluster, const std::string& url, From 200e55eee62dc6579384463116733eb2a06238f9 Mon Sep 17 00:00:00 2001 From: Derek Argueta Date: Fri, 24 May 2019 13:00:43 -0700 Subject: [PATCH 10/10] hosts -> load_assignment Signed-off-by: Derek Argueta --- .../upstream/cluster_manager_impl_test.cc | 344 ++++++++++++------ 1 file changed, 228 insertions(+), 116 deletions(-) diff --git a/test/common/upstream/cluster_manager_impl_test.cc b/test/common/upstream/cluster_manager_impl_test.cc index bdabdb326188b..9f3c6aae2bf02 100644 --- a/test/common/upstream/cluster_manager_impl_test.cc +++ b/test/common/upstream/cluster_manager_impl_test.cc @@ -487,10 +487,14 @@ TEST_F(ClusterManagerImplTest, ValidClusterName) { connect_timeout: 0.250s type: static lb_policy: round_robin - hosts: - - socket_address: - address: 127.0.0.1 - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; create(parseBootstrapFromV2Yaml(yaml)); @@ -527,10 +531,14 @@ TEST_F(ClusterManagerImplTest, OriginalDstLbRestriction2) { connect_timeout: 0.250s type: static lb_policy: original_dst_lb - hosts: - - socket_address: - address: 127.0.0.1 - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; EXPECT_THROW_WITH_MESSAGE( @@ -546,13 +554,19 @@ TEST_F(ClusterManagerImplTest, SubsetLoadBalancerInitialization) { connect_timeout: 0.250s type: static lb_policy: round_robin - hosts: - - socket_address: - address: 127.0.0.1 - port_value: 8000 - - socket_address: - address: 127.0.0.1 - port_value: 8001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 8000 + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 8001 )EOF"; envoy::config::bootstrap::v2::Bootstrap bootstrap = parseBootstrapFromV2Yaml(yaml); @@ -596,13 +610,19 @@ TEST_F(ClusterManagerImplTest, SubsetLoadBalancerLocalityAware) { connect_timeout: 0.250s type: STATIC lb_policy: ROUND_ROBIN - hosts: - - socket_address: - address: 127.0.0.1 - port_value: 8000 - - socket_address: - address: 127.0.0.1 - port_value: 8001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 8000 + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 8001 )EOF"; envoy::config::bootstrap::v2::Bootstrap bootstrap = parseBootstrapFromV2Yaml(yaml); @@ -625,13 +645,19 @@ TEST_F(ClusterManagerImplTest, RingHashLoadBalancerInitialization) { minimum_ring_size: 125 connect_timeout: 0.250s type: STATIC - hosts: - - socket_address: - address: 127.0.0.1 - port_value: 8000 - - socket_address: - address: 127.0.0.1 - port_value: 8001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 8000 + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 8001 )EOF"; create(parseBootstrapFromV2Yaml(yaml)); } @@ -643,13 +669,19 @@ TEST_F(ClusterManagerImplTest, RingHashLoadBalancerV2Initialization) { - name: redis_cluster connect_timeout: 0.250s lb_policy: RING_HASH - hosts: - - socket_address: - address: 127.0.0.1 - port_value: 8000 - - socket_address: - address: 127.0.0.1 - port_value: 8001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 8000 + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 8001 dns_lookup_family: V4_ONLY ring_hash_lb_config: minimum_ring_size: 125 @@ -718,10 +750,14 @@ TEST_F(ClusterManagerImplTest, TcpHealthChecker) { connect_timeout: 0.250s type: STATIC lb_policy: ROUND_ROBIN - hosts: - - socket_address: - address: 127.0.0.1 - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 health_checks: - timeout: 1s interval: 1s @@ -751,10 +787,14 @@ TEST_F(ClusterManagerImplTest, HttpHealthChecker) { connect_timeout: 0.250s type: STATIC lb_policy: ROUND_ROBIN - hosts: - - socket_address: - address: 127.0.0.1 - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 health_checks: - timeout: 1s interval: 1s @@ -809,10 +849,14 @@ TEST_F(ClusterManagerImplTest, VerifyBufferLimits) { type: static lb_policy: round_robin per_connection_buffer_limit_bytes: 8192 - hosts: - - socket_address: - address: 127.0.0.1 - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; create(parseBootstrapFromV2Yaml(yaml)); @@ -1595,10 +1639,14 @@ TEST_F(ClusterManagerImplTest, DynamicHostRemove) { - socket_address: address: 1.2.3.4 port_value: 80 - hosts: - - socket_address: - address: 127.0.0.1 - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; std::shared_ptr dns_resolver(new Network::MockDnsResolver()); @@ -1738,10 +1786,14 @@ TEST_F(ClusterManagerImplTest, DynamicHostRemoveWithTls) { address: 1.2.3.4 port_value: 80 lb_policy: ROUND_ROBIN - hosts: - - socket_address: - address: localhost - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; std::shared_ptr dns_resolver(new Network::MockDnsResolver()); @@ -1968,10 +2020,14 @@ TEST_F(ClusterManagerImplTest, DynamicHostRemoveDefaultPriority) { address: 1.2.3.4 port_value: 80 lb_policy: ROUND_ROBIN - hosts: - - socket_address: - address: localhost - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; std::shared_ptr dns_resolver(new Network::MockDnsResolver()); @@ -2044,10 +2100,14 @@ TEST_F(ClusterManagerImplTest, ConnPoolDestroyWithDraining) { address: 1.2.3.4 port_value: 80 lb_policy: ROUND_ROBIN - hosts: - - socket_address: - address: localhost - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; std::shared_ptr dns_resolver(new Network::MockDnsResolver()); @@ -2403,10 +2463,14 @@ TEST_F(ClusterManagerImplTest, MergedUpdatesDestroyedOnUpdate) { connect_timeout: 0.250s type: STATIC lb_policy: ROUND_ROBIN - hosts: - - socket_address: - address: 127.0.0.1 - port_value: 12001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 12001 common_lb_config: update_merge_window: 3s )EOF"; @@ -2457,10 +2521,14 @@ TEST_F(ClusterManagerImplTest, MergedUpdatesDestroyedOnUpdate) { connect_timeout: 0.250s type: STATIC lb_policy: ROUND_ROBIN - hosts: - - socket_address: - address: 127.0.0.1 - port_value: 12001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 12001 common_lb_config: update_merge_window: 4s )EOF"; @@ -2765,10 +2833,14 @@ TEST_F(SockoptsTest, SockoptsUnset) { connect_timeout: 0.250s lb_policy: ROUND_ROBIN type: STATIC - hosts: - - socket_address: - address: "127.0.0.1" - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; initialize(yaml); expectNoSocketOptions(); @@ -2782,10 +2854,14 @@ TEST_F(SockoptsTest, FreebindClusterOnly) { connect_timeout: 0.250s lb_policy: ROUND_ROBIN type: STATIC - hosts: - - socket_address: - address: "127.0.0.1" - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 upstream_bind_config: freebind: true )EOF"; @@ -2801,10 +2877,14 @@ TEST_F(SockoptsTest, FreebindClusterManagerOnly) { connect_timeout: 0.250s lb_policy: ROUND_ROBIN type: STATIC - hosts: - - socket_address: - address: "127.0.0.1" - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 cluster_manager: upstream_bind_config: freebind: true @@ -2821,10 +2901,14 @@ TEST_F(SockoptsTest, FreebindClusterOverride) { connect_timeout: 0.250s lb_policy: ROUND_ROBIN type: STATIC - hosts: - - socket_address: - address: "127.0.0.1" - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 upstream_bind_config: freebind: true cluster_manager: @@ -2843,10 +2927,14 @@ TEST_F(SockoptsTest, SockoptsClusterOnly) { connect_timeout: 0.250s lb_policy: ROUND_ROBIN type: STATIC - hosts: - - socket_address: - address: "127.0.0.1" - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 upstream_bind_config: socket_options: [ { level: 1, name: 2, int_value: 3, state: STATE_PREBIND }, @@ -2867,10 +2955,14 @@ TEST_F(SockoptsTest, SockoptsClusterManagerOnly) { connect_timeout: 0.250s lb_policy: ROUND_ROBIN type: STATIC - hosts: - - socket_address: - address: "127.0.0.1" - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 cluster_manager: upstream_bind_config: socket_options: [ @@ -2891,10 +2983,14 @@ TEST_F(SockoptsTest, SockoptsClusterOverride) { connect_timeout: 0.250s lb_policy: ROUND_ROBIN type: STATIC - hosts: - - socket_address: - address: "127.0.0.1" - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 upstream_bind_config: socket_options: [ { level: 1, name: 2, int_value: 3, state: STATE_PREBIND }, @@ -3018,10 +3114,14 @@ TEST_F(TcpKeepaliveTest, TcpKeepaliveUnset) { connect_timeout: 0.250s lb_policy: ROUND_ROBIN type: STATIC - hosts: - - socket_address: - address: "127.0.0.1" - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 )EOF"; initialize(yaml); expectNoSocketOptions(); @@ -3035,10 +3135,14 @@ TEST_F(TcpKeepaliveTest, TcpKeepaliveCluster) { connect_timeout: 0.250s lb_policy: ROUND_ROBIN type: STATIC - hosts: - - socket_address: - address: "127.0.0.1" - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 upstream_connection_options: tcp_keepalive: {} )EOF"; @@ -3054,10 +3158,14 @@ TEST_F(TcpKeepaliveTest, TcpKeepaliveClusterProbes) { connect_timeout: 0.250s lb_policy: ROUND_ROBIN type: STATIC - hosts: - - socket_address: - address: "127.0.0.1" - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 upstream_connection_options: tcp_keepalive: keepalive_probes: 7 @@ -3074,10 +3182,14 @@ TEST_F(TcpKeepaliveTest, TcpKeepaliveWithAllOptions) { connect_timeout: 0.250s lb_policy: ROUND_ROBIN type: STATIC - hosts: - - socket_address: - address: "127.0.0.1" - port_value: 11001 + load_assignment: + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 11001 upstream_connection_options: tcp_keepalive: keepalive_probes: 7