Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(220)

Side by Side Diff: third_party/grpc/test/cpp/grpclb/grpclb_api_test.cc

Issue 1932353002: Initial checkin of gRPC to third_party/ Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 *
3 * Copyright 2016, Google Inc.
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following disclaimer
14 * in the documentation and/or other materials provided with the
15 * distribution.
16 * * Neither the name of Google Inc. nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 */
33
34 #include <gtest/gtest.h>
35 #include <string>
36
37 #include "src/core/client_config/lb_policies/load_balancer_api.h"
38 #include "src/proto/grpc/lb/v0/load_balancer.pb.h" // C++ version
39
40 namespace grpc {
41 namespace {
42
43 using grpc::lb::v0::LoadBalanceRequest;
44 using grpc::lb::v0::LoadBalanceResponse;
45
46 class GrpclbTest : public ::testing::Test {};
47
48 TEST_F(GrpclbTest, CreateRequest) {
49 const std::string service_name = "AServiceName";
50 LoadBalanceRequest request;
51 grpc_grpclb_request* c_req = grpc_grpclb_request_create(service_name.c_str());
52 gpr_slice slice = grpc_grpclb_request_encode(c_req);
53 const int num_bytes_written = GPR_SLICE_LENGTH(slice);
54 EXPECT_GT(num_bytes_written, 0);
55 request.ParseFromArray(GPR_SLICE_START_PTR(slice), num_bytes_written);
56 EXPECT_EQ(request.initial_request().name(), service_name);
57 gpr_slice_unref(slice);
58 grpc_grpclb_request_destroy(c_req);
59 }
60
61 TEST_F(GrpclbTest, ParseResponse) {
62 LoadBalanceResponse response;
63 const std::string client_config_str = "I'm a client config";
64 auto* initial_response = response.mutable_initial_response();
65 initial_response->set_client_config(client_config_str);
66 auto* client_stats_report_interval =
67 initial_response->mutable_client_stats_report_interval();
68 client_stats_report_interval->set_seconds(123);
69 client_stats_report_interval->set_nanos(456);
70
71 const std::string encoded_response = response.SerializeAsString();
72 gpr_slice encoded_slice =
73 gpr_slice_from_copied_string(encoded_response.c_str());
74 grpc_grpclb_response* c_response = grpc_grpclb_response_parse(encoded_slice);
75 EXPECT_TRUE(c_response->has_initial_response);
76 EXPECT_TRUE(c_response->initial_response.has_client_config);
77 EXPECT_FALSE(c_response->initial_response.has_load_balancer_delegate);
78 EXPECT_TRUE(strcmp(c_response->initial_response.client_config,
79 client_config_str.c_str()) == 0);
80 EXPECT_EQ(c_response->initial_response.client_stats_report_interval.seconds,
81 123);
82 EXPECT_EQ(c_response->initial_response.client_stats_report_interval.nanos,
83 456);
84 gpr_slice_unref(encoded_slice);
85 grpc_grpclb_response_destroy(c_response);
86 }
87
88 TEST_F(GrpclbTest, ParseResponseServerList) {
89 LoadBalanceResponse response;
90 auto* serverlist = response.mutable_server_list();
91 auto* server = serverlist->add_servers();
92 server->set_ip_address("127.0.0.1");
93 server->set_port(12345);
94 server->set_drop_request(true);
95 server = response.mutable_server_list()->add_servers();
96 server->set_ip_address("10.0.0.1");
97 server->set_port(54321);
98 server->set_drop_request(false);
99 auto* expiration_interval = serverlist->mutable_expiration_interval();
100 expiration_interval->set_seconds(888);
101 expiration_interval->set_nanos(999);
102
103 const std::string encoded_response = response.SerializeAsString();
104 gpr_slice encoded_slice =
105 gpr_slice_from_copied_string(encoded_response.c_str());
106 grpc_grpclb_serverlist* c_serverlist =
107 grpc_grpclb_response_parse_serverlist(encoded_slice);
108 ASSERT_EQ(c_serverlist->num_servers, 2ul);
109 EXPECT_TRUE(c_serverlist->servers[0]->has_ip_address);
110 EXPECT_TRUE(strcmp(c_serverlist->servers[0]->ip_address, "127.0.0.1") == 0);
111 EXPECT_EQ(c_serverlist->servers[0]->port, 12345);
112 EXPECT_TRUE(c_serverlist->servers[0]->drop_request);
113 EXPECT_TRUE(c_serverlist->servers[1]->has_ip_address);
114 EXPECT_TRUE(strcmp(c_serverlist->servers[1]->ip_address, "10.0.0.1") == 0);
115 EXPECT_EQ(c_serverlist->servers[1]->port, 54321);
116 EXPECT_FALSE(c_serverlist->servers[1]->drop_request);
117
118 EXPECT_TRUE(c_serverlist->expiration_interval.has_seconds);
119 EXPECT_EQ(c_serverlist->expiration_interval.seconds, 888);
120 EXPECT_TRUE(c_serverlist->expiration_interval.has_nanos);
121 EXPECT_EQ(c_serverlist->expiration_interval.nanos, 999);
122
123 gpr_slice_unref(encoded_slice);
124 grpc_grpclb_destroy_serverlist(c_serverlist);
125 }
126
127 } // namespace
128 } // namespace grpc
129
130 int main(int argc, char** argv) {
131 ::testing::InitGoogleTest(&argc, argv);
132 return RUN_ALL_TESTS();
133 }
OLDNEW
« no previous file with comments | « third_party/grpc/test/cpp/end2end/zookeeper_test.cc ('k') | third_party/grpc/test/cpp/interop/client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698