forked from envoyproxy/envoy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathads_integration.h
More file actions
150 lines (122 loc) · 6.64 KB
/
ads_integration.h
File metadata and controls
150 lines (122 loc) · 6.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#pragma once
#include <memory>
#include <string>
#include "envoy/admin/v3/config_dump.pb.h"
#include "envoy/config/cluster/v3/cluster.pb.h"
#include "envoy/config/endpoint/v3/endpoint.pb.h"
#include "envoy/config/listener/v3/listener.pb.h"
#include "envoy/config/route/v3/route.pb.h"
#include "test/common/grpc/grpc_client_integration.h"
#include "test/config/utility.h"
#include "test/integration/http_integration.h"
#include "test/test_common/utility.h"
namespace Envoy {
// Base class that supports parameterizing over old DSS vs new DSS. Can be replaced with
// Grpc::BaseGrpcClientIntegrationParamTest when old DSS is removed.
class AdsDeltaSotwIntegrationSubStateParamTest
: public Grpc::BaseGrpcClientIntegrationParamTest,
public testing::TestWithParam<
std::tuple<Network::Address::IpVersion, Grpc::ClientType, Grpc::SotwOrDelta>> {
public:
~AdsDeltaSotwIntegrationSubStateParamTest() override = default;
static std::string protocolTestParamsToString(
const ::testing::TestParamInfo<
std::tuple<Network::Address::IpVersion, Grpc::ClientType, Grpc::SotwOrDelta>>& p) {
return fmt::format(
"{}_{}_{}", TestUtility::ipVersionToString(std::get<0>(p.param)),
std::get<1>(p.param) == Grpc::ClientType::GoogleGrpc ? "GoogleGrpc" : "EnvoyGrpc",
std::get<2>(p.param) == Grpc::SotwOrDelta::Delta ? "Delta" : "StateOfTheWorld");
}
Network::Address::IpVersion ipVersion() const override { return std::get<0>(GetParam()); }
Grpc::ClientType clientType() const override { return std::get<1>(GetParam()); }
Grpc::SotwOrDelta sotwOrDelta() const { return std::get<2>(GetParam()); }
};
class AdsIntegrationTestBase : public Grpc::BaseGrpcClientIntegrationParamTest,
public HttpIntegrationTest {
public:
AdsIntegrationTestBase(Network::Address::IpVersion ip_version, Grpc::SotwOrDelta sotw_or_delta);
AdsIntegrationTestBase(Network::Address::IpVersion ip_version, Grpc::SotwOrDelta sotw_or_delta,
const std::string& config);
envoy::config::cluster::v3::Cluster
buildCluster(const std::string& name, envoy::config::cluster::v3::Cluster::LbPolicy lb_policy =
envoy::config::cluster::v3::Cluster::ROUND_ROBIN);
envoy::config::cluster::v3::Cluster buildTlsCluster(const std::string& name);
envoy::config::cluster::v3::Cluster buildRedisCluster(const std::string& name);
envoy::config::endpoint::v3::ClusterLoadAssignment
buildClusterLoadAssignment(const std::string& name);
envoy::config::endpoint::v3::ClusterLoadAssignment
buildTlsClusterLoadAssignment(const std::string& name);
envoy::config::endpoint::v3::ClusterLoadAssignment
buildClusterLoadAssignmentWithLeds(const std::string& name, const std::string& collection_name);
envoy::service::discovery::v3::Resource
buildLbEndpointResource(const std::string& lb_endpoint_resource_name, const std::string& version);
envoy::config::listener::v3::Listener buildListener(const std::string& name,
const std::string& route_config,
const std::string& stat_prefix = "ads_test");
envoy::config::listener::v3::Listener buildRedisListener(const std::string& name,
const std::string& cluster);
envoy::config::route::v3::RouteConfiguration buildRouteConfig(const std::string& name,
const std::string& cluster);
envoy::config::route::v3::RouteConfiguration buildRouteConfigWithVhds(const std::string& name);
envoy::config::route::v3::VirtualHost buildVirtualHost(const std::string& name,
const std::string& domain,
const std::string& prefix,
const std::string& cluster);
void makeSingleRequest();
void makeSingleRequestWithDropOverload();
void initialize() override;
void initializeAds(const bool rate_limiting);
void testBasicFlow();
envoy::admin::v3::ClustersConfigDump getClustersConfigDump();
envoy::admin::v3::ListenersConfigDump getListenersConfigDump();
envoy::admin::v3::RoutesConfigDump getRoutesConfigDump();
private:
void commonInitialize(Grpc::SotwOrDelta sotw_or_delta);
};
class AdsIntegrationTest
: public AdsIntegrationTestBase,
public testing::TestWithParam<
std::tuple<Network::Address::IpVersion, Grpc::ClientType, Grpc::SotwOrDelta>> {
public:
AdsIntegrationTest() : AdsIntegrationTestBase(ipVersion(), sotwOrDelta()) {}
AdsIntegrationTest(const std::string& config)
: AdsIntegrationTestBase(ipVersion(), sotwOrDelta(), config) {}
void TearDown() override { cleanUpXdsConnection(); }
static std::string protocolTestParamsToString(
const ::testing::TestParamInfo<
std::tuple<Network::Address::IpVersion, Grpc::ClientType, Grpc::SotwOrDelta>>& p) {
absl::string_view sotw_or_delta_str;
switch (std::get<2>(p.param)) {
case Grpc::SotwOrDelta::Sotw:
sotw_or_delta_str = "Sotw";
break;
case Grpc::SotwOrDelta::Delta:
sotw_or_delta_str = "Delta";
break;
case Grpc::SotwOrDelta::UnifiedSotw:
sotw_or_delta_str = "UnifiedSotw";
break;
case Grpc::SotwOrDelta::UnifiedDelta:
sotw_or_delta_str = "UnifiedDelta";
break;
}
return fmt::format("{}_{}_{}", TestUtility::ipVersionToString(std::get<0>(p.param)),
std::get<1>(p.param) == Grpc::ClientType::GoogleGrpc ? "GoogleGrpc"
: "EnvoyGrpc",
sotw_or_delta_str);
}
Network::Address::IpVersion ipVersion() const override { return std::get<0>(GetParam()); }
Grpc::ClientType clientType() const override { return std::get<1>(GetParam()); }
Grpc::SotwOrDelta sotwOrDelta() const { return std::get<2>(GetParam()); }
bool isSotw() const {
return sotwOrDelta() == Grpc::SotwOrDelta::Sotw ||
sotwOrDelta() == Grpc::SotwOrDelta::UnifiedSotw;
}
};
// When old delta subscription state goes away, we could replace this macro back with
// DELTA_SOTW_GRPC_CLIENT_INTEGRATION_PARAMS.
#define ADS_INTEGRATION_PARAMS \
testing::Combine(testing::ValuesIn(TestEnvironment::getIpVersionsForTest()), \
testing::ValuesIn(TestEnvironment::getsGrpcVersionsForTest()), \
testing::Values(Grpc::SotwOrDelta::Sotw, Grpc::SotwOrDelta::Delta))
} // namespace Envoy