From a3a207a47bec8e8300f9622de555be71f1dacb9e Mon Sep 17 00:00:00 2001 From: Maha Benzekri Date: Wed, 14 Jan 2026 18:32:01 +0100 Subject: [PATCH 1/3] bump latest up to date arsenal Issue: CLDSRV-826 --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 517dbaad79..a92991ae95 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#df3d2aa5cf021ba2974798b46375586a69e9dfe8", "async": "2.6.4", "bucketclient": "scality/bucketclient#8.2.7", "bufferutil": "^4.0.8", diff --git a/yarn.lock b/yarn.lock index cf7c5b40e6..2bdeac944a 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#df3d2aa5cf021ba2974798b46375586a69e9dfe8": version "8.3.0-preview.1" - resolved "git+https://github.com/scality/Arsenal#00033b55fc22d8e58ab38211842fc0ccf41b9766" + resolved "git+https://github.com/scality/Arsenal#df3d2aa5cf021ba2974798b46375586a69e9dfe8" dependencies: "@aws-sdk/client-kms" "^3.901.0" "@aws-sdk/client-s3" "^3.901.0" From bd529bb2a85d6cf719b43203487b65a09eb7a481 Mon Sep 17 00:00:00 2001 From: Maha Benzekri Date: Wed, 14 Jan 2026 18:32:45 +0100 Subject: [PATCH 2/3] tests updates post gcpService unused functions removal As these functions are only used in GCP tests, we decided to remove them from gcpService. This commit updates the tests accordingly using the new send command directly and enabling us to drop the wrapper functions. Issue: CLDSRV-826 --- .../raw-node/test/GCP/bucket/get.js | 30 +++++++++++ .../raw-node/test/GCP/bucket/getVersioning.js | 41 ++++++++++----- .../raw-node/test/GCP/bucket/putVersioning.js | 51 +++++++++++-------- .../raw-node/test/GCP/object/completeMpu.js | 14 +++++ .../raw-node/test/GCP/object/deleteMpu.js | 14 +++++ .../raw-node/test/GCP/object/upload.js | 14 +++++ 6 files changed, 130 insertions(+), 34 deletions(-) diff --git a/tests/functional/raw-node/test/GCP/bucket/get.js b/tests/functional/raw-node/test/GCP/bucket/get.js index dbd52c3cfb..0eb0c3a9be 100644 --- a/tests/functional/raw-node/test/GCP/bucket/get.js +++ b/tests/functional/raw-node/test/GCP/bucket/get.js @@ -1,6 +1,7 @@ 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 { makeGcpRequest } = require('../../../utils/makeRequest'); const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils'); @@ -15,6 +16,35 @@ const bigSize = listingHardLimit + 1; const config = getRealAwsConfig(credentialOne); const gcpClient = new GCP(config); +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); + }); +}; + +gcpClient.getBucket = (params, callback) => + gcpClient.headBucket(params, (err, res) => { + if (err) { + 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(null, res); + }); + function populateBucket(createdObjects, callback) { process.stdout.write( `Putting ${createdObjects.length} objects into bucket\n`); diff --git a/tests/functional/raw-node/test/GCP/bucket/getVersioning.js b/tests/functional/raw-node/test/GCP/bucket/getVersioning.js index 3a3bc7c9e2..2327da7e78 100644 --- a/tests/functional/raw-node/test/GCP/bucket/getVersioning.js +++ b/tests/functional/raw-node/test/GCP/bucket/getVersioning.js @@ -1,6 +1,7 @@ const assert = require('assert'); const async = require('async'); const arsenal = require('arsenal'); +const { GetBucketVersioningCommand } = require('@aws-sdk/client-s3'); const { GCP } = arsenal.storage.data.external.GCP; const { makeGcpRequest } = require('../../../utils/makeRequest'); const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils'); @@ -67,14 +68,19 @@ describe('GCP: GET Bucket Versioning', () => { return next(err); }), next => { - gcpClient.getBucketVersioning({ + const command = new GetBucketVersioningCommand({ Bucket: this.test.bucketName, - }, (err, res) => { - assert.equal(err, null, - `Expected success, but got err ${err}`); - assert.deepStrictEqual(res.Status, verEnabledObj); - return next(); }); + return gcpClient.send(command) + .then(res => { + assert.deepStrictEqual(res.Status, verEnabledObj); + return next(); + }) + .catch(err => { + assert.equal(err, null, + `Expected success, but got err ${err}`); + return next(err); + }); }, ], err => done(err)); }); @@ -93,14 +99,21 @@ describe('GCP: GET Bucket Versioning', () => { } 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(); - }), + next => { + const command = new GetBucketVersioningCommand({ + Bucket: this.test.bucketName, + }); + return gcpClient.send(command) + .then(res => { + assert.deepStrictEqual(res.Status, verDisabledObj); + return next(); + }) + .catch(err => { + assert.equal(err, null, + `Expected success, but got err ${err}`); + return next(err); + }); + }, ], err => done(err)); }); }); diff --git a/tests/functional/raw-node/test/GCP/bucket/putVersioning.js b/tests/functional/raw-node/test/GCP/bucket/putVersioning.js index c8151e21c4..88349a8b4d 100644 --- a/tests/functional/raw-node/test/GCP/bucket/putVersioning.js +++ b/tests/functional/raw-node/test/GCP/bucket/putVersioning.js @@ -1,6 +1,7 @@ const assert = require('assert'); const async = require('async'); const arsenal = require('arsenal'); +const { PutBucketVersioningCommand } = require('@aws-sdk/client-s3'); const xml2js = require('xml2js'); const { GCP } = arsenal.storage.data.external.GCP; const { makeGcpRequest } = require('../../../utils/makeRequest'); @@ -56,16 +57,21 @@ describe('GCP: PUT Bucket Versioning', () => { 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 => { + const command = new PutBucketVersioningCommand({ + Bucket: this.test.bucketName, + VersioningConfiguration: { + Status: 'Enabled', + }, + }); + return gcpClient.send(command) + .then(() => next()) + .catch(err => { + assert.equal(err, null, + `Expected success, but got err ${err}`); + return next(err); + }); + }, next => makeGcpRequest({ method: 'GET', bucket: this.test.bucketName, @@ -83,16 +89,21 @@ describe('GCP: PUT Bucket Versioning', () => { 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 => { + const command = new PutBucketVersioningCommand({ + Bucket: this.test.bucketName, + VersioningConfiguration: { + Status: 'Suspended', + }, + }); + return gcpClient.send(command) + .then(() => next()) + .catch(err => { + assert.equal(err, null, + `Expected success, but got err ${err}`); + return next(err); + }); + }, next => makeGcpRequest({ method: 'GET', bucket: this.test.bucketName, diff --git a/tests/functional/raw-node/test/GCP/object/completeMpu.js b/tests/functional/raw-node/test/GCP/object/completeMpu.js index 900093f353..79d7837e59 100644 --- a/tests/functional/raw-node/test/GCP/object/completeMpu.js +++ b/tests/functional/raw-node/test/GCP/object/completeMpu.js @@ -1,6 +1,7 @@ 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, @@ -100,6 +101,19 @@ describe('GCP: Complete MPU', function testSuite() { before(done => { config = getRealAwsConfig(credentialOne); gcpClient = new GCP(config); + 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(bucketNames, (bucket, next) => gcpRequestRetry({ method: 'PUT', diff --git a/tests/functional/raw-node/test/GCP/object/deleteMpu.js b/tests/functional/raw-node/test/GCP/object/deleteMpu.js index 0d923a9a45..77b33336c5 100644 --- a/tests/functional/raw-node/test/GCP/object/deleteMpu.js +++ b/tests/functional/raw-node/test/GCP/object/deleteMpu.js @@ -1,6 +1,7 @@ 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 } = require('../../../utils/gcpUtils'); @@ -40,6 +41,19 @@ describe('GCP: Abort MPU', function testSuite() { before(done => { config = getRealAwsConfig(credentialOne); gcpClient = new GCP(config); + 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(bucketNames, (bucket, next) => gcpRequestRetry({ method: 'PUT', diff --git a/tests/functional/raw-node/test/GCP/object/upload.js b/tests/functional/raw-node/test/GCP/object/upload.js index 88005b8862..9165cf1277 100644 --- a/tests/functional/raw-node/test/GCP/object/upload.js +++ b/tests/functional/raw-node/test/GCP/object/upload.js @@ -1,6 +1,7 @@ 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 } = require('../../../utils/gcpUtils'); @@ -32,6 +33,19 @@ describe('GCP: Upload Object', function testSuite() { before(done => { config = getRealAwsConfig(credentialOne); gcpClient = new GCP(config); + 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(bucketNames, (bucket, next) => gcpRequestRetry({ method: 'PUT', From b5f9d211137574c61571878b60a2f33c9326709a Mon Sep 17 00:00:00 2001 From: Maha Benzekri Date: Tue, 20 Jan 2026 09:14:49 +0100 Subject: [PATCH 3/3] update arsenal tag --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index a92991ae95..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#df3d2aa5cf021ba2974798b46375586a69e9dfe8", + "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/yarn.lock b/yarn.lock index 2bdeac944a..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#df3d2aa5cf021ba2974798b46375586a69e9dfe8": +"arsenal@git+https://github.com/scality/Arsenal#aed443f02efebeb3f5c2e74786baadb5c19eaded": version "8.3.0-preview.1" - resolved "git+https://github.com/scality/Arsenal#df3d2aa5cf021ba2974798b46375586a69e9dfe8" + resolved "git+https://github.com/scality/Arsenal#aed443f02efebeb3f5c2e74786baadb5c19eaded" dependencies: "@aws-sdk/client-kms" "^3.901.0" "@aws-sdk/client-s3" "^3.901.0"