aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/core/channel/channelz_registry_test.cc
diff options
context:
space:
mode:
authorGravatar ncteisen <ncteisen@gmail.com>2018-05-11 13:38:55 -0400
committerGravatar ncteisen <ncteisen@gmail.com>2018-05-17 15:07:53 -0700
commit146c12589c2f8de803f86426d08bbdb97e7f6fac (patch)
treefea8d313792be97baac2cd28619e4dfa2f27cfd6 /test/core/channel/channelz_registry_test.cc
parent96bc3825a391842dd39493d825428d8cc102a76f (diff)
Add meat to the test
Diffstat (limited to 'test/core/channel/channelz_registry_test.cc')
-rw-r--r--test/core/channel/channelz_registry_test.cc72
1 files changed, 71 insertions, 1 deletions
diff --git a/test/core/channel/channelz_registry_test.cc b/test/core/channel/channelz_registry_test.cc
index 8bc651d188..5bc1d2351c 100644
--- a/test/core/channel/channelz_registry_test.cc
+++ b/test/core/channel/channelz_registry_test.cc
@@ -27,6 +27,7 @@
#include "src/core/lib/channel/channel_trace.h"
#include "src/core/lib/channel/channelz_registry.h"
#include "src/core/lib/gpr/useful.h"
+#include "src/core/lib/gprpp/memory.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/json/json.h"
@@ -41,7 +42,76 @@ namespace testing {
// Tests basic ChannelTrace functionality like construction, adding trace, and
// lookups by uuid.
-TEST(ChannelzRegistryTest, BasicTest) {}
+TEST(ChannelzRegistryTest, UuidStartsAboveZeroTest) {
+ int object_to_register;
+ intptr_t uuid = ChannelzRegistry::Default()->Register(&object_to_register);
+ ASSERT_GT(uuid, 0) << "First uuid chose must be greater than zero. Zero if "
+ "reserved according to "
+ "https://github.com/grpc/proposal/blob/master/"
+ "A14-channelz.md";
+ ChannelzRegistry::Default()->Unregister(uuid);
+}
+
+TEST(ChannelzRegistryTest, UuidsAreIncreasing) {
+ int object_to_register;
+ std::vector<intptr_t> uuids;
+ for (int i = 0; i < 10; ++i) {
+ // reregister the same object. It's ok since we are just testing uuids
+ uuids.push_back(ChannelzRegistry::Default()->Register(&object_to_register));
+ }
+ for (size_t i = 1; i < uuids.size(); ++i) {
+ ASSERT_LT(uuids[i - 1], uuids[i]) << "Uuids must always be increasing";
+ }
+}
+
+TEST(ChannelzRegistryTest, RegisterGetTest) {
+ int object_to_register = 42;
+ intptr_t uuid = ChannelzRegistry::Default()->Register(&object_to_register);
+ int* retrieved = ChannelzRegistry::Default()->Get<int>(uuid);
+ ASSERT_EQ(object_to_register, *retrieved);
+ ASSERT_EQ(&object_to_register, retrieved);
+}
+
+TEST(ChannelzRegistryTest, MultipleTypeTest) {
+ int int_to_register = 42;
+ intptr_t int_uuid = ChannelzRegistry::Default()->Register(&int_to_register);
+ std::string str_to_register = "hello world";
+ intptr_t str_uuid = ChannelzRegistry::Default()->Register(&str_to_register);
+ int* retrieved_int = ChannelzRegistry::Default()->Get<int>(int_uuid);
+ std::string* retrieved_str =
+ ChannelzRegistry::Default()->Get<std::string>(str_uuid);
+ ASSERT_EQ(int_to_register, *retrieved_int);
+ ASSERT_EQ(&int_to_register, retrieved_int);
+ ASSERT_STREQ(str_to_register.c_str(), (*retrieved_str).c_str());
+ ASSERT_EQ(&str_to_register, retrieved_str);
+}
+
+namespace {
+class Foo {
+ public:
+ int bar;
+};
+} // namespace
+
+TEST(ChannelzRegistryTest, CustomObjectTest) {
+ Foo* foo = New<Foo>();
+ foo->bar = 1024;
+ intptr_t uuid = ChannelzRegistry::Default()->Register(foo);
+ Foo* retrieved = ChannelzRegistry::Default()->Get<Foo>(uuid);
+ ASSERT_EQ(foo, retrieved);
+ ASSERT_EQ(foo->bar, retrieved->bar);
+}
+
+TEST(ChannelzRegistryTest, NullIfNotPresentTest) {
+ int object_to_register = 42;
+ intptr_t uuid = ChannelzRegistry::Default()->Register(&object_to_register);
+ // try to pull out a uuid that does not exist.
+ int* nonexistant = ChannelzRegistry::Default()->Get<int>(1234);
+ ASSERT_EQ(nonexistant, nullptr);
+ int* retrieved = ChannelzRegistry::Default()->Get<int>(uuid);
+ ASSERT_EQ(object_to_register, *retrieved);
+ ASSERT_EQ(&object_to_register, retrieved);
+}
} // namespace testing
} // namespace grpc_core