11const assert = require ( 'assert' ) ;
2- const async = require ( 'async' ) ;
2+ const {
3+ CreateBucketCommand,
4+ PutObjectCommand,
5+ PutObjectTaggingCommand,
6+ DeleteObjectTaggingCommand,
7+ PutObjectAclCommand,
8+ PutBucketAclCommand,
9+ GetObjectTaggingCommand,
10+ } = require ( '@aws-sdk/client-s3' ) ;
311
412const withV4 = require ( '../support/withV4' ) ;
513const BucketUtility = require ( '../../lib/utility/bucket-util' ) ;
@@ -21,8 +29,8 @@ const taggingConfig = { TagSet: [
2129
2230function _checkError ( err , code , statusCode ) {
2331 assert ( err , 'Expected error but found none' ) ;
24- assert . strictEqual ( err . code , code ) ;
25- assert . strictEqual ( err . statusCode , statusCode ) ;
32+ assert . strictEqual ( err . name , code ) ;
33+ assert . strictEqual ( err . $metadata . httpStatusCode , statusCode ) ;
2634}
2735
2836describe ( 'DELETE object taggings' , ( ) => {
@@ -32,112 +40,133 @@ describe('DELETE object taggings', () => {
3240 const otherAccountBucketUtility = new BucketUtility ( 'lisa' , { } ) ;
3341 const otherAccountS3 = otherAccountBucketUtility . s3 ;
3442
35- beforeEach ( done => s3 . createBucket ( { Bucket : bucketName } , err => {
36- if ( err ) {
37- return done ( err ) ;
38- }
39- return s3 . putObject ( { Bucket : bucketName , Key : objectName } , done ) ;
40- } ) ) ;
43+ beforeEach ( async ( ) => {
44+ await s3 . send ( new CreateBucketCommand ( { Bucket : bucketName } ) ) ;
45+ await s3 . send ( new PutObjectCommand ( { Bucket : bucketName , Key : objectName } ) ) ;
46+ } ) ;
4147
42- afterEach ( ( ) => {
48+ afterEach ( async ( ) => {
4349 process . stdout . write ( 'Emptying bucket' ) ;
44- return bucketUtil . empty ( bucketName )
45- . then ( ( ) => {
46- process . stdout . write ( 'Deleting bucket' ) ;
47- return bucketUtil . deleteOne ( bucketName ) ;
48- } )
49- . catch ( err => {
50- process . stdout . write ( 'Error in afterEach' ) ;
51- throw err ;
52- } ) ;
50+ await bucketUtil . empty ( bucketName ) ;
51+ process . stdout . write ( 'Deleting bucket' ) ;
52+ await bucketUtil . deleteOne ( bucketName ) ;
5353 } ) ;
5454
55- it ( 'should delete tag set' , done => {
56- s3 . putObjectTagging ( {
55+ it ( 'should delete tag set' , async ( ) => {
56+ await s3 . send ( new PutObjectTaggingCommand ( {
5757 Bucket : bucketName ,
5858 Key : objectName ,
5959 Tagging : taggingConfig ,
60- } , err => {
61- assert . ifError ( err , `putObjectTagging error: ${ err } ` ) ;
62- s3 . deleteObjectTagging ( { Bucket : bucketName , Key : objectName } ,
63- ( err , data ) => {
64- assert . ifError ( err , `Found unexpected err ${ err } ` ) ;
65- assert . strictEqual ( Object . keys ( data ) . length , 0 ) ;
66- done ( ) ;
67- } ) ;
68- } ) ;
60+ } ) ) ;
61+ await s3 . send ( new DeleteObjectTaggingCommand ( {
62+ Bucket : bucketName ,
63+ Key : objectName
64+ } ) ) ;
65+ const dataGet = await s3 . send ( new GetObjectTaggingCommand ( {
66+ Bucket : bucketName ,
67+ Key : objectName ,
68+ } ) ) ;
69+ assert . strictEqual ( dataGet . TagSet . length , 0 ) ;
6970 } ) ;
7071
71- it ( 'should delete a non-existing tag set' , done => {
72- s3 . deleteObjectTagging ( { Bucket : bucketName , Key : objectName } ,
73- ( err , data ) => {
74- assert . ifError ( err , `Found unexpected err ${ err } ` ) ;
75- assert . strictEqual ( Object . keys ( data ) . length , 0 ) ;
76- done ( ) ;
77- } ) ;
72+ it ( 'should delete a non-existing tag set' , async ( ) => {
73+ await s3 . send ( new DeleteObjectTaggingCommand ( {
74+ Bucket : bucketName ,
75+ Key : objectName
76+ } ) ) ;
77+ const dataGet = await s3 . send ( new GetObjectTaggingCommand ( {
78+ Bucket : bucketName ,
79+ Key : objectName
80+ } ) ) ;
81+ assert . strictEqual ( dataGet . TagSet . length , 0 ) ;
7882 } ) ;
7983
8084 it ( 'should return NoSuchKey deleting tag set to a non-existing object' ,
81- done => {
82- s3 . deleteObjectTagging ( {
83- Bucket : bucketName ,
84- Key : 'nonexisting' ,
85- } , err => {
85+ async ( ) => {
86+ try {
87+ await s3 . send ( new DeleteObjectTaggingCommand ( {
88+ Bucket : bucketName ,
89+ Key : 'nonexisting' ,
90+ } ) ) ;
91+ assert . fail ( 'Expected NoSuchKey error' ) ;
92+ } catch ( err ) {
8693 _checkError ( err , 'NoSuchKey' , 404 ) ;
87- done ( ) ;
88- } ) ;
94+ }
8995 } ) ;
96+
9097 it ( 'should return 403 AccessDenied deleting tag set with another ' +
91- 'account' , done => {
92- otherAccountS3 . deleteObjectTagging ( { Bucket : bucketName , Key :
93- objectName } , err => {
98+ 'account' , async ( ) => {
99+ try {
100+ await otherAccountS3 . send ( new DeleteObjectTaggingCommand ( {
101+ Bucket : bucketName ,
102+ Key : objectName
103+ } ) ) ;
104+ assert . fail ( 'Expected AccessDenied error' ) ;
105+ } catch ( err ) {
94106 _checkError ( err , 'AccessDenied' , 403 ) ;
95- done ( ) ;
96- } ) ;
107+ }
97108 } ) ;
98109
99110 it ( 'should return 403 AccessDenied deleting tag set with a different ' +
100- 'account to an object with ACL "public-read-write"' ,
101- done => {
102- s3 . putObjectAcl ( { Bucket : bucketName , Key : objectName ,
103- ACL : 'public-read-write' } , err => {
104- if ( err ) {
105- return done ( err ) ;
106- }
107- return otherAccountS3 . deleteObjectTagging ( { Bucket : bucketName ,
108- Key : objectName } , err => {
109- _checkError ( err , 'AccessDenied' , 403 ) ;
110- done ( ) ;
111- } ) ;
112- } ) ;
111+ 'account to an object with ACL "public-read-write"' ,
112+ async ( ) => {
113+ await s3 . send ( new PutObjectAclCommand ( {
114+ Bucket : bucketName ,
115+ Key : objectName ,
116+ ACL : 'public-read-write'
117+ } ) ) ;
118+
119+ try {
120+ await otherAccountS3 . send ( new DeleteObjectTaggingCommand ( {
121+ Bucket : bucketName ,
122+ Key : objectName
123+ } ) ) ;
124+ assert . fail ( 'Expected AccessDenied error' ) ;
125+ } catch ( err ) {
126+ _checkError ( err , 'AccessDenied' , 403 ) ;
127+ }
113128 } ) ;
114129
115- it ( 'should return 403 AccessDenied deleting tag set to an object' +
116- ' in a bucket created with a different account' ,
117- done => {
118- async . waterfall ( [
119- next => s3 . putBucketAcl ( { Bucket : bucketName , ACL :
120- 'public-read-write' } , err => next ( err ) ) ,
121- next => otherAccountS3 . putObject ( { Bucket : bucketName , Key :
122- objectNameAcl } , err => next ( err ) ) ,
123- next => otherAccountS3 . deleteObjectTagging ( { Bucket : bucketName ,
124- Key : objectNameAcl } , err => next ( err ) ) ,
125- ] , err => {
130+ it ( 'should return 403 AccessDenied deleting tag set to an object ' +
131+ ' in a bucket created with a different account' ,
132+ async ( ) => {
133+ await s3 . send ( new PutBucketAclCommand ( {
134+ Bucket : bucketName ,
135+ ACL : 'public-read-write'
136+ } ) ) ;
137+
138+ await otherAccountS3 . send ( new PutObjectCommand ( {
139+ Bucket : bucketName ,
140+ Key : objectNameAcl
141+ } ) ) ;
142+
143+ try {
144+ await otherAccountS3 . send ( new DeleteObjectTaggingCommand ( {
145+ Bucket : bucketName ,
146+ Key : objectNameAcl
147+ } ) ) ;
148+ assert . fail ( 'Expected AccessDenied error' ) ;
149+ } catch ( err ) {
126150 _checkError ( err , 'AccessDenied' , 403 ) ;
127- done ( ) ;
128- } ) ;
151+ }
129152 } ) ;
130153
131- it ( 'should delete tag set to an object in a bucket created with same ' +
132- 'account even though object put by other account' , done => {
133- async . waterfall ( [
134- next => s3 . putBucketAcl ( { Bucket : bucketName , ACL :
135- 'public-read-write' } , err => next ( err ) ) ,
136- next => otherAccountS3 . putObject ( { Bucket : bucketName , Key :
137- objectNameAcl } , err => next ( err ) ) ,
138- next => s3 . deleteObjectTagging ( { Bucket : bucketName ,
139- Key : objectNameAcl } , err => next ( err ) ) ,
140- ] , done ) ;
154+ it ( 'should delete tag set to an object in a bucket created with ' +
155+ 'same account even though object put by other account' , async ( ) => {
156+ await s3 . send ( new PutBucketAclCommand ( {
157+ Bucket : bucketName ,
158+ ACL : 'public-read-write'
159+ } ) ) ;
160+
161+ await otherAccountS3 . send ( new PutObjectCommand ( {
162+ Bucket : bucketName ,
163+ Key : objectNameAcl
164+ } ) ) ;
165+
166+ await s3 . send ( new DeleteObjectTaggingCommand ( {
167+ Bucket : bucketName ,
168+ Key : objectNameAcl
169+ } ) ) ;
141170 } ) ;
142171 } ) ;
143172} ) ;
0 commit comments