Skip to content

Commit 1ec4d6f

Browse files
committed
add functional restore via objectOverwite tests
Issue: CLDSRV-561
1 parent d5fdd77 commit 1ec4d6f

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

tests/functional/aws-node-sdk/test/object/objectOverwrite.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
const assert = require('assert');
2+
const { promisify } = require('util');
23
const {
34
PutObjectCommand,
5+
PutBucketVersioningCommand,
46
HeadObjectCommand,
57
GetObjectCommand,
68
} = require('@aws-sdk/client-s3');
79

810
const withV4 = require('../support/withV4');
911
const BucketUtility = require('../../lib/utility/bucket-util');
12+
const { fakeMetadataArchive, getMetadata, initMetadata } = require('../utils/init');
13+
const fakeMetadataArchivePromise = promisify(fakeMetadataArchive);
14+
const getMetadataPromise = promisify(getMetadata);
15+
const initMetadataPromise = promisify(initMetadata);
1016

1117
const objectName = 'someObject';
1218
const firstPutMetadata = {
@@ -30,6 +36,7 @@ describe('Put object with same key as prior object', () => {
3036
bucketUtil = new BucketUtility('default', sigCfg);
3137
s3 = bucketUtil.s3;
3238
bucketName = await bucketUtil.createRandom(1);
39+
await initMetadataPromise();
3340
});
3441

3542
beforeEach(async () => {
@@ -66,5 +73,57 @@ describe('Put object with same key as prior object', () => {
6673
const bodyText = await res.Body.transformToString();
6774
assert.deepStrictEqual(bodyText, 'Much different');
6875
});
76+
77+
it('should replace archived object in non-versioned bucket', async () => {
78+
await fakeMetadataArchivePromise(bucketName, objectName, undefined, {
79+
archiveInfo: { archiveId: 'archive-1' },
80+
restoreRequestedAt: new Date(0).toISOString(),
81+
restoreRequestedDays: 5,
82+
});
83+
84+
await s3.send(new PutObjectCommand({
85+
Bucket: bucketName,
86+
Key: objectName,
87+
Body: 'overwrite archived data',
88+
Metadata: secondPutMetadata,
89+
}));
90+
91+
const currentMD = await getMetadataPromise(bucketName, objectName, undefined);
92+
assert.strictEqual(currentMD.archive, undefined);
93+
});
94+
95+
it('should overwrite archived current object in versioned bucket', async () => {
96+
await bucketUtil.empty(bucketName);
97+
98+
await s3.send(new PutBucketVersioningCommand({
99+
Bucket: bucketName,
100+
VersioningConfiguration: { Status: 'Enabled' },
101+
}));
102+
103+
const firstPutRes = await s3.send(new PutObjectCommand({
104+
Bucket: bucketName,
105+
Key: objectName,
106+
Body: 'versioned first payload',
107+
Metadata: firstPutMetadata,
108+
}));
109+
assert(firstPutRes.VersionId);
110+
111+
await fakeMetadataArchivePromise(bucketName, objectName, undefined, {
112+
archiveInfo: { archiveId: 'archive-versioned-current' },
113+
restoreRequestedAt: new Date(0).toISOString(),
114+
restoreRequestedDays: 5,
115+
});
116+
117+
const secondPutRes = await s3.send(new PutObjectCommand({
118+
Bucket: bucketName,
119+
Key: objectName,
120+
Body: 'versioned second payload',
121+
Metadata: secondPutMetadata,
122+
}));
123+
assert(secondPutRes.VersionId);
124+
125+
const currentVersionMD = await getMetadataPromise(bucketName, objectName, undefined);
126+
assert.strictEqual(currentVersionMD.archive, undefined);
127+
});
69128
});
70129
});

0 commit comments

Comments
 (0)