Skip to content

Commit

Permalink
update lifecycle tests
Browse files Browse the repository at this point in the history
Issue: BB-469
  • Loading branch information
Kerkesni committed Nov 23, 2023
1 parent 60d1b45 commit 65ef9fe
Show file tree
Hide file tree
Showing 10 changed files with 82 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ class LifecycleColdStatusArchiveTask extends LifecycleUpdateTransitionTask {
next => this._getMetadata(entry, log, (err, res) => {
LifecycleMetrics.onS3Request(log, 'getMetadata', 'archive', err);
if (err) {
if (err.code === 'ObjNotFound') {
if (err.is.ObjNotFound) {
log.info('object metadata not found, cleaning orphan cold object', {
entry: entry.getLogInfo(),
method: 'LifecycleColdStatusArchiveTask.processEntry',
Expand Down
3 changes: 3 additions & 0 deletions tests/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,9 @@
"account": "bart"
},
"coldStorageArchiveTopicPrefix": "cold-archive-req-",
"coldStorageRestoreTopicPrefix": "cold-restore-req-",
"coldStorageGCTopicPrefix": "cold-gc-req-",
"coldStorageStatusTopicPrefix": "cold-status-",
"coldStorageTopics": []
},
"gc": {
Expand Down
2 changes: 2 additions & 0 deletions tests/unit/gc/GarbageCollectorTask.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,12 @@ describe('GarbageCollectorTask', () => {
backbeatMetadataProxyClient = new BackbeatMetadataProxyMock();
gcProducer = new GarbageCollectorProducerMock();
gcProcessor = new ProcessorMock(
null,
null,
backbeatClient,
backbeatMetadataProxyClient,
gcProducer,
null,
new werelogs.Logger('test:GarbageCollectorTask'));
gcTask = new GarbageCollectorTask(gcProcessor);
});
Expand Down
39 changes: 39 additions & 0 deletions tests/unit/lifecycle/LifecycleColdStatusArchiveTask.spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
const assert = require('assert');
const werelogs = require('werelogs');
const { ObjectMD } = require('arsenal').models;
const sinon = require('sinon');
const config = require('../../config.json');

const LifecycleColdStatusArchiveTask = require(
'../../../extensions/lifecycle/tasks/LifecycleColdStatusArchiveTask');
Expand All @@ -12,7 +14,9 @@ const {
ProcessorMock,
BackbeatClientMock,
BackbeatMetadataProxyMock,
BackbeatProducerMock,
} = require('../mocks');
const { errors } = require('arsenal');

const message = Buffer.from(`{
"op":"archive",
Expand Down Expand Up @@ -41,6 +45,7 @@ describe('LifecycleColdStatusArchiveTask', () => {
let backbeatClient;
let backbeatMetadataProxyClient;
let gcProducer;
let coldProducer;
let objectProcessor;
let mdObj;

Expand All @@ -49,11 +54,14 @@ describe('LifecycleColdStatusArchiveTask', () => {
backbeatClient = new BackbeatClientMock();
backbeatMetadataProxyClient = new BackbeatMetadataProxyMock();
gcProducer = new GarbageCollectorProducerMock();
coldProducer = new BackbeatProducerMock();
objectProcessor = new ProcessorMock(
config.extensions.lifecycle,
null,
backbeatClient,
backbeatMetadataProxyClient,
gcProducer,
coldProducer,
new werelogs.Logger('test:LifecycleColdStatusArchiveTask'));
archiveTask = new LifecycleColdStatusArchiveTask(objectProcessor);
});
Expand Down Expand Up @@ -116,4 +124,35 @@ describe('LifecycleColdStatusArchiveTask', () => {
done();
});
});

it('should send kafka entry to delete orphan cold object when source object was deleted', done => {
const entry = ColdStorageStatusQueueEntry.createFromKafkaEntry({ value: message });

sinon.stub(backbeatMetadataProxyClient, 'getMetadata').yields(errors.ObjNotFound);

archiveTask.processEntry(coldLocation, entry, err => {
assert.ifError(err);

const gcColdEntry = coldProducer.getReceivedEntry()[0];
const message = JSON.parse(gcColdEntry.message);

const topic = coldProducer.getReceivedTopic();

assert.strictEqual(topic, 'cold-gc-req-cold');

assert.strictEqual(message.bucketName, entry.target.bucketName);
assert.strictEqual(message.objectKey, entry.target.objectKey);
assert.strictEqual(message.objectVersion, entry.target.objectVersion);
assert.deepStrictEqual(message.archiveInfo.archiveId, entry.archiveInfo.archiveId);
assert.strictEqual(message.archiveInfo.archiveVersion, entry.archiveInfo.archiveVersion);

const updatedMD = backbeatMetadataProxyClient.getReceivedMd();
assert.strictEqual(updatedMD, null);

const gcEntry = gcProducer.getReceivedEntry();
assert.strictEqual(gcEntry, null);

done();
});
});
});
2 changes: 2 additions & 0 deletions tests/unit/lifecycle/LifecycleDeleteObjectTask.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,12 @@ describe('LifecycleDeleteObjectTask', () => {
backbeatMdProxyClient = new BackbeatMetadataProxyMock();
backbeatClient = new BackbeatClientMock();
objectProcessor = new ProcessorMock(
null,
s3Client,
backbeatClient,
backbeatMdProxyClient,
null,
null,
new werelogs.Logger('test:LifecycleDeleteObjectTask'));
objMd = new ObjectMD();
backbeatMdProxyClient.setMdObj(objMd);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,12 @@ describe('LifecycleResetTransitionInProgressTask', () => {
backbeatMetadataProxyClient = new BackbeatMetadataProxyMock();

objectProcessor = new ProcessorMock(
null,
null,
null,
backbeatMetadataProxyClient,
null,
null,
new werelogs.Logger('test:LifecycleResetTransitionInProgressTask'));

task = new LifecycleResetTransitionInProgressTask(objectProcessor);
Expand Down
2 changes: 2 additions & 0 deletions tests/unit/lifecycle/LifecycleRetriggerRestoreTask.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,12 @@ describe('LifecycleResetTransitionInProgressTask', () => {
backbeatMetadataProxyClient = new BackbeatMetadataProxyMock();

objectProcessor = new ProcessorMock(
null,
null,
null,
backbeatMetadataProxyClient,
null,
null,
new werelogs.Logger('test:LifecycleRetriggerRestoreTask'));

task = new LifecycleRetriggerRestoreTask(objectProcessor);
Expand Down
2 changes: 2 additions & 0 deletions tests/unit/lifecycle/LifecycleUpdateExpirationTask.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,12 @@ describe('LifecycleUpdateExpirationTask', () => {
backbeatMetadataProxyClient = new BackbeatMetadataProxyMock();
gcProducer = new GarbageCollectorProducerMock();
objectProcessor = new ProcessorMock(
null,
null,
null,
backbeatMetadataProxyClient,
gcProducer,
null,
new werelogs.Logger('test:LifecycleUpdateExpirationTask'));
actionEntry = ActionQueueEntry.create('deleteObject')
.setAttribute('target', {
Expand Down
2 changes: 2 additions & 0 deletions tests/unit/lifecycle/LifecycleUpdateTransitionTask.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,12 @@ describe('LifecycleUpdateTransitionTask', () => {
backbeatMetadataProxyClient = new BackbeatMetadataProxyMock();
gcProducer = new GarbageCollectorProducerMock();
objectProcessor = new ProcessorMock(
null,
null,
null,
backbeatMetadataProxyClient,
gcProducer,
null,
new werelogs.Logger('test:LifecycleUpdateTransitionTask'));
mdObj = new ObjectMD();
mdObj.setLocation(oldLocation)
Expand Down
28 changes: 27 additions & 1 deletion tests/unit/mocks.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,27 @@ class GarbageCollectorProducerMock {
}
}

class BackbeatProducerMock {
constructor() {
this.receivedEntry = null;
this.topic = null;
}

sendToTopic(coldGcTopic, gcEntries, cb) {
this.receivedEntry = gcEntries;
this.topic = coldGcTopic;
cb();
}

getReceivedEntry() {
return this.receivedEntry;
}

getReceivedTopic() {
return this.topic;
}
}

class MockRequestAPI extends EventEmitter {
/**
* @param {object} args -
Expand Down Expand Up @@ -116,18 +137,22 @@ class BackbeatMetadataProxyMock {
}

class ProcessorMock {
constructor(s3Client, backbeatClient, backbeatMetadataProxy, gcProducer, logger) {
constructor(lcConfig, s3Client, backbeatClient, backbeatMetadataProxy, gcProducer, coldProducer, logger) {
this.lcConfig = lcConfig;
this.s3Client = s3Client;
this.backbeatMetadataProxy = backbeatMetadataProxy;
this.backbeatClient = backbeatClient;
this.gcProducer = gcProducer;
this.coldProducer = coldProducer;
this.logger = logger;
}

getStateVars() {
return {
lcConfig: this.lcConfig,
backbeatClient: this.backbeatMetadataProxy,
gcProducer: this.gcProducer,
coldProducer: this.coldProducer,
logger: this.logger,
getBackbeatClient: () => this.backbeatClient,
getBackbeatMetadataProxy: () => this.backbeatMetadataProxy,
Expand Down Expand Up @@ -195,4 +220,5 @@ module.exports = {
BackbeatMetadataProxyMock,
BackbeatClientMock,
S3ClientMock,
BackbeatProducerMock,
};

0 comments on commit 65ef9fe

Please sign in to comment.