Skip to content

Commit a680a09

Browse files
committed
rest of versionning tests migration
Issue: CLDSRV-724
1 parent a2be54f commit a680a09

File tree

3 files changed

+332
-252
lines changed

3 files changed

+332
-252
lines changed

tests/functional/aws-node-sdk/test/versioning/legacyNullVersionCompat.js

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
const assert = require('assert');
22
const async = require('async');
3+
const {
4+
CreateBucketCommand,
5+
PutObjectCommand,
6+
PutBucketVersioningCommand,
7+
PutObjectAclCommand,
8+
GetObjectAclCommand,
9+
DeleteObjectCommand,
10+
ListObjectVersionsCommand,
11+
PutObjectTaggingCommand,
12+
GetObjectTaggingCommand,
13+
DeleteObjectTaggingCommand,
14+
DeleteBucketCommand,
15+
} = require('@aws-sdk/client-s3');
316

417
const BucketUtility = require('../../lib/utility/bucket-util');
518

@@ -34,60 +47,60 @@ describeSkipIfNotExplicitlyEnabled('legacy null version compatibility tests', ()
3447
// Cloudserver endpoint that is configured with null version
3548
// compatibility mode enabled.
3649
beforeEach(done => async.series([
37-
next => s3Compat.createBucket({
50+
next => s3Compat.send(new CreateBucketCommand({
3851
Bucket: bucket,
39-
}, next),
40-
next => s3Compat.putObject({
52+
}), next),
53+
next => s3Compat.send(new PutObjectCommand({
4154
Bucket: bucket,
4255
Key: 'obj',
4356
Body: 'nullbody',
44-
}, next),
45-
next => s3Compat.putBucketVersioning({
57+
}), next),
58+
next => s3Compat.send(new PutBucketVersioningCommand({
4659
Bucket: bucket,
4760
VersioningConfiguration: versioningEnabled,
48-
}, next),
49-
next => s3Compat.putObject({
61+
}), next),
62+
next => s3Compat.send(new PutObjectCommand({
5063
Bucket: bucket,
5164
Key: 'obj',
5265
Body: 'versionedbody',
53-
}, next),
66+
}), next),
5467
], done));
5568

5669
afterEach(done => {
5770
removeAllVersions({ Bucket: bucket }, err => {
5871
if (err) {
5972
return done(err);
6073
}
61-
return s3Compat.deleteBucket({ Bucket: bucket }, done);
74+
return s3Compat.send(new DeleteBucketCommand({ Bucket: bucket }), done);
6275
});
6376
});
6477

6578
it('updating ACL of legacy null version with non-compat cloudserver', done => {
6679
async.series([
67-
next => s3.putObjectAcl({
80+
next => s3.send(new PutObjectAclCommand({
6881
Bucket: bucket,
6982
Key: 'obj',
7083
VersionId: 'null',
7184
ACL: 'public-read',
72-
}, next),
73-
next => s3.getObjectAcl({
85+
}), next),
86+
next => s3.send(new GetObjectAclCommand({
7487
Bucket: bucket,
7588
Key: 'obj',
7689
VersionId: 'null',
77-
}, (err, acl) => {
90+
}), (err, acl) => {
7891
assert.ifError(err);
7992
// check that we fetched the updated null version
8093
assert.strictEqual(acl.Grants.length, 2);
8194
next();
8295
}),
83-
next => s3.deleteObject({
96+
next => s3.send(new DeleteObjectCommand({
8497
Bucket: bucket,
8598
Key: 'obj',
8699
VersionId: 'null',
87-
}, next),
88-
next => s3.listObjectVersions({
100+
}), next),
101+
next => s3.send(new ListObjectVersionsCommand({
89102
Bucket: bucket,
90-
}, (err, listing) => {
103+
}), (err, listing) => {
91104
assert.ifError(err);
92105
// check that the null version has been correctly deleted
93106
assert(listing.Versions.every(version => version.VersionId !== 'null'));
@@ -104,48 +117,48 @@ describeSkipIfNotExplicitlyEnabled('legacy null version compatibility tests', ()
104117
},
105118
];
106119
async.series([
107-
next => s3.putObjectTagging({
120+
next => s3.send(new PutObjectTaggingCommand({
108121
Bucket: bucket,
109122
Key: 'obj',
110123
VersionId: 'null',
111124
Tagging: {
112125
TagSet: tagSet,
113126
},
114-
}, next),
115-
next => s3.getObjectTagging({
127+
}), next),
128+
next => s3.send(new GetObjectTaggingCommand({
116129
Bucket: bucket,
117130
Key: 'obj',
118131
VersionId: 'null',
119-
}, (err, tagging) => {
132+
}), (err, tagging) => {
120133
assert.ifError(err);
121134
assert.deepStrictEqual(tagging.TagSet, tagSet);
122135
next();
123136
}),
124-
next => s3.deleteObjectTagging({
137+
next => s3.send(new DeleteObjectTaggingCommand({
125138
Bucket: bucket,
126139
Key: 'obj',
127140
VersionId: 'null',
128-
}, err => {
141+
}), err => {
129142
assert.ifError(err);
130143
next();
131144
}),
132-
next => s3.getObjectTagging({
145+
next => s3.send(new GetObjectTaggingCommand({
133146
Bucket: bucket,
134147
Key: 'obj',
135148
VersionId: 'null',
136-
}, (err, tagging) => {
149+
}), (err, tagging) => {
137150
assert.ifError(err);
138151
assert.deepStrictEqual(tagging.TagSet, []);
139152
next();
140153
}),
141-
next => s3.deleteObject({
154+
next => s3.send(new DeleteObjectCommand({
142155
Bucket: bucket,
143156
Key: 'obj',
144157
VersionId: 'null',
145-
}, next),
146-
next => s3.listObjectVersions({
158+
}), next),
159+
next => s3.send(new ListObjectVersionsCommand({
147160
Bucket: bucket,
148-
}, (err, listing) => {
161+
}), (err, listing) => {
149162
assert.ifError(err);
150163
// check that the null version has been correctly deleted
151164
assert(listing.Versions.every(version => version.VersionId !== 'null'));
Lines changed: 93 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
11
const assert = require('assert');
2-
const { S3 } = require('aws-sdk');
32
const 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+
516
const getConfig = require('../support/config');
617

718
const bucket = `versioning-bucket-${Date.now()}`;
@@ -22,31 +33,30 @@ function comp(v1, v2) {
2233
return 0;
2334
}
2435

25-
2636
describe('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

Comments
 (0)