11const assert = require ( 'assert' ) ;
22const async = require ( 'async' ) ;
33const arsenal = require ( 'arsenal' ) ;
4+ const {
5+ ListObjectsCommand,
6+ HeadBucketCommand,
7+ CreateBucketCommand,
8+ DeleteBucketCommand,
9+ PutObjectCommand,
10+ DeleteObjectCommand,
11+ } = require ( '@aws-sdk/client-s3' ) ;
412const { GCP } = arsenal . storage . data . external . GCP ;
5- const { makeGcpRequest } = require ( '../../../utils/makeRequest' ) ;
6- const { gcpRequestRetry, genUniqID } = require ( '../../../utils/gcpUtils' ) ;
13+ const { genUniqID, gcpRetry } = require ( '../../../utils/gcpUtils' ) ;
714const { getRealAwsConfig } =
815 require ( '../../../../aws-node-sdk/test/support/awsConfig' ) ;
916const { listingHardLimit } = require ( '../../../../../../constants' ) ;
@@ -18,95 +25,98 @@ const gcpClient = new GCP(config);
1825function populateBucket ( createdObjects , callback ) {
1926 process . stdout . write (
2027 `Putting ${ createdObjects . length } objects into bucket\n` ) ;
21- async . mapLimit ( createdObjects , 10 ,
22- ( object , moveOn ) => {
23- makeGcpRequest ( {
24- method : 'PUT' ,
25- bucket : bucketName ,
26- objectKey : object ,
27- authCredentials : config . credentials ,
28- } , err => {
29- moveOn ( err ) ;
30- } ) ;
31- } , err => {
32- if ( err ) {
33- process . stdout
34- . write ( `err putting objects ${ err . code } \n` ) ;
28+ async . mapLimit (
29+ createdObjects ,
30+ 10 ,
31+ ( object , moveOn ) => {
32+ const command = new PutObjectCommand ( {
33+ Bucket : bucketName ,
34+ Key : object ,
35+ } ) ;
36+ gcpClient . send ( command )
37+ . then ( ( ) => moveOn ( ) )
38+ . catch ( err => moveOn ( err ) ) ;
39+ } ,
40+ err => {
41+ if ( err ) {
42+ process . stdout
43+ . write ( `err putting objects ${ err } \n` ) ;
44+ }
45+ return callback ( err ) ;
3546 }
36- return callback ( err ) ;
37- } ) ;
47+ ) ;
3848}
3949
4050function removeObjects ( createdObjects , callback ) {
4151 process . stdout . write (
4252 `Deleting ${ createdObjects . length } objects from bucket\n` ) ;
43- async . mapLimit ( createdObjects , 10 ,
44- ( object , moveOn ) => {
45- makeGcpRequest ( {
46- method : 'DELETE' ,
47- bucket : bucketName ,
48- objectKey : object ,
49- authCredentials : config . credentials ,
50- } , err => moveOn ( err ) ) ;
51- } , err => {
52- if ( err ) {
53- process . stdout
54- . write ( `err deleting objects ${ err . code } \n` ) ;
53+ async . mapLimit (
54+ createdObjects ,
55+ 10 ,
56+ ( object , moveOn ) => {
57+ const command = new DeleteObjectCommand ( {
58+ Bucket : bucketName ,
59+ Key : object ,
60+ } ) ;
61+ gcpClient . send ( command )
62+ . then ( ( ) => moveOn ( ) )
63+ . catch ( err => moveOn ( err ) ) ;
64+ } ,
65+ err => {
66+ if ( err ) {
67+ process . stdout
68+ . write ( `err deleting objects ${ err } \n` ) ;
69+ }
70+ return callback ( err ) ;
5571 }
56- return callback ( err ) ;
57- } ) ;
72+ ) ;
5873}
5974
6075describe ( 'GCP: GET Bucket' , function testSuite ( ) {
6176 this . timeout ( 180000 ) ;
6277
63- before ( done => {
64- gcpRequestRetry ( {
65- method : 'PUT' ,
66- bucket : bucketName ,
67- authCredentials : config . credentials ,
68- } , 0 , err => {
69- if ( err ) {
70- process . stdout . write ( `err in creating bucket ${ err } \n` ) ;
71- }
72- return done ( err ) ;
73- } ) ;
78+ before ( async ( ) => {
79+ await gcpRetry (
80+ gcpClient ,
81+ ( ) => new CreateBucketCommand ( {
82+ Bucket : bucketName ,
83+ } ) ,
84+ ) ;
7485 } ) ;
7586
76- after ( done => {
77- gcpRequestRetry ( {
78- method : 'DELETE' ,
79- bucket : bucketName ,
80- authCredentials : config . credentials ,
81- } , 0 , err => {
82- if ( err ) {
83- process . stdout . write ( `err in deleting bucket ${ err } \n` ) ;
84- }
85- return done ( err ) ;
86- } ) ;
87+ after ( async ( ) => {
88+ await gcpRetry (
89+ gcpClient ,
90+ ( ) => new DeleteBucketCommand ( {
91+ Bucket : bucketName ,
92+ } ) ,
93+ ) ;
8794 } ) ;
8895
8996 describe ( 'without existing bucket' , ( ) => {
90- it ( 'should return 404 and NoSuchBucket' , done => {
97+ it ( 'should return 404 and NoSuchBucket' , async ( ) => {
9198 const badBucketName = `nonexistingbucket-${ genUniqID ( ) } ` ;
92- gcpClient . getBucket ( {
93- Bucket : badBucketName ,
94- } , err => {
99+ try {
100+ const command = new HeadBucketCommand ( {
101+ Bucket : badBucketName ,
102+ } ) ;
103+ await gcpClient . send ( command ) ;
104+ assert . fail ( 'Expected NoSuchBucket error, but got success' ) ;
105+ } catch ( err ) {
95106 assert ( err ) ;
96- assert . strictEqual ( err . $metadata ?. httpStatusCode , 404 ) ;
97- assert . strictEqual ( err . name , 'NoSuchBucket' ) ;
98- return done ( ) ;
99- } ) ;
107+ const statusCode = err . $metadata && err . $metadata . httpStatusCode ;
108+ assert . strictEqual ( statusCode , 404 ) ;
109+ const errorName = err . name === 'NotFound' ? 'NoSuchBucket' : err . name ;
110+ assert . strictEqual ( errorName , 'NoSuchBucket' ) ;
111+ }
100112 } ) ;
101113
102- it ( 'should return 200' , done => {
103- gcpClient . listObjects ( {
114+ it ( 'should return 200' , async ( ) => {
115+ const command = new ListObjectsCommand ( {
104116 Bucket : bucketName ,
105- } , ( err , res ) => {
106- assert . equal ( err , null , `Expected success, but got ${ err } ` ) ;
107- assert . strictEqual ( res . $metadata ?. httpStatusCode , 200 ) ;
108- return done ( ) ;
109117 } ) ;
118+ const res = await gcpClient . send ( command ) ;
119+ assert . strictEqual ( res . $metadata ?. httpStatusCode , 200 ) ;
110120 } ) ;
111121 } ) ;
112122
@@ -119,27 +129,22 @@ describe('GCP: GET Bucket', function testSuite() {
119129
120130 after ( done => removeObjects ( createdObjects , done ) ) ;
121131
122- it ( `should list all ${ smallSize } created objects` , done => {
123- gcpClient . listObjects ( {
132+ it ( `should list all ${ smallSize } created objects` , async ( ) => {
133+ const command = new ListObjectsCommand ( {
124134 Bucket : bucketName ,
125- } , ( err , res ) => {
126- assert . equal ( err , null , `Expected success, but got ${ err } ` ) ;
127- assert . strictEqual ( res . Contents . length , smallSize ) ;
128- return done ( ) ;
129135 } ) ;
136+ const res = await gcpClient . send ( command ) ;
137+ assert . strictEqual ( res . Contents . length , smallSize ) ;
130138 } ) ;
131139
132140 describe ( 'with MaxKeys at 10' , ( ) => {
133- it ( 'should list MaxKeys number of objects' , done => {
134- gcpClient . listObjects ( {
141+ it ( 'should list MaxKeys number of objects' , async ( ) => {
142+ const command = new ListObjectsCommand ( {
135143 Bucket : bucketName ,
136144 MaxKeys : 10 ,
137- } , ( err , res ) => {
138- assert . equal ( err , null ,
139- `Expected success, but got ${ err } ` ) ;
140- assert . strictEqual ( res . Contents . length , 10 ) ;
141- return done ( ) ;
142145 } ) ;
146+ const res = await gcpClient . send ( command ) ;
147+ assert . strictEqual ( res . Contents . length , 10 ) ;
143148 } ) ;
144149 } ) ;
145150 } ) ;
@@ -152,15 +157,12 @@ describe('GCP: GET Bucket', function testSuite() {
152157
153158 after ( done => removeObjects ( createdObjects , done ) ) ;
154159
155- it ( 'should list at max 1000 of objects created' , done => {
156- gcpClient . listObjects ( {
160+ it ( 'should list at max 1000 of objects created' , async ( ) => {
161+ const command = new ListObjectsCommand ( {
157162 Bucket : bucketName ,
158- } , ( err , res ) => {
159- assert . equal ( err , null , `Expected success, but got ${ err } ` ) ;
160- assert . strictEqual ( res . Contents . length ,
161- listingHardLimit ) ;
162- return done ( ) ;
163163 } ) ;
164+ const res = await gcpClient . send ( command ) ;
165+ assert . strictEqual ( res . Contents . length , listingHardLimit ) ;
164166 } ) ;
165167
166168 describe ( 'with MaxKeys at 1001' , ( ) => {
@@ -175,17 +177,13 @@ describe('GCP: GET Bucket', function testSuite() {
175177 //
176178 // Actual behavior: it returns a list longer than 1000 objects when
177179 // max-keys is greater than 1000
178- it . skip ( 'should list at max 1000, ignoring MaxKeys' , done => {
179- gcpClient . listObjects ( {
180+ it . skip ( 'should list at max 1000, ignoring MaxKeys' , async ( ) => {
181+ const command = new ListObjectsCommand ( {
180182 Bucket : bucketName ,
181183 MaxKeys : 1001 ,
182- } , ( err , res ) => {
183- assert . equal ( err , null ,
184- `Expected success, but got ${ err } ` ) ;
185- assert . strictEqual ( res . Contents . length ,
186- listingHardLimit ) ;
187- return done ( ) ;
188184 } ) ;
185+ const res = await gcpClient . send ( command ) ;
186+ assert . strictEqual ( res . Contents . length , listingHardLimit ) ;
189187 } ) ;
190188 } ) ;
191189 } ) ;
0 commit comments