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