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

Side by Side Diff: third_party/grpc/src/node/test/end_to_end_test.js

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 2015-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 'use strict';
35
36 var assert = require('assert');
37 var grpc = require('../src/grpc_extension');
38
39 /**
40 * This is used for testing functions with multiple asynchronous calls that
41 * can happen in different orders. This should be passed the number of async
42 * function invocations that can occur last, and each of those should call this
43 * function's return value
44 * @param {function()} done The function that should be called when a test is
45 * complete.
46 * @param {number} count The number of calls to the resulting function if the
47 * test passes.
48 * @return {function()} The function that should be called at the end of each
49 * sequence of asynchronous functions.
50 */
51 function multiDone(done, count) {
52 return function() {
53 count -= 1;
54 if (count <= 0) {
55 done();
56 }
57 };
58 }
59
60 var insecureCreds = grpc.ChannelCredentials.createInsecure();
61
62 describe('end-to-end', function() {
63 var server;
64 var channel;
65 before(function() {
66 server = new grpc.Server();
67 var port_num = server.addHttp2Port('0.0.0.0:0',
68 grpc.ServerCredentials.createInsecure());
69 server.start();
70 channel = new grpc.Channel('localhost:' + port_num, insecureCreds);
71 });
72 after(function() {
73 server.forceShutdown();
74 });
75 it('should start and end a request without error', function(complete) {
76 var done = multiDone(complete, 2);
77 var status_text = 'xyz';
78 var call = new grpc.Call(channel,
79 'dummy_method',
80 Infinity);
81 var client_batch = {};
82 client_batch[grpc.opType.SEND_INITIAL_METADATA] = {};
83 client_batch[grpc.opType.SEND_CLOSE_FROM_CLIENT] = true;
84 client_batch[grpc.opType.RECV_INITIAL_METADATA] = true;
85 client_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true;
86 call.startBatch(client_batch, function(err, response) {
87 assert.ifError(err);
88 assert.deepEqual(response, {
89 send_metadata: true,
90 client_close: true,
91 metadata: {},
92 status: {
93 code: grpc.status.OK,
94 details: status_text,
95 metadata: {}
96 }
97 });
98 done();
99 });
100
101 server.requestCall(function(err, call_details) {
102 var new_call = call_details.new_call;
103 assert.notEqual(new_call, null);
104 var server_call = new_call.call;
105 assert.notEqual(server_call, null);
106 var server_batch = {};
107 server_batch[grpc.opType.SEND_INITIAL_METADATA] = {};
108 server_batch[grpc.opType.SEND_STATUS_FROM_SERVER] = {
109 metadata: {},
110 code: grpc.status.OK,
111 details: status_text
112 };
113 server_batch[grpc.opType.RECV_CLOSE_ON_SERVER] = true;
114 server_call.startBatch(server_batch, function(err, response) {
115 assert.ifError(err);
116 assert.deepEqual(response, {
117 send_metadata: true,
118 send_status: true,
119 cancelled: false
120 });
121 done();
122 });
123 });
124 });
125 it('should successfully send and receive metadata', function(complete) {
126 var done = multiDone(complete, 2);
127 var status_text = 'xyz';
128 var call = new grpc.Call(channel,
129 'dummy_method',
130 Infinity);
131 var client_batch = {};
132 client_batch[grpc.opType.SEND_INITIAL_METADATA] = {
133 client_key: ['client_value']
134 };
135 client_batch[grpc.opType.SEND_CLOSE_FROM_CLIENT] = true;
136 client_batch[grpc.opType.RECV_INITIAL_METADATA] = true;
137 client_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true;
138 call.startBatch(client_batch, function(err, response) {
139 assert.ifError(err);
140 assert.deepEqual(response,{
141 send_metadata: true,
142 client_close: true,
143 metadata: {server_key: ['server_value']},
144 status: {code: grpc.status.OK,
145 details: status_text,
146 metadata: {}}
147 });
148 done();
149 });
150
151 server.requestCall(function(err, call_details) {
152 var new_call = call_details.new_call;
153 assert.notEqual(new_call, null);
154 assert.strictEqual(new_call.metadata.client_key[0],
155 'client_value');
156 var server_call = new_call.call;
157 assert.notEqual(server_call, null);
158 var server_batch = {};
159 server_batch[grpc.opType.SEND_INITIAL_METADATA] = {
160 server_key: ['server_value']
161 };
162 server_batch[grpc.opType.SEND_STATUS_FROM_SERVER] = {
163 metadata: {},
164 code: grpc.status.OK,
165 details: status_text
166 };
167 server_batch[grpc.opType.RECV_CLOSE_ON_SERVER] = true;
168 server_call.startBatch(server_batch, function(err, response) {
169 assert.ifError(err);
170 assert.deepEqual(response, {
171 send_metadata: true,
172 send_status: true,
173 cancelled: false
174 });
175 done();
176 });
177 });
178 });
179 it('should send and receive data without error', function(complete) {
180 var req_text = 'client_request';
181 var reply_text = 'server_response';
182 var done = multiDone(complete, 2);
183 var status_text = 'success';
184 var call = new grpc.Call(channel,
185 'dummy_method',
186 Infinity);
187 var client_batch = {};
188 client_batch[grpc.opType.SEND_INITIAL_METADATA] = {};
189 client_batch[grpc.opType.SEND_MESSAGE] = new Buffer(req_text);
190 client_batch[grpc.opType.SEND_CLOSE_FROM_CLIENT] = true;
191 client_batch[grpc.opType.RECV_INITIAL_METADATA] = true;
192 client_batch[grpc.opType.RECV_MESSAGE] = true;
193 client_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true;
194 call.startBatch(client_batch, function(err, response) {
195 assert.ifError(err);
196 assert(response.send_metadata);
197 assert(response.client_close);
198 assert.deepEqual(response.metadata, {});
199 assert(response.send_message);
200 assert.strictEqual(response.read.toString(), reply_text);
201 assert.deepEqual(response.status, {code: grpc.status.OK,
202 details: status_text,
203 metadata: {}});
204 done();
205 });
206
207 server.requestCall(function(err, call_details) {
208 var new_call = call_details.new_call;
209 assert.notEqual(new_call, null);
210 var server_call = new_call.call;
211 assert.notEqual(server_call, null);
212 var server_batch = {};
213 server_batch[grpc.opType.SEND_INITIAL_METADATA] = {};
214 server_batch[grpc.opType.RECV_MESSAGE] = true;
215 server_call.startBatch(server_batch, function(err, response) {
216 assert.ifError(err);
217 assert(response.send_metadata);
218 assert.strictEqual(response.read.toString(), req_text);
219 var response_batch = {};
220 response_batch[grpc.opType.SEND_MESSAGE] = new Buffer(reply_text);
221 response_batch[grpc.opType.SEND_STATUS_FROM_SERVER] = {
222 metadata: {},
223 code: grpc.status.OK,
224 details: status_text
225 };
226 response_batch[grpc.opType.RECV_CLOSE_ON_SERVER] = true;
227 server_call.startBatch(response_batch, function(err, response) {
228 assert(response.send_status);
229 assert(!response.cancelled);
230 done();
231 });
232 });
233 });
234 });
235 it('should send multiple messages', function(complete) {
236 var done = multiDone(complete, 2);
237 var requests = ['req1', 'req2'];
238 var status_text = 'xyz';
239 var call = new grpc.Call(channel,
240 'dummy_method',
241 Infinity);
242 var client_batch = {};
243 client_batch[grpc.opType.SEND_INITIAL_METADATA] = {};
244 client_batch[grpc.opType.SEND_MESSAGE] = new Buffer(requests[0]);
245 client_batch[grpc.opType.RECV_INITIAL_METADATA] = true;
246 call.startBatch(client_batch, function(err, response) {
247 assert.ifError(err);
248 assert.deepEqual(response, {
249 send_metadata: true,
250 send_message: true,
251 metadata: {}
252 });
253 var req2_batch = {};
254 req2_batch[grpc.opType.SEND_MESSAGE] = new Buffer(requests[1]);
255 req2_batch[grpc.opType.SEND_CLOSE_FROM_CLIENT] = true;
256 req2_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true;
257 call.startBatch(req2_batch, function(err, resp) {
258 assert.ifError(err);
259 assert.deepEqual(resp, {
260 send_message: true,
261 client_close: true,
262 status: {
263 code: grpc.status.OK,
264 details: status_text,
265 metadata: {}
266 }
267 });
268 done();
269 });
270 });
271
272 server.requestCall(function(err, call_details) {
273 var new_call = call_details.new_call;
274 assert.notEqual(new_call, null);
275 var server_call = new_call.call;
276 assert.notEqual(server_call, null);
277 var server_batch = {};
278 server_batch[grpc.opType.SEND_INITIAL_METADATA] = {};
279 server_batch[grpc.opType.RECV_MESSAGE] = true;
280 server_call.startBatch(server_batch, function(err, response) {
281 assert.ifError(err);
282 assert(response.send_metadata);
283 assert.strictEqual(response.read.toString(), requests[0]);
284 var snd_batch = {};
285 snd_batch[grpc.opType.RECV_MESSAGE] = true;
286 server_call.startBatch(snd_batch, function(err, response) {
287 assert.ifError(err);
288 assert.strictEqual(response.read.toString(), requests[1]);
289 var end_batch = {};
290 end_batch[grpc.opType.RECV_CLOSE_ON_SERVER] = true;
291 end_batch[grpc.opType.SEND_STATUS_FROM_SERVER] = {
292 metadata: {},
293 code: grpc.status.OK,
294 details: status_text
295 };
296 server_call.startBatch(end_batch, function(err, response) {
297 assert.ifError(err);
298 assert(response.send_status);
299 assert(!response.cancelled);
300 done();
301 });
302 });
303 });
304 });
305 });
306 });
OLDNEW
« no previous file with comments | « third_party/grpc/src/node/test/echo_service.proto ('k') | third_party/grpc/src/node/test/health_test.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698