@@ -6,6 +6,7 @@ const HttpRequestAuthV4 = require('../utils/HttpRequestAuthV4');
66const bucket = 'testunsupportedchecksumsbucket' ;
77const objectKey = 'key' ;
88const objData = Buffer . alloc ( 1024 , 'a' ) ;
9+ // note this is not the correct checksum in objDataWithTrailingChecksum
910const objDataWithTrailingChecksum = '10\r\n0123456789abcdef\r\n0\r\nx-amz-checksum-crc64nvme:YeIDuLa7tU0=\r\n' ;
1011const objDataWithoutTrailingChecksum = '0123456789abcdef' ;
1112
@@ -47,51 +48,69 @@ describe('trailing checksum requests:', () => {
4748 } ) ;
4849 } ) ;
4950
50- it ( 'should accept unsigned trailing checksum' , done => {
51- const req = new HttpRequestAuthV4 (
52- `http://localhost:8000/${ bucket } /${ objectKey } ` ,
53- Object . assign (
54- {
55- method : 'PUT' ,
56- headers : {
57- 'content-length' : objDataWithTrailingChecksum . length ,
58- 'x-amz-decoded-content-length' : objDataWithoutTrailingChecksum . length ,
59- 'x-amz-content-sha256' : 'STREAMING-UNSIGNED-PAYLOAD-TRAILER' ,
60- 'x-amz-trailer' : 'x-amz-checksum-crc64nvme' ,
51+ const objDataChunkings = [
52+ [ objDataWithTrailingChecksum ] ,
53+ [ objDataWithTrailingChecksum . substring ( 0 , 1 ) , objDataWithTrailingChecksum . substring ( 1 ) ] ,
54+ [ objDataWithTrailingChecksum . substring ( 0 , 2 ) , objDataWithTrailingChecksum . substring ( 2 ) ] ,
55+ [ objDataWithTrailingChecksum . substring ( 0 , 3 ) , objDataWithTrailingChecksum . substring ( 3 ) ] ,
56+ [ objDataWithTrailingChecksum . substring ( 0 , 4 ) , objDataWithTrailingChecksum . substring ( 4 ) ] ,
57+ [ objDataWithTrailingChecksum . substring ( 0 , 10 ) , objDataWithTrailingChecksum . substring ( 10 ) ] ,
58+ [ objDataWithTrailingChecksum . substring ( 0 , 20 ) , objDataWithTrailingChecksum . substring ( 20 ) ] ,
59+ [ objDataWithTrailingChecksum . substring ( 0 , 21 ) , objDataWithTrailingChecksum . substring ( 21 ) ] ,
60+ [ objDataWithTrailingChecksum . substring ( 0 , 22 ) , objDataWithTrailingChecksum . substring ( 22 ) ] ,
61+ ] ;
62+
63+ objDataChunkings . forEach ( ( objDataChunks , index ) => {
64+ it ( `should accept unsigned trailing checksum, chunk configuration ${ index + 1 } ` , done => {
65+ const req = new HttpRequestAuthV4 (
66+ `http://localhost:8000/${ bucket } /${ objectKey } ` ,
67+ Object . assign (
68+ {
69+ method : 'PUT' ,
70+ headers : {
71+ 'content-length' : objDataWithTrailingChecksum . length ,
72+ 'x-amz-decoded-content-length' : objDataWithoutTrailingChecksum . length ,
73+ 'x-amz-content-sha256' : 'STREAMING-UNSIGNED-PAYLOAD-TRAILER' ,
74+ 'x-amz-trailer' : 'x-amz-checksum-crc64nvme' ,
75+ } ,
6176 } ,
62- } ,
63- authCredentials
64- ) ,
65- res => {
66- assert . strictEqual ( res . statusCode , 200 ) ;
67- res . on ( 'data' , ( ) => { } ) ;
68- res . on ( 'end' , done ) ;
69- }
70- ) ;
77+ authCredentials
78+ ) ,
79+ res => {
80+ assert . strictEqual ( res . statusCode , 200 ) ;
81+ res . on ( 'data' , ( ) => { } ) ;
82+ res . on ( 'end' , done ) ;
83+ }
84+ ) ;
7185
72- req . on ( 'error' , err => {
73- assert . ifError ( err ) ;
74- } ) ;
86+ req . on ( 'error' , err => {
87+ assert . ifError ( err ) ;
88+ } ) ;
7589
76- req . write ( objDataWithTrailingChecksum ) ;
90+ // write the data in two chunks
91+ objDataChunks . forEach ( chunk => {
92+ req . write ( chunk ) ;
93+ }
94+ ) ;
7795
78- req . once ( 'drain' , ( ) => {
79- req . end ( ) ;
96+ req . once ( 'drain' , ( ) => {
97+ req . end ( ) ;
98+ } ) ;
8099 } ) ;
81- } ) ;
82100
83- it ( 'should have correct object content for unsigned trailing checksum' , done => {
84- makeS3Request ( {
85- method : 'GET' ,
86- authCredentials,
87- bucket,
88- objectKey,
89- } , ( err , res ) => {
90- assert . ifError ( err ) ;
91- assert . strictEqual ( res . statusCode , 200 ) ;
92- // check that the object data is the input stripped of the trailing checksum
93- assert . strictEqual ( res . body , objDataWithoutTrailingChecksum ) ;
94- return done ( ) ;
101+ it ( 'should have correct object content for unsigned trailing checksum' , done => {
102+ makeS3Request ( {
103+ method : 'GET' ,
104+ authCredentials,
105+ bucket,
106+ objectKey,
107+ } , ( err , res ) => {
108+ assert . ifError ( err ) ;
109+ assert . strictEqual ( res . statusCode , 200 ) ;
110+ // check that the object data is the input stripped of the trailing checksum
111+ assert . strictEqual ( res . body , objDataWithoutTrailingChecksum ) ;
112+ return done ( ) ;
113+ } ) ;
95114 } ) ;
96115 } ) ;
97116
0 commit comments