Skip to content

Commit 4f3c944

Browse files
committed
bump arsenal with latest fixups
1 parent 7e3a81d commit 4f3c944

File tree

1 file changed

+74
-26
lines changed

1 file changed

+74
-26
lines changed

tests/functional/raw-node/test/GCP/object/completeMpu.js

Lines changed: 74 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@ const assert = require('assert');
22
const async = require('async');
33
const arsenal = require('arsenal');
44
const { GCP, GcpUtils } = arsenal.storage.data.external.GCP;
5-
const { gcpRequestRetry, setBucketClass, gcpMpuSetup, genUniqID } =
6-
require('../../../utils/gcpUtils');
5+
const {
6+
gcpRequestRetry,
7+
gcpClientRetry,
8+
setBucketClass,
9+
gcpMpuSetup,
10+
genUniqID,
11+
} = require('../../../utils/gcpUtils');
712
const { getRealAwsConfig } =
813
require('../../../../aws-node-sdk/test/support/awsConfig');
914

@@ -34,6 +39,59 @@ function gcpMpuSetupWrapper(params, callback) {
3439
});
3540
}
3641

42+
function listObjectsPaginated(gcpClient, bucketName, cb) {
43+
const objects = [];
44+
let marker;
45+
46+
function _list() {
47+
const params = { Bucket: bucketName };
48+
if (marker) {
49+
params.Marker = marker;
50+
}
51+
52+
return gcpClientRetry(gcpClient.listObjects.bind(gcpClient), params, (err, res) => {
53+
if (err) {
54+
return cb(err);
55+
}
56+
57+
const contents = (res && res.Contents) || [];
58+
objects.push(...contents);
59+
60+
const isTruncated = Boolean(res && res.IsTruncated);
61+
if (!isTruncated) {
62+
return cb(null, objects);
63+
}
64+
65+
// AWS listObjects(V1) pagination: prefer NextMarker, fallback to last key.
66+
marker = (res && res.NextMarker) ||
67+
(contents.length ? contents[contents.length - 1].Key : undefined);
68+
69+
if (!marker) {
70+
return cb(null, objects);
71+
}
72+
73+
return _list();
74+
});
75+
}
76+
77+
return _list();
78+
}
79+
80+
function emptyBucket(gcpClient, bucketName, cb) {
81+
return listObjectsPaginated(gcpClient, bucketName, (err, objects) => {
82+
if (err) {
83+
return cb(err);
84+
}
85+
return async.eachLimit(objects, 20, (object, next) => {
86+
const deleteParams = {
87+
Bucket: bucketName,
88+
Key: object.Key,
89+
};
90+
return gcpClientRetry(gcpClient.deleteObject.bind(gcpClient), deleteParams, next);
91+
}, cb);
92+
});
93+
}
94+
3795
describe('GCP: Complete MPU', function testSuite() {
3896
this.timeout(600000);
3997
let config;
@@ -59,32 +117,19 @@ describe('GCP: Complete MPU', function testSuite() {
59117

60118
after(done => {
61119
async.eachSeries(bucketNames,
62-
(bucket, next) => gcpClient.listObjects({
63-
Bucket: bucket.Name,
64-
}, (err, res) => {
120+
(bucket, next) => emptyBucket(gcpClient, bucket.Name, err => {
65121
assert.equal(err, null,
66122
`Expected success, but got error ${err}`);
67-
async.map(res.Contents, (object, moveOn) => {
68-
const deleteParams = {
69-
Bucket: bucket.Name,
70-
Key: object.Key,
71-
};
72-
gcpClient.deleteObject(
73-
deleteParams, err => moveOn(err));
74-
}, err => {
75-
assert.equal(err, null,
76-
`Expected success, but got error ${err}`);
77-
gcpRequestRetry({
78-
method: 'DELETE',
79-
bucket: bucket.Name,
80-
authCredentials: config.credentials,
81-
}, 0, err => {
82-
if (err) {
83-
process.stdout.write(
84-
`err in deleting bucket ${err}\n`);
85-
}
86-
return next(err);
87-
});
123+
gcpRequestRetry({
124+
method: 'DELETE',
125+
bucket: bucket.Name,
126+
authCredentials: config.credentials,
127+
}, 0, err => {
128+
if (err) {
129+
process.stdout.write(
130+
`err in deleting bucket ${err}\n`);
131+
}
132+
return next(err);
88133
});
89134
}),
90135
done);
@@ -169,6 +214,9 @@ describe('GCP: Complete MPU', function testSuite() {
169214

170215
it('should successfully complete MPU',
171216
function testFn(done) {
217+
this.timeout(1200000);
218+
this.retries(1);
219+
172220
const parts = GcpUtils.createMpuList({
173221
Key: this.test.key,
174222
UploadId: this.test.uploadId,

0 commit comments

Comments
 (0)