@@ -7,6 +7,7 @@ const { ObjectMD } = require('arsenal').models;
77const ActionQueueEntry = require ( '../../../lib/models/ActionQueueEntry' ) ;
88const LifecycleDeleteObjectTask = require (
99 '../../../extensions/lifecycle/tasks/LifecycleDeleteObjectTask' ) ;
10+ const { LifecycleMetrics } = require ( '../../../extensions/lifecycle/LifecycleMetrics' ) ;
1011
1112const day = 1000 * 60 * 60 * 24 ;
1213
@@ -51,6 +52,7 @@ describe('LifecycleDeleteObjectTask', () => {
5152 } ) ;
5253
5354 afterEach ( ( ) => {
55+ sinon . restore ( ) ;
5456 backbeatMdProxyClient . setError ( null ) ;
5557 } ) ;
5658
@@ -279,6 +281,40 @@ describe('LifecycleDeleteObjectTask', () => {
279281 } ) ;
280282 } ) ;
281283
284+ it ( 'should emit expiration metrics with restored object cold location' , done => {
285+ const requestedAt = new Date ( Date . now ( ) - ( 2 * day ) ) . toISOString ( ) ;
286+ const completedAt = new Date ( Date . now ( ) - day ) . toISOString ( ) ;
287+ const expireAt = new Date ( Date . now ( ) + day ) . toISOString ( ) ;
288+ objMd . setDataStoreName ( 'STANDARD' )
289+ . setAmzStorageClass ( 'cold-location' )
290+ . setArchive ( {
291+ archiveInfo : {
292+ archiveId : 'archive-id' ,
293+ } ,
294+ restoreRequestedAt : requestedAt ,
295+ restoreRequestedDays : 1 ,
296+ restoreCompletedAt : completedAt ,
297+ restoreWillExpireAt : expireAt ,
298+ } ) ;
299+ const startedMetric = sinon . stub ( LifecycleMetrics , 'onLifecycleStarted' ) ;
300+ const completedMetric = sinon . stub ( LifecycleMetrics , 'onLifecycleCompleted' ) ;
301+ const entry = ActionQueueEntry . create ( 'deleteObject' )
302+ . setAttribute ( 'target.owner' , 'testowner' )
303+ . setAttribute ( 'target.bucket' , 'testbucket' )
304+ . setAttribute ( 'target.accountId' , 'testid' )
305+ . setAttribute ( 'target.key' , 'testkey' )
306+ . setAttribute ( 'target.version' , 'testversion' )
307+ . setAttribute ( 'details.dataStoreName' , 'STANDARD' )
308+ . setAttribute ( 'transitionTime' , Date . now ( ) - day ) ;
309+ backbeatClient . setResponse ( null , { } ) ;
310+ task . processActionEntry ( entry , err => {
311+ assert . ifError ( err ) ;
312+ assert . strictEqual ( startedMetric . firstCall . args [ 2 ] , 'cold-location' ) ;
313+ assert . strictEqual ( completedMetric . firstCall . args [ 2 ] , 'cold-location' ) ;
314+ done ( ) ;
315+ } ) ;
316+ } ) ;
317+
282318 it ( 'should fallback to deleteObject method if deleteObjectFromExpiration is not supported' , done => {
283319 const entry = ActionQueueEntry . create ( 'deleteObject' )
284320 . setAttribute ( 'target.owner' , 'testowner' )
0 commit comments