Skip to content

Commit 3d42838

Browse files
committed
mpu related tests migration
Issue: CLDSRV-724
1 parent 6879152 commit 3d42838

File tree

10 files changed

+1432
-1380
lines changed

10 files changed

+1432
-1380
lines changed

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

Lines changed: 312 additions & 271 deletions
Large diffs are not rendered by default.

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

Lines changed: 78 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
const assert = require('assert');
2-
3-
const { S3 } = require('aws-sdk');
42
const { timesLimit, waterfall } = require('async');
3+
const { NodeHttpHandler } = require('@smithy/node-http-handler');
4+
5+
const {
6+
S3Client,
7+
CreateBucketCommand,
8+
CreateMultipartUploadCommand,
9+
UploadPartCommand,
10+
CompleteMultipartUploadCommand,
11+
GetObjectCommand,
12+
DeleteObjectCommand,
13+
DeleteBucketCommand
14+
} = require('@aws-sdk/client-s3');
515

616
const getConfig = require('../support/config');
717

@@ -14,6 +24,7 @@ const finalETag = require('crypto').createHash('md5')
1424
.update(Buffer.from(eTag.repeat(partCount), 'hex').toString('binary'),
1525
'binary').digest('hex');
1626

27+
const partETags = new Array(partCount);
1728
function uploadPart(n, uploadId, s3, next) {
1829
const params = {
1930
Bucket: bucket,
@@ -25,13 +36,16 @@ function uploadPart(n, uploadId, s3, next) {
2536
if (params.PartNumber % 20 === 0) {
2637
process.stdout.write(`uploading PartNumber: ${params.PartNumber}\n`);
2738
}
28-
s3.uploadPart(params, err => {
29-
if (err) {
30-
process.stdout.write('error putting part: ', err);
39+
40+
s3.send(new UploadPartCommand(params))
41+
.then(data => {
42+
partETags[n] = data.ETag;
43+
next();
44+
})
45+
.catch(err => {
46+
process.stdout.write(`error putting part ${params.PartNumber}: ${err}\n`);
3147
return next(err);
32-
}
33-
return next();
34-
});
48+
});
3549
}
3650

3751
// NOTE: This test has a history of failing in end-to-end Integration tests.
@@ -42,25 +56,36 @@ describe('large mpu', function tester() {
4256
let s3;
4357
before(done => {
4458
const config = getConfig('default', { signatureVersion: 'v4' });
45-
s3 = new S3(config);
4659
// disable node sdk retries and timeout to prevent InvalidPart
4760
// and SocketHangUp errors. If retries are allowed, sdk will send
4861
// another request after first request has already deleted parts,
4962
// causing InvalidPart. Meanwhile, if request takes too long to finish,
5063
// sdk will create SocketHangUp error before response.
51-
s3.config.update({ maxRetries: 0 });
52-
s3.config.update({ httpOptions: { timeout: 0 } });
53-
s3.createBucket({ Bucket: bucket }, done);
64+
// Custom request handler with no timeouts
65+
const requestHandler = new NodeHttpHandler({
66+
requestTimeout: 0,
67+
connectionTimeout: 0,
68+
});
69+
70+
s3 = new S3Client({
71+
...config,
72+
maxAttempts: 1,
73+
requestHandler,
74+
});
75+
76+
s3.send(new CreateBucketCommand({ Bucket: bucket }))
77+
.then(() => done())
78+
.catch(err => done(err));
5479
});
5580

5681
after(done => {
57-
s3.deleteObject({ Bucket: bucket, Key: key }, err => {
58-
if (err) {
59-
process.stdout.write('err deleting object in after: ', err);
82+
s3.send(new DeleteObjectCommand({ Bucket: bucket, Key: key }))
83+
.then(() => s3.send(new DeleteBucketCommand({ Bucket: bucket })))
84+
.then(() => done())
85+
.catch(err => {
86+
process.stdout.write(`err deleting object in after: ${err}\n`);
6087
return done(err);
61-
}
62-
return s3.deleteBucket({ Bucket: bucket }, done);
63-
});
88+
});
6489
});
6590

6691
const itSkipIfAWS = process.env.AWS_ON_AIR ? it.skip : it;
@@ -69,30 +94,36 @@ describe('large mpu', function tester() {
6994
itSkipIfAWS('should intiate, put parts and complete mpu ' +
7095
`with ${partCount} parts`, done => {
7196
process.stdout.write('***Running large MPU test***\n');
72-
let uploadId;
97+
let uploadId;
7398
return waterfall([
74-
next => s3.createMultipartUpload({ Bucket: bucket, Key: key },
75-
(err, data) => {
76-
if (err) {
77-
return done(err);
78-
}
79-
process.stdout.write('initated mpu\n');
80-
uploadId = data.UploadId;
81-
return next();
82-
}),
8399
next => {
84-
process.stdout.write('putting parts');
100+
s3.send(new CreateMultipartUploadCommand({ Bucket: bucket, Key: key }))
101+
.then(data => {
102+
process.stdout.write('initiated mpu\n');
103+
uploadId = data.UploadId;
104+
return next();
105+
})
106+
.catch(err => next(err));
107+
},
108+
next => {
109+
process.stdout.write('putting parts\n');
85110
return timesLimit(partCount, 20, (n, cb) =>
86-
uploadPart(n, uploadId, s3, cb), err =>
87-
next(err)
88-
);
111+
uploadPart(n, uploadId, s3, cb), err => {
112+
if (err) {
113+
process.stdout.write(`Error in timesLimit: ${err}\n`);
114+
}
115+
return next(err);
116+
});
89117
},
90118
next => {
91119
const parts = [];
92-
for (let i = 1; i <= partCount; i++) {
120+
for (let i = 0; i < partCount; i++) {
121+
if (!partETags[i]) {
122+
return next(new Error(`Missing ETag for part ${i + 1}`));
123+
}
93124
parts.push({
94-
ETag: eTag,
95-
PartNumber: i,
125+
ETag: partETags[i],
126+
PartNumber: i + 1,
96127
});
97128
}
98129
const params = {
@@ -103,25 +134,23 @@ describe('large mpu', function tester() {
103134
Parts: parts,
104135
},
105136
};
106-
return s3.completeMultipartUpload(params, err => {
107-
if (err) {
108-
process.stdout.write('err complting mpu: ', err);
109-
return next(err);
110-
}
111-
return next();
112-
});
137+
return s3.send(new CompleteMultipartUploadCommand(params))
138+
.then(() => {
139+
process.stdout.write('mpu completed successfully\n');
140+
next();
141+
})
142+
.catch(err => next(err));
113143
},
114144
next => {
115-
process.stdout.write('about to get object');
116-
return s3.getObject({ Bucket: bucket, Key: key },
117-
(err, data) => {
118-
if (err) {
119-
return next(err);
120-
}
145+
process.stdout.write('about to get object\n');
146+
s3.send(new GetObjectCommand({ Bucket: bucket, Key: key }))
147+
.then(data => {
121148
assert.strictEqual(data.ETag,
122149
`"${finalETag}-${partCount}"`);
150+
process.stdout.write('get object successful\n');
123151
return next();
124-
});
152+
})
153+
.catch(err => next(err));
125154
},
126155
], done);
127156
});

0 commit comments

Comments
 (0)