channelz_test.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2017 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 <stdlib.h>
22 #include <string.h>
23 
24 #include <gtest/gtest.h>
25 
26 #include <grpc/grpc_security.h>
27 #include <grpc/support/alloc.h>
28 #include <grpc/support/log.h>
30 
35 #include "src/core/lib/json/json.h"
40 
41 namespace grpc_core {
42 namespace channelz {
43 namespace testing {
44 
45 // testing peer to access channel internals
47  public:
48  explicit CallCountingHelperPeer(CallCountingHelper* node) : node_(node) {}
49 
53  return gpr_cycle_counter_to_time(data.last_call_started_cycle);
54  }
55 
56  private:
58 };
59 
60 namespace {
61 
62 std::vector<intptr_t> GetUuidListFromArray(const Json::Array& arr) {
63  std::vector<intptr_t> uuids;
64  for (const Json& value : arr) {
66  if (value.type() != Json::Type::OBJECT) continue;
67  const Json::Object& object = value.object_value();
68  auto it = object.find("ref");
69  EXPECT_NE(it, object.end());
70  if (it == object.end()) continue;
71  EXPECT_EQ(it->second.type(), Json::Type::OBJECT);
72  if (it->second.type() != Json::Type::OBJECT) continue;
73  const Json::Object& ref_object = it->second.object_value();
74  it = ref_object.find("channelId");
75  EXPECT_NE(it, ref_object.end());
76  if (it != ref_object.end()) {
77  uuids.push_back(atoi(it->second.string_value().c_str()));
78  }
79  }
80  return uuids;
81 }
82 
83 void ValidateJsonArraySize(const Json& array, size_t expected) {
84  if (expected == 0) {
86  } else {
88  EXPECT_EQ(array.array_value().size(), expected);
89  }
90 }
91 
92 void ValidateJsonEnd(const Json& json, bool end) {
93  auto it = json.object_value().find("end");
94  if (end) {
95  ASSERT_NE(it, json.object_value().end());
96  EXPECT_EQ(it->second.type(), Json::Type::JSON_TRUE);
97  } else {
98  ASSERT_EQ(it, json.object_value().end());
99  }
100 }
101 
102 void ValidateGetTopChannels(size_t expected_channels) {
105  json_str.c_str());
107  Json parsed_json = Json::Parse(json_str, &error);
109  ASSERT_EQ(parsed_json.type(), Json::Type::OBJECT);
110  // This check will naturally have to change when we support pagination.
111  // tracked: https://github.com/grpc/grpc/issues/16019.
112  ValidateJsonArraySize((*parsed_json.mutable_object())["channel"],
113  expected_channels);
114  ValidateJsonEnd(parsed_json, true);
115  // Also check that the core API formats this correctly.
116  char* core_api_json_str = grpc_channelz_get_top_channels(0);
118  core_api_json_str);
119  gpr_free(core_api_json_str);
120 }
121 
122 void ValidateGetServers(size_t expected_servers) {
125  json_str.c_str());
127  Json parsed_json = Json::Parse(json_str, &error);
129  ASSERT_EQ(parsed_json.type(), Json::Type::OBJECT);
130  // This check will naturally have to change when we support pagination.
131  // tracked: https://github.com/grpc/grpc/issues/16019.
132  ValidateJsonArraySize((*parsed_json.mutable_object())["server"],
133  expected_servers);
134  ValidateJsonEnd(parsed_json, true);
135  // Also check that the core API formats this correctly.
136  char* core_api_json_str = grpc_channelz_get_servers(0);
138  core_api_json_str);
139  gpr_free(core_api_json_str);
140 }
141 
142 class ChannelFixture {
143  public:
144  explicit ChannelFixture(int max_tracer_event_memory = 0) {
145  grpc_arg client_a[] = {
148  max_tracer_event_memory),
150  const_cast<char*>(GRPC_ARG_ENABLE_CHANNELZ), true)};
151  grpc_channel_args client_args = {GPR_ARRAY_SIZE(client_a), client_a};
153  channel_ = grpc_channel_create("fake_target", creds, &client_args);
155  }
156 
157  ~ChannelFixture() { grpc_channel_destroy(channel_); }
158 
159  grpc_channel* channel() { return channel_; }
160 
161  private:
163 };
164 
165 class ServerFixture {
166  public:
167  explicit ServerFixture(int max_tracer_event_memory = 0) {
168  grpc_arg server_a[] = {
171  max_tracer_event_memory),
173  const_cast<char*>(GRPC_ARG_ENABLE_CHANNELZ), true),
174  };
175  grpc_channel_args server_args = {GPR_ARRAY_SIZE(server_a), server_a};
176  server_ = grpc_server_create(&server_args, nullptr);
177  }
178 
179  ~ServerFixture() { grpc_server_destroy(server_); }
180 
181  grpc_server* server() const { return server_; }
182 
183  private:
185 };
186 
187 struct ValidateChannelDataArgs {
191 };
192 
193 void ValidateChildInteger(const Json::Object& object, const std::string& key,
194  int64_t expected) {
195  auto it = object.find(key);
196  if (expected == 0) {
197  ASSERT_EQ(it, object.end());
198  return;
199  }
200  ASSERT_NE(it, object.end());
201  ASSERT_EQ(it->second.type(), Json::Type::STRING);
202  int64_t gotten_number = static_cast<int64_t>(
203  strtol(it->second.string_value().c_str(), nullptr, 0));
204  EXPECT_EQ(gotten_number, expected);
205 }
206 
207 void ValidateCounters(const std::string& json_str,
208  const ValidateChannelDataArgs& args) {
210  Json json = Json::Parse(json_str, &error);
212  ASSERT_EQ(json.type(), Json::Type::OBJECT);
213  Json::Object* object = json.mutable_object();
214  Json& data = (*object)["data"];
216  ValidateChildInteger(data.object_value(), "callsStarted", args.calls_started);
217  ValidateChildInteger(data.object_value(), "callsFailed", args.calls_failed);
218  ValidateChildInteger(data.object_value(), "callsSucceeded",
219  args.calls_succeeded);
220 }
221 
222 void ValidateChannel(ChannelNode* channel,
223  const ValidateChannelDataArgs& args) {
224  std::string json_str = channel->RenderJsonString();
226  ValidateCounters(json_str, args);
227  // also check that the core API formats this the correct way
228  char* core_api_json_str = grpc_channelz_get_channel(channel->uuid());
230  core_api_json_str);
231  gpr_free(core_api_json_str);
232 }
233 
234 void ValidateServer(ServerNode* server, const ValidateChannelDataArgs& args) {
235  std::string json_str = server->RenderJsonString();
237  ValidateCounters(json_str, args);
238  // also check that the core API formats this the correct way
239  char* core_api_json_str = grpc_channelz_get_server(server->uuid());
241  core_api_json_str);
242  gpr_free(core_api_json_str);
243 }
244 
245 gpr_timespec GetLastCallStartedTime(CallCountingHelper* channel) {
246  CallCountingHelperPeer peer(channel);
247  return peer.last_call_started_time();
248 }
249 
250 void ChannelzSleep(int64_t sleep_us) {
252  gpr_time_from_micros(sleep_us, GPR_TIMESPAN)));
254 }
255 
256 } // anonymous namespace
257 
259 
260 TEST_P(ChannelzChannelTest, BasicChannel) {
262  ChannelFixture channel(GetParam());
263  ChannelNode* channelz_channel =
265  ValidateChannel(channelz_channel, {0, 0, 0});
266 }
267 
268 TEST(ChannelzChannelTest, ChannelzDisabled) {
270  // explicitly disable channelz
271  grpc_arg arg[] = {
274  0),
276  const_cast<char*>(GRPC_ARG_ENABLE_CHANNELZ), false)};
279  grpc_channel* channel = grpc_channel_create("fake_target", creds, &args);
282  ASSERT_EQ(channelz_channel, nullptr);
284 }
285 
286 TEST_P(ChannelzChannelTest, BasicChannelAPIFunctionality) {
288  ChannelFixture channel(GetParam());
289  ChannelNode* channelz_channel =
291  channelz_channel->RecordCallStarted();
292  channelz_channel->RecordCallFailed();
293  channelz_channel->RecordCallSucceeded();
294  ValidateChannel(channelz_channel, {1, 1, 1});
295  channelz_channel->RecordCallStarted();
296  channelz_channel->RecordCallFailed();
297  channelz_channel->RecordCallSucceeded();
298  channelz_channel->RecordCallStarted();
299  channelz_channel->RecordCallFailed();
300  channelz_channel->RecordCallSucceeded();
301  ValidateChannel(channelz_channel, {3, 3, 3});
302 }
303 
304 TEST_P(ChannelzChannelTest, LastCallStartedTime) {
307  // start a call to set the last call started timestamp
308  counter.RecordCallStarted();
309  gpr_timespec time1 = GetLastCallStartedTime(&counter);
310  // time gone by should not affect the timestamp
311  ChannelzSleep(100);
312  gpr_timespec time2 = GetLastCallStartedTime(&counter);
313  EXPECT_EQ(gpr_time_cmp(time1, time2), 0);
314  // calls succeeded or failed should not affect the timestamp
315  ChannelzSleep(100);
316  counter.RecordCallFailed();
317  counter.RecordCallSucceeded();
318  gpr_timespec time3 = GetLastCallStartedTime(&counter);
319  EXPECT_EQ(gpr_time_cmp(time1, time3), 0);
320  // another call started should affect the timestamp
321  // sleep for extra long to avoid flakes (since we cache Now())
322  ChannelzSleep(5000);
323  counter.RecordCallStarted();
324  gpr_timespec time4 = GetLastCallStartedTime(&counter);
325  EXPECT_NE(gpr_time_cmp(time1, time4), 0);
326 }
327 
329  protected:
330  // ensure we always have a fresh registry for tests.
331  void SetUp() override { ChannelzRegistry::TestOnlyReset(); }
332 
334 };
335 
336 TEST_F(ChannelzRegistryBasedTest, BasicGetTopChannelsTest) {
338  ChannelFixture channel;
339  ValidateGetTopChannels(1);
340 }
341 
344  ValidateGetTopChannels(0);
345 }
346 
347 TEST_F(ChannelzRegistryBasedTest, ManyChannelsTest) {
349  ChannelFixture channels[10];
350  (void)channels; // suppress unused variable error
351  ValidateGetTopChannels(10);
352 }
353 
354 TEST_F(ChannelzRegistryBasedTest, GetTopChannelsPagination) {
356  // This is over the pagination limit.
357  ChannelFixture channels[150];
358  (void)channels; // suppress unused variable error
361  json_str.c_str());
363  Json parsed_json = Json::Parse(json_str, &error);
365  ASSERT_EQ(parsed_json.type(), Json::Type::OBJECT);
366  // 100 is the pagination limit.
367  ValidateJsonArraySize((*parsed_json.mutable_object())["channel"], 100);
368  ValidateJsonEnd(parsed_json, false);
369  // Now we get the rest.
370  json_str = ChannelzRegistry::GetTopChannels(101);
372  json_str.c_str());
374  parsed_json = Json::Parse(json_str, &error);
376  ASSERT_EQ(parsed_json.type(), Json::Type::OBJECT);
377  ValidateJsonArraySize((*parsed_json.mutable_object())["channel"], 50);
378  ValidateJsonEnd(parsed_json, true);
379 }
380 
381 TEST_F(ChannelzRegistryBasedTest, GetTopChannelsUuidCheck) {
382  const intptr_t kNumChannels = 50;
384  ChannelFixture channels[kNumChannels];
385  (void)channels; // suppress unused variable error
388  Json parsed_json = Json::Parse(json_str, &error);
390  ASSERT_EQ(parsed_json.type(), Json::Type::OBJECT);
391  Json& array = (*parsed_json.mutable_object())["channel"];
392  ValidateJsonArraySize(array, kNumChannels);
393  std::vector<intptr_t> uuids = GetUuidListFromArray(array.array_value());
394  for (int i = 0; i < kNumChannels; ++i) {
395  EXPECT_EQ(i + 1, uuids[i]);
396  }
397 }
398 
399 TEST_F(ChannelzRegistryBasedTest, GetTopChannelsMiddleUuidCheck) {
400  const intptr_t kNumChannels = 50;
401  const intptr_t kMidQuery = 40;
403  ChannelFixture channels[kNumChannels];
404  (void)channels; // suppress unused variable error
405  // Only query for the end of the channels.
406  std::string json_str = ChannelzRegistry::GetTopChannels(kMidQuery);
408  Json parsed_json = Json::Parse(json_str, &error);
410  ASSERT_EQ(parsed_json.type(), Json::Type::OBJECT);
411  Json& array = (*parsed_json.mutable_object())["channel"];
412  ValidateJsonArraySize(array, kNumChannels - kMidQuery + 1);
413  std::vector<intptr_t> uuids = GetUuidListFromArray(array.array_value());
414  for (size_t i = 0; i < uuids.size(); ++i) {
415  EXPECT_EQ(static_cast<intptr_t>(kMidQuery + i), uuids[i]);
416  }
417 }
418 
419 TEST_F(ChannelzRegistryBasedTest, GetTopChannelsNoHitUuid) {
421  ChannelFixture pre_channels[40]; // will take uuid[1, 40]
422  (void)pre_channels; // suppress unused variable error
423  ServerFixture servers[10]; // will take uuid[41, 50]
424  (void)servers; // suppress unused variable error
425  ChannelFixture channels[10]; // will take uuid[51, 60]
426  (void)channels; // suppress unused variable error
427  // Query in the middle of the server channels.
430  Json parsed_json = Json::Parse(json_str, &error);
432  ASSERT_EQ(parsed_json.type(), Json::Type::OBJECT);
433  Json& array = (*parsed_json.mutable_object())["channel"];
434  ValidateJsonArraySize(array, 10);
435  std::vector<intptr_t> uuids = GetUuidListFromArray(array.array_value());
436  for (size_t i = 0; i < uuids.size(); ++i) {
437  EXPECT_EQ(static_cast<intptr_t>(51 + i), uuids[i]);
438  }
439 }
440 
441 TEST_F(ChannelzRegistryBasedTest, GetTopChannelsMoreGaps) {
443  ChannelFixture channel_with_uuid1;
444  { ServerFixture channel_with_uuid2; }
445  ChannelFixture channel_with_uuid3;
446  { ServerFixture server_with_uuid4; }
447  ChannelFixture channel_with_uuid5;
448  // Current state of list: [1, NULL, 3, NULL, 5]
451  Json parsed_json = Json::Parse(json_str, &error);
453  ASSERT_EQ(parsed_json.type(), Json::Type::OBJECT);
454  Json array = (*parsed_json.mutable_object())["channel"];
455  ValidateJsonArraySize(array, 2);
456  std::vector<intptr_t> uuids = GetUuidListFromArray(array.array_value());
457  EXPECT_EQ(static_cast<intptr_t>(3), uuids[0]);
458  EXPECT_EQ(static_cast<intptr_t>(5), uuids[1]);
459  json_str = ChannelzRegistry::GetTopChannels(4);
461  parsed_json = Json::Parse(json_str, &error);
463  ASSERT_EQ(parsed_json.type(), Json::Type::OBJECT);
464  array = (*parsed_json.mutable_object())["channel"];
465  ValidateJsonArraySize(array, 1);
466  uuids = GetUuidListFromArray(array.array_value());
467  EXPECT_EQ(static_cast<intptr_t>(5), uuids[0]);
468 }
469 
470 TEST_F(ChannelzRegistryBasedTest, GetTopChannelsUuidAfterCompaction) {
471  const intptr_t kLoopIterations = 50;
473  std::vector<std::unique_ptr<ChannelFixture>> even_channels;
474  {
475  // these will delete and unregister themselves after this block.
476  std::vector<std::unique_ptr<ChannelFixture>> odd_channels;
477  for (int i = 0; i < kLoopIterations; i++) {
478  odd_channels.push_back(absl::make_unique<ChannelFixture>());
479  even_channels.push_back(absl::make_unique<ChannelFixture>());
480  }
481  }
484  Json parsed_json = Json::Parse(json_str, &error);
486  ASSERT_EQ(parsed_json.type(), Json::Type::OBJECT);
487  Json& array = (*parsed_json.mutable_object())["channel"];
488  ValidateJsonArraySize(array, kLoopIterations);
489  std::vector<intptr_t> uuids = GetUuidListFromArray(array.array_value());
490  for (int i = 0; i < kLoopIterations; ++i) {
491  // only the even uuids will still be present.
492  EXPECT_EQ((i + 1) * 2, uuids[i]);
493  }
494 }
495 
496 TEST_F(ChannelzRegistryBasedTest, InternalChannelTest) {
498  ChannelFixture channels[10];
499  (void)channels; // suppress unused variable error
500  // create an internal channel
501  grpc_arg client_a[] = {
503  const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
505  const_cast<char*>(GRPC_ARG_ENABLE_CHANNELZ), true),
506  };
507  grpc_channel_args client_args = {GPR_ARRAY_SIZE(client_a), client_a};
509  grpc_channel* internal_channel =
510  grpc_channel_create("fake_target", creds, &client_args);
512  // The internal channel should not be returned from the request
513  ValidateGetTopChannels(10);
514  grpc_channel_destroy(internal_channel);
515 }
516 
517 TEST(ChannelzServerTest, BasicServerAPIFunctionality) {
519  ServerFixture server(10);
520  ServerNode* channelz_server = Server::FromC(server.server())->channelz_node();
521  channelz_server->RecordCallStarted();
522  channelz_server->RecordCallFailed();
523  channelz_server->RecordCallSucceeded();
524  ValidateServer(channelz_server, {1, 1, 1});
525  channelz_server->RecordCallStarted();
526  channelz_server->RecordCallFailed();
527  channelz_server->RecordCallSucceeded();
528  channelz_server->RecordCallStarted();
529  channelz_server->RecordCallFailed();
530  channelz_server->RecordCallSucceeded();
531  ValidateServer(channelz_server, {3, 3, 3});
532 }
533 
534 TEST_F(ChannelzRegistryBasedTest, BasicGetServersTest) {
536  ServerFixture server;
537  ValidateGetServers(1);
538 }
539 
542  ValidateGetServers(0);
543 }
544 
547  ServerFixture servers[10];
548  (void)servers; // suppress unused variable error
549  ValidateGetServers(10);
550 }
551 
552 INSTANTIATE_TEST_SUITE_P(ChannelzChannelTestSweep, ChannelzChannelTest,
553  ::testing::Values(0, 8, 64, 1024, 1024 * 1024));
554 
555 } // namespace testing
556 } // namespace channelz
557 } // namespace grpc_core
558 
559 int main(int argc, char** argv) {
560  grpc::testing::TestEnvironment env(&argc, argv);
561  grpc_init();
562  ::testing::InitGoogleTest(&argc, argv);
563  int ret = RUN_ALL_TESTS();
564  grpc_shutdown();
565  return ret;
566 }
grpc_core::Json::Array
std::vector< Json > Array
Definition: src/core/lib/json/json.h:55
grpc_arg
Definition: grpc_types.h:103
grpc_channelz_get_top_channels
GRPCAPI char * grpc_channelz_get_top_channels(intptr_t start_channel_id)
Definition: channelz_registry.cc:176
GPR_TIMESPAN
@ GPR_TIMESPAN
Definition: gpr_types.h:45
testing
Definition: aws_request_signer_test.cc:25
ASSERT_NE
#define ASSERT_NE(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2060
grpc_core::Json::Type::JSON_TRUE
@ JSON_TRUE
regen-readme.it
it
Definition: regen-readme.py:15
GRPC_ERROR_NONE
#define GRPC_ERROR_NONE
Definition: error.h:234
log.h
grpc::testing::ValidateGetTopChannelsResponseProtoJsonTranslation
void ValidateGetTopChannelsResponseProtoJsonTranslation(const char *json_c_str)
Definition: channel_trace_proto_helper.cc:86
grpc::testing::ValidateServerProtoJsonTranslation
void ValidateServerProtoJsonTranslation(const char *json_c_str)
Definition: channel_trace_proto_helper.cc:106
grpc_core::channelz::testing::INSTANTIATE_TEST_SUITE_P
INSTANTIATE_TEST_SUITE_P(ChannelzChannelTestSweep, ChannelzChannelTest, ::testing::Values(0, 8, 64, 1024, 1024 *1024))
grpc_core::channelz::testing::ChannelzRegistryBasedTest::SetUp
void SetUp() override
Definition: channelz_test.cc:331
channel_
grpc_channel * channel_
Definition: channelz_test.cc:162
grpc_core::Json::type
Type type() const
Definition: src/core/lib/json/json.h:174
generate.env
env
Definition: generate.py:37
server_
grpc_server * server_
Definition: channelz_test.cc:184
grpc_core::Json::Type::OBJECT
@ OBJECT
grpc_core
Definition: call_metric_recorder.h:31
grpc_core::channelz::testing::CallCountingHelperPeer::last_call_started_time
gpr_timespec last_call_started_time() const
Definition: channelz_test.cc:50
grpc::testing::ValidateChannelProtoJsonTranslation
void ValidateChannelProtoJsonTranslation(const char *json_c_str)
Definition: channel_trace_proto_helper.cc:82
grpc_core::channelz::ChannelNode::RecordCallFailed
void RecordCallFailed()
Definition: channelz.h:204
grpc_core::channelz::testing::TEST_F
TEST_F(ChannelzRegistryTest, UuidStartsAboveZeroTest)
Definition: channelz_registry_test.cc:54
string.h
grpc_core::channelz::ChannelzRegistry::GetServers
static std::string GetServers(intptr_t start_server_id)
Definition: channelz_registry.h:55
grpc_channelz_get_server
GRPCAPI char * grpc_channelz_get_server(intptr_t server_id)
Definition: channelz_registry.cc:192
gpr_free
GPRAPI void gpr_free(void *ptr)
Definition: alloc.cc:51
useful.h
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
error
grpc_error_handle error
Definition: retry_filter.cc:499
grpc_core::channelz::ChannelzRegistry::TestOnlyReset
static void TestOnlyReset()
Definition: channelz_registry.h:64
channel_trace_proto_helper.h
gpr_cycle_counter_to_time
gpr_timespec gpr_cycle_counter_to_time(gpr_cycle_counter cycles)
grpc_core::channelz::testing::ChannelzRegistryBasedTest::TearDown
void TearDown() override
Definition: channelz_test.cc:333
grpc::testing::ValidateGetChannelResponseProtoJsonTranslation
void ValidateGetChannelResponseProtoJsonTranslation(const char *json_c_str)
Definition: channel_trace_proto_helper.cc:92
grpc_server_create
GRPCAPI grpc_server * grpc_server_create(const grpc_channel_args *args, void *reserved)
Definition: src/core/lib/surface/server.cc:1456
GRPC_ARG_ENABLE_CHANNELZ
#define GRPC_ARG_ENABLE_CHANNELZ
Definition: grpc_types.h:323
grpc_core::Json::mutable_object
Object * mutable_object()
Definition: src/core/lib/json/json.h:178
grpc_security.h
grpc_core::channelz::testing::CallCountingHelperPeer::node_
CallCountingHelper * node_
Definition: channelz_test.cc:57
channelz.h
grpc_channel_args
Definition: grpc_types.h:132
grpc_channelz_get_servers
GRPCAPI char * grpc_channelz_get_servers(intptr_t start_server_id)
Definition: channelz_registry.cc:184
grpc_core::channelz::ServerNode
Definition: channelz.h:239
testing::TestWithParam
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1883
EXPECT_EQ
#define EXPECT_EQ(a, b)
Definition: iomgr/time_averaged_stats_test.cc:27
grpc_core::channelz::testing::TEST
TEST(ChannelTracerTest, BasicTest)
Definition: channel_trace_test.cc:127
grpc_core::channelz::testing::TEST_P
TEST_P(ChannelzChannelTest, BasicChannel)
Definition: channelz_test.cc:260
string_util.h
server
std::unique_ptr< Server > server
Definition: channelz_service_test.cc:330
channelz_registry.h
grpc::testing::ValidateGetServerResponseProtoJsonTranslation
void ValidateGetServerResponseProtoJsonTranslation(const char *json_c_str)
Definition: channel_trace_proto_helper.cc:97
channel
wrapped_grpc_channel * channel
Definition: src/php/ext/grpc/call.h:33
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
grpc_core::channelz::ServerNode::RecordCallStarted
void RecordCallStarted()
Definition: channelz.h:268
end
char * end
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:1008
calls_succeeded
int64_t calls_succeeded
Definition: channelz_test.cc:190
array
Definition: undname.c:101
int64_t
signed __int64 int64_t
Definition: stdint-msvc2008.h:89
gpr_time_cmp
GPRAPI int gpr_time_cmp(gpr_timespec a, gpr_timespec b)
Definition: src/core/lib/gpr/time.cc:30
Json
JSON (JavaScript Object Notation).
Definition: third_party/bloaty/third_party/protobuf/conformance/third_party/jsoncpp/json.h:227
grpc_core::channelz::testing::CallCountingHelperPeer
Definition: channelz_test.cc:46
EXPECT_NE
#define EXPECT_NE(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2028
grpc_channel_get_channelz_node
grpc_core::channelz::ChannelNode * grpc_channel_get_channelz_node(grpc_channel *channel)
Definition: src/core/lib/surface/channel.h:183
gpr_sleep_until
GPRAPI void gpr_sleep_until(gpr_timespec until)
grpc_insecure_credentials_create
GRPCAPI grpc_channel_credentials * grpc_insecure_credentials_create()
Definition: core/lib/security/credentials/insecure/insecure_credentials.cc:64
counter
static int counter
Definition: abseil-cpp/absl/flags/reflection_test.cc:131
grpc_core::channelz::ChannelzRegistry::GetTopChannels
static std::string GetTopChannels(intptr_t start_channel_id)
Definition: channelz_registry.h:49
arg
Definition: cmdline.cc:40
grpc_core::channelz::ServerNode::RecordCallSucceeded
void RecordCallSucceeded()
Definition: channelz.h:270
main
int main(int argc, char **argv)
Definition: channelz_test.cc:559
grpc_server
struct grpc_server grpc_server
Definition: grpc_types.h:65
intptr_t
_W64 signed int intptr_t
Definition: stdint-msvc2008.h:118
grpc_core::channelz::CallCountingHelper::CollectData
void CollectData(CounterData *out)
Definition: src/core/lib/channel/channelz.cc:102
grpc_core::Json::Type::ARRAY
@ ARRAY
calls_failed
int64_t calls_failed
Definition: channelz_test.cc:189
data
char data[kBufferLength]
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:1006
grpc_server_destroy
GRPCAPI void grpc_server_destroy(grpc_server *server)
Definition: src/core/lib/surface/server.cc:1519
json.h
RUN_ALL_TESTS
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2471
grpc_core::channelz::CallCountingHelper::CounterData
Definition: channelz.h:163
gpr_now
GPRAPI gpr_timespec gpr_now(gpr_clock_type clock)
grpc_core::ExecCtx
Definition: exec_ctx.h:97
grpc::testing::ValidateGetServersResponseProtoJsonTranslation
void ValidateGetServersResponseProtoJsonTranslation(const char *json_c_str)
Definition: channel_trace_proto_helper.cc:110
grpc_core::channelz::ChannelNode::RecordCallSucceeded
void RecordCallSucceeded()
Definition: channelz.h:205
grpc_core::Json::Parse
static Json Parse(absl::string_view json_str, grpc_error_handle *error)
Definition: json_reader.cc:899
grpc_core::channelz::ChannelNode
Definition: channelz.h:178
test_config.h
value
const char * value
Definition: hpack_parser_table.cc:165
grpc_channel_credentials_release
GRPCAPI void grpc_channel_credentials_release(grpc_channel_credentials *creds)
Definition: credentials.cc:36
grpc_core::channelz::CallCountingHelper
Definition: channelz.h:122
grpc_core::Json::Object
std::map< std::string, Json > Object
Definition: src/core/lib/json/json.h:54
grpc_channelz_get_channel
GRPCAPI char * grpc_channelz_get_channel(intptr_t channel_id)
Definition: channelz_registry.cc:229
grpc_core::channelz::ChannelNode::RecordCallStarted
void RecordCallStarted()
Definition: channelz.h:203
calls_started
int64_t calls_started
Definition: channelz_test.cc:188
GPR_ARRAY_SIZE
#define GPR_ARRAY_SIZE(array)
Definition: useful.h:129
grpc_channel_create
GRPCAPI grpc_channel * grpc_channel_create(const char *target, grpc_channel_credentials *creds, const grpc_channel_args *args)
Definition: chttp2_connector.cc:366
testing::InitGoogleTest
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
Definition: bloaty/third_party/googletest/googletest/src/gtest.cc:6106
key
const char * key
Definition: hpack_parser_table.cc:164
testing::Values
internal::ValueArray< T... > Values(T... v)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest-param-test.h:335
grpc_channel_arg_integer_create
grpc_arg grpc_channel_arg_integer_create(char *name, int value)
Definition: channel_args.cc:484
gpr_time_add
GPRAPI gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b)
Definition: src/core/lib/gpr/time.cc:135
grpc_core::channelz::testing::ChannelzChannelTest
Definition: channelz_test.cc:258
server
Definition: examples/python/async_streaming/server.py:1
GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE
#define GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE
Definition: grpc_types.h:318
exec_ctx
grpc_core::ExecCtx exec_ctx
Definition: end2end_binder_transport_test.cc:75
grpc_error_std_string
std::string grpc_error_std_string(grpc_error_handle error)
Definition: error.cc:944
ret
UniquePtr< SSL_SESSION > ret
Definition: ssl_x509.cc:1029
grpc_core::channelz::testing::ChannelzRegistryBasedTest
Definition: channelz_test.cc:328
grpc_core::Json::Type::JSON_NULL
@ JSON_NULL
gpr_time_from_micros
GPRAPI gpr_timespec gpr_time_from_micros(int64_t us, gpr_clock_type clock_type)
Definition: src/core/lib/gpr/time.cc:115
alloc.h
grpc::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
grpc_channel_destroy
GRPCAPI void grpc_channel_destroy(grpc_channel *channel)
Definition: channel.cc:437
exec_ctx.h
server.h
channelz
void channelz(grpc_end2end_test_config config)
Definition: test/core/end2end/tests/channelz.cc:318
grpc_channel
struct grpc_channel grpc_channel
Definition: grpc_types.h:62
GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL
#define GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL
Definition: channelz.h:52
grpc_core::channelz::ServerNode::RecordCallFailed
void RecordCallFailed()
Definition: channelz.h:269
grpc_core::channelz::testing::CallCountingHelperPeer::CallCountingHelperPeer
CallCountingHelperPeer(CallCountingHelper *node)
Definition: channelz_test.cc:48
gpr_timespec
Definition: gpr_types.h:50
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
grpc_error
Definition: error_internal.h:42
channel_trace.h
GPR_CLOCK_REALTIME
@ GPR_CLOCK_REALTIME
Definition: gpr_types.h:39
grpc_core::CppImplOf< Server, grpc_server >::FromC
static Server * FromC(grpc_server *c_type)
Definition: cpp_impl_of.h:30
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
grpc_channel_credentials
Definition: src/core/lib/security/credentials/credentials.h:96
grpc_core::Server::channelz_node
channelz::ServerNode * channelz_node() const
Definition: src/core/lib/surface/server.h:133
grpc_core::ExecCtx::Get
static ExecCtx * Get()
Definition: exec_ctx.h:205
grpc_core::Json::Type::STRING
@ STRING
run_interop_tests.servers
servers
Definition: run_interop_tests.py:1288
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
ASSERT_EQ
#define ASSERT_EQ(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2056
grpc_core::ExecCtx::InvalidateNow
void InvalidateNow()
Definition: exec_ctx.h:188
channel.h


grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:53