11import buffers from './testing/test-buffers'
22import BufferList from './testing/buffer-list'
3- import { PgPacketStream } from './'
3+ import { parse } from './'
44import assert from 'assert'
5- import { Readable } from 'stream'
5+ import { PassThrough } from 'stream'
6+ import { BackendMessage } from './messages'
67
78var authOkBuffer = buffers . authenticationOk ( )
89var paramStatusBuffer = buffers . parameterStatus ( 'client_encoding' , 'UTF8' )
@@ -137,25 +138,14 @@ var expectedTwoRowMessage = {
137138 } ]
138139}
139140
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-
148141var testForMessage = function ( buffer : Buffer , expectedMessage : any ) {
149142 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 ;
154145
155146 for ( const key in expectedMessage ) {
156- assert . deepEqual ( lastMessage [ key ] , expectedMessage [ key ] )
147+ assert . deepEqual ( ( lastMessage as any ) [ key ] , expectedMessage [ key ] )
157148 }
158-
159149 } )
160150}
161151
@@ -197,6 +187,19 @@ var expectedNotificationResponseMessage = {
197187 payload : 'boom'
198188}
199189
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+
200203describe ( 'PgPacketStream' , function ( ) {
201204 testForMessage ( authOkBuffer , expectedAuthenticationOkayMessage )
202205 testForMessage ( plainPasswordBuffer , expectedPlainPasswordMessage )
@@ -391,18 +394,9 @@ describe('PgPacketStream', function () {
391394 describe ( 'split buffer, single message parsing' , function ( ) {
392395 var fullBuffer = buffers . dataRow ( [ null , 'bang' , 'zug zug' , null , '!' ] )
393396
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-
404397 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
406400 assert . equal ( message . fields . length , 5 )
407401 assert . equal ( message . fields [ 0 ] , null )
408402 assert . equal ( message . fields [ 1 ] , 'bang' )
@@ -416,7 +410,8 @@ describe('PgPacketStream', function () {
416410 var secondBuffer = Buffer . alloc ( fullBuffer . length - firstBuffer . length )
417411 fullBuffer . copy ( firstBuffer , 0 , 0 )
418412 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
420415 assert . equal ( message . fields . length , 5 )
421416 assert . equal ( message . fields [ 0 ] , null )
422417 assert . equal ( message . fields [ 1 ] , 'bang' )
@@ -447,15 +442,6 @@ describe('PgPacketStream', function () {
447442 dataRowBuffer . copy ( fullBuffer , 0 , 0 )
448443 readyForQueryBuffer . copy ( fullBuffer , dataRowBuffer . length , 0 )
449444
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-
459445 var verifyMessages = function ( messages : any [ ] ) {
460446 assert . strictEqual ( messages . length , 2 )
461447 assert . deepEqual ( messages [ 0 ] , {
@@ -473,7 +459,7 @@ describe('PgPacketStream', function () {
473459 }
474460 // sanity check
475461 it ( 'recieves both messages when packet is not split' , async function ( ) {
476- const messages = await parse ( [ fullBuffer ] )
462+ const messages = await parseBuffers ( [ fullBuffer ] )
477463 verifyMessages ( messages )
478464 } )
479465
@@ -482,7 +468,7 @@ describe('PgPacketStream', function () {
482468 var secondBuffer = Buffer . alloc ( fullBuffer . length - firstBuffer . length )
483469 fullBuffer . copy ( firstBuffer , 0 , 0 )
484470 fullBuffer . copy ( secondBuffer , 0 , firstBuffer . length )
485- const messages = await parse ( [ firstBuffer , secondBuffer ] )
471+ const messages = await parseBuffers ( [ firstBuffer , secondBuffer ] )
486472 verifyMessages ( messages )
487473 }
488474
0 commit comments