@@ -12,6 +12,41 @@ const describeFn = process.env.AWS_ON_AIR
1212 ? describe . skip
1313 : describe ;
1414
15+ async function cleanBucket ( bucketUtils , s3 , Bucket ) {
16+ try {
17+ await bucketUtils . empty ( Bucket ) ;
18+ await s3 . deleteBucket ( { Bucket } ) . promise ( ) ;
19+ } catch ( err ) {
20+ process . stdout
21+ . write ( `Error emptying and deleting bucket: ${ err } \n` ) ;
22+ // ignore the error and continue
23+ }
24+ }
25+
26+ async function cleanAllBuckets ( bucketUtils , s3 ) {
27+ let listingLoop = true ;
28+ let ContinuationToken ;
29+
30+ process . stdout . write ( 'Try cleaning all buckets before running the test\n' ) ;
31+
32+ while ( listingLoop ) {
33+ const list = await s3 . listBuckets ( { ContinuationToken } ) . promise ( ) ;
34+ ContinuationToken = list . ContinuationToken ;
35+ listingLoop = ! ! ContinuationToken ;
36+
37+ if ( list . Buckets . length ) {
38+ process . stdout
39+ . write ( `Found ${ list . Buckets . length } buckets to clean:\n${
40+ JSON . stringify ( list . Buckets , null , 2 ) } \n`) ;
41+ }
42+
43+ // clean sequentially to avoid overloading
44+ for ( const bucket of list . Buckets ) {
45+ await cleanBucket ( bucketUtils , s3 , bucket . Name ) ;
46+ }
47+ }
48+ }
49+
1550describeFn ( 'GET Service - AWS.S3.listBuckets' , function getService ( ) {
1651 this . timeout ( 600000 ) ;
1752
@@ -98,22 +133,28 @@ describeFn('GET Service - AWS.S3.listBuckets', function getService() {
98133 s3 = bucketUtil . s3 ;
99134 s3 . config . update ( { maxRetries : 0 } ) ;
100135 s3 . config . update ( { httpOptions : { timeout : 0 } } ) ;
101- async . eachLimit ( createdBuckets , 10 , ( bucketName , moveOn ) => {
102- s3 . createBucket ( { Bucket : bucketName } , err => {
103- if ( bucketName . endsWith ( '000' ) ) {
104- // log to keep ci alive
105- process . stdout
106- . write ( `creating bucket: ${ bucketName } \n` ) ;
107- }
108- moveOn ( err ) ;
109- } ) ;
110- } ,
111- err => {
112- if ( err ) {
113- process . stdout . write ( `err creating buckets: ${ err } ` ) ;
114- }
115- done ( err ) ;
116- } ) ;
136+ async . series ( [
137+ // if other tests failed to delete their buckets, listings might be wrong
138+ // try toclean all buckets before running the test
139+ next => cleanAllBuckets ( bucketUtil , s3 ) . then ( next ) . catch ( next ) ,
140+ next =>
141+ async . eachLimit ( createdBuckets , 10 , ( bucketName , moveOn ) => {
142+ s3 . createBucket ( { Bucket : bucketName } , err => {
143+ if ( bucketName . endsWith ( '000' ) ) {
144+ // log to keep ci alive
145+ process . stdout
146+ . write ( `creating bucket: ${ bucketName } \n` ) ;
147+ }
148+ moveOn ( err ) ;
149+ } ) ;
150+ } ,
151+ err => {
152+ if ( err ) {
153+ process . stdout . write ( `err creating buckets: ${ err } ` ) ;
154+ }
155+ next ( err ) ;
156+ } )
157+ ] , done ) ;
117158 } ) ;
118159
119160 after ( done => {
0 commit comments