@@ -287,6 +287,98 @@ describe('Server serialization failure handling', () => {
287
287
} ) ;
288
288
} ) ;
289
289
290
+ describe ( 'Cardinality violations' , ( ) => {
291
+ let client : ServiceClient ;
292
+ let server : Server ;
293
+ let responseCount : number = 1 ;
294
+ const testMessage = Buffer . from ( [ ] ) ;
295
+ before ( done => {
296
+ const serverServiceDefinition = {
297
+ testMethod : {
298
+ path : '/TestService/TestMethod/' ,
299
+ requestStream : false ,
300
+ responseStream : true ,
301
+ requestSerialize : identity ,
302
+ requestDeserialize : identity ,
303
+ responseDeserialize : identity ,
304
+ responseSerialize : identity
305
+ }
306
+ } ;
307
+ const clientServiceDefinition = {
308
+ testMethod : {
309
+ path : '/TestService/TestMethod/' ,
310
+ requestStream : true ,
311
+ responseStream : false ,
312
+ requestSerialize : identity ,
313
+ requestDeserialize : identity ,
314
+ responseDeserialize : identity ,
315
+ responseSerialize : identity
316
+ }
317
+ } ;
318
+ const TestClient = grpc . makeClientConstructor ( clientServiceDefinition , 'TestService' ) ;
319
+ server = new grpc . Server ( ) ;
320
+ server . addService ( serverServiceDefinition , {
321
+ testMethod ( stream : ServerWritableStream < any , any > ) {
322
+ for ( let i = 0 ; i < responseCount ; i ++ ) {
323
+ stream . write ( testMessage ) ;
324
+ }
325
+ stream . end ( ) ;
326
+ }
327
+ } ) ;
328
+ server . bindAsync ( 'localhost:0' , serverInsecureCreds , ( error , port ) => {
329
+ assert . ifError ( error ) ;
330
+ client = new TestClient ( `localhost:${ port } ` , clientInsecureCreds ) ;
331
+ done ( ) ;
332
+ } ) ;
333
+ } ) ;
334
+ beforeEach ( ( ) => {
335
+ responseCount = 1 ;
336
+ } ) ;
337
+ after ( done => {
338
+ client . close ( ) ;
339
+ server . tryShutdown ( done ) ;
340
+ } ) ;
341
+ it ( 'Should fail if the client sends too few messages' , done => {
342
+ const call = client . testMethod ( ( err : ServiceError , data : any ) => {
343
+ assert ( err ) ;
344
+ assert . strictEqual ( err . code , grpc . status . UNIMPLEMENTED ) ;
345
+ done ( ) ;
346
+ } ) ;
347
+ call . end ( ) ;
348
+ } ) ;
349
+ it ( 'Should fail if the client sends too many messages' , done => {
350
+ const call = client . testMethod ( ( err : ServiceError , data : any ) => {
351
+ assert ( err ) ;
352
+ assert . strictEqual ( err . code , grpc . status . UNIMPLEMENTED ) ;
353
+ done ( ) ;
354
+ } ) ;
355
+ call . write ( testMessage ) ;
356
+ call . write ( testMessage ) ;
357
+ call . end ( ) ;
358
+ } ) ;
359
+ it ( 'Should fail if the server sends too few messages' , done => {
360
+ responseCount = 0 ;
361
+ const call = client . testMethod ( ( err : ServiceError , data : any ) => {
362
+ assert ( err ) ;
363
+ assert . strictEqual ( err . code , grpc . status . UNIMPLEMENTED ) ;
364
+ done ( ) ;
365
+ } ) ;
366
+ call . write ( testMessage ) ;
367
+ call . end ( ) ;
368
+ } ) ;
369
+ it ( 'Should fail if the server sends too many messages' , done => {
370
+ responseCount = 2 ;
371
+ const call = client . testMethod ( ( err : ServiceError , data : any ) => {
372
+ assert ( err ) ;
373
+ assert . strictEqual ( err . code , grpc . status . UNIMPLEMENTED ) ;
374
+ done ( ) ;
375
+ } ) ;
376
+ call . write ( testMessage ) ;
377
+ call . end ( ) ;
378
+ } ) ;
379
+
380
+ } ) ;
381
+
290
382
describe ( 'Other conditions' , ( ) => {
291
383
let client : ServiceClient ;
292
384
let server : Server ;
0 commit comments