diff options
author | Yuchen Zeng <zyc@google.com> | 2016-10-13 17:26:26 -0700 |
---|---|---|
committer | Yuchen Zeng <zyc@google.com> | 2016-10-13 17:26:26 -0700 |
commit | de3daf5d630fdd4396ed37b59d9550d5665b1e58 (patch) | |
tree | 11e9d9061f1739de16341636118c209ffdfb5336 /test/cpp/common/channel_arguments_test.cc | |
parent | a4f708a4c4af88e114209eb29f625c4d4d935bb4 (diff) |
More interfaces for grpc_socket_mutator
Diffstat (limited to 'test/cpp/common/channel_arguments_test.cc')
-rw-r--r-- | test/cpp/common/channel_arguments_test.cc | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/test/cpp/common/channel_arguments_test.cc b/test/cpp/common/channel_arguments_test.cc index 1443eb2f68..0d1e06b1e9 100644 --- a/test/cpp/common/channel_arguments_test.cc +++ b/test/cpp/common/channel_arguments_test.cc @@ -34,11 +34,53 @@ #include <grpc++/support/channel_arguments.h> #include <grpc/grpc.h> +#include <grpc/support/log.h> #include <gtest/gtest.h> +#include "src/core/lib/iomgr/socket_mutator.h" namespace grpc { namespace testing { +namespace { + +// A simple grpc_socket_mutator to be used to test SetSocketMutator +class TestSocketMutator : public grpc_socket_mutator { + public: + TestSocketMutator(); + + bool MutateFd(int fd) { + // Do nothing on the fd + return true; + } +}; + +// +// C API for TestSocketMutator +// + +bool test_mutator_mutate_fd(int fd, grpc_socket_mutator* mutator) { + TestSocketMutator* tsm = (TestSocketMutator*)mutator; + return tsm->MutateFd(fd); +} + +void test_mutator_destroy(grpc_socket_mutator* mutator) { + TestSocketMutator* tsm = (TestSocketMutator*)mutator; + gpr_log(GPR_ERROR, "destroy is called"); + delete tsm; +} + +grpc_socket_mutator_vtable test_mutator_vtable = {test_mutator_mutate_fd, + test_mutator_destroy}; + +// +// TestSocketMutator implementation +// + +TestSocketMutator::TestSocketMutator() { + grpc_socket_mutator_init(this, &test_mutator_vtable); +} +} + class ChannelArgumentsTest : public ::testing::Test { protected: ChannelArgumentsTest() @@ -165,6 +207,26 @@ TEST_F(ChannelArgumentsTest, SetPointer) { EXPECT_TRUE(HasArg(arg0)); } +TEST_F(ChannelArgumentsTest, SetSocketMutator) { + VerifyDefaultChannelArgs(); + grpc_arg arg0, arg1; + TestSocketMutator* mutator0 = new TestSocketMutator(); + TestSocketMutator* mutator1 = new TestSocketMutator(); + arg0 = grpc_socket_mutator_to_arg(mutator0); + arg1 = grpc_socket_mutator_to_arg(mutator1); + + channel_args_.SetSocketMutator(mutator0); + EXPECT_TRUE(HasArg(arg0)); + + channel_args_.SetSocketMutator(mutator1); + EXPECT_TRUE(HasArg(arg1)); + // arg0 is replaced by arg1 + EXPECT_FALSE(HasArg(arg0)); + + // arg0 is destroyed by grpc_socket_mutator_to_arg(mutator1) + arg1.value.pointer.vtable->destroy(arg1.value.pointer.p); +} + TEST_F(ChannelArgumentsTest, SetUserAgentPrefix) { VerifyDefaultChannelArgs(); grpc::string prefix("prefix"); |