xds_channel_stack_modifier_test.cc
Go to the documentation of this file.
1 //
2 //
3 // Copyright 2021 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 
20 
21 #include <gtest/gtest.h>
22 
23 #include <grpc/grpc.h>
24 #include <grpcpp/opencensus.h>
25 
32 
33 namespace grpc_core {
34 namespace testing {
35 namespace {
36 
37 // Test that XdsChannelStackModifier can be safely copied to channel args
38 // and destroyed
39 TEST(XdsChannelStackModifierTest, CopyChannelArgs) {
40  grpc_init();
41  auto channel_stack_modifier = MakeRefCounted<XdsChannelStackModifier>(
42  std::vector<const grpc_channel_filter*>{});
43  grpc_arg arg = channel_stack_modifier->MakeChannelArg();
45  EXPECT_EQ(channel_stack_modifier,
48  grpc_shutdown();
49 }
50 
51 // Test compare on channel args with the same XdsChannelStackModifier
52 TEST(XdsChannelStackModifierTest, ChannelArgsCompare) {
53  grpc_init();
54  auto channel_stack_modifier = MakeRefCounted<XdsChannelStackModifier>(
55  std::vector<const grpc_channel_filter*>{});
56  grpc_arg arg = channel_stack_modifier->MakeChannelArg();
62  grpc_channel_args_destroy(new_args);
63  grpc_shutdown();
64 }
65 
66 constexpr char kTestFilter1[] = "test_filter_1";
67 constexpr char kTestFilter2[] = "test_filter_2";
68 
69 // Test filters insertion
70 TEST(XdsChannelStackModifierTest, XdsHttpFiltersInsertion) {
72  grpc_init();
73  // Add 2 test filters to XdsChannelStackModifier
74  const grpc_channel_filter test_filter_1 = {
75  nullptr, nullptr, nullptr, 0, nullptr, nullptr, nullptr,
76  0, nullptr, nullptr, nullptr, nullptr, kTestFilter1};
77  const grpc_channel_filter test_filter_2 = {
78  nullptr, nullptr, nullptr, 0, nullptr, nullptr, nullptr,
79  0, nullptr, nullptr, nullptr, nullptr, kTestFilter2};
80  auto channel_stack_modifier = MakeRefCounted<XdsChannelStackModifier>(
81  std::vector<const grpc_channel_filter*>{&test_filter_1, &test_filter_2});
82  grpc_arg arg = channel_stack_modifier->MakeChannelArg();
83  // Create a phony ChannelStackBuilder object
85  ChannelStackBuilderImpl builder("test", GRPC_SERVER_CHANNEL);
86  builder.SetChannelArgs(ChannelArgs::FromC(args));
88  grpc_transport_vtable fake_transport_vtable;
89  memset(&fake_transport_vtable, 0, sizeof(grpc_transport_vtable));
90  fake_transport_vtable.name = "fake";
91  grpc_transport fake_transport = {&fake_transport_vtable};
92  builder.SetTransport(&fake_transport);
93  // Construct channel stack and verify that the test filters were successfully
94  // added
95  ASSERT_TRUE(CoreConfiguration::Get().channel_init().CreateStack(&builder));
96  std::vector<std::string> filters;
97  for (const auto& entry : *builder.mutable_stack()) {
98  filters.push_back(entry->name);
99  }
100  filters.resize(3);
101  EXPECT_EQ(filters,
102  std::vector<std::string>({"server", kTestFilter1, kTestFilter2}));
103  grpc_shutdown();
104 }
105 
106 // Test filters insertion with OpenCensus plugin registered
107 TEST(XdsChannelStackModifierTest, XdsHttpFiltersInsertionAfterCensus) {
110  grpc_init();
111  // Add 2 test filters to XdsChannelStackModifier
112  const grpc_channel_filter test_filter_1 = {
113  nullptr, nullptr, nullptr, 0, nullptr, nullptr, nullptr,
114  0, nullptr, nullptr, nullptr, nullptr, kTestFilter1};
115  const grpc_channel_filter test_filter_2 = {
116  nullptr, nullptr, nullptr, 0, nullptr, nullptr, nullptr,
117  0, nullptr, nullptr, nullptr, nullptr, kTestFilter2};
118  auto channel_stack_modifier = MakeRefCounted<XdsChannelStackModifier>(
119  std::vector<const grpc_channel_filter*>{&test_filter_1, &test_filter_2});
120  grpc_arg arg = channel_stack_modifier->MakeChannelArg();
121  // Create a phony ChannelStackBuilder object
123  ChannelStackBuilderImpl builder("test", GRPC_SERVER_CHANNEL);
124  builder.SetChannelArgs(ChannelArgs::FromC(args));
126  grpc_transport_vtable fake_transport_vtable;
127  memset(&fake_transport_vtable, 0, sizeof(grpc_transport_vtable));
128  fake_transport_vtable.name = "fake";
129  grpc_transport fake_transport = {&fake_transport_vtable};
130  builder.SetTransport(&fake_transport);
131  // Construct channel stack and verify that the test filters were successfully
132  // added after the census filter
133  ASSERT_TRUE(CoreConfiguration::Get().channel_init().CreateStack(&builder));
134  std::vector<std::string> filters;
135  for (const auto& entry : *builder.mutable_stack()) {
136  filters.push_back(entry->name);
137  }
138  filters.resize(4);
139  EXPECT_EQ(filters, std::vector<std::string>({"server", "opencensus_server",
140  kTestFilter1, kTestFilter2}));
141  grpc_shutdown();
142 }
143 
144 } // namespace
145 } // namespace testing
146 } // namespace grpc_core
147 
148 int main(int argc, char** argv) {
149  ::testing::InitGoogleTest(&argc, argv);
150  grpc::testing::TestEnvironment env(&argc, argv);
151  int ret = RUN_ALL_TESTS();
152  return ret;
153 }
grpc_arg
Definition: grpc_types.h:103
testing
Definition: aws_request_signer_test.cc:25
core_configuration.h
generate.env
env
Definition: generate.py:37
memset
return memset(p, 0, total)
grpc_transport_vtable
Definition: transport_impl.h:37
grpc_core
Definition: call_metric_recorder.h:31
grpc_core::XdsChannelStackModifier::GetFromChannelArgs
static RefCountedPtr< XdsChannelStackModifier > GetFromChannelArgs(const grpc_channel_args &args)
Definition: xds_channel_stack_modifier.cc:96
grpc::RegisterOpenCensusPlugin
void RegisterOpenCensusPlugin()
Definition: grpc_plugin.cc:42
grpc_core::ChannelArgs::FromC
static ChannelArgs FromC(const grpc_channel_args *args)
Definition: channel_args.cc:84
grpc_channel_args
Definition: grpc_types.h:132
EXPECT_EQ
#define EXPECT_EQ(a, b)
Definition: iomgr/time_averaged_stats_test.cc:27
GRPC_SERVER_CHANNEL
@ GRPC_SERVER_CHANNEL
Definition: channel_stack_type.h:36
profile_analyzer.builder
builder
Definition: profile_analyzer.py:159
channel_init.h
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
grpc_core::CoreConfiguration::Get
static const CoreConfiguration & Get()
Definition: core_configuration.h:82
channel_stack.h
grpc.h
grpc_channel_args_destroy
void grpc_channel_args_destroy(grpc_channel_args *a)
Definition: channel_args.cc:360
arg
Definition: cmdline.cc:40
grpc_channel_args_copy
grpc_channel_args * grpc_channel_args_copy(const grpc_channel_args *src)
Definition: channel_args.cc:285
RUN_ALL_TESTS
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2471
xds_channel_stack_modifier.h
opencensus.h
grpc_channel_filter
Definition: channel_stack.h:111
test_config.h
testing::InitGoogleTest
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
Definition: bloaty/third_party/googletest/googletest/src/gtest.cc:6106
ret
UniquePtr< SSL_SESSION > ret
Definition: ssl_x509.cc:1029
main
int main(int argc, char **argv)
Definition: xds_channel_stack_modifier_test.cc:148
grpc::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
grpc_core::CoreConfiguration::Reset
static void Reset()
Definition: core_configuration.cc:96
ASSERT_TRUE
#define ASSERT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1973
grpc_transport
Definition: transport_impl.h:89
grpc_core::testing::TEST
TEST(ServiceConfigParserTest, DoubleRegistration)
Definition: service_config_test.cc:448
channel_stack_builder_impl.h
transport_impl.h
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
grpc_transport_vtable::name
const char * name
Definition: transport_impl.h:43
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
grpc_channel_args_copy_and_add
grpc_channel_args * grpc_channel_args_copy_and_add(const grpc_channel_args *src, const grpc_arg *to_add, size_t num_to_add)
Definition: channel_args.cc:224


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:55