1
1
import buffers from './testing/test-buffers'
2
2
import BufferList from './testing/buffer-list'
3
- import { PgPacketStream } from './'
3
+ import { parse } from './'
4
4
import assert from 'assert'
5
- import { Readable } from 'stream'
5
+ import { PassThrough } from 'stream'
6
+ import { BackendMessage } from './messages'
6
7
7
8
var authOkBuffer = buffers . authenticationOk ( )
8
9
var paramStatusBuffer = buffers . parameterStatus ( 'client_encoding' , 'UTF8' )
@@ -137,25 +138,14 @@ var expectedTwoRowMessage = {
137
138
} ]
138
139
}
139
140
140
- const concat = ( stream : Readable ) : Promise < any [ ] > => {
141
- return new Promise ( ( resolve ) => {
142
- const results : any [ ] = [ ]
143
- stream . on ( 'data' , item => results . push ( item ) )
144
- stream . on ( 'end' , ( ) => resolve ( results ) )
145
- } )
146
- }
147
-
148
141
var testForMessage = function ( buffer : Buffer , expectedMessage : any ) {
149
142
it ( 'recieves and parses ' + expectedMessage . name , async ( ) => {
150
- const parser = new PgPacketStream ( ) ;
151
- parser . write ( buffer ) ;
152
- parser . end ( ) ;
153
- const [ lastMessage ] = await concat ( parser ) ;
143
+ const messages = await parseBuffers ( [ buffer ] )
144
+ const [ lastMessage ] = messages ;
154
145
155
146
for ( const key in expectedMessage ) {
156
- assert . deepEqual ( lastMessage [ key ] , expectedMessage [ key ] )
147
+ assert . deepEqual ( ( lastMessage as any ) [ key ] , expectedMessage [ key ] )
157
148
}
158
-
159
149
} )
160
150
}
161
151
@@ -197,6 +187,19 @@ var expectedNotificationResponseMessage = {
197
187
payload : 'boom'
198
188
}
199
189
190
+
191
+
192
+ const parseBuffers = async ( buffers : Buffer [ ] ) : Promise < BackendMessage [ ] > => {
193
+ const stream = new PassThrough ( ) ;
194
+ for ( const buffer of buffers ) {
195
+ stream . write ( buffer ) ;
196
+ }
197
+ stream . end ( )
198
+ const msgs : BackendMessage [ ] = [ ]
199
+ await parse ( stream , ( msg ) => msgs . push ( msg ) )
200
+ return msgs
201
+ }
202
+
200
203
describe ( 'PgPacketStream' , function ( ) {
201
204
testForMessage ( authOkBuffer , expectedAuthenticationOkayMessage )
202
205
testForMessage ( plainPasswordBuffer , expectedPlainPasswordMessage )
@@ -391,18 +394,9 @@ describe('PgPacketStream', function () {
391
394
describe ( 'split buffer, single message parsing' , function ( ) {
392
395
var fullBuffer = buffers . dataRow ( [ null , 'bang' , 'zug zug' , null , '!' ] )
393
396
394
- const parse = async ( buffers : Buffer [ ] ) : Promise < any > => {
395
- const parser = new PgPacketStream ( ) ;
396
- for ( const buffer of buffers ) {
397
- parser . write ( buffer ) ;
398
- }
399
- parser . end ( )
400
- const [ msg ] = await concat ( parser )
401
- return msg ;
402
- }
403
-
404
397
it ( 'parses when full buffer comes in' , async function ( ) {
405
- const message = await parse ( [ fullBuffer ] ) ;
398
+ const messages = await parseBuffers ( [ fullBuffer ] ) ;
399
+ const message = messages [ 0 ] as any
406
400
assert . equal ( message . fields . length , 5 )
407
401
assert . equal ( message . fields [ 0 ] , null )
408
402
assert . equal ( message . fields [ 1 ] , 'bang' )
@@ -416,7 +410,8 @@ describe('PgPacketStream', function () {
416
410
var secondBuffer = Buffer . alloc ( fullBuffer . length - firstBuffer . length )
417
411
fullBuffer . copy ( firstBuffer , 0 , 0 )
418
412
fullBuffer . copy ( secondBuffer , 0 , firstBuffer . length )
419
- const message = await parse ( [ firstBuffer , secondBuffer ] ) ;
413
+ const messages = await parseBuffers ( [ fullBuffer ] ) ;
414
+ const message = messages [ 0 ] as any
420
415
assert . equal ( message . fields . length , 5 )
421
416
assert . equal ( message . fields [ 0 ] , null )
422
417
assert . equal ( message . fields [ 1 ] , 'bang' )
@@ -447,15 +442,6 @@ describe('PgPacketStream', function () {
447
442
dataRowBuffer . copy ( fullBuffer , 0 , 0 )
448
443
readyForQueryBuffer . copy ( fullBuffer , dataRowBuffer . length , 0 )
449
444
450
- const parse = ( buffers : Buffer [ ] ) : Promise < any [ ] > => {
451
- const parser = new PgPacketStream ( ) ;
452
- for ( const buffer of buffers ) {
453
- parser . write ( buffer ) ;
454
- }
455
- parser . end ( )
456
- return concat ( parser )
457
- }
458
-
459
445
var verifyMessages = function ( messages : any [ ] ) {
460
446
assert . strictEqual ( messages . length , 2 )
461
447
assert . deepEqual ( messages [ 0 ] , {
@@ -473,7 +459,7 @@ describe('PgPacketStream', function () {
473
459
}
474
460
// sanity check
475
461
it ( 'recieves both messages when packet is not split' , async function ( ) {
476
- const messages = await parse ( [ fullBuffer ] )
462
+ const messages = await parseBuffers ( [ fullBuffer ] )
477
463
verifyMessages ( messages )
478
464
} )
479
465
@@ -482,7 +468,7 @@ describe('PgPacketStream', function () {
482
468
var secondBuffer = Buffer . alloc ( fullBuffer . length - firstBuffer . length )
483
469
fullBuffer . copy ( firstBuffer , 0 , 0 )
484
470
fullBuffer . copy ( secondBuffer , 0 , firstBuffer . length )
485
- const messages = await parse ( [ firstBuffer , secondBuffer ] )
471
+ const messages = await parseBuffers ( [ firstBuffer , secondBuffer ] )
486
472
verifyMessages ( messages )
487
473
}
488
474
0 commit comments