Skip to content

Commit 3711fb9

Browse files
committed
✅ create a new functional tests
Issue: CLDSRV-813
1 parent 22e0c40 commit 3711fb9

File tree

1 file changed

+59
-0
lines changed
  • tests/functional/aws-node-sdk/test/bucket

1 file changed

+59
-0
lines changed

tests/functional/aws-node-sdk/test/bucket/get.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const assert = require('assert');
22
const tv4 = require('tv4');
3+
const { parseString } = require('xml2js');
34

45
const withV4 = require('../support/withV4');
56
const BucketUtility = require('../../lib/utility/bucket-util');
@@ -373,6 +374,64 @@ describe('GET Bucket - AWS.S3.listObjects', () => {
373374
});
374375
});
375376

377+
it('should manage the x-amz-optional-attributes header', async () => {
378+
const s3 = bucketUtil.s3;
379+
const Bucket = bucketName;
380+
381+
await s3.putObject({
382+
Bucket,
383+
Key: 'super-power-object',
384+
Metadata: {
385+
Department: 'sales',
386+
HR: 'true',
387+
},
388+
}).promise();
389+
390+
const result = await new Promise((resolve, reject) => {
391+
let rawXml = '';
392+
const req = s3.listObjectsV2({ Bucket });
393+
394+
req.on('build', () => {
395+
req.httpRequest.headers['x-amz-optional-object-attributes'] = 'x-amz-meta-*';
396+
req.httpRequest.headers['x-amz-optional-object-attributes'] += ',RestoreStatus';
397+
req.httpRequest.headers['x-amz-optional-object-attributes'] += ',x-amz-meta-department';
398+
});
399+
req.on('httpData', chunk => { rawXml += chunk; });
400+
req.on('error', err => reject(err));
401+
req.on('success', response => {
402+
parseString(rawXml, (err, parsedXml) => {
403+
if (err) {
404+
return reject(err);
405+
}
406+
407+
const contents = response.data.Contents;
408+
const parsedContents = parsedXml.ListBucketResult.Contents;
409+
410+
if (!contents || !parsedContents) {
411+
return resolve(response.data);
412+
}
413+
414+
if (parsedContents[0]?.['x-amz-meta-department']) {
415+
contents[0]['x-amz-meta-department'] = parsedContents[0]['x-amz-meta-department'][0];
416+
}
417+
418+
if (parsedContents[0]?.['x-amz-meta-hr']) {
419+
contents[0]['x-amz-meta-hr'] = parsedContents[0]['x-amz-meta-hr'][0];
420+
}
421+
422+
return resolve(response.data);
423+
});
424+
});
425+
426+
req.send();
427+
});
428+
429+
assert.strictEqual(result.Contents.length, 1);
430+
assert.strictEqual(result.Contents[0].Key, 'super-power-object');
431+
assert.strictEqual(result.Contents[0]['x-amz-meta-department'], 'sales');
432+
assert.strictEqual(result.Contents[0]['x-amz-meta-hr'], 'true');
433+
});
434+
376435
['&amp', '"quot', '\'apos', '<lt', '>gt'].forEach(k => {
377436
it(`should list objects with key ${k} as Prefix`, async () => {
378437
const s3 = bucketUtil.s3;

0 commit comments

Comments
 (0)