Skip to content

Commit

Permalink
test keeping same storage class when restoring a cold object
Browse files Browse the repository at this point in the history
Issue: CLDSRV-400
  • Loading branch information
Kerkesni committed Jun 20, 2023
1 parent ac3532a commit 2cd5200
Show file tree
Hide file tree
Showing 3 changed files with 152 additions and 76 deletions.
116 changes: 76 additions & 40 deletions tests/functional/aws-node-sdk/test/object/mpuVersion.js
Original file line number Diff line number Diff line change
Expand Up @@ -551,15 +551,15 @@ describe('MPU with x-scal-s3-version-id header', () => {
return next(err);
}),
next => s3.putObject(params, next),
next => metadata.listObject(bucketName, mdListingParams, log, (err, res) => {
versionsBefore = res.Versions;
return next(err);
}),
next => fakeMetadataArchive(bucketName, objectName, vId, archive, next),
next => getMetadata(bucketName, objectName, vId, (err, objMD) => {
objMDBefore = objMD;
return next(err);
}),
next => metadata.listObject(bucketName, mdListingParams, log, (err, res) => {
versionsBefore = res.Versions;
return next(err);
}),
next => putMPUVersion(s3, bucketName, objectName, vId, next),
next => getMetadata(bucketName, objectName, vId, (err, objMD) => {
objMDAfter = objMD;
Expand Down Expand Up @@ -711,11 +711,11 @@ describe('MPU with x-scal-s3-version-id header', () => {

async.series([
next => s3.putObject(params, next),
next => fakeMetadataArchive(bucketName, objectName, undefined, archive, next),
next => metadata.listObject(bucketName, mdListingParams, log, (err, res) => {
versionsBefore = res.Versions;
return next(err);
}),
next => fakeMetadataArchive(bucketName, objectName, undefined, archive, next),
next => getMetadata(bucketName, objectName, undefined, (err, objMD) => {
objMDBefore = objMD;
return next(err);
Expand Down Expand Up @@ -810,41 +810,77 @@ describe('MPU with x-scal-s3-version-id header', () => {
});
});

it('should update restore metadata', done => {
const params = { Bucket: bucketName, Key: objectName };
let objMDBefore;
let objMDAfter;

async.series([
next => s3.putObject(params, next),
next => fakeMetadataArchive(bucketName, objectName, undefined, archive, next),
next => getMetadata(bucketName, objectName, undefined, (err, objMD) => {
objMDBefore = objMD;
return next(err);
}),
next => metadata.listObject(bucketName, mdListingParams, log, next),
next => putMPUVersion(s3, bucketName, objectName, '', next),
next => getMetadata(bucketName, objectName, undefined, (err, objMD) => {
objMDAfter = objMD;
return next(err);
}),
next => metadata.listObject(bucketName, mdListingParams, log, next),
], err => {
assert.strictEqual(err, null, `Expected success got error ${JSON.stringify(err)}`);

// Make sure object data location is set back to its bucket data location.
assert.deepStrictEqual(objMDAfter.dataStoreName, 'us-east-1');

assert.deepStrictEqual(objMDAfter.archive.archiveInfo, objMDBefore.archive.archiveInfo);
assert.deepStrictEqual(objMDAfter.archive.restoreRequestedAt, objMDBefore.archive.restoreRequestedAt);
assert.deepStrictEqual(objMDAfter.archive.restoreRequestedDays,
objMDBefore.archive.restoreRequestedDays);
assert.deepStrictEqual(objMDAfter['x-amz-restore']['ongoing-request'], false);

assert(objMDAfter.archive.restoreCompletedAt);
assert(objMDAfter.archive.restoreWillExpireAt);
assert(objMDAfter['x-amz-restore']['expiry-date']);
return done();
[
'non versioned',
'versioned',
'suspended'
].forEach(versioning => {
it(`should update restore metadata while keeping storage class (${versioning})`, done => {
const params = { Bucket: bucketName, Key: objectName };
let objMDBefore;
let objMDAfter;

async.series([
next => {
if (versioning === 'versioned') {
return s3.putBucketVersioning({
Bucket: bucketName,
VersioningConfiguration: { Status: 'Enabled' }
}, next);
} else if (versioning === 'suspended') {
return s3.putBucketVersioning({
Bucket: bucketName,
VersioningConfiguration: { Status: 'Suspended' }
}, next);
}
return next();
},
next => s3.putObject(params, next),
next => fakeMetadataArchive(bucketName, objectName, undefined, archive, next),
next => getMetadata(bucketName, objectName, undefined, (err, objMD) => {
objMDBefore = objMD;
return next(err);
}),
next => metadata.listObject(bucketName, mdListingParams, log, next),
next => putMPUVersion(s3, bucketName, objectName, '', next),
next => getMetadata(bucketName, objectName, undefined, (err, objMD) => {
objMDAfter = objMD;
return next(err);
}),
next => s3.listObjects({ Bucket: bucketName }, (err, res) => {
assert.ifError(err);
assert.strictEqual(res.Contents.length, 1);
assert.strictEqual(res.Contents[0].StorageClass, 'location-dmf-v1');
return next();
}),
next => s3.headObject(params, (err, res) => {
assert.ifError(err);
assert.strictEqual(res.StorageClass, 'location-dmf-v1');
return next();
}),
next => s3.getObject(params, (err, res) => {
assert.ifError(err);
assert.strictEqual(res.StorageClass, 'location-dmf-v1');
return next();
}),
], err => {
assert.strictEqual(err, null, `Expected success got error ${JSON.stringify(err)}`);

// Make sure object data location is set back to its bucket data location.
assert.deepStrictEqual(objMDAfter.dataStoreName, 'us-east-1');

assert.deepStrictEqual(objMDAfter.archive.archiveInfo, objMDBefore.archive.archiveInfo);
assert.deepStrictEqual(objMDAfter.archive.restoreRequestedAt,
objMDBefore.archive.restoreRequestedAt);
assert.deepStrictEqual(objMDAfter.archive.restoreRequestedDays,
objMDBefore.archive.restoreRequestedDays);
assert.deepStrictEqual(objMDAfter['x-amz-restore']['ongoing-request'], false);

assert(objMDAfter.archive.restoreCompletedAt);
assert(objMDAfter.archive.restoreWillExpireAt);
assert(objMDAfter['x-amz-restore']['expiry-date']);
return done();
});
});
});
});
Expand Down
3 changes: 2 additions & 1 deletion tests/functional/aws-node-sdk/test/object/objectCopy.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ describe('Object Copy', () => {
s3.getObject({ Bucket: destBucketName,
Key: destObjName }, (err, res) => {
checkNoError(err);
assert.strictEqual(res.StorageClass, undefined);
assert.strictEqual(res.Body.toString(),
content);
assert.deepStrictEqual(res.Metadata,
Expand Down Expand Up @@ -1271,7 +1272,7 @@ describe('Object Copy', () => {
});
});

it('should copy restored object', done => {
it('should copy restored object and reset storage class', done => {
const archiveCompleted = {
archiveInfo: {},
restoreRequestedAt: new Date(0),
Expand Down
109 changes: 74 additions & 35 deletions tests/functional/aws-node-sdk/test/object/putVersion.js
Original file line number Diff line number Diff line change
Expand Up @@ -716,41 +716,80 @@ describe('PUT object with x-scal-s3-version-id header', () => {
});
});

it('should update restore metadata', done => {
const params = { Bucket: bucketName, Key: objectName };
let objMDBefore;
let objMDAfter;

async.series([
next => s3.putObject(params, next),
next => fakeMetadataArchive(bucketName, objectName, undefined, archive, next),
next => getMetadata(bucketName, objectName, undefined, (err, objMD) => {
objMDBefore = objMD;
return next(err);
}),
next => metadata.listObject(bucketName, mdListingParams, log, next),
next => putObjectVersion(s3, params, '', next),
next => getMetadata(bucketName, objectName, undefined, (err, objMD) => {
objMDAfter = objMD;
return next(err);
}),
next => metadata.listObject(bucketName, mdListingParams, log, next),
], err => {
assert.strictEqual(err, null, `Expected success got error ${JSON.stringify(err)}`);

// Make sure object data location is set back to its bucket data location.
assert.deepStrictEqual(objMDAfter.dataStoreName, 'us-east-1');

assert.deepStrictEqual(objMDAfter.archive.archiveInfo, objMDBefore.archive.archiveInfo);
assert.deepStrictEqual(objMDAfter.archive.restoreRequestedAt, objMDBefore.archive.restoreRequestedAt);
assert.deepStrictEqual(objMDAfter.archive.restoreRequestedDays,
objMDBefore.archive.restoreRequestedDays);
assert.deepStrictEqual(objMDAfter['x-amz-restore']['ongoing-request'], false);

assert(objMDAfter.archive.restoreCompletedAt);
assert(objMDAfter.archive.restoreWillExpireAt);
assert(objMDAfter['x-amz-restore']['expiry-date']);
return done();
[
'non versioned',
'versioned',
'suspended'
].forEach(versioning => {
it(`should update restore metadata while keeping storage class (${versioning})`, done => {
const params = { Bucket: bucketName, Key: objectName };
let objMDBefore;
let objMDAfter;

async.series([
next => {
if (versioning === 'versioned') {
return s3.putBucketVersioning({
Bucket: bucketName,
VersioningConfiguration: { Status: 'Enabled' }
}, next);
} else if (versioning === 'suspended') {
return s3.putBucketVersioning({
Bucket: bucketName,
VersioningConfiguration: { Status: 'Suspended' }
}, next);
}
return next();
},
next => s3.putObject(params, next),
next => fakeMetadataArchive(bucketName, objectName, undefined, archive, next),
next => getMetadata(bucketName, objectName, undefined, (err, objMD) => {
objMDBefore = objMD;
return next(err);
}),
next => metadata.listObject(bucketName, mdListingParams, log, next),
next => putObjectVersion(s3, params, '', next),
next => getMetadata(bucketName, objectName, undefined, (err, objMD) => {
objMDAfter = objMD;
return next(err);
}),
next => s3.listObjects({ Bucket: bucketName }, (err, res) => {
assert.ifError(err);
assert.strictEqual(res.Contents.length, 1);
assert.strictEqual(res.Contents[0].StorageClass, 'location-dmf-v1');
return next();
}),
next => s3.headObject(params, (err, res) => {
assert.ifError(err);
assert.strictEqual(res.StorageClass, 'location-dmf-v1');
return next();
}),
next => s3.getObject(params, (err, res) => {
assert.ifError(err);
assert.strictEqual(res.StorageClass, 'location-dmf-v1');
return next();
}),
], err => {
assert.strictEqual(err, null, `Expected success got error ${JSON.stringify(err)}`);

// storage class must stay as the cold location
assert.deepStrictEqual(objMDAfter['x-amz-storage-class'], 'location-dmf-v1');

/// Make sure object data location is set back to its bucket data location.
assert.deepStrictEqual(objMDAfter.dataStoreName, 'us-east-1');

assert.deepStrictEqual(objMDAfter.archive.archiveInfo, objMDBefore.archive.archiveInfo);
assert.deepStrictEqual(objMDAfter.archive.restoreRequestedAt,
objMDBefore.archive.restoreRequestedAt);
assert.deepStrictEqual(objMDAfter.archive.restoreRequestedDays,
objMDBefore.archive.restoreRequestedDays);
assert.deepStrictEqual(objMDAfter['x-amz-restore']['ongoing-request'], false);

assert(objMDAfter.archive.restoreCompletedAt);
assert(objMDAfter.archive.restoreWillExpireAt);
assert(objMDAfter['x-amz-restore']['expiry-date']);
return done();
});
});
});
});
Expand Down

0 comments on commit 2cd5200

Please sign in to comment.