Skip to content

Commit 155b933

Browse files
shiradyromayalon
authored andcommitted
NC | Return mock on get_bucket_encryption when it is undefined
1. By default, we will fail the request with ServerSideEncryptionConfigurationNotFoundError, aligned with PR Changing get bucket encryption defaults #8716 . 2. Edit existing unit tests in test_bucketspace_fs.js. 3. Not related to NC changes: - Add a test (only runs in containerized). - Improve docs related to running core_tests locally. Signed-off-by: shirady <57721533+shirady@users.noreply.github.com> (cherry picked from commit 811c88c)
1 parent 3630cf4 commit 155b933

File tree

4 files changed

+34
-5
lines changed

4 files changed

+34
-5
lines changed

src/sdk/bucketspace_fs.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ class BucketSpaceFS extends BucketSpaceSimpleFS {
683683
const { name } = params;
684684
dbg.log0('BucketSpaceFS.get_bucket_encryption: Bucket name', name);
685685
const bucket = await this.config_fs.get_bucket_by_name(name);
686-
return bucket.encryption;
686+
return { encryption: bucket.encryption };
687687
} catch (err) {
688688
throw translate_error_codes(err, entity_enum.BUCKET);
689689
}

src/test/unit_tests/test_bucketspace_fs.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,11 @@ mocha.describe('bucketspace_fs', function() {
717717
});
718718

719719
mocha.describe('bucket encryption operations', function() {
720+
mocha.it('get_bucket_encryption (return empty encryption)', async function() {
721+
const param = { name: test_bucket };
722+
const empty_encryption = await bucketspace_fs.get_bucket_encryption(param);
723+
assert.ok(empty_encryption.encryption === undefined);
724+
});
720725
mocha.it('put_bucket_encryption ', async function() {
721726
const encryption = {
722727
algorithm: 'AES256',
@@ -726,19 +731,19 @@ mocha.describe('bucketspace_fs', function() {
726731
await bucketspace_fs.put_bucket_encryption(param);
727732

728733
const output_encryption = await bucketspace_fs.get_bucket_encryption(param);
729-
assert.deepEqual(output_encryption, encryption);
734+
assert.deepEqual(output_encryption.encryption, encryption);
730735
});
731-
mocha.it('delete_bucket_encryption ', async function() {
736+
mocha.it('delete_bucket_encryption', async function() {
732737
const encryption = {
733738
algorithm: 'AES256',
734739
kms_key_id: 'kms-123'
735740
};
736741
const param = { name: test_bucket };
737742
const output_encryption = await bucketspace_fs.get_bucket_encryption(param);
738-
assert.deepEqual(output_encryption, encryption);
743+
assert.deepEqual(output_encryption.encryption, encryption);
739744
await bucketspace_fs.delete_bucket_encryption(param);
740745
const empty_encryption = await bucketspace_fs.get_bucket_encryption(param);
741-
assert.ok(empty_encryption === undefined);
746+
assert.ok(empty_encryption.encryption === undefined);
742747
});
743748
});
744749

src/test/unit_tests/test_nsfs_integration.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -795,6 +795,14 @@ mocha.describe('bucket operations - namespace_fs', function() {
795795
const expected_payer = 'BucketOwner'; // this is the mock that we use
796796
assert.equal(res.Payer, expected_payer);
797797
});
798+
mocha.it('get bucket encryption (before put bucket encryption) - throws an error', async function() {
799+
try {
800+
await s3_correct_uid_default_nsr.getBucketEncryption({ Bucket: bucket_name});
801+
assert.fail('get bucket encryption when encryption not set should fail');
802+
} catch (err) {
803+
assert.strictEqual(err.Code, 'ServerSideEncryptionConfigurationNotFoundError');
804+
}
805+
});
798806

799807
mocha.it('delete multiple non existing objects without failing', async function() {
800808
const keys_to_delete = [

src/test/unit_tests/test_s3_ops.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,22 @@ mocha.describe('s3_ops', function() {
116116
const expected_payer = 'BucketOwner'; // this is the mock that we use
117117
assert.equal(res.Payer, expected_payer);
118118
});
119+
mocha.it('should allow get_bucket_encryption (no put before the get)', async function() {
120+
const res = await s3.getBucketEncryption({ Bucket: BKT1 });
121+
const expected_response = {
122+
ServerSideEncryptionConfiguration: {
123+
Rules: [{
124+
ApplyServerSideEncryptionByDefault: {
125+
SSEAlgorithm: 'AES256'
126+
},
127+
BucketKeyEnabled: false
128+
}]
129+
}
130+
};
131+
assert.equal(res.$metadata.httpStatusCode, 200);
132+
const res_without_metadata = _.omit(res, '$metadata');
133+
assert.deepEqual(res_without_metadata, expected_response);
134+
});
119135
mocha.it('should enable bucket logging', async function() {
120136
await s3.createBucket({ Bucket: BKT2 });
121137
await s3.putBucketLogging({

0 commit comments

Comments
 (0)