@@ -8,7 +8,12 @@ const expect = require('chai').expect;
8
8
9
9
function bufferToStream ( buffer ) {
10
10
const stream = new Readable ( ) ;
11
- stream . push ( buffer ) ;
11
+ if ( Array . isArray ( buffer ) ) {
12
+ buffer . forEach ( b => stream . push ( b ) ) ;
13
+ } else {
14
+ stream . push ( buffer ) ;
15
+ }
16
+
12
17
stream . push ( null ) ;
13
18
return stream ;
14
19
}
@@ -24,6 +29,31 @@ describe('Message Stream', function() {
24
29
) ,
25
30
documents : [ { ismaster : 1 } ]
26
31
} ,
32
+ {
33
+ description : 'valid multiple OP_REPLY' ,
34
+ expectedMessageCount : 4 ,
35
+ data : Buffer . from (
36
+ '370000000100000001000000010000000000000000000000000000000000000001000000130000001069736d6173746572000100000000' +
37
+ '370000000100000001000000010000000000000000000000000000000000000001000000130000001069736d6173746572000100000000' +
38
+ '370000000100000001000000010000000000000000000000000000000000000001000000130000001069736d6173746572000100000000' +
39
+ '370000000100000001000000010000000000000000000000000000000000000001000000130000001069736d6173746572000100000000' ,
40
+ 'hex'
41
+ ) ,
42
+ documents : [ { ismaster : 1 } ]
43
+ } ,
44
+ {
45
+ description : 'valid OP_REPLY (partial)' ,
46
+ data : [
47
+ Buffer . from ( '37' , 'hex' ) ,
48
+ Buffer . from ( '0000' , 'hex' ) ,
49
+ Buffer . from (
50
+ '000100000001000000010000000000000000000000000000000000000001000000130000001069736d6173746572000100000000' ,
51
+ 'hex'
52
+ )
53
+ ] ,
54
+ documents : [ { ismaster : 1 } ]
55
+ } ,
56
+
27
57
{
28
58
description : 'valid OP_MSG' ,
29
59
data : Buffer . from (
@@ -32,6 +62,19 @@ describe('Message Stream', function() {
32
62
) ,
33
63
documents : [ { $db : 'admin' , ismaster : 1 } ]
34
64
} ,
65
+ {
66
+ description : 'valid multiple OP_MSG' ,
67
+ expectedMessageCount : 4 ,
68
+ data : Buffer . from (
69
+ '370000000100000000000000dd0700000000000000220000001069736d6173746572000100000002246462000600000061646d696e0000' +
70
+ '370000000100000000000000dd0700000000000000220000001069736d6173746572000100000002246462000600000061646d696e0000' +
71
+ '370000000100000000000000dd0700000000000000220000001069736d6173746572000100000002246462000600000061646d696e0000' +
72
+ '370000000100000000000000dd0700000000000000220000001069736d6173746572000100000002246462000600000061646d696e0000' ,
73
+ 'hex'
74
+ ) ,
75
+ documents : [ { $db : 'admin' , ismaster : 1 } ]
76
+ } ,
77
+
35
78
{
36
79
description : 'Invalid message size (negative)' ,
37
80
data : Buffer . from ( 'ffffffff' , 'hex' ) ,
@@ -46,10 +89,13 @@ describe('Message Stream', function() {
46
89
it ( test . description , function ( done ) {
47
90
const bson = new BSON ( ) ;
48
91
const error = test . error ;
92
+ const expectedMessageCount = test . expectedMessageCount || 1 ;
49
93
const inputStream = bufferToStream ( test . data ) ;
50
94
const messageStream = new MessageStream ( { bson } ) ;
51
95
96
+ let messageCount = 0 ;
52
97
messageStream . on ( 'message' , msg => {
98
+ messageCount ++ ;
53
99
if ( error ) {
54
100
done ( new Error ( `expected error: ${ error } ` ) ) ;
55
101
return ;
@@ -63,7 +109,9 @@ describe('Message Stream', function() {
63
109
. that . deep . equals ( test . documents ) ;
64
110
}
65
111
66
- done ( ) ;
112
+ if ( messageCount === expectedMessageCount ) {
113
+ done ( ) ;
114
+ }
67
115
} ) ;
68
116
69
117
messageStream . on ( 'error' , err => {
0 commit comments