Skip to content

Commit a26bb42

Browse files
committed
streamline putVersion helper usage
Issue: CLDSRV-561
1 parent 423fa32 commit a26bb42

File tree

1 file changed

+66
-8
lines changed

1 file changed

+66
-8
lines changed

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

Lines changed: 66 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const archive = {
3434
restoreRequestedDays: 5,
3535
};
3636

37-
async function putObjectVersion(s3, params, vid, next) {
37+
function putObjectVersion(s3, params, vid, cb) {
3838
const paramsWithBody = { ...params, Body: '123' };
3939
const command = new PutObjectCommand(paramsWithBody);
4040
command.middlewareStack.add(
@@ -48,13 +48,9 @@ async function putObjectVersion(s3, params, vid, next) {
4848
name: 'addVersionIdHeader', // Add a name to identify the middleware
4949
}
5050
);
51-
52-
try {
53-
const res = await s3.send(command);
54-
next(null, res);
55-
} catch (err) {
56-
next(err);
57-
}
51+
52+
const promise = s3.send(command);
53+
return cb ? promise.then(res => cb(null, res), cb) : promise;
5854
}
5955

6056
function clearRestoreStatus(versions) {
@@ -956,6 +952,68 @@ describe('PUT object with x-scal-s3-version-id header', () => {
956952
},
957953
], done);
958954
});
955+
956+
it('should set restore originOp and drop restore-attempt metadata', done => {
957+
const params = { Bucket: bucketName, Key: objectName };
958+
959+
async.series([
960+
next => s3.send(new PutObjectCommand({
961+
...params,
962+
Metadata: {
963+
'custom-md': 'preserved-value',
964+
},
965+
})).then(() => next()).catch(next),
966+
next => fakeMetadataArchive(bucketName, objectName, undefined, archive, next),
967+
next => getMetadata(bucketName, objectName, undefined, (err, objMD) => {
968+
if (err) {
969+
return next(err);
970+
}
971+
/* eslint-disable no-param-reassign */
972+
objMD['x-amz-meta-scal-s3-restore-attempt'] = '3';
973+
/* eslint-enable no-param-reassign */
974+
return metadata.putObjectMD(bucketName, objectName, objMD, undefined, log, next);
975+
}),
976+
next => putObjectVersion(s3, params, '', next),
977+
next => getMetadata(bucketName, objectName, undefined, (err, objMD) => {
978+
if (err) {
979+
return next(err);
980+
}
981+
assert.strictEqual(objMD.originOp, 's3:ObjectRestore:Completed');
982+
assert.strictEqual(objMD['x-amz-meta-custom-md'], 'preserved-value');
983+
assert.strictEqual(objMD['x-amz-meta-scal-s3-restore-attempt'], undefined);
984+
return next();
985+
}),
986+
], done);
987+
});
988+
989+
it('should keep x-amz-meta-scal-version-id when restoring on ingestion bucket', async () => {
990+
const ingestionBucketName = `ingestion-restore-${Date.now()}`;
991+
const params = { Bucket: ingestionBucketName, Key: objectName };
992+
let putVersionId;
993+
try {
994+
await s3.send(new CreateBucketCommand({
995+
Bucket: ingestionBucketName,
996+
CreateBucketConfiguration: {
997+
LocationConstraint: 'us-east-2:ingest',
998+
},
999+
}));
1000+
1001+
const putRes = await s3.send(new PutObjectCommand(params));
1002+
putVersionId = putRes.VersionId;
1003+
1004+
await fakeMetadataArchive(ingestionBucketName, objectName, putVersionId, archive);
1005+
1006+
await putObjectVersion(s3, params, putVersionId);
1007+
1008+
const restoredObjMD = await getMetadata(
1009+
ingestionBucketName, objectName, putVersionId);
1010+
1011+
assert.strictEqual(restoredObjMD['x-amz-meta-scal-version-id'], putVersionId);
1012+
} finally {
1013+
await bucketUtil.emptyMany([ingestionBucketName]).catch(() => {});
1014+
await bucketUtil.deleteMany([ingestionBucketName]).catch(() => {});
1015+
}
1016+
});
9591017
});
9601018
});
9611019
});

0 commit comments

Comments
 (0)