@@ -191,7 +191,7 @@ describe('routeBackbeat', () => {
191191 assert . deepStrictEqual ( mockResponse . body , [ { } ] ) ;
192192 } ) ;
193193
194- it ( 'should put metadata' , async ( ) => {
194+ it ( 'should put non versioned metadata' , async ( ) => {
195195 mockRequest . method = 'PUT' ;
196196 mockRequest . url = '/_/backbeat/metadata/bucket0/key0' ;
197197 mockRequest . headers = {
@@ -220,6 +220,124 @@ describe('routeBackbeat', () => {
220220 assert . deepStrictEqual ( mockResponse . body , { } ) ;
221221 } ) ;
222222
223+ it ( 'should put metadata after updating account info' , async ( ) => {
224+ mockRequest . method = 'PUT' ;
225+ mockRequest . url = '/_/backbeat/metadata/bucket0/key0' +
226+ '?accountId=123456789012' ;
227+ mockRequest . headers = {
228+ 'x-scal-versioning-required' : 'true' ,
229+ } ;
230+ mockRequest . destroy = ( ) => { } ;
231+
232+ sandbox . stub ( metadata , 'putObjectMD' ) . callsFake ( ( bucketName , objectKey , omVal , options , logParam , cb ) => {
233+ assert . strictEqual ( omVal [ 'owner-display-name' ] , 'Bart' ) ;
234+ assert . strictEqual ( omVal [ 'owner-id' ] , '79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be' ) ;
235+ cb ( null , { } ) ;
236+ } ) ;
237+
238+ metadataUtils . standardMetadataValidateBucketAndObj . callsFake ( ( params , denies , log , callback ) => {
239+ const bucketInfo = {
240+ getVersioningConfiguration : ( ) => ( { Status : 'Enabled' } ) ,
241+ isVersioningEnabled : ( ) => true ,
242+ } ;
243+ const objMd = { } ;
244+ callback ( null , bucketInfo , objMd ) ;
245+ } ) ;
246+
247+ routeBackbeat ( '127.0.0.1' , mockRequest , mockResponse , log ) ;
248+
249+ void await endPromise ;
250+
251+ assert . strictEqual ( mockResponse . statusCode , 200 ) ;
252+ assert . deepStrictEqual ( mockResponse . body , { } ) ;
253+ } ) ;
254+
255+ it ( 'should fail to put metadata when accountId is invalid' , async ( ) => {
256+ mockRequest . method = 'PUT' ;
257+ mockRequest . url = '/_/backbeat/metadata/bucket0/key0' +
258+ '?accountId=invalid' ;
259+ mockRequest . headers = {
260+ 'x-scal-versioning-required' : 'true' ,
261+ } ;
262+ mockRequest . destroy = ( ) => { } ;
263+
264+ metadataUtils . standardMetadataValidateBucketAndObj . callsFake ( ( params , denies , log , callback ) => {
265+ const bucketInfo = {
266+ getVersioningConfiguration : ( ) => ( { Status : 'Enabled' } ) ,
267+ isVersioningEnabled : ( ) => true ,
268+ } ;
269+ const objMd = { } ;
270+ callback ( null , bucketInfo , objMd ) ;
271+ } ) ;
272+
273+ routeBackbeat ( '127.0.0.1' , mockRequest , mockResponse , log ) ;
274+
275+ void await endPromise ;
276+
277+ assert . strictEqual ( mockResponse . statusCode , 404 ) ;
278+ assert . deepStrictEqual ( mockResponse . body . code , 'AccountNotFound' ) ;
279+ } ) ;
280+
281+ it ( 'should repair master when putting metadata of a new version' , async ( ) => {
282+ mockRequest . method = 'PUT' ;
283+ mockRequest . url = '/_/backbeat/metadata/bucket0/key0' +
284+ '?accountId=123456789012&versionId=aIXVkw5Tw2Pd00000000001I4j3QKsvf' ;
285+ mockRequest . headers = {
286+ 'x-scal-versioning-required' : 'true' ,
287+ } ;
288+ mockRequest . destroy = ( ) => { } ;
289+
290+ sandbox . stub ( metadata , 'putObjectMD' ) . callsFake ( ( bucketName , objectKey , omVal , options , logParam , cb ) => {
291+ assert . strictEqual ( options . repairMaster , true ) ;
292+ cb ( null , { } ) ;
293+ } ) ;
294+
295+ metadataUtils . standardMetadataValidateBucketAndObj . callsFake ( ( params , denies , log , callback ) => {
296+ const bucketInfo = {
297+ getVersioningConfiguration : ( ) => ( { Status : 'Enabled' } ) ,
298+ isVersioningEnabled : ( ) => true ,
299+ } ;
300+ callback ( null , bucketInfo , undefined ) ;
301+ } ) ;
302+
303+ routeBackbeat ( '127.0.0.1' , mockRequest , mockResponse , log ) ;
304+
305+ void await endPromise ;
306+
307+ assert . strictEqual ( mockResponse . statusCode , 200 ) ;
308+ assert . deepStrictEqual ( mockResponse . body , { } ) ;
309+ } ) ;
310+
311+ it ( 'should not repair master when updating metadata of an existing version' , async ( ) => {
312+ mockRequest . method = 'PUT' ;
313+ mockRequest . url = '/_/backbeat/metadata/bucket0/key0' +
314+ '?accountId=123456789012&versionId=aIXVkw5Tw2Pd00000000001I4j3QKsvf' ;
315+ mockRequest . headers = {
316+ 'x-scal-versioning-required' : 'true' ,
317+ } ;
318+ mockRequest . destroy = ( ) => { } ;
319+
320+ sandbox . stub ( metadata , 'putObjectMD' ) . callsFake ( ( bucketName , objectKey , omVal , options , logParam , cb ) => {
321+ assert . strictEqual ( options . repairMaster , undefined ) ;
322+ cb ( null , { } ) ;
323+ } ) ;
324+
325+ metadataUtils . standardMetadataValidateBucketAndObj . callsFake ( ( params , denies , log , callback ) => {
326+ const bucketInfo = {
327+ getVersioningConfiguration : ( ) => ( { Status : 'Enabled' } ) ,
328+ isVersioningEnabled : ( ) => true ,
329+ } ;
330+ callback ( null , bucketInfo , { } ) ;
331+ } ) ;
332+
333+ routeBackbeat ( '127.0.0.1' , mockRequest , mockResponse , log ) ;
334+
335+ void await endPromise ;
336+
337+ assert . strictEqual ( mockResponse . statusCode , 200 ) ;
338+ assert . deepStrictEqual ( mockResponse . body , { } ) ;
339+ } ) ;
340+
223341 it ( 'should handle error when putting metadata' , async ( ) => {
224342 mockRequest . method = 'PUT' ;
225343 mockRequest . url = '/_/backbeat/metadata/bucket0/key0' ;
0 commit comments