Skip to content

Commit ac53023

Browse files
committed
tests adding
1 parent 3d5ca31 commit ac53023

2 files changed

Lines changed: 93 additions & 15 deletions

File tree

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

Lines changed: 89 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ const {
99

1010
const withV4 = require('../support/withV4');
1111
const BucketUtility = require('../../lib/utility/bucket-util');
12-
const { fakeMetadataArchive, getMetadata, initMetadata } = require('../utils/init');
12+
const { fakeMetadataArchive, fakeMetadataTransition, getMetadata, initMetadata } = require('../utils/init');
1313
const fakeMetadataArchivePromise = promisify(fakeMetadataArchive);
14+
const fakeMetadataTransitionPromise = promisify(fakeMetadataTransition);
1415
const getMetadataPromise = promisify(getMetadata);
1516
const initMetadataPromise = promisify(initMetadata);
1617

@@ -74,22 +75,54 @@ describe('Put object with same key as prior object', () => {
7475
assert.deepStrictEqual(bodyText, 'Much different');
7576
});
7677

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-
});
78+
[
79+
{
80+
name: 'transition in progress',
81+
setup: () => fakeMetadataTransitionPromise(bucketName, objectName, undefined),
82+
},
83+
{
84+
name: 'archived',
85+
setup: () => fakeMetadataArchivePromise(bucketName, objectName, undefined, {
86+
archiveInfo: { archiveId: 'archive-1' },
87+
restoreRequestedAt: new Date(0).toISOString(),
88+
restoreRequestedDays: 5,
89+
}),
90+
},
91+
{
92+
name: 'restored (not expired)',
93+
setup: () => fakeMetadataArchivePromise(bucketName, objectName, undefined, {
94+
archiveInfo: { archiveId: 'archive-restored' },
95+
restoreRequestedAt: new Date(0).toISOString(),
96+
restoreRequestedDays: 5,
97+
restoreCompletedAt: new Date(Date.now() - 60 * 60 * 1000).toISOString(),
98+
restoreWillExpireAt: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(),
99+
}),
100+
},
101+
{
102+
name: 'restored (expired)',
103+
setup: () => fakeMetadataArchivePromise(bucketName, objectName, undefined, {
104+
archiveInfo: { archiveId: 'archive-expired' },
105+
restoreRequestedAt: new Date(0).toISOString(),
106+
restoreRequestedDays: 5,
107+
restoreCompletedAt: new Date(Date.now() - 48 * 60 * 60 * 1000).toISOString(),
108+
restoreWillExpireAt: new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(),
109+
}),
110+
},
111+
].forEach(({ name, setup }) => {
112+
it(`should replace object with cold-state metadata (${name}) in non-versioned bucket`, async () => {
113+
await setup();
83114

84-
await s3.send(new PutObjectCommand({
85-
Bucket: bucketName,
86-
Key: objectName,
87-
Body: 'overwrite archived data',
88-
Metadata: secondPutMetadata,
89-
}));
115+
await s3.send(new PutObjectCommand({
116+
Bucket: bucketName,
117+
Key: objectName,
118+
Body: `overwrite cold state ${name}`,
119+
Metadata: secondPutMetadata,
120+
}));
90121

91-
const currentMD = await getMetadataPromise(bucketName, objectName, undefined);
92-
assert.strictEqual(currentMD.archive, undefined);
122+
const currentMD = await getMetadataPromise(bucketName, objectName, undefined);
123+
assert.strictEqual(currentMD.archive, undefined);
124+
assert.strictEqual(currentMD['x-amz-scal-transition-in-progress'], undefined);
125+
});
93126
});
94127

95128
it('should create a new version when replacing archived current object in versioned bucket', async () => {
@@ -133,5 +166,46 @@ describe('Put object with same key as prior object', () => {
133166
assert.strictEqual(currentMD.archive, undefined);
134167
});
135168

169+
it('should replace archived current null version in version-suspended bucket', async () => {
170+
await bucketUtil.empty(bucketName);
171+
172+
await s3.send(new PutBucketVersioningCommand({
173+
Bucket: bucketName,
174+
VersioningConfiguration: { Status: 'Enabled' },
175+
}));
176+
await s3.send(new PutObjectCommand({
177+
Bucket: bucketName,
178+
Key: objectName,
179+
Body: 'enabled-version-payload',
180+
}));
181+
await s3.send(new PutBucketVersioningCommand({
182+
Bucket: bucketName,
183+
VersioningConfiguration: { Status: 'Suspended' },
184+
}));
185+
186+
await s3.send(new PutObjectCommand({
187+
Bucket: bucketName,
188+
Key: objectName,
189+
Body: 'null-current-before-archive',
190+
}));
191+
192+
await fakeMetadataArchivePromise(bucketName, objectName, undefined, {
193+
archiveInfo: { archiveId: 'archive-null-current' },
194+
restoreRequestedAt: new Date(0).toISOString(),
195+
restoreRequestedDays: 5,
196+
});
197+
198+
await s3.send(new PutObjectCommand({
199+
Bucket: bucketName,
200+
Key: objectName,
201+
Body: 'replace archived null current',
202+
Metadata: secondPutMetadata,
203+
}));
204+
205+
const currentMD = await getMetadataPromise(bucketName, objectName, undefined);
206+
assert.strictEqual(currentMD.archive, undefined);
207+
assert.deepStrictEqual(currentMD['x-amz-meta-secondput'], secondPutMetadata.secondput);
208+
});
209+
136210
});
137211
});

tests/unit/api/createAndStoreObject.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ describe('createAndStoreObject', () => {
303303
assert.ifError(err);
304304
// Verify archive info was updated
305305
const storedObjMD = getStoredObjectData();
306+
const options = getStoredOptions();
306307
assert(storedObjMD.archive.restoreCompletedAt, 'restoreCompletedAt should be set');
307308
assert(storedObjMD.archive.restoreWillExpireAt, 'restoreWillExpireAt should be set');
308309
assert.strictEqual(storedObjMD.archive.restoreRequestedDays, 7);
@@ -313,6 +314,9 @@ describe('createAndStoreObject', () => {
313314

314315
// Verify originOp set correctly
315316
assert.strictEqual(storedObjMD.originOp, 's3:ObjectRestore:Completed');
317+
// PutObjectVersion must not use archived-overwrite oplog path.
318+
assert.strictEqual(options.needOplogUpdate, undefined);
319+
assert.strictEqual(options.originOp, undefined);
316320

317321
done();
318322
});

0 commit comments

Comments
 (0)