11const  assert  =  require ( 'assert' ) ; 
2- const  {  S3  }  =  require ( 'aws-sdk' ) ; 
32const  async  =  require ( 'async' ) ; 
43
4+ const  { 
5+     S3Client, 
6+     CreateBucketCommand, 
7+     DeleteBucketCommand, 
8+     PutBucketVersioningCommand, 
9+     PutObjectCommand, 
10+     ListObjectsCommand, 
11+     DeleteObjectCommand, 
12+     ListObjectVersionsCommand, 
13+     DeleteObjectsCommand, 
14+ }  =  require ( '@aws-sdk/client-s3' ) ; 
15+ 
516const  getConfig  =  require ( '../support/config' ) ; 
617
718const  bucket  =  `versioning-bucket-${ Date . now ( ) }  ` ; 
@@ -22,31 +33,30 @@ function comp(v1, v2) {
2233    return  0 ; 
2334} 
2435
25- 
2636describe ( 'aws-node-sdk test bucket versioning listing' ,  function  testSuite ( )  { 
2737    this . timeout ( 600000 ) ; 
2838    let  s3 ; 
2939    const  masterVersions  =  [ ] ; 
3040    const  allVersions  =  [ ] ; 
3141
32-     // setup test 
33-     before ( done  =>  { 
42+     before ( async  ( )  =>  { 
3443        const  config  =  getConfig ( 'default' ,  {  signatureVersion : 'v4'  } ) ; 
35-         s3  =  new  S3 ( config ) ; 
36-         s3 . createBucket ( {  Bucket : bucket  } ,   done ) ; 
44+         s3  =  new  S3Client ( config ) ; 
45+         await   s3 . send ( new   CreateBucketCommand ( {  Bucket : bucket  } ) ) ; 
3746    } ) ; 
3847
39-     // delete bucket after testing 
40-     after ( done  =>  s3 . deleteBucket ( {  Bucket : bucket  } ,  done ) ) ; 
48+     after ( async  ( )  =>  { 
49+         await  s3 . send ( new  DeleteBucketCommand ( {  Bucket : bucket  } ) ) ; 
50+     } ) ; 
4151
42-     it ( 'should accept valid versioning configuration' ,  done  =>  { 
52+     it ( 'should accept valid versioning configuration' ,  async   ( )  =>  { 
4353        const  params  =  { 
4454            Bucket : bucket , 
4555            VersioningConfiguration : { 
4656                Status : 'Enabled' , 
4757            } , 
4858        } ; 
49-         s3 . putBucketVersioning ( params ,   done ) ; 
59+         await   s3 . send ( new   PutBucketVersioningCommand ( params ) ) ; 
5060    } ) ; 
5161
5262    it ( 'should create a bunch of objects and their versions' ,  done  =>  { 
@@ -58,72 +68,106 @@ describe('aws-node-sdk test bucket versioning listing', function testSuite() {
5868            masterVersions . push ( key ) ; 
5969            const  params  =  {  Bucket : bucket ,  Key : key ,  Body : value  } ; 
6070            async . timesLimit ( versioncount ,  10 ,  ( j ,  next2 )  => 
61-                 s3 . putObject ( params ,  ( err ,  data )  =>  { 
62-                     assert . strictEqual ( err ,  null ) ; 
63-                     assert ( data . VersionId ,  'invalid versionId' ) ; 
64-                     allVersions . push ( {  Key : key ,  VersionId : data . VersionId  } ) ; 
65-                     next2 ( ) ; 
66-                 } ) ,  next1 ) ; 
71+                 s3 . send ( new  PutObjectCommand ( params ) ) 
72+                     . then ( data  =>  { 
73+                         assert ( data . VersionId ,  'invalid versionId' ) ; 
74+                         allVersions . push ( {  Key : key ,  VersionId : data . VersionId  } ) ; 
75+                         next2 ( ) ; 
76+                     } ) 
77+                     . catch ( next2 ) , 
78+                 next1 ) ; 
6779        } ,  err  =>  { 
6880            assert . strictEqual ( err ,  null ) ; 
6981            assert . strictEqual ( allVersions . length ,  keycount  *  versioncount ) ; 
7082            done ( ) ; 
7183        } ) ; 
7284    } ) ; 
7385
74-     it ( 'should list all latest versions' ,  done  =>  { 
86+     it ( 'should list all latest versions' ,  async   ( )  =>  { 
7587        const  params  =  {  Bucket : bucket ,  MaxKeys : 1000 ,  Delimiter : '/'  } ; 
76-         s3 . listObjects ( params ,  ( err ,  data )  =>  { 
77-             const  keys  =  data . Contents . map ( entry  =>  entry . Key ) ; 
78-             assert . deepStrictEqual ( keys . sort ( ) ,  masterVersions . sort ( ) , 
79-                     'not same keys' ) ; 
80-             done ( ) ; 
81-         } ) ; 
88+         const  data  =  await  s3 . send ( new  ListObjectsCommand ( params ) ) ; 
89+         const  keys  =  data . Contents . map ( entry  =>  entry . Key ) ; 
90+         assert . deepStrictEqual ( keys . sort ( ) ,  masterVersions . sort ( ) , 
91+                 'not same keys' ) ; 
8292    } ) ; 
8393
8494    it ( 'should create some delete markers' ,  done  =>  { 
8595        const  keycount  =  15 ; 
8696        async . times ( keycount ,  ( i ,  next )  =>  { 
8797            const  key  =  masterVersions [ i ] ; 
8898            const  params  =  {  Bucket : bucket ,  Key : key  } ; 
89-             s3 . deleteObject ( params ,  ( err ,  data )  =>  { 
90-                 assert . strictEqual ( err ,  null ) ; 
91-                 assert ( data . VersionId ,  'invalid versionId' ) ; 
92-                 allVersions . push ( {  Key : key ,  VersionId : data . VersionId  } ) ; 
93-                 next ( ) ; 
94-             } ) ; 
99+             s3 . send ( new  DeleteObjectCommand ( params ) ) 
100+                 . then ( data  =>  { 
101+                     assert ( data . VersionId ,  'invalid versionId' ) ; 
102+                     allVersions . push ( {  Key : key ,  VersionId : data . VersionId  } ) ; 
103+                     next ( ) ; 
104+                 } ) 
105+                 . catch ( next ) ; 
95106        } ,  done ) ; 
96107    } ) ; 
97108
98-     it ( 'should list all latest versions' ,  done  =>  { 
109+     it ( 'should list all latest versions' ,  async   ( )  =>  { 
99110        const  params  =  {  Bucket : bucket ,  MaxKeys : 1000 ,  Delimiter : '/'  } ; 
100-         s3 . listObjects ( params ,  ( err ,  data )  =>  { 
101-             const  keys  =  data . Contents . map ( entry  =>  entry . Key ) ; 
102-             assert . deepStrictEqual ( keys . sort ( ) ,  masterVersions . sort ( ) . slice ( 15 ) , 
103-                     'not same keys' ) ; 
104-             done ( ) ; 
105-         } ) ; 
111+         const  data  =  await  s3 . send ( new  ListObjectsCommand ( params ) ) ; 
112+         const  keys  =  data . Contents . map ( entry  =>  entry . Key ) ; 
113+         assert . deepStrictEqual ( keys . sort ( ) ,  masterVersions . sort ( ) . slice ( 15 ) , 
114+                 'not same keys' ) ; 
106115    } ) ; 
107116
108117    it ( 'should list all versions' ,  done  =>  { 
109118        const  versions  =  [ ] ; 
110119        const  params  =  {  Bucket : bucket ,  MaxKeys : 15 ,  Delimiter : '/'  } ; 
111-         async . retry ( 100 ,  done  =>  s3 . listObjectVersions ( params ,  ( err ,  data )  =>  { 
112-             data . Versions . forEach ( version  =>  versions . push ( { 
113-                 Key : version . Key ,  VersionId : version . VersionId  } ) ) ; 
114-             data . DeleteMarkers . forEach ( version  =>  versions . push ( { 
115-                 Key : version . Key ,  VersionId : version . VersionId  } ) ) ; 
116-             if  ( data . IsTruncated )  { 
117-                 params . KeyMarker  =  data . NextKeyMarker ; 
118-                 params . VersionIdMarker  =  data . NextVersionIdMarker ; 
119-                 return  done ( 'not done yet' ) ; 
120+     
121+         async . retry ( 100 ,  done  =>  { 
122+             s3 . send ( new  ListObjectVersionsCommand ( params ) ) 
123+                 . then ( data  =>  { 
124+                     if  ( data . Versions )  { 
125+                         data . Versions . forEach ( version  =>  versions . push ( { 
126+                             Key : version . Key ,  VersionId : version . VersionId  } ) ) ; 
127+                     } 
128+                     if  ( data . DeleteMarkers )  { 
129+                         data . DeleteMarkers . forEach ( version  =>  versions . push ( { 
130+                             Key : version . Key ,  VersionId : version . VersionId  } ) ) ; 
131+                     } 
132+                     if  ( data . IsTruncated )  { 
133+                         params . KeyMarker  =  data . NextKeyMarker ; 
134+                         params . VersionIdMarker  =  data . NextVersionIdMarker ; 
135+                         return  done ( 'not done yet' ) ; 
136+                     } 
137+                     return  done ( ) ; 
138+                 } ) 
139+                 . catch ( err  =>  { 
140+                     done ( err ) ; 
141+                 } ) ; 
142+         } ,  ( err )  =>  { 
143+             if  ( err )  { 
144+                 return  done ( err ) ; 
120145            } 
121-             return  done ( ) ; 
122-         } ) ,  ( )  =>  { 
146+ 
123147            assert . deepStrictEqual ( versions . sort ( comp ) ,  allVersions . sort ( comp ) , 
124148                    'not same versions' ) ; 
125-             const  params  =  {  Bucket : bucket ,  Delete : {  Objects : allVersions  }  } ; 
126-             s3 . deleteObjects ( params ,  done ) ; 
149+             
150+             const  objectsToDelete  =  versions 
151+                 . filter ( v  =>  v  &&  v . Key  &&  v . VersionId ) 
152+                 . map ( v  =>  ( { 
153+                     Key : String ( v . Key ) , 
154+                     VersionId : String ( v . VersionId ) , 
155+                 } ) ) ; 
156+ 
157+             const  deleteParams  =  {  
158+                 Bucket : bucket ,  
159+                 Delete : {  
160+                     Objects : objectsToDelete , 
161+                 }  
162+             } ;             
163+             s3 . send ( new  DeleteObjectsCommand ( deleteParams ) ) 
164+                 . then ( ( )  =>  { 
165+                     done ( ) ; 
166+                 } ) 
167+                 . catch ( err  =>  { 
168+                     done ( err ) ; 
169+                 } ) ; 
127170        } ) ; 
128171    } ) ; 
129172} ) ; 
173+ 
0 commit comments