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

Side by Side Diff: third_party/grpc/src/node/test/call_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 * Helper function to return an absolute deadline given a relative timeout in
41 * seconds.
42 * @param {number} timeout_secs The number of seconds to wait before timing out
43 * @return {Date} A date timeout_secs in the future
44 */
45 function getDeadline(timeout_secs) {
46 var deadline = new Date();
47 deadline.setSeconds(deadline.getSeconds() + timeout_secs);
48 return deadline;
49 }
50
51 var insecureCreds = grpc.ChannelCredentials.createInsecure();
52
53 describe('call', function() {
54 var channel;
55 var server;
56 before(function() {
57 server = new grpc.Server();
58 var port = server.addHttp2Port('localhost:0',
59 grpc.ServerCredentials.createInsecure());
60 server.start();
61 channel = new grpc.Channel('localhost:' + port, insecureCreds);
62 });
63 after(function() {
64 server.forceShutdown();
65 });
66 describe('constructor', function() {
67 it('should reject anything less than 3 arguments', function() {
68 assert.throws(function() {
69 new grpc.Call();
70 }, TypeError);
71 assert.throws(function() {
72 new grpc.Call(channel);
73 }, TypeError);
74 assert.throws(function() {
75 new grpc.Call(channel, 'method');
76 }, TypeError);
77 });
78 it('should succeed with a Channel, a string, and a date or number',
79 function() {
80 assert.doesNotThrow(function() {
81 new grpc.Call(channel, 'method', new Date());
82 });
83 assert.doesNotThrow(function() {
84 new grpc.Call(channel, 'method', 0);
85 });
86 });
87 it('should accept an optional fourth string parameter', function() {
88 assert.doesNotThrow(function() {
89 new grpc.Call(channel, 'method', new Date(), 'host_override');
90 });
91 });
92 it('should fail with a closed channel', function() {
93 var local_channel = new grpc.Channel('hostname', insecureCreds);
94 local_channel.close();
95 assert.throws(function() {
96 new grpc.Call(channel, 'method');
97 });
98 });
99 it('should fail with other types', function() {
100 assert.throws(function() {
101 new grpc.Call({}, 'method', 0);
102 }, TypeError);
103 assert.throws(function() {
104 new grpc.Call(channel, null, 0);
105 }, TypeError);
106 assert.throws(function() {
107 new grpc.Call(channel, 'method', 'now');
108 }, TypeError);
109 });
110 it('should succeed without the new keyword', function() {
111 assert.doesNotThrow(function() {
112 var call = grpc.Call(channel, 'method', new Date());
113 assert(call instanceof grpc.Call);
114 });
115 });
116 });
117 describe('deadline', function() {
118 it('should time out immediately with negative deadline', function(done) {
119 var call = new grpc.Call(channel, 'method', -Infinity);
120 var batch = {};
121 batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true;
122 call.startBatch(batch, function(err, response) {
123 assert.strictEqual(response.status.code, grpc.status.DEADLINE_EXCEEDED);
124 done();
125 });
126 });
127 });
128 describe('startBatch', function() {
129 it('should fail without an object and a function', function() {
130 var call = new grpc.Call(channel, 'method', getDeadline(1));
131 assert.throws(function() {
132 call.startBatch();
133 });
134 assert.throws(function() {
135 call.startBatch({});
136 });
137 assert.throws(function() {
138 call.startBatch(null, function(){});
139 });
140 });
141 it('should succeed with an empty object', function(done) {
142 var call = new grpc.Call(channel, 'method', getDeadline(1));
143 assert.doesNotThrow(function() {
144 call.startBatch({}, function(err) {
145 assert.ifError(err);
146 done();
147 });
148 });
149 });
150 });
151 describe('startBatch with metadata', function() {
152 it('should succeed with a map of strings to string arrays', function(done) {
153 var call = new grpc.Call(channel, 'method', getDeadline(1));
154 assert.doesNotThrow(function() {
155 var batch = {};
156 batch[grpc.opType.SEND_INITIAL_METADATA] = {'key1': ['value1'],
157 'key2': ['value2']};
158 call.startBatch(batch, function(err, resp) {
159 assert.ifError(err);
160 assert.deepEqual(resp, {'send_metadata': true});
161 done();
162 });
163 });
164 });
165 it('should succeed with a map of strings to buffer arrays', function(done) {
166 var call = new grpc.Call(channel, 'method', getDeadline(1));
167 assert.doesNotThrow(function() {
168 var batch = {};
169 batch[grpc.opType.SEND_INITIAL_METADATA] = {
170 'key1-bin': [new Buffer('value1')],
171 'key2-bin': [new Buffer('value2')]
172 };
173 call.startBatch(batch, function(err, resp) {
174 assert.ifError(err);
175 assert.deepEqual(resp, {'send_metadata': true});
176 done();
177 });
178 });
179 });
180 it('should fail with other parameter types', function() {
181 var call = new grpc.Call(channel, 'method', getDeadline(1));
182 assert.throws(function() {
183 var batch = {};
184 batch[grpc.opType.SEND_INITIAL_METADATA] = undefined;
185 call.startBatch(batch, function(){});
186 });
187 assert.throws(function() {
188 var batch = {};
189 batch[grpc.opType.SEND_INITIAL_METADATA] = null;
190 call.startBatch(batch, function(){});
191 }, TypeError);
192 assert.throws(function() {
193 var batch = {};
194 batch[grpc.opType.SEND_INITIAL_METADATA] = 'value';
195 call.startBatch(batch, function(){});
196 }, TypeError);
197 assert.throws(function() {
198 var batch = {};
199 batch[grpc.opType.SEND_INITIAL_METADATA] = 5;
200 call.startBatch(batch, function(){});
201 }, TypeError);
202 });
203 });
204 describe('cancel', function() {
205 it('should succeed', function() {
206 var call = new grpc.Call(channel, 'method', getDeadline(1));
207 assert.doesNotThrow(function() {
208 call.cancel();
209 });
210 });
211 });
212 describe('cancelWithStatus', function() {
213 it('should reject anything other than an integer and a string', function() {
214 assert.doesNotThrow(function() {
215 var call = new grpc.Call(channel, 'method', getDeadline(1));
216 call.cancelWithStatus(1, 'details');
217 });
218 assert.throws(function() {
219 var call = new grpc.Call(channel, 'method', getDeadline(1));
220 call.cancelWithStatus();
221 });
222 assert.throws(function() {
223 var call = new grpc.Call(channel, 'method', getDeadline(1));
224 call.cancelWithStatus('');
225 });
226 assert.throws(function() {
227 var call = new grpc.Call(channel, 'method', getDeadline(1));
228 call.cancelWithStatus(5, {});
229 });
230 });
231 it('should reject the OK status code', function() {
232 assert.throws(function() {
233 var call = new grpc.Call(channel, 'method', getDeadline(1));
234 call.cancelWithStatus(0, 'details');
235 });
236 });
237 it('should result in the call ending with a status', function(done) {
238 var call = new grpc.Call(channel, 'method', getDeadline(1));
239 var batch = {};
240 batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true;
241 call.startBatch(batch, function(err, response) {
242 assert.strictEqual(response.status.code, 5);
243 assert.strictEqual(response.status.details, 'details');
244 done();
245 });
246 call.cancelWithStatus(5, 'details');
247 });
248 });
249 describe('getPeer', function() {
250 it('should return a string', function() {
251 var call = new grpc.Call(channel, 'method', getDeadline(1));
252 assert.strictEqual(typeof call.getPeer(), 'string');
253 });
254 });
255 });
OLDNEW
« no previous file with comments | « third_party/grpc/src/node/test/async_test.js ('k') | third_party/grpc/src/node/test/channel_test.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698