@@ -52,6 +52,8 @@ let http_server = null;
5252let server_done = false ;
5353let expected_bucket ;
5454let expected_event_name ;
55+ let expected_key ;
56+ let expected_eTag ;
5557
5658// eslint-disable-next-line max-lines-per-function
5759mocha . describe ( 'notifications' , function ( ) {
@@ -91,9 +93,10 @@ mocha.describe('notifications', function() {
9193 if ( notif !== "test notification" ) {
9294 assert . strictEqual ( notif . Records [ 0 ] . s3 . bucket . name , expected_bucket , 'wrong bucket name in notification' ) ;
9395 assert . strictEqual ( notif . Records [ 0 ] . eventName , expected_event_name , 'wrong event name in notification' ) ;
94-
96+ assert . strictEqual ( notif . Records [ 0 ] . s3 . object . key , expected_key , 'wrong key in notification' ) ;
97+ const expected_eTag_trimmed = expected_eTag && expected_eTag . substring ( 1 , expected_eTag . length - 1 ) ;
98+ assert . strictEqual ( notif . Records [ 0 ] . s3 . object . eTag , expected_eTag_trimmed , 'wrong eTag in notification' ) ;
9599 }
96-
97100 res . writeHead ( 200 , { 'Content-Type' : 'text/plain' } ) ;
98101 res . end ( ) ;
99102 server_done = true ;
@@ -120,13 +123,18 @@ mocha.describe('notifications', function() {
120123 } ) ;
121124
122125 mocha . it ( 'simple notif put' , async ( ) => {
123- await s3 . putObject ( {
126+ const res = await s3 . putObject ( {
124127 Bucket : bucket ,
125128 Key : 'f1' ,
126129 Body : 'this is the body' ,
127130 } ) ;
128131
129- await notify_await_result ( { bucket_name : bucket , event_name : 'ObjectCreated:Put' } ) ;
132+ await notify_await_result ( {
133+ bucket_name : bucket ,
134+ event_name : 'ObjectCreated:Put' ,
135+ key : "f1" ,
136+ etag : res . ETag
137+ } ) ;
130138 } ) ;
131139
132140
@@ -136,7 +144,12 @@ mocha.describe('notifications', function() {
136144 Key : 'f1' ,
137145 } ) ;
138146
139- await notify_await_result ( { bucket_name : bucket , event_name : 'ObjectRemoved:Delete' } ) ;
147+ await notify_await_result ( {
148+ bucket_name : bucket ,
149+ event_name : 'ObjectRemoved:Delete' ,
150+ key : "f1" ,
151+ etag : undefined
152+ } ) ;
140153 } ) ;
141154
142155
@@ -155,13 +168,18 @@ mocha.describe('notifications', function() {
155168
156169 assert . strictEqual ( set . $metadata . httpStatusCode , 200 ) ;
157170
158- await s3 . putObject ( {
171+ const res = await s3 . putObject ( {
159172 Bucket : bucket ,
160173 Key : 'f2' ,
161174 Body : 'this is the body' ,
162175 } ) ;
163176
164- await notify_await_result ( { bucket_name : bucket , event_name : 'ObjectCreated:Put' } ) ;
177+ await notify_await_result ( {
178+ bucket_name : bucket ,
179+ event_name : 'ObjectCreated:Put' ,
180+ key : "f2" ,
181+ etag : res . ETag
182+ } ) ;
165183
166184 await s3 . deleteObject ( {
167185 Bucket : bucket ,
@@ -171,16 +189,53 @@ mocha.describe('notifications', function() {
171189 //there shouldn't be a notification for the delete, wait 2 seconds to validate this
172190 await notify_await_result ( { timeout : 2000 } ) ;
173191 } ) ;
192+
193+ mocha . it ( 'multipart' , async ( ) => {
194+ const res_create = await s3 . createMultipartUpload ( {
195+ Bucket : bucket ,
196+ Key : 'mp1'
197+ } ) ;
198+
199+ const res_upload = await s3 . uploadPart ( {
200+ Bucket : bucket ,
201+ Key : 'mp1' ,
202+ UploadId : res_create . UploadId ,
203+ PartNumber : 1 ,
204+ Body : 'this is the body'
205+ } ) ;
206+
207+ const res_complete = await s3 . completeMultipartUpload ( {
208+ Bucket : bucket ,
209+ Key : 'mp1' ,
210+ UploadId : res_create . UploadId ,
211+ MultipartUpload : {
212+ Parts : [ {
213+ ETag : res_upload . ETag ,
214+ PartNumber : 1
215+ } ]
216+ }
217+ } ) ;
218+
219+ await notify_await_result ( {
220+ bucket_name : bucket ,
221+ event_name : 'ObjectCreated:CompleteMultipartUpload' ,
222+ key : "mp1" ,
223+ etag : res_complete . ETag
224+ } ) ;
225+ } ) ;
226+
174227 } ) ;
175228
176229} ) ;
177230
178231const step_wait = 100 ;
179- async function notify_await_result ( { bucket_name, event_name, timeout} ) {
232+ async function notify_await_result ( { bucket_name, event_name, etag , key , timeout = undefined } ) {
180233
181234 //remember expected result here so server could compare it to actual result later
182235 expected_bucket = bucket_name ;
183236 expected_event_name = event_name ;
237+ expected_eTag = etag ;
238+ expected_key = key ;
184239 server_done = false ;
185240
186241 //busy-sync wait for server
0 commit comments