@@ -106,4 +106,73 @@ describe('IncomingMessageStream', function() {
106106 } ) ;
107107 } ) ;
108108 } ) ;
109+
110+ it ( 'correctly handles the last package coming in after the stream was paused' , function ( done ) {
111+ const packetData = Buffer . from ( 'test1234' ) ;
112+ const packetHeader = Buffer . alloc ( 8 ) ;
113+
114+ let offset = 0 ;
115+ offset = packetHeader . writeUInt8 ( 0x11 , offset ) ;
116+ offset = packetHeader . writeUInt8 ( 0x00 , offset ) ;
117+ offset = packetHeader . writeUInt16BE ( 8 + packetData . length , offset ) ;
118+ offset = packetHeader . writeUInt16BE ( 0x0000 , offset ) ;
119+ offset = packetHeader . writeUInt8 ( 1 , offset ) ;
120+ packetHeader . writeUInt8 ( 0x00 , offset ) ;
121+
122+ const firstPacket = Buffer . concat ( [ packetHeader , packetData ] ) ;
123+
124+ offset = 0 ;
125+ offset = packetHeader . writeUInt8 ( 0x11 , offset ) ;
126+ offset = packetHeader . writeUInt8 ( 0x01 , offset ) ;
127+ offset = packetHeader . writeUInt16BE ( 8 + packetData . length , offset ) ;
128+ offset = packetHeader . writeUInt16BE ( 0x0000 , offset ) ;
129+ offset = packetHeader . writeUInt8 ( 1 , offset ) ;
130+ packetHeader . writeUInt8 ( 0x00 , offset ) ;
131+
132+ const secondPacket = Buffer . concat ( [ packetHeader , packetData ] ) ;
133+
134+ const incoming = new IncomingMessageStream ( new Debug ( ) ) ;
135+
136+ const result = new BufferList ( function ( err , res ) {
137+ if ( err ) {
138+ return done ( err ) ;
139+ }
140+
141+ assert . deepEqual ( res , Buffer . concat ( [ packetData , packetData ] ) ) ;
142+
143+ done ( ) ;
144+ } ) ;
145+
146+ let messageEnded = false ;
147+ incoming . on ( 'data' , function ( message ) {
148+ assert . instanceOf ( message , Message ) ;
149+
150+ message . on ( 'end' , function ( ) {
151+ messageEnded = true ;
152+ } ) ;
153+
154+ message . pipe ( result ) ;
155+ } ) ;
156+
157+ incoming . write ( firstPacket , function ( ) {
158+ const writtenData = result . slice ( ) ;
159+
160+ assert . strictEqual ( writtenData . length , 8 ) ;
161+ assert . deepEqual ( writtenData , packetData ) ;
162+
163+ incoming . pause ( ) ;
164+
165+ incoming . write ( secondPacket , function ( ) {
166+ const writtenData = result . slice ( ) ;
167+
168+ assert . strictEqual ( writtenData . length , 16 ) ;
169+ assert . deepEqual ( writtenData , Buffer . concat ( [ packetData , packetData ] ) ) ;
170+
171+ assert . strictEqual ( messageEnded , true ) ;
172+ } ) ;
173+
174+ assert . isFalse ( messageEnded ) ;
175+ incoming . resume ( ) ;
176+ } ) ;
177+ } ) ;
109178} ) ;
0 commit comments