18
18
#include " common/ssl/ssl_socket.h"
19
19
20
20
#include " test/common/grpc/grpc_client_integration.h"
21
- #include " test/integration/http_integration.h"
22
21
#include " test/integration/utility.h"
22
+ #include " test/integration/xds_integration_test_base.h"
23
23
#include " test/mocks/server/mocks.h"
24
24
#include " test/test_common/network_utility.h"
25
25
#include " test/test_common/simulated_time_system.h"
@@ -60,50 +60,20 @@ const std::string config = R"EOF(
60
60
port_value: 0
61
61
)EOF" ;
62
62
63
- class AdsIntegrationBaseTest : public HttpIntegrationTest {
64
- public:
65
- AdsIntegrationBaseTest (Http::CodecClient::Type downstream_protocol,
66
- Network::Address::IpVersion version,
67
- const std::string& config = ConfigHelper::HTTP_PROXY_CONFIG)
68
- : HttpIntegrationTest(downstream_protocol, version, realTime(), config) {}
69
-
70
- void createAdsConnection (FakeUpstream& upstream) {
71
- ads_upstream_ = &upstream;
72
- AssertionResult result = ads_upstream_->waitForHttpConnection (*dispatcher_, ads_connection_);
73
- RELEASE_ASSERT (result, result.message ());
74
- }
75
-
76
- void cleanUpAdsConnection () {
77
- ASSERT (ads_upstream_ != nullptr );
78
-
79
- // Don't ASSERT fail if an ADS reconnect ends up unparented.
80
- ads_upstream_->set_allow_unexpected_disconnects (true );
81
- AssertionResult result = ads_connection_->close ();
82
- RELEASE_ASSERT (result, result.message ());
83
- result = ads_connection_->waitForDisconnect ();
84
- RELEASE_ASSERT (result, result.message ());
85
- ads_connection_.reset ();
86
- }
87
-
88
- protected:
89
- FakeHttpConnectionPtr ads_connection_;
90
- FakeUpstream* ads_upstream_{};
91
- };
92
-
93
- class AdsIntegrationTest : public AdsIntegrationBaseTest ,
63
+ class AdsIntegrationTest : public XdsIntegrationTestBase ,
94
64
public Grpc::GrpcClientIntegrationParamTest {
95
65
public:
96
66
AdsIntegrationTest ()
97
- : AdsIntegrationBaseTest (Http::CodecClient::Type::HTTP2, ipVersion(), config) {}
67
+ : XdsIntegrationTestBase (Http::CodecClient::Type::HTTP2, ipVersion(), config) {}
98
68
99
69
void TearDown () override {
100
- cleanUpAdsConnection ();
70
+ cleanUpXdsConnection ();
101
71
test_server_.reset ();
102
72
fake_upstreams_.clear ();
103
73
}
104
74
105
75
void createUpstreams () override {
106
- AdsIntegrationBaseTest ::createUpstreams ();
76
+ XdsIntegrationTestBase ::createUpstreams ();
107
77
fake_upstreams_.emplace_back (new FakeUpstream (
108
78
createUpstreamSslContext (), 0 , FakeHttpConnection::Type::HTTP2, version_, timeSystem ()));
109
79
}
@@ -124,60 +94,6 @@ class AdsIntegrationTest : public AdsIntegrationBaseTest,
124
94
std::move (cfg), context_manager_, *upstream_stats_store, std::vector<std::string>{});
125
95
}
126
96
127
- AssertionResult
128
- compareDiscoveryRequest (const std::string& expected_type_url, const std::string& expected_version,
129
- const std::vector<std::string>& expected_resource_names,
130
- const Protobuf::int32 expected_error_code = Grpc::Status::GrpcStatus::Ok,
131
- const std::string& expected_error_message = " " ) {
132
- envoy::api::v2::DiscoveryRequest discovery_request;
133
- VERIFY_ASSERTION (ads_stream_->waitForGrpcMessage (*dispatcher_, discovery_request));
134
-
135
- EXPECT_TRUE (discovery_request.has_node ());
136
- EXPECT_FALSE (discovery_request.node ().id ().empty ());
137
- EXPECT_FALSE (discovery_request.node ().cluster ().empty ());
138
-
139
- // TODO(PiotrSikora): Remove this hack once fixed internally.
140
- if (!(expected_type_url == discovery_request.type_url ())) {
141
- return AssertionFailure () << fmt::format (" type_url {} does not match expected {}" ,
142
- discovery_request.type_url (), expected_type_url);
143
- }
144
- if (!(expected_error_code == discovery_request.error_detail ().code ())) {
145
- return AssertionFailure () << fmt::format (" error_code {} does not match expected {}" ,
146
- discovery_request.error_detail ().code (),
147
- expected_error_code);
148
- }
149
- EXPECT_TRUE (
150
- IsSubstring (" " , " " , expected_error_message, discovery_request.error_detail ().message ()));
151
- const std::vector<std::string> resource_names (discovery_request.resource_names ().cbegin (),
152
- discovery_request.resource_names ().cend ());
153
- if (expected_resource_names != resource_names) {
154
- return AssertionFailure () << fmt::format (
155
- " resources {} do not match expected {} in {}" ,
156
- fmt::join (resource_names.begin (), resource_names.end (), " ," ),
157
- fmt::join (expected_resource_names.begin (), expected_resource_names.end (), " ," ),
158
- discovery_request.DebugString ());
159
- }
160
- // TODO(PiotrSikora): Remove this hack once fixed internally.
161
- if (!(expected_version == discovery_request.version_info ())) {
162
- return AssertionFailure () << fmt::format (" version {} does not match expected {} in {}" ,
163
- discovery_request.version_info (), expected_version,
164
- discovery_request.DebugString ());
165
- }
166
- return AssertionSuccess ();
167
- }
168
-
169
- template <class T >
170
- void sendDiscoveryResponse (const std::string& type_url, const std::vector<T>& messages,
171
- const std::string& version) {
172
- envoy::api::v2::DiscoveryResponse discovery_response;
173
- discovery_response.set_version_info (version);
174
- discovery_response.set_type_url (type_url);
175
- for (const auto & message : messages) {
176
- discovery_response.add_resources ()->PackFrom (message);
177
- }
178
- ads_stream_->sendGrpcMessage (discovery_response);
179
- }
180
-
181
97
envoy::api::v2::Cluster buildCluster (const std::string& name) {
182
98
return TestUtility::parseYaml<envoy::api::v2::Cluster>(fmt::format (R"EOF(
183
99
name: {}
@@ -245,9 +161,8 @@ class AdsIntegrationTest : public AdsIntegrationBaseTest,
245
161
246
162
void makeSingleRequest () {
247
163
registerTestServerPorts ({" http" });
248
- testRouterHeaderOnlyRequestAndResponse (true );
164
+ testRouterHeaderOnlyRequestAndResponse ();
249
165
cleanupUpstreamAndDownstream ();
250
- fake_upstream_connection_ = nullptr ;
251
166
}
252
167
253
168
void initialize () override { initializeAds (false ); }
@@ -278,12 +193,12 @@ class AdsIntegrationTest : public AdsIntegrationBaseTest,
278
193
}
279
194
});
280
195
setUpstreamProtocol (FakeHttpConnection::Type::HTTP2);
281
- AdsIntegrationBaseTest ::initialize ();
282
- if (ads_stream_ == nullptr ) {
283
- createAdsConnection (*(fake_upstreams_[1 ]));
284
- AssertionResult result = ads_connection_ ->waitForNewStream (*dispatcher_, ads_stream_ );
196
+ XdsIntegrationTestBase ::initialize ();
197
+ if (xds_stream_ == nullptr ) {
198
+ createXdsConnection (*(fake_upstreams_[1 ]));
199
+ AssertionResult result = xds_connection_ ->waitForNewStream (*dispatcher_, xds_stream_ );
285
200
RELEASE_ASSERT (result, result.message ());
286
- ads_stream_ ->startGrpcStream ();
201
+ xds_stream_ ->startGrpcStream ();
287
202
}
288
203
}
289
204
@@ -410,9 +325,7 @@ class AdsIntegrationTest : public AdsIntegrationBaseTest,
410
325
return dynamic_cast <const envoy::admin::v2alpha::RoutesConfigDump&>(*message_ptr);
411
326
}
412
327
413
- testing::NiceMock<Server::Configuration::MockTransportSocketFactoryContext> factory_context_;
414
328
Ssl::ContextManagerImpl context_manager_{timeSystem ()};
415
- FakeStreamPtr ads_stream_;
416
329
};
417
330
418
331
INSTANTIATE_TEST_CASE_P (IpVersionsClientType, AdsIntegrationTest, GRPC_CLIENT_INTEGRATION_PARAMS);
@@ -653,20 +566,20 @@ TEST_P(AdsIntegrationTest, RdsAfterLdsWithRdsChange) {
653
566
makeSingleRequest ();
654
567
}
655
568
656
- class AdsFailIntegrationTest : public AdsIntegrationBaseTest ,
569
+ class AdsFailIntegrationTest : public XdsIntegrationTestBase ,
657
570
public Grpc::GrpcClientIntegrationParamTest {
658
571
public:
659
572
AdsFailIntegrationTest ()
660
- : AdsIntegrationBaseTest (Http::CodecClient::Type::HTTP2, ipVersion(), config) {}
573
+ : XdsIntegrationTestBase (Http::CodecClient::Type::HTTP2, ipVersion(), config) {}
661
574
662
575
void TearDown () override {
663
- cleanUpAdsConnection ();
576
+ cleanUpXdsConnection ();
664
577
test_server_.reset ();
665
578
fake_upstreams_.clear ();
666
579
}
667
580
668
581
void createUpstreams () override {
669
- AdsIntegrationBaseTest ::createUpstreams ();
582
+ XdsIntegrationTestBase ::createUpstreams ();
670
583
fake_upstreams_.emplace_back (
671
584
new FakeUpstream (0 , FakeHttpConnection::Type::HTTP2, version_, timeSystem ()));
672
585
}
@@ -681,10 +594,8 @@ class AdsFailIntegrationTest : public AdsIntegrationBaseTest,
681
594
ads_cluster->set_name (" ads_cluster" );
682
595
});
683
596
setUpstreamProtocol (FakeHttpConnection::Type::HTTP2);
684
- AdsIntegrationBaseTest ::initialize ();
597
+ XdsIntegrationTestBase ::initialize ();
685
598
}
686
-
687
- FakeStreamPtr ads_stream_;
688
599
};
689
600
690
601
INSTANTIATE_TEST_CASE_P (IpVersionsClientType, AdsFailIntegrationTest,
@@ -693,26 +604,26 @@ INSTANTIATE_TEST_CASE_P(IpVersionsClientType, AdsFailIntegrationTest,
693
604
// Validate that we don't crash on failed ADS stream.
694
605
TEST_P (AdsFailIntegrationTest, ConnectDisconnect) {
695
606
initialize ();
696
- createAdsConnection (*fake_upstreams_[1 ]);
697
- ASSERT_TRUE (ads_connection_ ->waitForNewStream (*dispatcher_, ads_stream_ ));
698
- ads_stream_ ->startGrpcStream ();
699
- ads_stream_ ->finishGrpcStream (Grpc::Status::Internal);
607
+ createXdsConnection (*fake_upstreams_[1 ]);
608
+ ASSERT_TRUE (xds_connection_ ->waitForNewStream (*dispatcher_, xds_stream_ ));
609
+ xds_stream_ ->startGrpcStream ();
610
+ xds_stream_ ->finishGrpcStream (Grpc::Status::Internal);
700
611
}
701
612
702
- class AdsConfigIntegrationTest : public AdsIntegrationBaseTest ,
613
+ class AdsConfigIntegrationTest : public XdsIntegrationTestBase ,
703
614
public Grpc::GrpcClientIntegrationParamTest {
704
615
public:
705
616
AdsConfigIntegrationTest ()
706
- : AdsIntegrationBaseTest (Http::CodecClient::Type::HTTP2, ipVersion(), config) {}
617
+ : XdsIntegrationTestBase (Http::CodecClient::Type::HTTP2, ipVersion(), config) {}
707
618
708
619
void TearDown () override {
709
- cleanUpAdsConnection ();
620
+ cleanUpXdsConnection ();
710
621
test_server_.reset ();
711
622
fake_upstreams_.clear ();
712
623
}
713
624
714
625
void createUpstreams () override {
715
- AdsIntegrationBaseTest ::createUpstreams ();
626
+ XdsIntegrationTestBase ::createUpstreams ();
716
627
fake_upstreams_.emplace_back (
717
628
new FakeUpstream (0 , FakeHttpConnection::Type::HTTP2, version_, timeSystem ()));
718
629
}
@@ -735,10 +646,8 @@ class AdsConfigIntegrationTest : public AdsIntegrationBaseTest,
735
646
eds_config->mutable_ads ();
736
647
});
737
648
setUpstreamProtocol (FakeHttpConnection::Type::HTTP2);
738
- AdsIntegrationBaseTest ::initialize ();
649
+ XdsIntegrationTestBase ::initialize ();
739
650
}
740
-
741
- FakeStreamPtr ads_stream_;
742
651
};
743
652
744
653
INSTANTIATE_TEST_CASE_P (IpVersionsClientType, AdsConfigIntegrationTest,
@@ -747,10 +656,10 @@ INSTANTIATE_TEST_CASE_P(IpVersionsClientType, AdsConfigIntegrationTest,
747
656
// This is s regression validating that we don't crash on EDS static Cluster that uses ADS.
748
657
TEST_P (AdsConfigIntegrationTest, EdsClusterWithAdsConfigSource) {
749
658
initialize ();
750
- createAdsConnection (*fake_upstreams_[1 ]);
751
- ASSERT_TRUE (ads_connection_ ->waitForNewStream (*dispatcher_, ads_stream_ ));
752
- ads_stream_ ->startGrpcStream ();
753
- ads_stream_ ->finishGrpcStream (Grpc::Status::Ok);
659
+ createXdsConnection (*fake_upstreams_[1 ]);
660
+ ASSERT_TRUE (xds_connection_ ->waitForNewStream (*dispatcher_, xds_stream_ ));
661
+ xds_stream_ ->startGrpcStream ();
662
+ xds_stream_ ->finishGrpcStream (Grpc::Status::Ok);
754
663
}
755
664
756
665
// Validates that the initial xDS request batches all resources referred to in static config
@@ -768,9 +677,9 @@ TEST_P(AdsIntegrationTest, XdsBatching) {
768
677
});
769
678
770
679
pre_worker_start_test_steps_ = [this ]() {
771
- createAdsConnection (*fake_upstreams_.back ());
772
- ASSERT_TRUE (ads_connection_ ->waitForNewStream (*dispatcher_, ads_stream_ ));
773
- ads_stream_ ->startGrpcStream ();
680
+ createXdsConnection (*fake_upstreams_.back ());
681
+ ASSERT_TRUE (xds_connection_ ->waitForNewStream (*dispatcher_, xds_stream_ ));
682
+ xds_stream_ ->startGrpcStream ();
774
683
775
684
EXPECT_TRUE (compareDiscoveryRequest (Config::TypeUrl::get ().ClusterLoadAssignment , " " ,
776
685
{" eds_cluster2" , " eds_cluster" }));
0 commit comments