diff --git a/package.json b/package.json
index 517dbaad79..86a171b6dd 100644
--- a/package.json
+++ b/package.json
@@ -31,7 +31,7 @@
"@azure/storage-blob": "^12.28.0",
"@hapi/joi": "^17.1.1",
"@smithy/node-http-handler": "^3.0.0",
- "arsenal": "git+https://github.com/scality/Arsenal#8.3.0-preview.1",
+ "arsenal": "git+https://github.com/scality/Arsenal#aed443f02efebeb3f5c2e74786baadb5c19eaded",
"async": "2.6.4",
"bucketclient": "scality/bucketclient#8.2.7",
"bufferutil": "^4.0.8",
diff --git a/tests/functional/raw-node/test/GCP/bucket/get.js b/tests/functional/raw-node/test/GCP/bucket/get.js
index dbd52c3cfb..3ec177eb0e 100644
--- a/tests/functional/raw-node/test/GCP/bucket/get.js
+++ b/tests/functional/raw-node/test/GCP/bucket/get.js
@@ -1,9 +1,15 @@
const assert = require('assert');
const async = require('async');
const arsenal = require('arsenal');
+const {
+ ListObjectsCommand,
+ CreateBucketCommand,
+ DeleteBucketCommand,
+ PutObjectCommand,
+ DeleteObjectCommand,
+} = require('@aws-sdk/client-s3');
const { GCP } = arsenal.storage.data.external.GCP;
-const { makeGcpRequest } = require('../../../utils/makeRequest');
-const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils');
+const { genUniqID } = require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
const { listingHardLimit } = require('../../../../../../constants');
@@ -15,75 +21,110 @@ const bigSize = listingHardLimit + 1;
const config = getRealAwsConfig(credentialOne);
const gcpClient = new GCP(config);
-function populateBucket(createdObjects, callback) {
- process.stdout.write(
- `Putting ${createdObjects.length} objects into bucket\n`);
- async.mapLimit(createdObjects, 10,
- (object, moveOn) => {
- makeGcpRequest({
- method: 'PUT',
- bucket: bucketName,
- objectKey: object,
- authCredentials: config.credentials,
- }, err => {
- moveOn(err);
+gcpClient.listObjects = (params, callback) => {
+ const command = new ListObjectsCommand(params);
+ return gcpClient.send(command)
+ .then(data => callback(null, data))
+ .catch(err => {
+ if (err.statusCode === undefined) {
+ // eslint-disable-next-line no-param-reassign
+ err.statusCode = err.$metadata.httpStatusCode;
+ }
+ return callback(err);
});
- }, err => {
+};
+
+gcpClient.getBucket = (params, callback) =>
+ gcpClient.headBucket(params, (err, res) => {
if (err) {
- process.stdout
- .write(`err putting objects ${err.code}\n`);
+ if (err.statusCode === undefined) {
+ // eslint-disable-next-line no-param-reassign
+ err.statusCode = err.$metadata.httpStatusCode;
+ }
+ if (err.$metadata && err.$metadata.httpStatusCode === 404) {
+ // eslint-disable-next-line no-param-reassign
+ err.name = 'NoSuchBucket';
+ }
+ return callback(err);
}
- return callback(err);
+ return callback(null, res);
});
+
+function populateBucket(createdObjects, callback) {
+ process.stdout.write(
+ `Putting ${createdObjects.length} objects into bucket\n`);
+ async.mapLimit(
+ createdObjects,
+ 10,
+ (object, moveOn) => {
+ const command = new PutObjectCommand({
+ Bucket: bucketName,
+ Key: object,
+ });
+ gcpClient.send(command)
+ .then(() => moveOn())
+ .catch(err => moveOn(err));
+ },
+ err => {
+ if (err) {
+ process.stdout
+ .write(`err putting objects ${err}\n`);
+ }
+ return callback(err);
+ }
+ );
}
function removeObjects(createdObjects, callback) {
process.stdout.write(
`Deleting ${createdObjects.length} objects from bucket\n`);
- async.mapLimit(createdObjects, 10,
- (object, moveOn) => {
- makeGcpRequest({
- method: 'DELETE',
- bucket: bucketName,
- objectKey: object,
- authCredentials: config.credentials,
- }, err => moveOn(err));
- }, err => {
- if (err) {
- process.stdout
- .write(`err deleting objects ${err.code}\n`);
+ async.mapLimit(
+ createdObjects,
+ 10,
+ (object, moveOn) => {
+ const command = new DeleteObjectCommand({
+ Bucket: bucketName,
+ Key: object,
+ });
+ gcpClient.send(command)
+ .then(() => moveOn())
+ .catch(err => moveOn(err));
+ },
+ err => {
+ if (err) {
+ process.stdout
+ .write(`err deleting objects ${err}\n`);
+ }
+ return callback(err);
}
- return callback(err);
- });
+ );
}
describe('GCP: GET Bucket', function testSuite() {
this.timeout(180000);
before(done => {
- gcpRequestRetry({
- method: 'PUT',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
- process.stdout.write(`err in creating bucket ${err}\n`);
- }
- return done(err);
+ const command = new CreateBucketCommand({
+ Bucket: bucketName,
});
+ gcpClient.send(command)
+ .then(() => done())
+ .catch(err => {
+ process.stdout.write(`err in creating bucket ${err}\n`);
+ return done(err);
+ });
});
after(done => {
- gcpRequestRetry({
- method: 'DELETE',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
- process.stdout.write(`err in deleting bucket ${err}\n`);
- }
- return done(err);
+ const command = new DeleteBucketCommand({
+ Bucket: bucketName,
});
+ gcpClient.send(command)
+ .then(() => done())
+ .catch(err => {
+ process.stdout.write(`err in deleting bucket ${err}\n`);
+ return done(err);
+ });
});
describe('without existing bucket', () => {
diff --git a/tests/functional/raw-node/test/GCP/bucket/getVersioning.js b/tests/functional/raw-node/test/GCP/bucket/getVersioning.js
index 3a3bc7c9e2..b3c6e982ea 100644
--- a/tests/functional/raw-node/test/GCP/bucket/getVersioning.js
+++ b/tests/functional/raw-node/test/GCP/bucket/getVersioning.js
@@ -1,25 +1,20 @@
const assert = require('assert');
const async = require('async');
const arsenal = require('arsenal');
+const {
+ PutBucketVersioningCommand,
+ GetBucketVersioningCommand,
+ CreateBucketCommand,
+ DeleteBucketCommand,
+} = require('@aws-sdk/client-s3');
const { GCP } = arsenal.storage.data.external.GCP;
-const { makeGcpRequest } = require('../../../utils/makeRequest');
-const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils');
+const { genUniqID } = require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
const credentialOne = 'gcpbackend';
const verEnabledObj = 'Enabled';
const verDisabledObj = 'Suspended';
-const xmlEnable =
- '' +
- '' +
- 'Enabled' +
- '';
-const xmlDisable =
- '' +
- '' +
- 'Suspended' +
- '';
describe('GCP: GET Bucket Versioning', () => {
const config = getRealAwsConfig(credentialOne);
@@ -27,80 +22,84 @@ describe('GCP: GET Bucket Versioning', () => {
beforeEach(function beforeFn(done) {
this.currentTest.bucketName = `somebucket-${genUniqID()}`;
- gcpRequestRetry({
- method: 'PUT',
- bucket: this.currentTest.bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
- process.stdout.write(`err in creating bucket ${err.code}\n`);
- }
- return done(err);
+ const cmd = new CreateBucketCommand({
+ Bucket: this.currentTest.bucketName,
});
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
+ process.stdout
+ .write(`err in creating bucket ${err.code}\n`);
+ return done(err);
+ });
});
afterEach(function afterFn(done) {
- gcpRequestRetry({
- method: 'DELETE',
- bucket: this.currentTest.bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
- process.stdout.write(`err in deleting bucket ${err.code}\n`);
- }
- return done(err);
+ const cmd = new DeleteBucketCommand({
+ Bucket: this.currentTest.bucketName,
});
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
+ if (err) {
+ process.stdout
+ .write(`err in deleting bucket ${err.code}\n`);
+ }
+ return done(err);
+ });
});
it('should verify bucket versioning is enabled', function testFn(done) {
return async.waterfall([
- next => makeGcpRequest({
- method: 'PUT',
- bucket: this.test.bucketName,
- authCredentials: config.credentials,
- queryObj: { versioning: '' },
- requestBody: xmlEnable,
- }, err => {
- if (err) {
- process.stdout.write(`err in setting versioning ${err.code}`);
- }
- return next(err);
- }),
+ // Enable versioning using the official SDK client
next => {
- gcpClient.getBucketVersioning({
+ const command = new PutBucketVersioningCommand({
Bucket: this.test.bucketName,
- }, (err, res) => {
- assert.equal(err, null,
- `Expected success, but got err ${err}`);
- assert.deepStrictEqual(res.Status, verEnabledObj);
- return next();
+ VersioningConfiguration: { Status: 'Enabled' },
});
+ return gcpClient.send(command)
+ .then(() => next())
+ .catch(err => next(err));
+ },
+ // Verify using GetBucketVersioningCommand
+ next => {
+ const command = new GetBucketVersioningCommand({
+ Bucket: this.test.bucketName,
+ });
+ return gcpClient.send(command)
+ .then(res => {
+ assert.deepStrictEqual(res.Status, verEnabledObj);
+ return next();
+ })
+ .catch(err => next(err));
},
], err => done(err));
});
it('should verify bucket versioning is disabled', function testFn(done) {
return async.waterfall([
- next => makeGcpRequest({
- method: 'PUT',
- bucket: this.test.bucketName,
- authCredentials: config.credentials,
- queryObj: { versioning: '' },
- requestBody: xmlDisable,
- }, err => {
- if (err) {
- process.stdout.write(`err in setting versioning ${err}`);
- }
- return next(err);
- }),
- next => gcpClient.getBucketVersioning({
- Bucket: this.test.bucketName,
- }, (err, res) => {
- assert.equal(err, null,
- `Expected success, but got err ${err}`);
- assert.deepStrictEqual(res.Status, verDisabledObj);
- return next();
- }),
+ // Disable versioning using the official SDK client
+ next => {
+ const command = new PutBucketVersioningCommand({
+ Bucket: this.test.bucketName,
+ VersioningConfiguration: { Status: 'Suspended' },
+ });
+ return gcpClient.send(command)
+ .then(() => next())
+ .catch(err => next(err));
+ },
+ // Verify using GetBucketVersioningCommand
+ next => {
+ const command = new GetBucketVersioningCommand({
+ Bucket: this.test.bucketName,
+ });
+ return gcpClient.send(command)
+ .then(res => {
+ assert.deepStrictEqual(res.Status, verDisabledObj);
+ return next();
+ })
+ .catch(err => next(err));
+ },
], err => done(err));
});
});
diff --git a/tests/functional/raw-node/test/GCP/bucket/head.js b/tests/functional/raw-node/test/GCP/bucket/head.js
index f9346c3f96..d12236d233 100644
--- a/tests/functional/raw-node/test/GCP/bucket/head.js
+++ b/tests/functional/raw-node/test/GCP/bucket/head.js
@@ -1,9 +1,13 @@
const assert = require('assert');
const arsenal = require('arsenal');
const { GCP } = arsenal.storage.data.external.GCP;
-const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils');
+const { genUniqID } = require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
@@ -33,33 +37,25 @@ describe('GCP: HEAD Bucket', () => {
this.currentTest.bucketName = `somebucket-${genUniqID()}`;
process.stdout
.write(`Creating test bucket ${this.currentTest.bucketName}\n`);
- gcpRequestRetry({
- method: 'PUT',
- bucket: this.currentTest.bucketName,
- authCredentials: config.credentials,
- }, 0, (err, res) => {
- if (err) {
- return done(err);
- }
- this.currentTest.bucketObj = {
- MetaVersionId: res.headers['x-goog-metageneration'],
- };
- return done();
+ const cmd = new CreateBucketCommand({
+ Bucket: this.currentTest.bucketName,
});
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => done(err));
});
afterEach(function afterFn(done) {
- gcpRequestRetry({
- method: 'DELETE',
- bucket: this.currentTest.bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new DeleteBucketCommand({
+ Bucket: this.currentTest.bucketName,
+ });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout
.write(`err deleting bucket: ${err.code}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
it('should get bucket information', function testFn(done) {
@@ -69,7 +65,11 @@ describe('GCP: HEAD Bucket', () => {
assert.equal(err, null, `Expected success, but got ${err}`);
const { $metadata, ...data } = res;
assert.strictEqual($metadata.httpStatusCode, 200);
- assert.deepStrictEqual(this.test.bucketObj, data);
+ // Ensure MetaVersionId is present and non-empty
+ assert.ok(
+ typeof data.MetaVersionId === 'string'
+ && data.MetaVersionId.length > 0
+ );
return done();
});
});
diff --git a/tests/functional/raw-node/test/GCP/bucket/putVersioning.js b/tests/functional/raw-node/test/GCP/bucket/putVersioning.js
index c8151e21c4..7047635b9f 100644
--- a/tests/functional/raw-node/test/GCP/bucket/putVersioning.js
+++ b/tests/functional/raw-node/test/GCP/bucket/putVersioning.js
@@ -1,110 +1,93 @@
const assert = require('assert');
const async = require('async');
const arsenal = require('arsenal');
-const xml2js = require('xml2js');
+const {
+ PutBucketVersioningCommand,
+ GetBucketVersioningCommand,
+ CreateBucketCommand,
+ DeleteBucketCommand,
+} = require('@aws-sdk/client-s3');
const { GCP } = arsenal.storage.data.external.GCP;
-const { makeGcpRequest } = require('../../../utils/makeRequest');
-const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils');
+const { genUniqID } = require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
const credentialOne = 'gcpbackend';
-const verEnabledObj = { VersioningConfiguration: { Status: ['Enabled'] } };
-const verDisabledObj = { VersioningConfiguration: { Status: ['Suspended'] } };
-
-function resParseAndAssert(xml, compareObj, callback) {
- return xml2js.parseString(xml, (err, res) => {
- if (err) {
- process.stdout.write(`err in parsing response ${err}\n`);
- return callback(err);
- }
- assert.deepStrictEqual(res, compareObj);
- return callback();
- });
-}
+const verEnabledStatus = 'Enabled';
+const verDisabledStatus = 'Suspended';
+const bucketName = `somebucket-${genUniqID()}`;
describe('GCP: PUT Bucket Versioning', () => {
const config = getRealAwsConfig(credentialOne);
const gcpClient = new GCP(config);
- beforeEach(function beforeFn(done) {
- this.currentTest.bucketName = `somebucket-${genUniqID()}`;
- gcpRequestRetry({
- method: 'PUT',
- bucket: this.currentTest.bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ before(done => {
+ const cmd = new CreateBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in creating bucket ${err}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
- afterEach(function afterFn(done) {
- gcpRequestRetry({
- method: 'DELETE',
- bucket: this.currentTest.bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ after(done => {
+ const cmd = new DeleteBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in deleting bucket ${err}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
- it('should enable bucket versioning', function testFn(done) {
- return async.waterfall([
- next => gcpClient.putBucketVersioning({
- Bucket: this.test.bucketName,
- VersioningConfiguration: {
- Status: 'Enabled',
- },
- }, err => {
- assert.equal(err, null,
- `Expected success, but got err ${err}`);
- return next();
- }),
- next => makeGcpRequest({
- method: 'GET',
- bucket: this.test.bucketName,
- authCredentials: config.credentials,
- queryObj: { versioning: '' },
- }, (err, res) => {
- if (err) {
- process.stdout.write(`err in retrieving bucket ${err}`);
- return next(err);
- }
- return resParseAndAssert(res.body, verEnabledObj, next);
- }),
- ], err => done(err));
- });
+ it('should enable bucket versioning', done => async.waterfall([
+ next => {
+ const cmd = new PutBucketVersioningCommand({
+ Bucket: bucketName,
+ VersioningConfiguration: {
+ Status: 'Enabled',
+ },
+ });
+ return gcpClient.send(cmd)
+ .then(() => next())
+ .catch(err => next(err));
+ },
+ next => {
+ const cmd = new GetBucketVersioningCommand({
+ Bucket: bucketName,
+ });
+ return gcpClient.send(cmd)
+ .then(res => {
+ assert.strictEqual(res.Status, verEnabledStatus);
+ return next();
+ })
+ .catch(err => next(err));
+ },
+ ], err => done(err)));
- it('should disable bucket versioning', function testFn(done) {
- return async.waterfall([
- next => gcpClient.putBucketVersioning({
- Bucket: this.test.bucketName,
- VersioningConfiguration: {
- Status: 'Suspended',
- },
- }, err => {
- assert.equal(err, null,
- `Expected success, but got err ${err}`);
- return next();
- }),
- next => makeGcpRequest({
- method: 'GET',
- bucket: this.test.bucketName,
- authCredentials: config.credentials,
- queryObj: { versioning: '' },
- }, (err, res) => {
- if (err) {
- process.stdout.write(`err in retrieving bucket ${err}`);
- return next(err);
- }
- return resParseAndAssert(res.body, verDisabledObj, next);
- }),
- ], err => done(err));
- });
+ it('should disable bucket versioning', done => async.waterfall([
+ next => {
+ const cmd = new PutBucketVersioningCommand({
+ Bucket: bucketName,
+ VersioningConfiguration: {
+ Status: 'Suspended',
+ },
+ });
+ return gcpClient.send(cmd)
+ .then(() => next())
+ .catch(err => next(err));
+ },
+ next => {
+ const cmd = new GetBucketVersioningCommand({
+ Bucket: bucketName,
+ });
+ return gcpClient.send(cmd)
+ .then(res => {
+ assert.strictEqual(res.Status, verDisabledStatus);
+ return next();
+ })
+ .catch(err => next(err));
+ },
+ ], err => done(err)));
});
diff --git a/tests/functional/raw-node/test/GCP/object/completeMpu.js b/tests/functional/raw-node/test/GCP/object/completeMpu.js
index 900093f353..b23be83dbc 100644
--- a/tests/functional/raw-node/test/GCP/object/completeMpu.js
+++ b/tests/functional/raw-node/test/GCP/object/completeMpu.js
@@ -1,26 +1,26 @@
const assert = require('assert');
const async = require('async');
const arsenal = require('arsenal');
+const { ListObjectsCommand } = require('@aws-sdk/client-s3');
const { GCP, GcpUtils } = arsenal.storage.data.external.GCP;
const {
- gcpRequestRetry,
- gcpClientRetry,
- setBucketClass,
gcpMpuSetup,
genUniqID,
} = require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
const bucketNames = {
main: {
Name: `somebucket-${genUniqID()}`,
- Type: 'MULTI_REGIONAL',
},
mpu: {
Name: `mpubucket-${genUniqID()}`,
- Type: 'MULTI_REGIONAL',
},
};
const numParts = 1024;
@@ -49,7 +49,7 @@ function listObjectsPaginated(gcpClient, bucketName, cb) {
params.Marker = marker;
}
- return gcpClientRetry(gcpClient.listObjects.bind(gcpClient), params, (err, res) => {
+ return gcpClient.listObjects(params, (err, res) => {
if (err) {
return cb(err);
}
@@ -87,7 +87,7 @@ function emptyBucket(gcpClient, bucketName, cb) {
Bucket: bucketName,
Key: object.Key,
};
- return gcpClientRetry(gcpClient.deleteObject.bind(gcpClient), deleteParams, next);
+ return gcpClient.deleteObject(deleteParams, next);
}, cb);
});
}
@@ -100,37 +100,47 @@ describe('GCP: Complete MPU', function testSuite() {
before(done => {
config = getRealAwsConfig(credentialOne);
gcpClient = new GCP(config);
- async.eachSeries(bucketNames,
- (bucket, next) => gcpRequestRetry({
- method: 'PUT',
- bucket: bucket.Name,
- authCredentials: config.credentials,
- requestBody: setBucketClass(bucket.Type),
- }, 0, err => {
- if (err) {
- process.stdout.write(`err in creating bucket ${err}\n`);
- }
- return next(err);
- }),
+ gcpClient.listObjects = (params, callback) => {
+ const command = new ListObjectsCommand(params);
+ return gcpClient.send(command)
+ .then(data => callback(null, data))
+ .catch(err => {
+ if (err && err.$metadata && err.$metadata.httpStatusCode &&
+ err.statusCode === undefined) {
+ // eslint-disable-next-line no-param-reassign
+ err.statusCode = err.$metadata.httpStatusCode;
+ }
+ return callback(err);
+ });
+ };
+ async.eachSeries(Object.values(bucketNames),
+ (bucket, next) => {
+ const cmd = new CreateBucketCommand({ Bucket: bucket.Name });
+ gcpClient.send(cmd)
+ .then(() => next())
+ .catch(err => {
+ process.stdout.write(`err in creating bucket ${err}\n`);
+ return next(err);
+ });
+ },
done);
});
after(done => {
- async.eachSeries(bucketNames,
+ async.eachSeries(Object.values(bucketNames),
(bucket, next) => emptyBucket(gcpClient, bucket.Name, err => {
assert.equal(err, null,
`Expected success, but got error ${err}`);
- gcpRequestRetry({
- method: 'DELETE',
- bucket: bucket.Name,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
- process.stdout.write(
- `err in deleting bucket ${err}\n`);
- }
- return next(err);
- });
+ const cmd = new DeleteBucketCommand({ Bucket: bucket.Name });
+ gcpClient.send(cmd)
+ .then(() => next())
+ .catch(error => {
+ if (error) {
+ process.stdout.write(
+ `err in deleting bucket ${error}\n`);
+ }
+ return next(error);
+ });
}),
done);
});
diff --git a/tests/functional/raw-node/test/GCP/object/copy.js b/tests/functional/raw-node/test/GCP/object/copy.js
index 7df2260736..a13eedb27d 100644
--- a/tests/functional/raw-node/test/GCP/object/copy.js
+++ b/tests/functional/raw-node/test/GCP/object/copy.js
@@ -2,10 +2,14 @@ const assert = require('assert');
const async = require('async');
const arsenal = require('arsenal');
const { GCP } = arsenal.storage.data.external.GCP;
-const { makeGcpRequest } = require('../../../utils/makeRequest');
-const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils');
+const { genUniqID } = require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+ PutObjectCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
const bucketName = `somebucket-${genUniqID()}`;
@@ -16,29 +20,23 @@ describe('GCP: COPY Object', function testSuite() {
const gcpClient = new GCP(config);
before(done => {
- gcpRequestRetry({
- method: 'PUT',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new CreateBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in creating bucket ${err}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
after(done => {
- gcpRequestRetry({
- method: 'DELETE',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new DeleteBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in creating bucket ${err}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
describe('without existing object in bucket', () => {
@@ -63,41 +61,38 @@ describe('GCP: COPY Object', function testSuite() {
this.currentTest.key = `somekey-${genUniqID()}`;
this.currentTest.copyKey = `copykey-${genUniqID()}`;
this.currentTest.initValue = `${genUniqID()}`;
- makeGcpRequest({
- method: 'PUT',
- bucket: bucketName,
- objectKey: this.currentTest.copyKey,
- headers: {
- 'x-goog-meta-value': this.currentTest.initValue,
+ const cmd = new PutObjectCommand({
+ Bucket: bucketName,
+ Key: this.currentTest.copyKey,
+ Metadata: {
+ value: this.currentTest.initValue,
},
- authCredentials: config.credentials,
- }, (err, res) => {
- if (err) {
- process.stdout.write(`err in creating object ${err}\n`);
- }
- this.currentTest.contentHash = res.headers['x-goog-hash'];
- return done(err);
});
+ gcpClient.send(cmd)
+ .then(res => {
+ this.currentTest.ETag = res.ETag;
+ return done();
+ })
+ .catch(err => {
+ process.stdout.write(`err in creating object ${err}\n`);
+ return done(err);
+ });
});
afterEach(function afterFn(done) {
async.parallel([
- next => makeGcpRequest({
- method: 'DELETE',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
+ next => gcpClient.deleteObject({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
}, err => {
if (err) {
process.stdout.write(`err in deleting object ${err}\n`);
}
return next(err);
}),
- next => makeGcpRequest({
- method: 'DELETE',
- bucket: bucketName,
- objectKey: this.currentTest.copyKey,
- authCredentials: config.credentials,
+ next => gcpClient.deleteObject({
+ Bucket: bucketName,
+ Key: this.currentTest.copyKey,
}, err => {
if (err) {
process.stdout
@@ -125,20 +120,17 @@ describe('GCP: COPY Object', function testSuite() {
`Expected success, but got error ${err}`);
return next();
}),
- next => makeGcpRequest({
- method: 'HEAD',
- bucket: bucketName,
- objectKey: this.test.key,
- authCredentials: config.credentials,
+ next => gcpClient.headObject({
+ Bucket: bucketName,
+ Key: this.test.key,
}, (err, res) => {
if (err) {
process.stdout
.write(`err in retrieving object ${err}\n`);
return next(err);
}
- assert.strictEqual(this.test.contentHash,
- res.headers['x-goog-hash']);
- assert.notStrictEqual(res.headers['x-goog-meta-value'],
+ assert.strictEqual(res.ETag, this.test.ETag);
+ assert.notStrictEqual(res.Metadata.value,
this.test.initValue);
return next();
}),
@@ -158,20 +150,17 @@ describe('GCP: COPY Object', function testSuite() {
`Expected success, but got error ${err}`);
return next();
}),
- next => makeGcpRequest({
- method: 'HEAD',
- bucket: bucketName,
- objectKey: this.test.key,
- authCredentials: config.credentials,
+ next => gcpClient.headObject({
+ Bucket: bucketName,
+ Key: this.test.key,
}, (err, res) => {
if (err) {
process.stdout
.write(`err in retrieving object ${err}\n`);
return next(err);
}
- assert.strictEqual(this.test.contentHash,
- res.headers['x-goog-hash']);
- assert.strictEqual(res.headers['x-goog-meta-value'],
+ assert.strictEqual(res.ETag, this.test.ETag);
+ assert.strictEqual(res.Metadata.value,
this.test.initValue);
return next();
}),
diff --git a/tests/functional/raw-node/test/GCP/object/delete.js b/tests/functional/raw-node/test/GCP/object/delete.js
index 669969003c..66262ade1b 100644
--- a/tests/functional/raw-node/test/GCP/object/delete.js
+++ b/tests/functional/raw-node/test/GCP/object/delete.js
@@ -2,10 +2,15 @@ const assert = require('assert');
const async = require('async');
const arsenal = require('arsenal');
const { GCP } = arsenal.storage.data.external.GCP;
-const { makeGcpRequest } = require('../../../utils/makeRequest');
-const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils');
+const { genUniqID } = require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+ PutObjectCommand,
+ GetObjectCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
const bucketName = `somebucket-${genUniqID()}`;
@@ -18,44 +23,37 @@ describe('GCP: DELETE Object', function testSuite() {
const gcpClient = new GCP(config);
before(done => {
- gcpRequestRetry({
- method: 'PUT',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new CreateBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in creating bucket ${err}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
after(done => {
- gcpRequestRetry({
- method: 'DELETE',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new DeleteBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in deleting bucket ${err}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
describe('with existing object in bucket', () => {
beforeEach(done => {
- makeGcpRequest({
- method: 'PUT',
- bucket: bucketName,
- objectKey,
- authCredentials: config.credentials,
- }, err => {
- if (err) {
- process.stdout.write(`err in creating object ${err}\n`);
- }
- return done(err);
+ const cmd = new PutObjectCommand({
+ Bucket: bucketName,
+ Key: objectKey,
});
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
+ process.stdout.write(`err in creating object ${err}\n`);
+ return done(err);
+ });
});
it('should successfully delete object', done => {
@@ -68,17 +66,25 @@ describe('GCP: DELETE Object', function testSuite() {
`Expected success, got error ${err}`);
return next();
}),
- next => makeGcpRequest({
- method: 'GET',
- bucket: bucketName,
- objectKey,
- authCredentials: config.credentials,
- }, err => {
- assert(err);
- assert.strictEqual(err.statusCode, 404);
- assert.strictEqual(err.code, 'NoSuchKey');
- return next();
- }),
+ next => {
+ const cmd = new GetObjectCommand({
+ Bucket: bucketName,
+ Key: objectKey,
+ });
+ gcpClient.send(cmd)
+ .then(() => {
+ // Should not succeed
+ assert.fail('Expected NoSuchKey error');
+ })
+ .catch(err => {
+ assert(err);
+ assert.strictEqual(
+ err.$metadata && err.$metadata.httpStatusCode,
+ 404);
+ assert.strictEqual(err.name, 'NoSuchKey');
+ return next();
+ });
+ },
], err => done(err));
});
});
diff --git a/tests/functional/raw-node/test/GCP/object/deleteMpu.js b/tests/functional/raw-node/test/GCP/object/deleteMpu.js
index 0d923a9a45..645842fa00 100644
--- a/tests/functional/raw-node/test/GCP/object/deleteMpu.js
+++ b/tests/functional/raw-node/test/GCP/object/deleteMpu.js
@@ -1,21 +1,24 @@
const assert = require('assert');
const async = require('async');
const arsenal = require('arsenal');
+const { ListObjectsCommand } = require('@aws-sdk/client-s3');
const { GCP } = arsenal.storage.data.external.GCP;
-const { gcpRequestRetry, setBucketClass, gcpMpuSetup, genUniqID } =
+const { gcpMpuSetup, genUniqID } =
require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
const bucketNames = {
main: {
Name: `somebucket-${genUniqID()}`,
- Type: 'MULTI_REGIONAL',
},
mpu: {
Name: `mpubucket-${genUniqID()}`,
- Type: 'MULTI_REGIONAL',
},
};
const numParts = 10;
@@ -40,23 +43,50 @@ describe('GCP: Abort MPU', function testSuite() {
before(done => {
config = getRealAwsConfig(credentialOne);
gcpClient = new GCP(config);
- async.eachSeries(bucketNames,
- (bucket, next) => gcpRequestRetry({
- method: 'PUT',
- bucket: bucket.Name,
- authCredentials: config.credentials,
- requestBody: setBucketClass(bucket.Type),
- }, 0, err => {
- if (err) {
- process.stdout.write(`err in creating bucket ${err}\n`);
+ gcpClient.listObjects = (params, callback) => {
+ const command = new ListObjectsCommand(params);
+ return gcpClient.send(command)
+ .then(data => callback(null, data))
+ .catch(err => {
+ if (err && err.$metadata && err.$metadata.httpStatusCode &&
+ err.statusCode === undefined) {
+ // eslint-disable-next-line no-param-reassign
+ err.statusCode = err.$metadata.httpStatusCode;
+ }
+ return callback(err);
+ });
+ };
+
+ const maxAttempts = 3;
+ const buckets = Object.values(bucketNames);
+ const createBuckets = attempt => {
+ async.eachSeries(buckets,
+ (bucket, next) => {
+ const cmd = new CreateBucketCommand({ Bucket: bucket.Name });
+ gcpClient.send(cmd)
+ .then(() => next())
+ .catch(err => {
+ process.stdout.write(
+ `err in creating bucket (attempt ${attempt + 1}) ${err}\n`);
+ return next(err);
+ });
+ },
+ err => {
+ if (err && (err.name === 'SlowDown'
+ || err.$metadata?.httpStatusCode === 429)
+ && attempt < maxAttempts - 1) {
+ const delay = Math.pow(2, attempt) * 1000;
+ return setTimeout(() => createBuckets(attempt + 1), delay);
}
- return next(err);
- }),
- done);
+ return done(err);
+ });
+ };
+
+ createBuckets(0);
});
after(done => {
- async.eachSeries(bucketNames,
+ async.eachSeries(Object.values(bucketNames),
(bucket, next) => gcpClient.listObjects({
Bucket: bucket.Name,
}, (err, res) => {
@@ -72,17 +102,16 @@ describe('GCP: Abort MPU', function testSuite() {
}, err => {
assert.equal(err, null,
`Expected success, but got error ${err}`);
- gcpRequestRetry({
- method: 'DELETE',
- bucket: bucket.Name,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
- process.stdout.write(
- `err in deleting bucket ${err}\n`);
- }
- return next(err);
- });
+ const cmd = new DeleteBucketCommand({ Bucket: bucket.Name });
+ gcpClient.send(cmd)
+ .then(() => next())
+ .catch(error => {
+ if (error) {
+ process.stdout.write(
+ `err in deleting bucket ${error}\n`);
+ }
+ return next(error);
+ });
});
}),
done);
diff --git a/tests/functional/raw-node/test/GCP/object/deleteTagging.js b/tests/functional/raw-node/test/GCP/object/deleteTagging.js
index de3053314c..435793f0d5 100644
--- a/tests/functional/raw-node/test/GCP/object/deleteTagging.js
+++ b/tests/functional/raw-node/test/GCP/object/deleteTagging.js
@@ -2,48 +2,40 @@ const assert = require('assert');
const async = require('async');
const arsenal = require('arsenal');
const { GCP } = arsenal.storage.data.external.GCP;
-const { makeGcpRequest } = require('../../../utils/makeRequest');
-const { gcpRequestRetry, genDelTagObj, genUniqID } =
+const { genDelTagObj, genUniqID } =
require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
const { gcpTaggingPrefix } = require('../../../../../../constants');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+ PutObjectCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
const bucketName = `somebucket-${genUniqID()}`;
-const gcpTagPrefix = `x-goog-meta-${gcpTaggingPrefix}`;
let config;
let gcpClient;
function assertObjectMetaTag(params, callback) {
- return makeGcpRequest({
- method: 'HEAD',
- bucket: params.bucket,
- objectKey: params.key,
- authCredentials: config.credentials,
- headers: {
- 'x-goog-generation': params.versionId,
- },
+ return gcpClient.headObject({
+ Bucket: params.bucket,
+ Key: params.key,
+ VersionId: params.versionId,
}, (err, res) => {
if (err) {
process.stdout.write(`err in retrieving object ${err}`);
return callback(err);
}
- const resObj = res.headers;
+ const resMeta = Object.assign({}, res.Metadata || {});
const tagRes = {};
- Object.keys(resObj).forEach(
- header => {
- if (header.startsWith(gcpTagPrefix)) {
- tagRes[header] = resObj[header];
- delete resObj[header];
- }
- });
const metaRes = {};
- Object.keys(resObj).forEach(
- header => {
- if (header.startsWith('x-goog-meta-')) {
- metaRes[header] = resObj[header];
- delete resObj[header];
+ Object.keys(resMeta).forEach(key => {
+ if (key.startsWith(gcpTaggingPrefix)) {
+ tagRes[key] = resMeta[key];
+ } else {
+ metaRes[key] = resMeta[key];
}
});
assert.deepStrictEqual(params.tag, tagRes);
@@ -58,47 +50,63 @@ describe('GCP: DELETE Object Tagging', function testSuite() {
before(done => {
config = getRealAwsConfig(credentialOne);
gcpClient = new GCP(config);
- gcpRequestRetry({
- method: 'PUT',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new CreateBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in creating bucket ${err}`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
beforeEach(function beforeFn(done) {
this.currentTest.key = `somekey-${genUniqID()}`;
this.currentTest.specialKey = `veryspecial-${genUniqID()}`;
- const { headers, expectedTagObj, expectedMetaObj } =
- genDelTagObj(10, gcpTagPrefix);
- this.currentTest.expectedTagObj = expectedTagObj;
- this.currentTest.expectedMetaObj = expectedMetaObj;
- makeGcpRequest({
- method: 'PUT',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
- headers,
- }, (err, res) => {
- if (err) {
+ const { expectedTagObj, expectedMetaObj } =
+ genDelTagObj(10, `x-goog-meta-${gcpTaggingPrefix}`);
+
+ const expectedTagMeta = {};
+ Object.keys(expectedTagObj).forEach(header => {
+ const key = header.replace('x-goog-meta-', '');
+ expectedTagMeta[key] = expectedTagObj[header];
+ });
+
+ const expectedMetaMeta = {};
+ Object.keys(expectedMetaObj).forEach(header => {
+ const key = header.replace('x-goog-meta-', '');
+ expectedMetaMeta[key] = expectedMetaObj[header];
+ });
+
+ this.currentTest.expectedTagObj = expectedTagMeta;
+ this.currentTest.expectedMetaObj = expectedMetaMeta;
+
+ const metadata = Object.assign(
+ {},
+ expectedTagMeta,
+ expectedMetaMeta
+ );
+
+ const cmd = new PutObjectCommand({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
+ Metadata: metadata,
+ });
+
+ gcpClient.send(cmd)
+ .then(res => {
+ this.currentTest.versionId = res.VersionId;
+ return done();
+ })
+ .catch(err => {
process.stdout.write(`err in creating object ${err}`);
return done(err);
- }
- this.currentTest.versionId = res.headers['x-goog-generation'];
- return done();
- });
+ });
});
afterEach(function afterFn(done) {
- makeGcpRequest({
- method: 'DELETE',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
+ gcpClient.deleteObject({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
}, err => {
if (err) {
process.stdout.write(`err in deleting object ${err}`);
@@ -108,16 +116,13 @@ describe('GCP: DELETE Object Tagging', function testSuite() {
});
after(done => {
- gcpRequestRetry({
- method: 'DELETE',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new DeleteBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in deleting bucket ${err}`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
it('should successfully delete object tags', function testFn(done) {
diff --git a/tests/functional/raw-node/test/GCP/object/get.js b/tests/functional/raw-node/test/GCP/object/get.js
index d8c44da9d0..0975820dd7 100644
--- a/tests/functional/raw-node/test/GCP/object/get.js
+++ b/tests/functional/raw-node/test/GCP/object/get.js
@@ -1,10 +1,16 @@
const assert = require('assert');
const arsenal = require('arsenal');
const { GCP } = arsenal.storage.data.external.GCP;
-const { makeGcpRequest } = require('../../../utils/makeRequest');
-const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils');
+const { genUniqID } = require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+ PutObjectCommand,
+ DeleteObjectCommand,
+ GetObjectCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
const bucketName = `somebucket-${genUniqID()}`;
@@ -15,76 +21,72 @@ describe('GCP: GET Object', function testSuite() {
const gcpClient = new GCP(config);
before(done => {
- gcpRequestRetry({
- method: 'PUT',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new CreateBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in creating bucket ${err}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
after(done => {
- gcpRequestRetry({
- method: 'DELETE',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new DeleteBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in deleting bucket ${err}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
describe('with existing object in bucket', () => {
beforeEach(function beforeFn(done) {
this.currentTest.key = `somekey-${genUniqID()}`;
- makeGcpRequest({
- method: 'PUT',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
- }, (err, res) => {
- if (err) {
+ const cmd = new PutObjectCommand({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
+ });
+ gcpClient.send(cmd)
+ .then(res => {
+ this.currentTest.uploadId = res.VersionId;
+ this.currentTest.ETag = res.ETag;
+ return done();
+ })
+ .catch(err => {
process.stdout.write(`err in creating object ${err}\n`);
return done(err);
- }
- this.currentTest.uploadId =
- res.headers['x-goog-generation'];
- this.currentTest.ETag = res.headers.etag;
- return done();
- });
+ });
});
afterEach(function afterFn(done) {
- makeGcpRequest({
- method: 'DELETE',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
- }, err => {
- if (err) {
- process.stdout.write(`err in deleting object ${err}\n`);
- }
- return done(err);
+ const cmd = new DeleteObjectCommand({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
});
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
+ process.stdout.write(`err in deleting object ${err}\n`);
+ return done(err);
+ });
});
it('should successfully retrieve object', function testFn(done) {
- gcpClient.getObject({
+ const cmd = new GetObjectCommand({
Bucket: bucketName,
Key: this.test.key,
- }, (err, res) => {
- assert.equal(err, null,
- `Expected success, got error ${err}`);
- assert.strictEqual(res.ETag, this.test.ETag);
- assert.strictEqual(res.VersionId, this.test.uploadId);
- return done();
});
+ gcpClient.send(cmd)
+ .then(res => {
+ assert.strictEqual(res.ETag, this.test.ETag);
+ assert.ok(res.$metadata && typeof res.$metadata.httpStatusCode === 'number');
+ return done();
+ })
+ .catch(err => {
+ process.stdout.write(`err in getting object ${err}\n`);
+ return done(err);
+ });
});
});
diff --git a/tests/functional/raw-node/test/GCP/object/getTagging.js b/tests/functional/raw-node/test/GCP/object/getTagging.js
index f389f37b1d..d9e544834d 100644
--- a/tests/functional/raw-node/test/GCP/object/getTagging.js
+++ b/tests/functional/raw-node/test/GCP/object/getTagging.js
@@ -1,16 +1,19 @@
const assert = require('assert');
const arsenal = require('arsenal');
const { GCP } = arsenal.storage.data.external.GCP;
-const { makeGcpRequest } = require('../../../utils/makeRequest');
-const { gcpRequestRetry, genGetTagObj, genUniqID } =
+const { genGetTagObj, genUniqID } =
require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
const { gcpTaggingPrefix } = require('../../../../../../constants');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+ PutObjectCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
const bucketName = `somebucket-${genUniqID()}`;
-const gcpTagPrefix = `x-goog-meta-${gcpTaggingPrefix}`;
const tagSize = 10;
describe('GCP: GET Object Tagging', () => {
@@ -20,46 +23,56 @@ describe('GCP: GET Object Tagging', () => {
before(done => {
config = getRealAwsConfig(credentialOne);
gcpClient = new GCP(config);
- gcpRequestRetry({
- method: 'PUT',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new CreateBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in creating bucket ${err}`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
beforeEach(function beforeFn(done) {
this.currentTest.key = `somekey-${genUniqID()}`;
this.currentTest.specialKey = `veryspecial-${genUniqID()}`;
- const { tagHeader, expectedTagObj } =
- genGetTagObj(tagSize, gcpTagPrefix);
+ const { expectedTagObj } =
+ genGetTagObj(tagSize, `x-goog-meta-${gcpTaggingPrefix}`);
this.currentTest.tagObj = expectedTagObj;
- makeGcpRequest({
- method: 'PUT',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
- headers: tagHeader,
- }, (err, res) => {
- if (err) {
+
+ const putCmd = new PutObjectCommand({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
+ });
+
+ gcpClient.send(putCmd)
+ .then(res => {
+ this.currentTest.versionId = res.VersionId;
+ gcpClient.putObjectTagging({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
+ VersionId: this.currentTest.versionId,
+ Tagging: {
+ TagSet: this.currentTest.tagObj,
+ },
+ }, err => {
+ if (err) {
+ process.stdout
+ .write(`err in setting object tags ${err}`);
+ return done(err);
+ }
+ return done();
+ });
+ })
+ .catch(err => {
process.stdout.write(`err in creating object ${err}`);
return done(err);
- }
- this.currentTest.versionId = res.headers['x-goog-generation'];
- return done();
- });
+ });
});
afterEach(function afterFn(done) {
- makeGcpRequest({
- method: 'DELETE',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
+ gcpClient.deleteObject({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
}, err => {
if (err) {
process.stdout.write(`err in deleting object ${err}`);
@@ -69,16 +82,13 @@ describe('GCP: GET Object Tagging', () => {
});
after(done => {
- gcpRequestRetry({
- method: 'DELETE',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new DeleteBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in deleting bucket ${err}`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
it('should successfully get object tags', function testFn(done) {
diff --git a/tests/functional/raw-node/test/GCP/object/head.js b/tests/functional/raw-node/test/GCP/object/head.js
index 177c836dec..548456b418 100644
--- a/tests/functional/raw-node/test/GCP/object/head.js
+++ b/tests/functional/raw-node/test/GCP/object/head.js
@@ -1,10 +1,15 @@
const assert = require('assert');
const arsenal = require('arsenal');
const { GCP } = arsenal.storage.data.external.GCP;
-const { makeGcpRequest } = require('../../../utils/makeRequest');
-const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils');
+const { genUniqID } = require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+ PutObjectCommand,
+ HeadObjectCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
const bucketName = `somebucket-${genUniqID()}`;
@@ -15,57 +20,52 @@ describe('GCP: HEAD Object', function testSuite() {
const gcpClient = new GCP(config);
before(done => {
- gcpRequestRetry({
- method: 'PUT',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new CreateBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in creating bucket ${err}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
after(done => {
- gcpRequestRetry({
- method: 'DELETE',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new DeleteBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in deleting bucket ${err}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
describe('with existing object in bucket', () => {
beforeEach(function beforeFn(done) {
this.currentTest.key = `somekey-${genUniqID()}`;
- makeGcpRequest({
- method: 'PUT',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
- }, (err, res) => {
- if (err) {
+ const cmd = new PutObjectCommand({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
+ });
+ gcpClient.send(cmd)
+ .then(res => {
+ this.currentTest.uploadId = res.VersionId;
+ this.currentTest.ETag = res.ETag;
+ return done();
+ })
+ .catch(err => {
process.stdout.write(`err in creating object ${err}\n`);
return done(err);
- }
- this.currentTest.uploadId =
- res.headers['x-goog-generation'];
- this.currentTest.ETag = res.headers.etag;
- return done();
- });
+ });
});
afterEach(function afterFn(done) {
- makeGcpRequest({
- method: 'DELETE',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
+ if (!this.currentTest.key) {
+ done();
+ return;
+ }
+ gcpClient.deleteObject({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
}, err => {
if (err) {
process.stdout.write(`err in deleting object ${err}\n`);
@@ -75,16 +75,20 @@ describe('GCP: HEAD Object', function testSuite() {
});
it('should successfully retrieve object', function testFn(done) {
- gcpClient.headObject({
+ const cmd = new HeadObjectCommand({
Bucket: bucketName,
Key: this.test.key,
- }, (err, res) => {
- assert.equal(err, null,
- `Expected success, got error ${err}`);
- assert.strictEqual(res.ETag, this.test.ETag);
- assert.strictEqual(res.VersionId, this.test.uploadId);
- return done();
});
+ gcpClient.send(cmd)
+ .then(res => {
+ assert.strictEqual(res.ETag, this.test.ETag);
+ assert.ok(res.$metadata && res.$metadata.httpStatusCode === 200);
+ return done();
+ })
+ .catch(err => {
+ process.stdout.write(`err in head object ${err}\n`);
+ return done(err);
+ });
});
});
diff --git a/tests/functional/raw-node/test/GCP/object/initiateMpu.js b/tests/functional/raw-node/test/GCP/object/initiateMpu.js
index 1ed76ab578..944de9e3f6 100644
--- a/tests/functional/raw-node/test/GCP/object/initiateMpu.js
+++ b/tests/functional/raw-node/test/GCP/object/initiateMpu.js
@@ -2,21 +2,22 @@ const assert = require('assert');
const async = require('async');
const arsenal = require('arsenal');
const { GCP } = arsenal.storage.data.external.GCP;
-const { makeGcpRequest } = require('../../../utils/makeRequest');
-const { gcpRequestRetry, setBucketClass, genUniqID } =
+const { genUniqID } =
require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
const bucketNames = {
main: {
Name: `somebucket-${genUniqID()}`,
- Type: 'MULTI_REGIONAL',
},
mpu: {
Name: `mpubucket-${genUniqID()}`,
- Type: 'MULTI_REGIONAL',
},
};
@@ -28,33 +29,34 @@ describe('GCP: Initiate MPU', function testSuite() {
before(done => {
config = getRealAwsConfig(credentialOne);
gcpClient = new GCP(config);
- async.eachSeries(bucketNames,
- (bucket, next) => gcpRequestRetry({
- method: 'PUT',
- bucket: bucket.Name,
- authCredentials: config.credentials,
- requestBody: setBucketClass(bucket.Type),
- }, 0, err => {
- if (err) {
- process.stdout.write(`err in creating bucket ${err}\n`);
- }
- return next(err);
- }),
+ const buckets = Object.values(bucketNames);
+ async.eachSeries(buckets,
+ (bucket, next) => {
+ const cmd = new CreateBucketCommand({ Bucket: bucket.Name });
+ gcpClient.send(cmd)
+ .then(() => next())
+ .catch(err => {
+ process.stdout
+ .write(`err in creating bucket ${err}\n`);
+ return next(err);
+ });
+ },
done);
});
after(done => {
- async.eachSeries(bucketNames,
- (bucket, next) => gcpRequestRetry({
- method: 'DELETE',
- bucket: bucket.Name,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
- process.stdout.write(`err in deleting bucket ${err}\n`);
- }
- return next(err);
- }),
+ const buckets = Object.values(bucketNames);
+ async.eachSeries(buckets,
+ (bucket, next) => {
+ const cmd = new DeleteBucketCommand({ Bucket: bucket.Name });
+ gcpClient.send(cmd)
+ .then(() => next())
+ .catch(err => {
+ process.stdout
+ .write(`err in deleting bucket ${err}\n`);
+ return next(err);
+ });
+ },
done);
});
@@ -75,19 +77,16 @@ describe('GCP: Initiate MPU', function testSuite() {
}),
(uploadId, next) => {
const mpuInitKey = `${keyName}-${uploadId}/init`;
- makeGcpRequest({
- method: 'GET',
- bucket: bucketNames.mpu.Name,
- objectKey: mpuInitKey,
- authCredentials: config.credentials,
+ gcpClient.headObject({
+ Bucket: bucketNames.mpu.Name,
+ Key: mpuInitKey,
}, (err, res) => {
if (err) {
process.stdout
.write(`err in retrieving object ${err}`);
return next(err);
}
- assert.strictEqual(res.headers['x-goog-meta-special'],
- specialKey);
+ assert.strictEqual(res.Metadata.special, specialKey);
return next(null, uploadId);
});
},
diff --git a/tests/functional/raw-node/test/GCP/object/put.js b/tests/functional/raw-node/test/GCP/object/put.js
index 9c3933a0e7..207fb55825 100644
--- a/tests/functional/raw-node/test/GCP/object/put.js
+++ b/tests/functional/raw-node/test/GCP/object/put.js
@@ -1,10 +1,14 @@
const assert = require('assert');
const arsenal = require('arsenal');
const { GCP } = arsenal.storage.data.external.GCP;
-const { makeGcpRequest } = require('../../../utils/makeRequest');
-const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils');
+const { genUniqID } = require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+ PutObjectCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
const bucketName = `somebucket-${genUniqID()}`;
@@ -15,37 +19,33 @@ describe('GCP: PUT Object', function testSuite() {
const gcpClient = new GCP(config);
before(done => {
- gcpRequestRetry({
- method: 'PUT',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new CreateBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in creating bucket ${err}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
after(done => {
- gcpRequestRetry({
- method: 'DELETE',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new DeleteBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in deleting bucket ${err}\n`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
afterEach(function afterFn(done) {
- makeGcpRequest({
- method: 'DELETE',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
+ if (!this.currentTest.key) {
+ done();
+ return;
+ }
+ gcpClient.deleteObject({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
}, err => {
if (err) {
process.stdout.write(`err in deleting object ${err}\n`);
@@ -57,20 +57,19 @@ describe('GCP: PUT Object', function testSuite() {
describe('with existing object in bucket', () => {
beforeEach(function beforeFn(done) {
this.currentTest.key = `somekey-${genUniqID()}`;
- gcpRequestRetry({
- method: 'PUT',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
- }, 0, (err, res) => {
- if (err) {
+ const cmd = new PutObjectCommand({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
+ });
+ gcpClient.send(cmd)
+ .then(res => {
+ this.currentTest.uploadId = res.VersionId;
+ return done();
+ })
+ .catch(err => {
process.stdout.write(`err in putting object ${err}\n`);
return done(err);
- }
- this.currentTest.uploadId =
- res.headers['x-goog-generation'];
- return done();
- });
+ });
});
it('should overwrite object', function testFn(done) {
@@ -93,18 +92,13 @@ describe('GCP: PUT Object', function testSuite() {
}, (err, putRes) => {
assert.equal(err, null,
`Expected success, got error ${err}`);
- makeGcpRequest({
- method: 'GET',
- bucket: bucketName,
- objectKey: this.test.key,
- authCredentials: config.credentials,
- }, (err, getRes) => {
- if (err) {
- process.stdout.write(`err in getting bucket ${err}\n`);
- return done(err);
- }
- assert.strictEqual(getRes.headers['x-goog-generation'],
- putRes.VersionId);
+ gcpClient.getObject({
+ Bucket: bucketName,
+ Key: this.test.key,
+ }, (getErr, getRes) => {
+ assert.equal(getErr, null,
+ `Expected success, got error ${getErr}`);
+ assert.strictEqual(getRes.VersionId, putRes.VersionId);
return done();
});
});
diff --git a/tests/functional/raw-node/test/GCP/object/putTagging.js b/tests/functional/raw-node/test/GCP/object/putTagging.js
index 72ef1c1151..83bdf920ad 100644
--- a/tests/functional/raw-node/test/GCP/object/putTagging.js
+++ b/tests/functional/raw-node/test/GCP/object/putTagging.js
@@ -2,16 +2,19 @@ const assert = require('assert');
const async = require('async');
const arsenal = require('arsenal');
const { GCP } = arsenal.storage.data.external.GCP;
-const { makeGcpRequest } = require('../../../utils/makeRequest');
-const { gcpRequestRetry, genPutTagObj, genUniqID } =
+const { genPutTagObj, genUniqID } =
require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
const { gcpTaggingPrefix } = require('../../../../../../constants');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+ PutObjectCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
const bucketName = `somebucket-${genUniqID()}`;
-const gcpTagPrefix = `x-goog-meta-${gcpTaggingPrefix}`;
describe('GCP: PUT Object Tagging', () => {
let config;
@@ -20,42 +23,37 @@ describe('GCP: PUT Object Tagging', () => {
before(done => {
config = getRealAwsConfig(credentialOne);
gcpClient = new GCP(config);
- gcpRequestRetry({
- method: 'PUT',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new CreateBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in creating bucket ${err}`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
beforeEach(function beforeFn(done) {
this.currentTest.key = `somekey-${genUniqID()}`;
this.currentTest.specialKey = `veryspecial-${genUniqID()}`;
- makeGcpRequest({
- method: 'PUT',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
- }, (err, res) => {
- if (err) {
+ const cmd = new PutObjectCommand({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
+ });
+ gcpClient.send(cmd)
+ .then(res => {
+ this.currentTest.versionId = res.VersionId;
+ return done();
+ })
+ .catch(err => {
process.stdout.write(`err in creating object ${err}`);
return done(err);
- }
- this.currentTest.versionId = res.headers['x-goog-generation'];
- return done();
- });
+ });
});
afterEach(function afterFn(done) {
- makeGcpRequest({
- method: 'DELETE',
- bucket: bucketName,
- objectKey: this.currentTest.key,
- authCredentials: config.credentials,
+ gcpClient.deleteObject({
+ Bucket: bucketName,
+ Key: this.currentTest.key,
}, err => {
if (err) {
process.stdout.write(`err in deleting object ${err}`);
@@ -65,16 +63,13 @@ describe('GCP: PUT Object Tagging', () => {
});
after(done => {
- gcpRequestRetry({
- method: 'DELETE',
- bucket: bucketName,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
+ const cmd = new DeleteBucketCommand({ Bucket: bucketName });
+ gcpClient.send(cmd)
+ .then(() => done())
+ .catch(err => {
process.stdout.write(`err in deleting bucket ${err}`);
- }
- return done(err);
- });
+ return done(err);
+ });
});
it('should successfully put object tags', function testFn(done) {
@@ -96,21 +91,17 @@ describe('GCP: PUT Object Tagging', () => {
`Expected success, got error ${err}`);
return next();
}),
- next => makeGcpRequest({
- method: 'HEAD',
- bucket: bucketName,
- objectKey: this.test.key,
- authCredentials: config.credentials,
- headers: {
- 'x-goog-generation': this.test.versionId,
- },
+ next => gcpClient.headObject({
+ Bucket: bucketName,
+ Key: this.test.key,
+ VersionId: this.test.versionId,
}, (err, res) => {
if (err) {
process.stdout.write(`err in retrieving object ${err}`);
return next(err);
}
- const toCompare =
- res.headers[`${gcpTagPrefix}${this.test.specialKey}`];
+ const metaKey = `${gcpTaggingPrefix}${this.test.specialKey}`;
+ const toCompare = res.Metadata[metaKey];
assert.strictEqual(toCompare, this.test.specialKey);
return next();
}),
diff --git a/tests/functional/raw-node/test/GCP/object/upload.js b/tests/functional/raw-node/test/GCP/object/upload.js
index 88005b8862..1440784ceb 100644
--- a/tests/functional/raw-node/test/GCP/object/upload.js
+++ b/tests/functional/raw-node/test/GCP/object/upload.js
@@ -1,21 +1,24 @@
const assert = require('assert');
const async = require('async');
const arsenal = require('arsenal');
+const { ListObjectsCommand } = require('@aws-sdk/client-s3');
const { GCP } = arsenal.storage.data.external.GCP;
-const { gcpRequestRetry, setBucketClass, genUniqID } =
+const { genUniqID } =
require('../../../utils/gcpUtils');
const { getRealAwsConfig } =
require('../../../../aws-node-sdk/test/support/awsConfig');
+const {
+ CreateBucketCommand,
+ DeleteBucketCommand,
+} = require('@aws-sdk/client-s3');
const credentialOne = 'gcpbackend';
const bucketNames = {
main: {
Name: `somebucket-${genUniqID()}`,
- Type: 'MULTI_REGIONAL',
},
mpu: {
Name: `mpubucket-${genUniqID()}`,
- Type: 'MULTI_REGIONAL',
},
};
@@ -32,23 +35,34 @@ describe('GCP: Upload Object', function testSuite() {
before(done => {
config = getRealAwsConfig(credentialOne);
gcpClient = new GCP(config);
- async.eachSeries(bucketNames,
- (bucket, next) => gcpRequestRetry({
- method: 'PUT',
- bucket: bucket.Name,
- authCredentials: config.credentials,
- requestBody: setBucketClass(bucket.Type),
- }, 0, err => {
- if (err) {
- process.stdout.write(`err in creating bucket ${err}\n`);
- }
- return next(err);
- }),
+ gcpClient.listObjects = (params, callback) => {
+ const command = new ListObjectsCommand(params);
+ return gcpClient.send(command)
+ .then(data => callback(null, data))
+ .catch(err => {
+ if (err && err.$metadata && err.$metadata.httpStatusCode &&
+ err.statusCode === undefined) {
+ // eslint-disable-next-line no-param-reassign
+ err.statusCode = err.$metadata.httpStatusCode;
+ }
+ return callback(err);
+ });
+ };
+ async.eachSeries(Object.values(bucketNames),
+ (bucket, next) => {
+ const cmd = new CreateBucketCommand({ Bucket: bucket.Name });
+ gcpClient.send(cmd)
+ .then(() => next())
+ .catch(err => {
+ process.stdout.write(`err in creating bucket ${err}\n`);
+ return next(err);
+ });
+ },
err => done(err));
});
after(done => {
- async.eachSeries(bucketNames,
+ async.eachSeries(Object.values(bucketNames),
(bucket, next) => gcpClient.listObjects({
Bucket: bucket.Name,
}, (err, res) => {
@@ -64,17 +78,16 @@ describe('GCP: Upload Object', function testSuite() {
}, err => {
assert.equal(err, null,
`Expected success, but got error ${err}`);
- gcpRequestRetry({
- method: 'DELETE',
- bucket: bucket.Name,
- authCredentials: config.credentials,
- }, 0, err => {
- if (err) {
- process.stdout.write(
- `err in deleting bucket ${err}\n`);
- }
- return next(err);
- });
+ const cmd = new DeleteBucketCommand({ Bucket: bucket.Name });
+ gcpClient.send(cmd)
+ .then(() => next())
+ .catch(error => {
+ if (error) {
+ process.stdout.write(
+ `err in deleting bucket ${error}\n`);
+ }
+ return next(error);
+ });
});
}),
err => done(err));
diff --git a/tests/functional/raw-node/utils/gcpUtils.js b/tests/functional/raw-node/utils/gcpUtils.js
index 6a8db5deb3..da1ae4b372 100644
--- a/tests/functional/raw-node/utils/gcpUtils.js
+++ b/tests/functional/raw-node/utils/gcpUtils.js
@@ -2,38 +2,8 @@ const async = require('async');
const assert = require('assert');
const { v4: uuidv4 } = require('uuid');
-const { makeGcpRequest } = require('./makeRequest');
-
const genUniqID = () => uuidv4().replace(/-/g, '');
-function gcpRequestRetry(params, retry, callback) {
- const maxRetries = 4;
- const timeout = Math.pow(2, retry) * 1000;
- return setTimeout(makeGcpRequest, timeout, params, (err, res) => {
- if (err) {
- if (retry <= maxRetries && err.statusCode === 429) {
- return gcpRequestRetry(params, retry + 1, callback);
- }
- return callback(err);
- }
- return callback(null, res);
- });
-}
-
-function gcpClientRetry(fn, params, callback, retry = 0) {
- const maxRetries = 4;
- const timeout = Math.pow(2, retry) * 1000;
- return setTimeout(fn, timeout, params, (err, res) => {
- if (err) {
- if (retry <= maxRetries && err.statusCode === 429) {
- return gcpClientRetry(fn, params, callback, retry + 1);
- }
- return callback(err);
- }
- return callback(null, res);
- });
-}
-
// mpu test helpers
function gcpMpuSetup(params, callback) {
const { gcpClient, bucketNames, key, partCount, partSize } = params;
@@ -142,8 +112,6 @@ function setBucketClass(storageClass) {
}
module.exports = {
- gcpRequestRetry,
- gcpClientRetry,
setBucketClass,
gcpMpuSetup,
genPutTagObj,
diff --git a/tests/functional/raw-node/utils/makeRequest.js b/tests/functional/raw-node/utils/makeRequest.js
index 3405a172e5..6759160c2e 100644
--- a/tests/functional/raw-node/utils/makeRequest.js
+++ b/tests/functional/raw-node/utils/makeRequest.js
@@ -185,55 +185,6 @@ function makeS3Request(params, callback) {
makeRequest(options, callback);
}
-/** makeGcpRequest - utility function to generate a request against GCP
- * @param {object} params - params for making request
- * @param {string} params.method - request method
- * @param {object} [params.queryObj] - query fields and their string values
- * @param {object} [params.headers] - headers and their string values
- * @param {string} [params.bucket] - bucket name
- * @param {string} [params.objectKey] - object key name
- * @param {object} [params.authCredentials] - authentication credentials
- * @param {object} params.authCredentials.accessKey - access key
- * @param {object} params.authCredentials.secretKey - secret key
- * @param {string} [params.region] - request body contents
- * @param {function} callback - with error and response parameters
- * @return {undefined} - and call callback
- */
-async function makeGcpRequest(params, callback) {
- const { method, queryObj, headers, bucket, objectKey, authCredentials,
- requestBody, region } = params;
-
- let resolvedCredentials = authCredentials;
- if (authCredentials && typeof authCredentials === 'function') {
- try {
- resolvedCredentials = await authCredentials();
- resolvedCredentials = {
- accessKey: resolvedCredentials.accessKeyId,
- secretKey: resolvedCredentials.secretAccessKey,
- };
- } catch (err) {
- return callback(err);
- }
- }
-
- const options = {
- authCredentials: resolvedCredentials,
- requestBody,
- hostname: 'storage.googleapis.com',
- port: 80,
- method,
- queryObj,
- headers: headers || {},
- path: bucket ? `/${bucket}/` : '/',
- GCP: true,
- region,
- };
- if (objectKey) {
- options.path = `${options.path}${objectKey}`;
- }
- return makeRequest(options, callback);
-}
-
/** makeBackbeatRequest - utility function to generate a request going
* through backbeat route
* @param {object} params - params for making request
@@ -270,6 +221,5 @@ function makeBackbeatRequest(params, callback) {
module.exports = {
makeRequest,
makeS3Request,
- makeGcpRequest,
makeBackbeatRequest,
};
diff --git a/yarn.lock b/yarn.lock
index cf7c5b40e6..de14973564 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4645,9 +4645,9 @@ arraybuffer.prototype.slice@^1.0.4:
optionalDependencies:
ioctl "^2.0.2"
-"arsenal@git+https://github.com/scality/Arsenal#8.3.0-preview.1":
+"arsenal@git+https://github.com/scality/Arsenal#aed443f02efebeb3f5c2e74786baadb5c19eaded":
version "8.3.0-preview.1"
- resolved "git+https://github.com/scality/Arsenal#00033b55fc22d8e58ab38211842fc0ccf41b9766"
+ resolved "git+https://github.com/scality/Arsenal#aed443f02efebeb3f5c2e74786baadb5c19eaded"
dependencies:
"@aws-sdk/client-kms" "^3.901.0"
"@aws-sdk/client-s3" "^3.901.0"