From d7ead699f8503dbb2ec8ba470bb6c47cee2ddbee Mon Sep 17 00:00:00 2001
From: yang-g <yangg@google.com>
Date: Thu, 30 Jul 2015 10:57:45 -0700
Subject: [PATCH] Add a test

---
 test/cpp/end2end/end2end_test.cc | 29 ++++++++++++++++++++++++++++-
 test/cpp/util/messages.proto     |  2 ++
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc
index d7a52bf274..2fd8d70cc4 100644
--- a/test/cpp/end2end/end2end_test.cc
+++ b/test/cpp/end2end/end2end_test.cc
@@ -93,6 +93,15 @@ void CheckServerAuthContext(const ServerContext* context) {
   EXPECT_TRUE(auth_ctx->GetPeerIdentity().empty());
 }
 
+bool CheckIsLocalhost(const grpc::string& addr) {
+  const grpc::string kIpv6("ipv6:[::1]:");
+  const grpc::string kIpv4MappedIpv6("ipv6:[::ffff:127.0.0.1]:");
+  const grpc::string kIpv4("ipv4:127.0.0.1:");
+  return addr.substr(0, kIpv4.size()) == kIpv4 ||
+         addr.substr(0, kIpv4MappedIpv6.size()) == kIpv4MappedIpv6 ||
+         addr.substr(0, kIpv6.size()) == kIpv6;
+}
+
 }  // namespace
 
 class TestServiceImpl : public ::grpc::cpp::test::util::TestService::Service {
@@ -148,6 +157,9 @@ class TestServiceImpl : public ::grpc::cpp::test::util::TestService::Service {
       response->set_message(
           grpc::string(request->param().response_message_length(), '\0'));
     }
+    if (request->has_param() && request->param().echo_peer()) {
+      response->mutable_param()->set_peer(context->peer());
+    }
     return Status::OK;
   }
 
@@ -236,7 +248,7 @@ class End2endTest : public ::testing::Test {
 
   void SetUp() GRPC_OVERRIDE {
     int port = grpc_pick_unused_port_or_die();
-    server_address_ << "localhost:" << port;
+    server_address_ << "127.0.0.1:" << port;
     // Setup server
     ServerBuilder builder;
     SslServerCredentialsOptions::PemKeyCertPair pkcp = {test_server1_key,
@@ -818,6 +830,21 @@ TEST_F(End2endTest, HugeResponse) {
   EXPECT_TRUE(s.ok());
 }
 
+TEST_F(End2endTest, Peer) {
+  ResetStub();
+  EchoRequest request;
+  EchoResponse response;
+  request.set_message("hello");
+  request.mutable_param()->set_echo_peer(true);
+
+  ClientContext context;
+  Status s = stub_->Echo(&context, request, &response);
+  EXPECT_EQ(response.message(), request.message());
+  EXPECT_TRUE(s.ok());
+  EXPECT_TRUE(CheckIsLocalhost(response.param().peer()));
+  EXPECT_TRUE(CheckIsLocalhost(context.peer()));
+}
+
 }  // namespace testing
 }  // namespace grpc
 
diff --git a/test/cpp/util/messages.proto b/test/cpp/util/messages.proto
index 2fad8b42a2..24e199b809 100644
--- a/test/cpp/util/messages.proto
+++ b/test/cpp/util/messages.proto
@@ -39,6 +39,7 @@ message RequestParams {
   optional bool echo_metadata = 4;
   optional bool check_auth_context = 5;
   optional int32 response_message_length = 6;
+  optional bool echo_peer = 7;
 }
 
 message EchoRequest {
@@ -49,6 +50,7 @@ message EchoRequest {
 message ResponseParams {
   optional int64 request_deadline = 1;
   optional string host = 2;
+  optional string peer = 3;
 }
 
 message EchoResponse {
-- 
GitLab