Skip to content

Commit cc2b906

Browse files
committed
fixups
1 parent accc358 commit cc2b906

File tree

14 files changed

+159
-95
lines changed

14 files changed

+159
-95
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
"scripts": {
9191
"cloudserver": "S3METADATA=mongodb npm-run-all --parallel start_dataserver start_s3server",
9292
"dev": "nodemon --exec \"yarn run start\"",
93-
"ft_awssdk": "cd tests/functional/aws-node-sdk && mocha --reporter mocha-multi-reporters --reporter-options configFile=$INIT_CWD/tests/reporter-config.json test/bucket --exit",
93+
"ft_awssdk": "cd tests/functional/aws-node-sdk && mocha --reporter mocha-multi-reporters --reporter-options configFile=$INIT_CWD/tests/reporter-config.json test/versioning --exit",
9494
"ft_awssdk_aws": "cd tests/functional/aws-node-sdk && AWS_ON_AIR=true mocha --reporter mocha-multi-reporters --reporter-options configFile=$INIT_CWD/tests/reporter-config.json test/ --exit",
9595
"ft_awssdk_buckets": "cd tests/functional/aws-node-sdk && mocha --reporter mocha-multi-reporters --reporter-options configFile=$INIT_CWD/tests/reporter-config.json test/bucket --exit",
9696
"ft_awssdk_objects_misc": "cd tests/functional/aws-node-sdk && mocha --reporter mocha-multi-reporters --reporter-options configFile=$INIT_CWD/tests/reporter-config.json test/legacy test/object test/service test/support --exit",
Lines changed: 48 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,59 @@
1-
const { S3 } = require('aws-sdk');
1+
const { S3Client } = require('@aws-sdk/client-s3');
2+
const { HttpRequest } = require('@smithy/protocol-http');
23
const querystring = require('querystring');
34

45
const getConfig = require('../../test/support/config');
56

6-
const config = getConfig('default', { signatureVersion: 'v4' });
7-
const s3 = new S3(config);
7+
const config = getConfig('default');
8+
9+
10+
// Custom middleware to modify requests without mutating args
11+
const customRequestMiddleware = buildParams => next => async args => {
812

9-
function customS3Request(action, params, buildParams, callback) {
10-
const method = action.bind(s3);
11-
const request = method(params);
1213
const { headers, query } = buildParams;
13-
// modify underlying http request object created by aws sdk
14-
request.on('build', () => {
15-
Object.assign(request.httpRequest.headers, headers);
16-
if (query) {
17-
const qs = querystring.stringify(query);
18-
// NOTE: that this relies on there not being a query string in the
19-
// first place; if there is a qs then we have to search for ? and
20-
// append &qs at the end of the string, if ? is not followed by ''
21-
request.httpRequest.path = `${request.httpRequest.path}?${qs}`;
22-
}
23-
});
24-
request.on('success', response => {
25-
const resData = {
26-
statusCode: response.httpResponse.statusCode,
27-
headers: response.httpResponse.headers,
28-
body: response.httpResponse.body.toString('utf8'),
29-
};
30-
callback(null, resData);
14+
15+
const prevReq = args.request;
16+
const base = prevReq instanceof HttpRequest ? prevReq : new HttpRequest(prevReq);
17+
18+
let newHeaders = base.headers || {};
19+
if (headers) {
20+
newHeaders = { ...newHeaders, ...headers };
21+
}
22+
23+
let newQuery = base.query || {};
24+
if (query) {
25+
const extra = querystring.parse(querystring.stringify(query));
26+
newQuery = { ...newQuery, ...extra };
27+
}
28+
29+
const newReq = new HttpRequest({
30+
...base,
31+
headers: newHeaders,
32+
query: newQuery,
3133
});
32-
request.on('error', err => {
34+
35+
return next({ ...args, request: newReq });
36+
};
37+
38+
async function customS3Request(CommandClass, params, buildParams) {
39+
const customS3 = new S3Client({ ...config });
40+
41+
customS3.middlewareStack.add(
42+
customRequestMiddleware(buildParams),
43+
{ step: 'build', name: 'customRequestMiddleware', tags: ['CUSTOM'] }
44+
);
45+
46+
const command = new CommandClass(params);
47+
const response = await customS3.send(command);
48+
3349
const resData = {
34-
statusCode: request.response.httpResponse.statusCode,
35-
headers: request.response.httpResponse.headers,
36-
body: request.response.httpResponse.body.toString('utf8'),
50+
statusCode: 200,
51+
headers: response.$metadata?.httpHeaders || {},
52+
body: JSON.stringify(response),
3753
};
38-
callback(err, resData);
39-
});
40-
request.send();
54+
55+
return resData;
56+
4157
}
4258

43-
module.exports = customS3Request;
59+
module.exports = customS3Request;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ const genMaxSizeMetaHeaders
1818
= require('../../lib/utility/genMaxSizeMetaHeaders');
1919
const constants = require('../../../../../constants');
2020

21-
const sourceBucketName = 'supersourcebucket810201656666';
21+
const sourceBucketName = 'supersourcebucket8102016';
2222
const sourceObjName = 'supersourceobject';
23-
const destBucketName = 'destinationbucket81020165666';
23+
const destBucketName = 'destinationbucket8102016';
2424
const destObjName = 'copycatobject';
2525

2626
const originalMetadata = {

tests/functional/aws-node-sdk/test/versioning/bucketDelete.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,19 @@ describe('aws-node-sdk test delete bucket', () => {
3838
});
3939

4040
// empty and delete bucket after testing if bucket exists
41-
afterEach(async () => {
42-
try {
43-
await removeAllVersions({ Bucket: bucketName });
44-
await s3.send(new DeleteBucketCommand({ Bucket: bucketName }));
45-
} catch (err) {
46-
if (err && err.Code === 'NoSuchBucket') {
47-
return;
48-
} else {
49-
throw err;
41+
afterEach(done => {
42+
removeAllVersions({ Bucket: bucketName }, err => {
43+
if (err?.name === "NoSuchBucket") {
44+
return done();
5045
}
51-
}
46+
return s3.send(new DeleteBucketCommand({ Bucket: bucketName }))
47+
.then(() => done()).catch(err => {
48+
if (err.name === 'NoSuchBucket') {
49+
return done();
50+
}
51+
return done(err);
52+
});
53+
});
5254
});
5355

5456
it('should be able to delete empty bucket with version enabled',

tests/functional/aws-node-sdk/test/versioning/listObjectMasterVersions.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,15 @@ describe('listObject - Delimiter master', function testSuite() {
4848
await s3.send(new CreateBucketCommand({ Bucket: bucket }));
4949
});
5050

51-
// delete bucket after testing
52-
after(async () => {
53-
await removeAllVersions({ Bucket: bucket });
54-
await s3.send(new DeleteBucketCommand({ Bucket: bucket }));
51+
52+
after(done => {
53+
removeAllVersions({ Bucket: bucket }, err => {
54+
if (err) {
55+
return done(err);
56+
}
57+
return s3.send(new DeleteBucketCommand({ Bucket: bucket }))
58+
.then(() => done()).catch(done);
59+
});
5560
});
5661

5762
let versioning = false;

tests/functional/aws-node-sdk/test/versioning/listObjectVersions.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@ describe('listObjectVersions', () => {
4040
}));
4141
});
4242

43-
afterEach(async () => {
44-
await removeAllVersions({ Bucket: bucket });
43+
afterEach(done => {
44+
removeAllVersions({ Bucket: bucket }, done);
4545
});
4646

47+
48+
4749
it('should list object versions', async () => {
4850
const key = 'key';
4951

tests/functional/aws-node-sdk/test/versioning/multiObjectDelete.js

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,7 @@ const {
1212
const withV4 = require('../support/withV4');
1313
const BucketUtility = require('../../lib/utility/bucket-util');
1414
const { removeAllVersions } = require('../../lib/utility/versioning-util');
15-
const { DeleteObjectsCommand,
16-
DeleteObjectCommand,
17-
PutObjectCommand,
18-
CreateBucketCommand,
19-
DeleteBucketCommand,
20-
PutBucketVersioningCommand,
21-
ListObjectVersionsCommand} = require('@aws-sdk/client-s3');
15+
const { isValidBucketName } = require('arsenal/build/lib/s3routes/routesUtils');
2216

2317
const bucketName = `multi-object-delete-${Date.now()}`;
2418
const key = 'key';
@@ -82,9 +76,15 @@ describe('Multi-Object Versioning Delete Success', function success() {
8276
objectsRes = results;
8377
});
8478

85-
afterEach(async () => {
86-
await removeAllVersions({ Bucket: bucketName });
87-
await s3.send(new DeleteBucketCommand({ Bucket: bucketName }));
79+
80+
afterEach(done => {
81+
removeAllVersions({ Bucket: bucketName }, err => {
82+
if (err) {
83+
return done(err);
84+
}
85+
return s3.send(new DeleteBucketCommand({ Bucket: bucketName }))
86+
.then(() => done()).catch(done);
87+
});
8888
});
8989

9090
it('should batch delete 1000 objects quietly', async () => {
@@ -192,9 +192,15 @@ describe('Multi-Object Versioning Delete - deleting delete marker',
192192
},
193193
}));
194194
});
195-
afterEach(async () => {
196-
await removeAllVersions({ Bucket: bucketName });
197-
await s3.send(new DeleteBucketCommand({ Bucket: bucketName }));
195+
196+
afterEach(done => {
197+
removeAllVersions({ Bucket: bucketName }, err => {
198+
if (err) {
199+
return done(err);
200+
}
201+
return s3.send(new DeleteBucketCommand({ Bucket: bucketName }))
202+
.then(() => done()).catch(done);
203+
});
198204
});
199205

200206
it('should send back VersionId and DeleteMarkerVersionId both equal ' +

tests/functional/aws-node-sdk/test/versioning/objectACL.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,14 @@ describe('versioned put and get object acl ::', () => {
249249
await s3.send(new CreateBucketCommand({ Bucket: bucket }));
250250
});
251251

252-
afterEach(async () => {
253-
await removeAllVersions({ Bucket: bucket });
254-
await s3.send(new DeleteBucketCommand({ Bucket: bucket }));
252+
afterEach(done => {
253+
removeAllVersions({ Bucket: bucket }, err => {
254+
if (err) {
255+
return done(err);
256+
}
257+
return s3.send(new DeleteBucketCommand({ Bucket: bucket }))
258+
.then(() => done()).catch(done);
259+
});
255260
});
256261

257262
describe('in bucket w/o versioning cfg :: ', () => {

tests/functional/aws-node-sdk/test/versioning/objectCopy.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,22 @@ const {
1313
DeleteObjectCommand,
1414
} = require('@aws-sdk/client-s3');
1515

16+
const { promisify } = require('util');
17+
1618
const withV4 = require('../support/withV4');
1719
const BucketUtility = require('../../lib/utility/bucket-util');
1820
const { removeAllVersions } = require('../../lib/utility/versioning-util');
1921
const customS3Request = require('../../lib/utility/customS3Request');
2022

23+
removeAllVersionsPromise = promisify(removeAllVersions);
24+
25+
2126
const { taggingTests } = require('../../lib/utility/tagging');
2227
const constants = require('../../../../../constants');
2328

24-
const sourceBucketName = 'supersourcebucket8102016';
29+
const sourceBucketName = 'supersourcebucket81020165';
2530
const sourceObjName = 'supersourceobject';
26-
const destBucketName = 'destinationbucket8102016';
31+
const destBucketName = 'destinationbucket81020165';
2732
const destObjName = 'copycatobject';
2833

2934
const originalMetadata = {
@@ -90,7 +95,7 @@ describe('Object Version Copy', () => {
9095
let copySourceVersionId;
9196

9297
async function emptyAndDeleteBucket(bucketName) {
93-
await removeAllVersions({ Bucket: bucketName });
98+
await removeAllVersionsPromise({ Bucket: bucketName });
9499
await s3.send(new DeleteBucketCommand({ Bucket: bucketName }));
95100
}
96101

@@ -222,7 +227,7 @@ describe('Object Version Copy', () => {
222227
await customS3Request(CopyObjectCommand, params, { query });
223228
assert.fail('Expected error but did not find one');
224229
} catch (err) {
225-
assert.strictEqual(err.Code, 'InvalidArgument');
230+
assert.strictEqual(err.name, 'InvalidArgument');
226231
assert.strictEqual(err.$metadata.httpStatusCode, 400);
227232
}
228233
});
@@ -235,7 +240,7 @@ describe('Object Version Copy', () => {
235240
await customS3Request(CopyObjectCommand, params, { query });
236241
assert.fail('Expected error but did not find one');
237242
} catch (err) {
238-
assert.strictEqual(err.Code, 'InvalidArgument');
243+
assert.strictEqual(err.name, 'InvalidArgument');
239244
assert.strictEqual(err.$metadata.httpStatusCode, 400);
240245
}
241246
});

tests/functional/aws-node-sdk/test/versioning/objectDelete.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ const {
1818
versioningEnabled,
1919
removeAllVersions,
2020
} = require('../../lib/utility/versioning-util.js');
21+
const { promisify } = require('util');
22+
23+
removeAllVersionsPromise = promisify(removeAllVersions);
2124

2225
const bucket = `versioning-bucket-${Date.now()}`;
2326
const key = 'anObject';
@@ -43,7 +46,7 @@ describe('delete marker creation in bucket with null version', () => {
4346
});
4447

4548
afterEach(async () => {
46-
await removeAllVersions({ Bucket: bucket });
49+
await removeAllVersionsPromise({ Bucket: bucket });
4750
await s3.send(new DeleteBucketCommand({ Bucket: bucket }));
4851
});
4952

@@ -110,7 +113,7 @@ describe('aws-node-sdk test delete object', () => {
110113
// delete bucket after testing
111114
after(async () => {
112115
try {
113-
await removeAllVersions({ Bucket: bucket });
116+
await removeAllVersionsPromise({ Bucket: bucket });
114117
} catch (err) {
115118
if (err.code !== 'NoSuchBucket') {
116119
throw err;
@@ -523,7 +526,7 @@ describe('aws-node-sdk test concurrent version-specific deletes with null', () =
523526
// delete bucket after testing
524527
after(async () => {
525528
try {
526-
await removeAllVersions({ Bucket: bucket });
529+
await removeAllVersionsPromise({ Bucket: bucket });
527530
} catch (err) {
528531
if (err.Code !== 'NoSuchBucket') {
529532
throw err;

0 commit comments

Comments
 (0)