Skip to content

Commit 4f31e3b

Browse files
committed
add functional restore via objectOverwite tests
1 parent 71f8e9a commit 4f31e3b

1 file changed

Lines changed: 69 additions & 0 deletions

File tree

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

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

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

1118
const objectName = 'someObject';
1219
const firstPutMetadata = {
@@ -30,6 +37,7 @@ describe('Put object with same key as prior object', () => {
3037
bucketUtil = new BucketUtility('default', sigCfg);
3138
s3 = bucketUtil.s3;
3239
bucketName = await bucketUtil.createRandom(1);
40+
await initMetadataPromise();
3341
});
3442

3543
beforeEach(async () => {
@@ -66,5 +74,66 @@ describe('Put object with same key as prior object', () => {
6674
const bodyText = await res.Body.transformToString();
6775
assert.deepStrictEqual(bodyText, 'Much different');
6876
});
77+
78+
it('should replace archived object in non-versioned bucket', async () => {
79+
await fakeMetadataArchivePromise(bucketName, objectName, undefined, {
80+
archiveInfo: { archiveId: 'archive-1' },
81+
restoreRequestedAt: new Date(0).toISOString(),
82+
restoreRequestedDays: 5,
83+
});
84+
85+
await s3.send(new PutObjectCommand({
86+
Bucket: bucketName,
87+
Key: objectName,
88+
Body: 'overwrite archived data',
89+
Metadata: secondPutMetadata,
90+
}));
91+
92+
const currentMD = await getMetadataPromise(bucketName, objectName, undefined);
93+
assert.strictEqual(currentMD.archive, undefined);
94+
});
95+
96+
it('should preserve archived previous version in versioned bucket', async () => {
97+
await s3.send(new PutBucketVersioningCommand({
98+
Bucket: bucketName,
99+
VersioningConfiguration: { Status: 'Enabled' },
100+
}));
101+
102+
const firstPutRes = await s3.send(new PutObjectCommand({
103+
Bucket: bucketName,
104+
Key: objectName,
105+
Body: 'versioned first payload',
106+
Metadata: firstPutMetadata,
107+
}));
108+
109+
await fakeMetadataArchivePromise(bucketName, objectName, firstPutRes.VersionId, {
110+
archiveInfo: { archiveId: 'archive-versioned-1' },
111+
restoreRequestedAt: new Date(0).toISOString(),
112+
restoreRequestedDays: 5,
113+
});
114+
115+
const secondPutRes = await s3.send(new PutObjectCommand({
116+
Bucket: bucketName,
117+
Key: objectName,
118+
Body: 'versioned second payload',
119+
Metadata: secondPutMetadata,
120+
}));
121+
122+
const archivedVersionMD = await getMetadataPromise(
123+
bucketName, objectName, firstPutRes.VersionId);
124+
assert(archivedVersionMD.archive);
125+
assert(archivedVersionMD.archive.archiveInfo);
126+
127+
const currentVersionMD = await getMetadataPromise(
128+
bucketName, objectName, secondPutRes.VersionId);
129+
assert.strictEqual(currentVersionMD.archive, undefined);
130+
131+
const listed = await s3.send(new ListObjectVersionsCommand({
132+
Bucket: bucketName,
133+
Prefix: objectName,
134+
}));
135+
const objectVersions = (listed.Versions || []).filter(v => v.Key === objectName);
136+
assert(objectVersions.length >= 2);
137+
});
69138
});
70139
});

0 commit comments

Comments
 (0)