Skip to content

Commit 8d71b8f

Browse files
authored
Merge pull request #8402 from shirady/nsfs-nc-versioning-headers-check
NC | NSFS | Versioning | Headers Check in Unit Tests
2 parents ebbfc52 + 229a01e commit 8d71b8f

File tree

1 file changed

+51
-13
lines changed

1 file changed

+51
-13
lines changed

src/test/unit_tests/test_bucketspace_versioning.js

Lines changed: 51 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* Copyright (C) 2020 NooBaa */
22
/* eslint-disable max-lines-per-function */
3-
/*eslint max-lines: ["error",3200]*/
3+
/*eslint max-lines: ["error",3300]*/
44
'use strict';
55

66
const fs = require('fs');
@@ -804,38 +804,72 @@ mocha.describe('bucketspace namespace_fs - versioning', function() {
804804
const tagging_key = "key_tagging";
805805
const tag_set1 = {TagSet: [{Key: "key1", Value: "Value1"}]};
806806
const tag_set2 = {TagSet: [{Key: "key2", Value: "Value2"}]};
807+
const tag_set3 = { TagSet: [{ "Key": "designation", "Value": "confidential" },
808+
{ "Key": "department", "Value": "finance" },
809+
{ "Key": "team", "Value": "payroll" }]
810+
};
807811
let version_id;
808812

809813
mocha.before(async function() {
810-
await s3_uid6.putBucketVersioning({ Bucket: suspended_bucket_name, VersioningConfiguration: { MFADelete: 'Disabled', Status: 'Enabled' } });
811-
const res_put = await s3_uid6.putObject({ Bucket: suspended_bucket_name, Key: tagging_key, Body: body1 });
812-
await s3_uid6.putObject({ Bucket: suspended_bucket_name, Key: tagging_key, Body: body1 });
814+
await s3_uid6.putBucketVersioning({ Bucket: bucket_name, VersioningConfiguration: { MFADelete: 'Disabled', Status: 'Enabled' } });
815+
const res_put = await s3_uid6.putObject({ Bucket: bucket_name, Key: tagging_key, Body: body1 });
816+
await s3_uid6.putObject({ Bucket: bucket_name, Key: tagging_key, Body: body1 });
813817
version_id = res_put.VersionId;
814818
});
815819

816820
mocha.it("put object tagging - no versionId", async function() {
817-
await s3_uid6.putObjectTagging({ Bucket: suspended_bucket_name, Key: tagging_key, Tagging: tag_set1});
818-
const res = await s3_uid6.getObjectTagging({Bucket: suspended_bucket_name, Key: tagging_key});
821+
await s3_uid6.putObjectTagging({ Bucket: bucket_name, Key: tagging_key, Tagging: tag_set1});
822+
const res = await s3_uid6.getObjectTagging({Bucket: bucket_name, Key: tagging_key});
819823
assert.deepEqual(res.TagSet, tag_set1.TagSet);
820824
});
821825

822826
mocha.it("put object tagging - specific versionId", async function() {
823-
await s3_uid6.putObjectTagging({ Bucket: suspended_bucket_name, Key: tagging_key, Tagging: tag_set2, versionId: version_id});
824-
const res = await s3_uid6.getObjectTagging({Bucket: suspended_bucket_name, Key: tagging_key});
827+
await s3_uid6.putObjectTagging({ Bucket: bucket_name, Key: tagging_key, Tagging: tag_set2, versionId: version_id});
828+
const res = await s3_uid6.getObjectTagging({Bucket: bucket_name, Key: tagging_key});
825829
assert.notDeepEqual(res.TagSet, tag_set2);
826-
const version_res = await s3_uid6.getObjectTagging({Bucket: suspended_bucket_name, Key: tagging_key});
830+
const version_res = await s3_uid6.getObjectTagging({Bucket: bucket_name, Key: tagging_key});
827831
assert.deepEqual(version_res.TagSet, tag_set2.TagSet);
828832
});
829833

834+
mocha.it("head object with tagging - test header x-amz-tagging-count (1 tag)", async function() {
835+
await s3_uid6.putBucketVersioning({ Bucket: bucket_name, VersioningConfiguration: { MFADelete: 'Disabled', Status: 'Enabled' } });
836+
await s3_uid6.putObjectTagging({ Bucket: bucket_name, Key: tagging_key, Tagging: tag_set2, versionId: version_id});
837+
s3_uid6.middlewareStack.add(
838+
next => async args => {
839+
const result = await next(args);
840+
result.output.$metadata.headers = result.response.headers;
841+
return result;
842+
}
843+
);
844+
845+
const res = await s3_uid6.headObject({ Bucket: bucket_name, Key: tagging_key, versionId: version_id});
846+
assert.equal(res.$metadata.headers['x-amz-tagging-count'], tag_set2.TagSet.length);
847+
});
848+
849+
mocha.it("head object with tagging - test header x-amz-tagging-count (3 tags)", async function() {
850+
await s3_uid6.putBucketVersioning({ Bucket: bucket_name, VersioningConfiguration: { MFADelete: 'Disabled', Status: 'Enabled' } });
851+
await s3_uid6.putObjectTagging({ Bucket: bucket_name, Key: tagging_key, Tagging: tag_set3, versionId: version_id});
852+
s3_uid6.middlewareStack.add(
853+
next => async args => {
854+
const result = await next(args);
855+
result.output.$metadata.headers = result.response.headers;
856+
return result;
857+
}
858+
);
859+
860+
const res = await s3_uid6.headObject({ Bucket: bucket_name, Key: tagging_key, versionId: version_id});
861+
assert.equal(res.$metadata.headers['x-amz-tagging-count'], tag_set3.TagSet.length);
862+
});
863+
830864
mocha.it("delete object tagging - no versionId", async function() {
831-
await s3_uid6.deleteObjectTagging({ Bucket: suspended_bucket_name, Key: tagging_key});
832-
const res = await s3_uid6.getObjectTagging({Bucket: suspended_bucket_name, Key: tagging_key});
865+
await s3_uid6.deleteObjectTagging({ Bucket: bucket_name, Key: tagging_key});
866+
const res = await s3_uid6.getObjectTagging({Bucket: bucket_name, Key: tagging_key});
833867
assert.equal(res.TagSet.length, 0);
834868
});
835869

836870
mocha.it("delete object tagging - specific versionId", async function() {
837-
await s3_uid6.deleteObjectTagging({ Bucket: suspended_bucket_name, Key: tagging_key, versionId: version_id});
838-
const res = await s3_uid6.getObjectTagging({Bucket: suspended_bucket_name, Key: tagging_key, versionId: version_id});
871+
await s3_uid6.deleteObjectTagging({ Bucket: bucket_name, Key: tagging_key, versionId: version_id});
872+
const res = await s3_uid6.getObjectTagging({Bucket: bucket_name, Key: tagging_key, versionId: version_id});
839873
assert.equal(res.TagSet.length, 0);
840874
});
841875
});
@@ -2665,6 +2699,8 @@ mocha.describe('bucketspace namespace_fs - versioning', function() {
26652699
assert.fail('Should fail');
26662700
} catch (err) {
26672701
assert.strictEqual(err.$metadata.httpStatusCode, 405);
2702+
assert.ok(err.$response.headers['last-modified'] !== undefined, 'Should have last-modified header');
2703+
assert.ok(err.$response.headers['x-amz-delete-marker'] === 'true', 'Should have x-amz-delete-marker header with value true');
26682704
// In headObject the AWS SDK doesn't return the err.Code
26692705
// In AWS CLI it looks:
26702706
// An error occurred (405) when calling the HeadObject operation: Method Not Allowed
@@ -2681,6 +2717,8 @@ mocha.describe('bucketspace namespace_fs - versioning', function() {
26812717
} catch (err) {
26822718
assert.strictEqual(err.$metadata.httpStatusCode, 405);
26832719
assert.strictEqual(err.Code, 'MethodNotAllowed');
2720+
assert.ok(err.$response.headers['last-modified'] !== undefined, 'Should have last-modified header');
2721+
assert.ok(err.$response.headers['x-amz-delete-marker'] === 'true', 'Should have x-amz-delete-marker header with value true');
26842722
// In AWS CLI it looks:
26852723
// An error occurred (MethodNotAllowed) when calling the GetObject operation: The specified method is not allowed against this resource.
26862724
}

0 commit comments

Comments
 (0)