@@ -4,6 +4,7 @@ const async = require('async');
44const { Readable } = require ( 'stream' ) ;
55
66const TrailingChecksumTransform = require ( '../../../lib/auth/streamingV4/trailingChecksumTransform' ) ;
7+ const { stripTrailingChecksumStream } = require ( '../../../lib/api/apiUtils/object/prepareStream' ) ;
78const { DummyRequestLogger } = require ( '../helpers' ) ;
89
910const log = new DummyRequestLogger ( ) ;
@@ -170,6 +171,28 @@ describe('TrailingChecksumTransform class', () => {
170171 chunkedReader . pipe ( trailingChecksumTransform ) ;
171172 } ) ;
172173
174+ it ( 'should propagate _flush error via errCb when stream closes without chunked encoding' , done => {
175+ const incompleteData = '10\r\n01234\r6789abcd\r\n\r\n' ;
176+ const source = new ChunkedReader ( [ Buffer . from ( incompleteData ) ] ) ;
177+ source . headers = { 'x-amz-content-sha256' : 'STREAMING-UNSIGNED-PAYLOAD-TRAILER' } ;
178+ const stream = stripTrailingChecksumStream ( source , log , err => {
179+ assert . deepStrictEqual ( err , errors . InvalidArgument ) ;
180+ done ( ) ;
181+ } ) ;
182+ stream . resume ( ) ;
183+ } ) ;
184+
185+ it ( 'should propagate _transform error via errCb for invalid chunk size' , done => {
186+ const badData = '500000000000\r\n' ;
187+ const source = new ChunkedReader ( [ Buffer . from ( badData ) ] ) ;
188+ source . headers = { 'x-amz-content-sha256' : 'STREAMING-UNSIGNED-PAYLOAD-TRAILER' } ;
189+ const stream = stripTrailingChecksumStream ( source , log , err => {
190+ assert . deepStrictEqual ( err , errors . InvalidArgument ) ;
191+ done ( ) ;
192+ } ) ;
193+ stream . resume ( ) ;
194+ } ) ;
195+
173196 it ( 'should return early if supplied with an out of specification chunk size' , done => {
174197 const trailingChecksumTransform = new TrailingChecksumTransform ( log ) ;
175198 const chunks = [
0 commit comments