xref: /aosp_15_r20/external/grpc-grpc/test/cpp/end2end/xds/xds_credentials_end2end_test.cc (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1 //
2 //
3 // Copyright 2020 gRPC authors.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 //
18 
19 #include <gmock/gmock.h>
20 #include <gtest/gtest.h>
21 
22 #include <grpc/grpc.h>
23 #include <grpcpp/server_builder.h>
24 
25 #include "test/core/util/port.h"
26 #include "test/core/util/test_config.h"
27 #include "test/cpp/end2end/test_service_impl.h"
28 #include "test/cpp/util/test_credentials_provider.h"
29 
30 namespace grpc {
31 namespace testing {
32 namespace {
33 
34 class XdsCredentialsEnd2EndFallbackTest
35     : public ::testing::TestWithParam<const char*> {
36  protected:
XdsCredentialsEnd2EndFallbackTest()37   XdsCredentialsEnd2EndFallbackTest() {
38     int port = grpc_pick_unused_port_or_die();
39     ServerBuilder builder;
40     server_address_ = "localhost:" + std::to_string(port);
41     builder.AddListeningPort(
42         server_address_,
43         GetCredentialsProvider()->GetServerCredentials(GetParam()));
44     builder.RegisterService(&service_);
45     server_ = builder.BuildAndStart();
46   }
47 
48   std::string server_address_;
49   TestServiceImpl service_;
50   std::unique_ptr<Server> server_;
51 };
52 
TEST_P(XdsCredentialsEnd2EndFallbackTest,NoXdsSchemeInTarget)53 TEST_P(XdsCredentialsEnd2EndFallbackTest, NoXdsSchemeInTarget) {
54   // Target does not use 'xds:///' scheme and should result in using fallback
55   // credentials.
56   ChannelArguments args;
57   auto channel = grpc::CreateCustomChannel(
58       server_address_,
59       grpc::XdsCredentials(
60           GetCredentialsProvider()->GetChannelCredentials(GetParam(), &args)),
61       args);
62   auto stub = grpc::testing::EchoTestService::NewStub(channel);
63   ClientContext ctx;
64   EchoRequest req;
65   req.set_message("Hello");
66   EchoResponse resp;
67   Status s = stub->Echo(&ctx, req, &resp);
68   EXPECT_EQ(s.ok(), true);
69   EXPECT_EQ(resp.message(), "Hello");
70 }
71 
72 class XdsServerCredentialsEnd2EndFallbackTest
73     : public ::testing::TestWithParam<const char*> {
74  protected:
XdsServerCredentialsEnd2EndFallbackTest()75   XdsServerCredentialsEnd2EndFallbackTest() {
76     int port = grpc_pick_unused_port_or_die();
77     // Build a server that is not xDS enabled but uses XdsServerCredentials.
78     ServerBuilder builder;
79     server_address_ = "localhost:" + std::to_string(port);
80     builder.AddListeningPort(
81         server_address_,
82         grpc::XdsServerCredentials(
83             GetCredentialsProvider()->GetServerCredentials(GetParam())));
84     builder.RegisterService(&service_);
85     server_ = builder.BuildAndStart();
86   }
87 
88   std::string server_address_;
89   TestServiceImpl service_;
90   std::unique_ptr<Server> server_;
91 };
92 
TEST_P(XdsServerCredentialsEnd2EndFallbackTest,Basic)93 TEST_P(XdsServerCredentialsEnd2EndFallbackTest, Basic) {
94   ChannelArguments args;
95   auto channel = grpc::CreateCustomChannel(
96       server_address_,
97       GetCredentialsProvider()->GetChannelCredentials(GetParam(), &args), args);
98   auto stub = grpc::testing::EchoTestService::NewStub(channel);
99   ClientContext ctx;
100   EchoRequest req;
101   req.set_message("Hello");
102   EchoResponse resp;
103   Status s = stub->Echo(&ctx, req, &resp);
104   EXPECT_EQ(s.ok(), true);
105   EXPECT_EQ(resp.message(), "Hello");
106 }
107 
108 INSTANTIATE_TEST_SUITE_P(XdsCredentialsEnd2EndFallback,
109                          XdsCredentialsEnd2EndFallbackTest,
110                          ::testing::ValuesIn(std::vector<const char*>(
111                              {kInsecureCredentialsType, kTlsCredentialsType})));
112 
113 INSTANTIATE_TEST_SUITE_P(XdsServerCredentialsEnd2EndFallback,
114                          XdsServerCredentialsEnd2EndFallbackTest,
115                          ::testing::ValuesIn(std::vector<const char*>(
116                              {kInsecureCredentialsType, kTlsCredentialsType})));
117 
118 }  // namespace
119 }  // namespace testing
120 }  // namespace grpc
121 
main(int argc,char ** argv)122 int main(int argc, char** argv) {
123   ::testing::InitGoogleTest(&argc, argv);
124   grpc::testing::TestEnvironment env(&argc, argv);
125   const auto result = RUN_ALL_TESTS();
126   return result;
127 }
128