Compare commits

...

4 Commits

Author SHA1 Message Date
alexandre merle c3550dd09a cache issue ? 2021-01-25 20:34:26 +01:00
alexandre merle f9230dfbe2 update arsenal 2021-01-25 20:34:26 +01:00
alexandre merle 26018ec875 upgrade aws sdk 2021-01-25 16:27:36 +01:00
alexandre merle f18321e0d8 bugfix: send continue after auth checks 2021-01-25 16:27:36 +01:00
63 changed files with 497 additions and 527 deletions

View File

@ -84,7 +84,7 @@ models:
command: node -v command: node -v
- ShellCommand: &yarn-install - ShellCommand: &yarn-install
name: install modules name: install modules
command: yarn install --frozen-lockfile command: yarn cache clean && yarn install --frozen-lockfile
haltOnFailure: true haltOnFailure: true
- Upload: &upload-artifacts - Upload: &upload-artifacts
source: /artifacts source: /artifacts

View File

@ -166,12 +166,13 @@ const api = {
} }
returnTagCount = checkedResults; returnTagCount = checkedResults;
} }
// issue 100 Continue to the client
writeContinue(request, response);
if (apiMethod === 'objectPut' || apiMethod === 'objectPutPart') { if (apiMethod === 'objectPut' || apiMethod === 'objectPutPart') {
request._response = response;
return this[apiMethod](userInfo, request, streamingV4Params, return this[apiMethod](userInfo, request, streamingV4Params,
log, callback, authorizationResults); log, callback, authorizationResults);
} }
// issue 100 Continue to the client
writeContinue(request, response);
const MAX_POST_LENGTH = request.method.toUpperCase() === 'POST' ? const MAX_POST_LENGTH = request.method.toUpperCase() === 'POST' ?
1024 * 1024 : 1024 * 1024 / 2; // 1 MB or 512 KB 1024 * 1024 : 1024 * 1024 / 2; // 1 MB or 512 KB
const post = []; const post = [];

View File

@ -12,6 +12,7 @@ const { validateHeaders } = require('./apiUtils/object/objectLockHelpers');
const kms = require('../kms/wrapper'); const kms = require('../kms/wrapper');
const checkObjectEncryption = require('./apiUtils/object/checkEncryption'); const checkObjectEncryption = require('./apiUtils/object/checkEncryption');
const writeContinue = require('../utilities/writeContinue');
const versionIdUtils = versioning.VersionID; const versionIdUtils = versioning.VersionID;
/** /**
@ -99,6 +100,7 @@ function objectPut(authInfo, request, streamingV4Params, log, callback) {
if (objectLockValidationError) { if (objectLockValidationError) {
return next(objectLockValidationError); return next(objectLockValidationError);
} }
writeContinue(request, request._response);
return createAndStoreObject(bucketName, return createAndStoreObject(bucketName,
bucket, objectKey, objMD, authInfo, canonicalID, cipherBundle, bucket, objectKey, objMD, authInfo, canonicalID, cipherBundle,
request, false, streamingV4Params, log, next); request, false, streamingV4Params, log, next);

View File

@ -17,7 +17,7 @@ const { config } = require('../Config');
const multipleBackendGateway = require('../data/multipleBackendGateway'); const multipleBackendGateway = require('../data/multipleBackendGateway');
const locationConstraintCheck const locationConstraintCheck
= require('./apiUtils/object/locationConstraintCheck'); = require('./apiUtils/object/locationConstraintCheck');
const writeContinue = require('../utilities/writeContinue');
const skipError = new Error('skip'); const skipError = new Error('skip');
// We pad the partNumbers so that the parts will be sorted in numerical order. // We pad the partNumbers so that the parts will be sorted in numerical order.
@ -114,6 +114,7 @@ function objectPutPart(authInfo, request, streamingV4Params, log,
log.debug('access denied for user on bucket', { requestType }); log.debug('access denied for user on bucket', { requestType });
return next(errors.AccessDenied, destinationBucket); return next(errors.AccessDenied, destinationBucket);
} }
writeContinue(request, request._response);
return next(null, destinationBucket); return next(null, destinationBucket);
}, },
// Get bucket server-side encryption, if it exists. // Get bucket server-side encryption, if it exists.
@ -200,6 +201,7 @@ function objectPutPart(authInfo, request, streamingV4Params, log,
// eslint-disable-next-line no-param-reassign // eslint-disable-next-line no-param-reassign
objectLocationConstraint = backendInfoObj.controllingLC; objectLocationConstraint = backendInfoObj.controllingLC;
} }
return multipleBackendGateway.uploadPart(request, return multipleBackendGateway.uploadPart(request,
streamingV4Params, null, size, objectLocationConstraint, streamingV4Params, null, size, objectLocationConstraint,
objectKey, uploadId, partNumber, bucketName, log, objectKey, uploadId, partNumber, bucketName, log,

View File

@ -20,9 +20,9 @@
"homepage": "https://github.com/scality/S3#readme", "homepage": "https://github.com/scality/S3#readme",
"dependencies": { "dependencies": {
"@hapi/joi": "^17.1.0", "@hapi/joi": "^17.1.0",
"arsenal": "github:scality/Arsenal#26a00ba", "arsenal": "github:scality/Arsenal#w/7.9/bugfix/S3C-2201-econnreset-rest-client-keep-alive",
"async": "~2.5.0", "async": "~2.5.0",
"aws-sdk": "2.363.0", "aws-sdk": "2.831.0",
"azure-storage": "^2.1.0", "azure-storage": "^2.1.0",
"bucketclient": "scality/bucketclient#6d2d5a4", "bucketclient": "scality/bucketclient#6d2d5a4",
"commander": "^2.9.0", "commander": "^2.9.0",
@ -51,8 +51,8 @@
"istanbul-api": "1.0.0-alpha.13", "istanbul-api": "1.0.0-alpha.13",
"lolex": "^1.4.0", "lolex": "^1.4.0",
"mocha": "^2.3.4", "mocha": "^2.3.4",
"mocha-multi-reporters": "^1.1.7",
"mocha-junit-reporter": "^1.23.1", "mocha-junit-reporter": "^1.23.1",
"mocha-multi-reporters": "^1.1.7",
"node-mocks-http": "1.5.2", "node-mocks-http": "1.5.2",
"s3blaster": "scality/s3blaster#7a836b6", "s3blaster": "scality/s3blaster#7a836b6",
"tv4": "^1.2.7" "tv4": "^1.2.7"

View File

@ -1,4 +1,4 @@
const Promise = require('bluebird'); const bluebird = require('bluebird');
const { S3 } = require('aws-sdk'); const { S3 } = require('aws-sdk');
const projectFixture = require('../fixtures/project'); const projectFixture = require('../fixtures/project');
const getConfig = require('../../test/support/config'); const getConfig = require('../../test/support/config');
@ -7,20 +7,24 @@ class BucketUtility {
constructor(profile = 'default', config = {}) { constructor(profile = 'default', config = {}) {
const s3Config = getConfig(profile, config); const s3Config = getConfig(profile, config);
this.s3 = Promise.promisifyAll(new S3(s3Config), { suffix: 'Promise' }); this.s3 = new S3(s3Config);
this.s3.config.setPromisesDependency(bluebird);
this.s3.config.update({
maxRetries: 0,
});
} }
createOne(bucketName) { createOne(bucketName) {
return this.s3 return this.s3
.createBucketPromise({ Bucket: bucketName }) .createBucket({ Bucket: bucketName }).promise()
.then(() => bucketName); .then(() => bucketName);
} }
createOneWithLock(bucketName) { createOneWithLock(bucketName) {
return this.s3.createBucketPromise({ return this.s3.createBucket({
Bucket: bucketName, Bucket: bucketName,
ObjectLockEnabledForBucket: true, ObjectLockEnabledForBucket: true,
}) }).promise()
.then(() => bucketName); .then(() => bucketName);
} }
@ -48,7 +52,7 @@ class BucketUtility {
deleteOne(bucketName) { deleteOne(bucketName) {
return this.s3 return this.s3
.deleteBucketPromise({ Bucket: bucketName }); .deleteBucket({ Bucket: bucketName }).promise();
} }
deleteMany(bucketNames) { deleteMany(bucketNames) {
@ -71,39 +75,39 @@ class BucketUtility {
}; };
return this.s3 return this.s3
.listObjectVersionsPromise(param) .listObjectVersions(param).promise()
.then(data => .then(data =>
Promise.all( Promise.all(
data.Versions data.Versions
.filter(object => !object.Key.endsWith('/')) .filter(object => !object.Key.endsWith('/'))
// remove all objects // remove all objects
.map(object => .map(object =>
this.s3.deleteObjectPromise({ this.s3.deleteObject({
Bucket: bucketName, Bucket: bucketName,
Key: object.Key, Key: object.Key,
VersionId: object.VersionId, VersionId: object.VersionId,
}) }).promise()
.then(() => object) .then(() => object)
) )
.concat(data.Versions .concat(data.Versions
.filter(object => object.Key.endsWith('/')) .filter(object => object.Key.endsWith('/'))
// remove all directories // remove all directories
.map(object => .map(object =>
this.s3.deleteObjectPromise({ this.s3.deleteObject({
Bucket: bucketName, Bucket: bucketName,
Key: object.Key, Key: object.Key,
VersionId: object.VersionId, VersionId: object.VersionId,
}) }).promise()
.then(() => object) .then(() => object)
) )
) )
.concat(data.DeleteMarkers .concat(data.DeleteMarkers
.map(object => .map(object =>
this.s3.deleteObjectPromise({ this.s3.deleteObject({
Bucket: bucketName, Bucket: bucketName,
Key: object.Key, Key: object.Key,
VersionId: object.VersionId, VersionId: object.VersionId,
}) }).promise()
.then(() => object))) .then(() => object)))
) )
); );
@ -111,7 +115,7 @@ class BucketUtility {
getOwner() { getOwner() {
return this.s3 return this.s3
.listBucketsPromise() .listBuckets().promise()
.then(data => data.Owner); .then(data => data.Owner);
} }
} }

View File

@ -37,7 +37,7 @@ describe('DELETE bucket cors', () => {
}); });
describe('with existing bucket', () => { describe('with existing bucket', () => {
beforeEach(() => s3.createBucketPromise({ Bucket: bucketName })); beforeEach(() => s3.createBucket({ Bucket: bucketName }).promise());
afterEach(() => bucketUtil.deleteOne(bucketName)); afterEach(() => bucketUtil.deleteOne(bucketName));
describe('without existing cors configuration', () => { describe('without existing cors configuration', () => {

View File

@ -25,7 +25,7 @@ describe('DELETE bucket website', () => {
}); });
describe('with existing bucket', () => { describe('with existing bucket', () => {
beforeEach(() => s3.createBucketPromise({ Bucket: bucketName })); beforeEach(() => s3.createBucket({ Bucket: bucketName }).promise());
afterEach(() => bucketUtil.deleteOne(bucketName)); afterEach(() => bucketUtil.deleteOne(bucketName));
describe('without existing configuration', () => { describe('without existing configuration', () => {

View File

@ -348,9 +348,9 @@ describe('GET Bucket - AWS.S3.listObjects', () => {
Promise Promise
.mapSeries(test.objectPutParams(Bucket), .mapSeries(test.objectPutParams(Bucket),
param => s3.putObjectPromise(param)) param => s3.putObject(param).promise())
.then(() => .then(() =>
s3.listObjectsPromise(test.listObjectParams(Bucket))) s3.listObjects(test.listObjectParams(Bucket)).promise())
.then(data => { .then(data => {
const isValidResponse = const isValidResponse =
tv4.validate(data, bucketSchema); tv4.validate(data, bucketSchema);
@ -373,9 +373,9 @@ describe('GET Bucket - AWS.S3.listObjects', () => {
Promise Promise
.mapSeries(test.objectPutParams(Bucket), .mapSeries(test.objectPutParams(Bucket),
param => s3.putObjectPromise(param)) param => s3.putObject(param).promise())
.then(() => .then(() =>
s3.listObjectsV2Promise(test.listObjectParams(Bucket))) s3.listObjectsV2(test.listObjectParams(Bucket)).promise())
.then(data => { .then(data => {
const isValidResponse = const isValidResponse =
tv4.validate(data, bucketSchemaV2); tv4.validate(data, bucketSchemaV2);
@ -398,8 +398,8 @@ describe('GET Bucket - AWS.S3.listObjects', () => {
const objects = [{ Bucket, Key: k }]; const objects = [{ Bucket, Key: k }];
Promise Promise
.mapSeries(objects, param => s3.putObjectPromise(param)) .mapSeries(objects, param => s3.putObject(param).promise())
.then(() => s3.listObjectsPromise({ Bucket, Prefix: k })) .then(() => s3.listObjects({ Bucket, Prefix: k }).promise())
.then(data => { .then(data => {
const isValidResponse = tv4.validate(data, const isValidResponse = tv4.validate(data,
bucketSchema); bucketSchema);
@ -422,8 +422,8 @@ describe('GET Bucket - AWS.S3.listObjects', () => {
const objects = [{ Bucket, Key: k }]; const objects = [{ Bucket, Key: k }];
Promise Promise
.mapSeries(objects, param => s3.putObjectPromise(param)) .mapSeries(objects, param => s3.putObject(param).promise())
.then(() => s3.listObjectsPromise({ Bucket, Marker: k })) .then(() => s3.listObjects({ Bucket, Marker: k }).promise())
.then(data => { .then(data => {
const isValidResponse = tv4.validate(data, const isValidResponse = tv4.validate(data,
bucketSchema); bucketSchema);
@ -446,9 +446,9 @@ describe('GET Bucket - AWS.S3.listObjects', () => {
const objects = [{ Bucket, Key: k }, { Bucket, Key: 'zzz' }]; const objects = [{ Bucket, Key: k }, { Bucket, Key: 'zzz' }];
Promise Promise
.mapSeries(objects, param => s3.putObjectPromise(param)) .mapSeries(objects, param => s3.putObject(param).promise())
.then(() => s3.listObjectsPromise({ Bucket, MaxKeys: 1, .then(() => s3.listObjects({ Bucket, MaxKeys: 1,
Delimiter: 'foo' })) Delimiter: 'foo' }).promise())
.then(data => { .then(data => {
const isValidResponse = tv4.validate(data, const isValidResponse = tv4.validate(data,
bucketSchema); bucketSchema);
@ -471,9 +471,9 @@ describe('GET Bucket - AWS.S3.listObjects', () => {
const objects = [{ Bucket, Key: k }]; const objects = [{ Bucket, Key: k }];
Promise Promise
.mapSeries(objects, param => s3.putObjectPromise(param)) .mapSeries(objects, param => s3.putObject(param).promise())
.then(() => s3.listObjectsV2Promise( .then(() => s3.listObjectsV2(
{ Bucket, StartAfter: k })) { Bucket, StartAfter: k }).promise())
.then(data => { .then(data => {
const isValidResponse = tv4.validate(data, const isValidResponse = tv4.validate(data,
bucketSchemaV2); bucketSchemaV2);
@ -497,9 +497,9 @@ describe('GET Bucket - AWS.S3.listObjects', () => {
const objects = [{ Bucket, Key: k }]; const objects = [{ Bucket, Key: k }];
Promise Promise
.mapSeries(objects, param => s3.putObjectPromise(param)) .mapSeries(objects, param => s3.putObject(param).promise())
.then(() => s3.listObjectsV2Promise( .then(() => s3.listObjectsV2(
{ Bucket, ContinuationToken: generateToken(k) })) { Bucket, ContinuationToken: generateToken(k) }).promise())
.then(data => { .then(data => {
const isValidResponse = tv4.validate(data, const isValidResponse = tv4.validate(data,
bucketSchemaV2); bucketSchemaV2);
@ -523,9 +523,9 @@ describe('GET Bucket - AWS.S3.listObjects', () => {
const Bucket = bucketName; const Bucket = bucketName;
const objects = [{ Bucket, Key: k }, { Bucket, Key: 'zzz' }]; const objects = [{ Bucket, Key: k }, { Bucket, Key: 'zzz' }];
Promise Promise
.mapSeries(objects, param => s3.putObjectPromise(param)) .mapSeries(objects, param => s3.putObject(param).promise())
.then(() => s3.listObjectsV2Promise({ Bucket, MaxKeys: 1, .then(() => s3.listObjectsV2({ Bucket, MaxKeys: 1,
Delimiter: 'foo' })) Delimiter: 'foo' }).promise())
.then(data => { .then(data => {
const isValidResponse = tv4.validate(data, const isValidResponse = tv4.validate(data,
bucketSchemaV2); bucketSchemaV2);

View File

@ -26,11 +26,11 @@ describe('GET bucket cors', () => {
MaxAgeSeconds: 3000 }, MaxAgeSeconds: 3000 },
] }; ] };
before(() => before(() =>
s3.createBucketPromise({ Bucket: bucketName }) s3.createBucket({ Bucket: bucketName }).promise()
.then(() => s3.putBucketCorsPromise({ .then(() => s3.putBucketCors({
Bucket: bucketName, Bucket: bucketName,
CORSConfiguration: sampleCors, CORSConfiguration: sampleCors,
}))); }).promise()));
it('should return cors configuration successfully', done => { it('should return cors configuration successfully', done => {
s3.getBucketCors({ Bucket: bucketName }, (err, data) => { s3.getBucketCors({ Bucket: bucketName }, (err, data) => {
@ -51,11 +51,11 @@ describe('GET bucket cors', () => {
AllowedHeaders: [testValue] }, AllowedHeaders: [testValue] },
] }; ] };
before(() => before(() =>
s3.createBucketPromise({ Bucket: bucketName }) s3.createBucket({ Bucket: bucketName }).promise()
.then(() => s3.putBucketCorsPromise({ .then(() => s3.putBucketCors({
Bucket: bucketName, Bucket: bucketName,
CORSConfiguration: sampleCors, CORSConfiguration: sampleCors,
}))); }).promise()));
it('should be preserved when putting / getting cors resource', it('should be preserved when putting / getting cors resource',
done => { done => {
@ -75,11 +75,11 @@ describe('GET bucket cors', () => {
AllowedOrigins: ['http://www.example.com'] }, AllowedOrigins: ['http://www.example.com'] },
] }; ] };
before(() => before(() =>
s3.createBucketPromise({ Bucket: bucketName }) s3.createBucket({ Bucket: bucketName }).promise()
.then(() => s3.putBucketCorsPromise({ .then(() => s3.putBucketCors({
Bucket: bucketName, Bucket: bucketName,
CORSConfiguration: sampleCors, CORSConfiguration: sampleCors,
}))); }).promise()));
it('should be preserved when retrieving cors resource', it('should be preserved when retrieving cors resource',
done => { done => {

View File

@ -23,13 +23,13 @@ describeSkipAWS('GET bucket location ', () => {
return; return;
} }
describe(`with location: ${location}`, () => { describe(`with location: ${location}`, () => {
before(done => s3.createBucketPromise( before(() => s3.createBucket(
{ {
Bucket: bucketName, Bucket: bucketName,
CreateBucketConfiguration: { CreateBucketConfiguration: {
LocationConstraint: location, LocationConstraint: location,
}, },
}, done)); }).promise());
after(() => bucketUtil.deleteOne(bucketName)); after(() => bucketUtil.deleteOne(bucketName));
it(`should return location configuration: ${location} ` + it(`should return location configuration: ${location} ` +
@ -48,13 +48,13 @@ describeSkipAWS('GET bucket location ', () => {
}); });
describe('with location us-east-1', () => { describe('with location us-east-1', () => {
before(done => s3.createBucketPromise( before(() => s3.createBucket(
{ {
Bucket: bucketName, Bucket: bucketName,
CreateBucketConfiguration: { CreateBucketConfiguration: {
LocationConstraint: 'us-east-1', LocationConstraint: 'us-east-1',
}, },
}, done)); }).promise());
afterEach(() => bucketUtil.deleteOne(bucketName)); afterEach(() => bucketUtil.deleteOne(bucketName));
it('should return empty location', it('should return empty location',
done => { done => {
@ -105,13 +105,13 @@ describeSkipAWS('GET bucket location ', () => {
}); });
describe('with location configuration', () => { describe('with location configuration', () => {
before(done => s3.createBucketPromise( before(() => s3.createBucket(
{ {
Bucket: bucketName, Bucket: bucketName,
CreateBucketConfiguration: { CreateBucketConfiguration: {
LocationConstraint: 'us-east-1', LocationConstraint: 'us-east-1',
}, },
}, done)); }).promise());
after(() => bucketUtil.deleteOne(bucketName)); after(() => bucketUtil.deleteOne(bucketName));
it('should return AccessDenied if user is not bucket owner', it('should return AccessDenied if user is not bucket owner',

View File

@ -31,11 +31,11 @@ describe('GET bucket website', () => {
describe('with existing bucket configuration', () => { describe('with existing bucket configuration', () => {
before(() => before(() =>
s3.createBucketPromise({ Bucket: bucketName }) s3.createBucket({ Bucket: bucketName }).promise()
.then(() => s3.putBucketWebsitePromise({ .then(() => s3.putBucketWebsite({
Bucket: bucketName, Bucket: bucketName,
WebsiteConfiguration: config, WebsiteConfiguration: config,
}))); }).promise()));
it('should return bucket website xml successfully', done => { it('should return bucket website xml successfully', done => {
s3.getBucketWebsite({ Bucket: bucketName }, (err, data) => { s3.getBucketWebsite({ Bucket: bucketName }, (err, data) => {

View File

@ -258,7 +258,7 @@ describe('PUT Bucket - AWS.S3.createBucket', () => {
() => { () => {
after(() => bucketUtil.deleteOne(bucketName)); after(() => bucketUtil.deleteOne(bucketName));
it(`should create bucket with location: ${location}`, done => { it(`should create bucket with location: ${location}`, done => {
bucketUtil.s3.createBucketPromise( bucketUtil.s3.createBucket(
{ {
Bucket: bucketName, Bucket: bucketName,
CreateBucketConfiguration: { CreateBucketConfiguration: {
@ -271,7 +271,7 @@ describe('PUT Bucket - AWS.S3.createBucket', () => {
describe('bucket creation with invalid location', () => { describe('bucket creation with invalid location', () => {
it('should return errors InvalidLocationConstraint', done => { it('should return errors InvalidLocationConstraint', done => {
bucketUtil.s3.createBucketPromise( bucketUtil.s3.createBucket(
{ {
Bucket: bucketName, Bucket: bucketName,
CreateBucketConfiguration: { CreateBucketConfiguration: {

View File

@ -1,3 +1,4 @@
--recursive --recursive
--timeout 40000 --timeout 40000
--ui tdd --ui tdd
--bail

View File

@ -149,11 +149,11 @@ function testSuite() {
process.stdout.write('Creating bucket'); process.stdout.write('Creating bucket');
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket, return s3.createBucket({ Bucket: bucket,
CreateBucketConfiguration: { CreateBucketConfiguration: {
LocationConstraint: awsLocation, LocationConstraint: awsLocation,
}, },
}) }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;

View File

@ -38,39 +38,39 @@ describeSkipIfNotMultiple('Multiple backend delete', () => {
process.stdout.write('Putting object to mem\n'); process.stdout.write('Putting object to mem\n');
const params = { Bucket: bucket, Key: memObject, Body: body, const params = { Bucket: bucket, Key: memObject, Body: body,
Metadata: { 'scal-location-constraint': memLocation } }; Metadata: { 'scal-location-constraint': memLocation } };
return s3.putObjectPromise(params); return s3.putObject(params).promise();
}) })
.then(() => { .then(() => {
process.stdout.write('Putting object to file\n'); process.stdout.write('Putting object to file\n');
const params = { Bucket: bucket, Key: fileObject, Body: body, const params = { Bucket: bucket, Key: fileObject, Body: body,
Metadata: { 'scal-location-constraint': fileLocation } }; Metadata: { 'scal-location-constraint': fileLocation } };
return s3.putObjectPromise(params); return s3.putObject(params).promise();
}) })
.then(() => { .then(() => {
process.stdout.write('Putting object to AWS\n'); process.stdout.write('Putting object to AWS\n');
const params = { Bucket: bucket, Key: awsObject, Body: body, const params = { Bucket: bucket, Key: awsObject, Body: body,
Metadata: { 'scal-location-constraint': awsLocation } }; Metadata: { 'scal-location-constraint': awsLocation } };
return s3.putObjectPromise(params); return s3.putObject(params).promise();
}) })
.then(() => { .then(() => {
process.stdout.write('Putting 0-byte object to AWS\n'); process.stdout.write('Putting 0-byte object to AWS\n');
const params = { Bucket: bucket, Key: emptyObject, const params = { Bucket: bucket, Key: emptyObject,
Metadata: { 'scal-location-constraint': awsLocation } }; Metadata: { 'scal-location-constraint': awsLocation } };
return s3.putObjectPromise(params); return s3.putObject(params).promise();
}) })
.then(() => { .then(() => {
process.stdout.write('Putting large object to AWS\n'); process.stdout.write('Putting large object to AWS\n');
const params = { Bucket: bucket, Key: bigObject, const params = { Bucket: bucket, Key: bigObject,
Body: bigBody, Body: bigBody,
Metadata: { 'scal-location-constraint': awsLocation } }; Metadata: { 'scal-location-constraint': awsLocation } };
return s3.putObjectPromise(params); return s3.putObject(params).promise();
}) })
.then(() => { .then(() => {
process.stdout.write('Putting object to AWS\n'); process.stdout.write('Putting object to AWS\n');
const params = { Bucket: bucket, Key: mismatchObject, const params = { Bucket: bucket, Key: mismatchObject,
Body: body, Metadata: Body: body, Metadata:
{ 'scal-location-constraint': awsLocationMismatch } }; { 'scal-location-constraint': awsLocationMismatch } };
return s3.putObjectPromise(params); return s3.putObject(params).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write(`Error putting objects: ${err}\n`); process.stdout.write(`Error putting objects: ${err}\n`);

View File

@ -119,7 +119,7 @@ describeSkipIfNotMultiple('AWS backend delete object w. versioning: ' +
process.stdout.write('Creating bucket\n'); process.stdout.write('Creating bucket\n');
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket }) return s3.createBucket({ Bucket: bucket }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;
@ -493,7 +493,7 @@ describeSkipIfNotMultiple('AWS backend delete object w. versioning: ' +
process.stdout.write('Creating bucket\n'); process.stdout.write('Creating bucket\n');
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise(createBucketParams) return s3.createBucket(createBucketParams).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;

View File

@ -36,7 +36,7 @@ function testSuite() {
process.stdout.write('Creating bucket'); process.stdout.write('Creating bucket');
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: azureContainerName }) return s3.createBucket({ Bucket: azureContainerName }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;

View File

@ -34,7 +34,7 @@ describe('Multiple backend get object', function testSuite() {
process.stdout.write('Creating bucket'); process.stdout.write('Creating bucket');
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket }) return s3.createBucket({ Bucket: bucket }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;
@ -183,46 +183,46 @@ describe('Multiple backend get object', function testSuite() {
'(mem/file/AWS)', () => { '(mem/file/AWS)', () => {
before(() => { before(() => {
process.stdout.write('Putting object to mem\n'); process.stdout.write('Putting object to mem\n');
return s3.putObjectPromise({ Bucket: bucket, Key: memObject, return s3.putObject({ Bucket: bucket, Key: memObject,
Body: body, Body: body,
Metadata: { 'scal-location-constraint': memLocation } }) Metadata: { 'scal-location-constraint': memLocation } }).promise()
.then(() => { .then(() => {
process.stdout.write('Putting object to file\n'); process.stdout.write('Putting object to file\n');
return s3.putObjectPromise({ Bucket: bucket, return s3.putObject({ Bucket: bucket,
Key: fileObject, Key: fileObject,
Body: body, Body: body,
Metadata: Metadata:
{ 'scal-location-constraint': fileLocation }, { 'scal-location-constraint': fileLocation },
}); }).promise();
}) })
.then(() => { .then(() => {
process.stdout.write('Putting object to AWS\n'); process.stdout.write('Putting object to AWS\n');
return s3.putObjectPromise({ Bucket: bucket, Key: awsObject, return s3.putObject({ Bucket: bucket, Key: awsObject,
Body: body, Body: body,
Metadata: { Metadata: {
'scal-location-constraint': awsLocation } }); 'scal-location-constraint': awsLocation } }).promise();
}) })
.then(() => { .then(() => {
process.stdout.write('Putting 0-byte object to mem\n'); process.stdout.write('Putting 0-byte object to mem\n');
return s3.putObjectPromise({ Bucket: bucket, return s3.putObject({ Bucket: bucket,
Key: emptyObject, Key: emptyObject,
Metadata: Metadata:
{ 'scal-location-constraint': memLocation }, { 'scal-location-constraint': memLocation },
}); }).promise();
}) })
.then(() => { .then(() => {
process.stdout.write('Putting 0-byte object to AWS\n'); process.stdout.write('Putting 0-byte object to AWS\n');
return s3.putObjectPromise({ Bucket: bucket, return s3.putObject({ Bucket: bucket,
Key: emptyAwsObject, Key: emptyAwsObject,
Metadata: { Metadata: {
'scal-location-constraint': awsLocation } }); 'scal-location-constraint': awsLocation } }).promise();
}) })
.then(() => { .then(() => {
process.stdout.write('Putting large object to AWS\n'); process.stdout.write('Putting large object to AWS\n');
return s3.putObjectPromise({ Bucket: bucket, return s3.putObject({ Bucket: bucket,
Key: bigObject, Body: bigBody, Key: bigObject, Body: bigBody,
Metadata: { Metadata: {
'scal-location-constraint': awsLocation } }); 'scal-location-constraint': awsLocation } }).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write(`Error putting objects: ${err}\n`); process.stdout.write(`Error putting objects: ${err}\n`);

View File

@ -46,7 +46,7 @@ function testSuite() {
process.stdout.write('Creating bucket'); process.stdout.write('Creating bucket');
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket }) return s3.createBucket({ Bucket: bucket }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;

View File

@ -32,7 +32,7 @@ function testSuite() {
process.stdout.write('Creating bucket'); process.stdout.write('Creating bucket');
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: azureContainerName }) return s3.createBucket({ Bucket: azureContainerName }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;

View File

@ -20,20 +20,20 @@ describeSkipIfNotMultiple('List parts of MPU on Azure data backend', () => {
this.currentTest.key = `somekey-${Date.now()}`; this.currentTest.key = `somekey-${Date.now()}`;
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: azureContainerName }) return s3.createBucket({ Bucket: azureContainerName }).promise()
.then(() => s3.createMultipartUploadPromise({ .then(() => s3.createMultipartUpload({
Bucket: azureContainerName, Key: this.currentTest.key, Bucket: azureContainerName, Key: this.currentTest.key,
Metadata: { 'scal-location-constraint': azureLocation } })) Metadata: { 'scal-location-constraint': azureLocation } }).promise())
.then(res => { .then(res => {
this.currentTest.uploadId = res.UploadId; this.currentTest.uploadId = res.UploadId;
return s3.uploadPartPromise({ Bucket: azureContainerName, return s3.uploadPart({ Bucket: azureContainerName,
Key: this.currentTest.key, PartNumber: 1, Key: this.currentTest.key, PartNumber: 1,
UploadId: this.currentTest.uploadId, Body: bodyFirstPart }); UploadId: this.currentTest.uploadId, Body: bodyFirstPart }).promise();
}).then(res => { }).then(res => {
this.currentTest.firstEtag = res.ETag; this.currentTest.firstEtag = res.ETag;
}).then(() => s3.uploadPartPromise({ Bucket: azureContainerName, }).then(() => s3.uploadPart({ Bucket: azureContainerName,
Key: this.currentTest.key, PartNumber: 2, Key: this.currentTest.key, PartNumber: 2,
UploadId: this.currentTest.uploadId, Body: bodySecondPart }) UploadId: this.currentTest.uploadId, Body: bodySecondPart }).promise()
).then(res => { ).then(res => {
this.currentTest.secondEtag = res.ETag; this.currentTest.secondEtag = res.ETag;
}) })
@ -45,10 +45,10 @@ describeSkipIfNotMultiple('List parts of MPU on Azure data backend', () => {
afterEach(function afterEachFn() { afterEach(function afterEachFn() {
process.stdout.write('Emptying bucket'); process.stdout.write('Emptying bucket');
return s3.abortMultipartUploadPromise({ return s3.abortMultipartUpload({
Bucket: azureContainerName, Key: this.currentTest.key, Bucket: azureContainerName, Key: this.currentTest.key,
UploadId: this.currentTest.uploadId, UploadId: this.currentTest.uploadId,
}) }).promise()
.then(() => bucketUtil.empty(azureContainerName)) .then(() => bucketUtil.empty(azureContainerName))
.then(() => { .then(() => {
process.stdout.write('Deleting bucket'); process.stdout.write('Deleting bucket');

View File

@ -109,7 +109,7 @@ function testSuite() {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
this.currentTest.awsClient = awsS3; this.currentTest.awsClient = awsS3;
return s3.createBucketPromise({ Bucket: azureContainerName }) return s3.createBucket({ Bucket: azureContainerName }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;

View File

@ -121,6 +121,7 @@ function testSuite() {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
process.stdout.write('Creating bucket\n'); process.stdout.write('Creating bucket\n');
s3.createBucketPromise = Promise.promisify(s3.createBucket);
if (process.env.ENABLE_KMS_ENCRYPTION === 'true') { if (process.env.ENABLE_KMS_ENCRYPTION === 'true') {
s3.createBucketPromise = createEncryptedBucketPromise; s3.createBucketPromise = createEncryptedBucketPromise;
} }

View File

@ -113,6 +113,7 @@ function testSuite() {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
process.stdout.write('Creating bucket\n'); process.stdout.write('Creating bucket\n');
s3.createBucketPromise = Promise.promisify(s3.createBucket);
if (process.env.ENABLE_KMS_ENCRYPTION === 'true') { if (process.env.ENABLE_KMS_ENCRYPTION === 'true') {
s3.createBucketPromise = createEncryptedBucketPromise; s3.createBucketPromise = createEncryptedBucketPromise;
} }

View File

@ -167,7 +167,7 @@ function testSuite() {
beforeEach(() => { beforeEach(() => {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket }) return s3.createBucket({ Bucket: bucket }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;

View File

@ -79,6 +79,7 @@ describe('MultipleBackend put object', function testSuite() {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
process.stdout.write('Creating bucket\n'); process.stdout.write('Creating bucket\n');
s3.createBucketPromise = Promise.promisify(s3.createBucket);
if (process.env.ENABLE_KMS_ENCRYPTION === 'true') { if (process.env.ENABLE_KMS_ENCRYPTION === 'true') {
s3.createBucketPromise = createEncryptedBucketPromise; s3.createBucketPromise = createEncryptedBucketPromise;
} }

View File

@ -108,7 +108,7 @@ describeF() {
describe('with no bucket location header', () => { describe('with no bucket location header', () => {
beforeEach(() => beforeEach(() =>
s3.createBucketPromise({ Bucket: azureContainerName }) s3.createBucket({ Bucket: azureContainerName }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;

View File

@ -19,6 +19,7 @@ const describeSkipIfE2E = process.env.S3_END_TO_END ? describe.skip : describe;
class ContinueRequestHandler { class ContinueRequestHandler {
constructor(path) { constructor(path) {
this.path = path; this.path = path;
this.expectHeader = '100-continue';
return this; return this;
} }
@ -40,7 +41,7 @@ class ContinueRequestHandler {
method: 'PUT', method: 'PUT',
headers: { headers: {
'content-length': body.length, 'content-length': body.length,
'Expect': this.expectHeader || '100-continue', 'Expect': this.expectHeader,
}, },
}; };
} }
@ -49,11 +50,15 @@ class ContinueRequestHandler {
const options = this.getRequestOptions(); const options = this.getRequestOptions();
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
const req = transport.request(options, res => { const req = transport.request(options, res => {
res.on('data', () => {});
res.on('end', () => {
assert.strictEqual(res.statusCode, statusCode); assert.strictEqual(res.statusCode, statusCode);
return cb(); return cb();
}); });
});
// Send the body either on the continue event, or immediately. // Send the body either on the continue event, or immediately.
if (this.expectHeader === '100-continue') { if (this.expectHeader === '100-continue') {
req.flushHeaders();
req.on('continue', () => req.end(body)); req.on('continue', () => req.end(body));
} else { } else {
req.end(body); req.end(body);
@ -64,21 +69,45 @@ class ContinueRequestHandler {
const options = this.getRequestOptions(); const options = this.getRequestOptions();
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
const req = transport.request(options); const req = transport.request(options);
req.flushHeaders();
// At this point we have only sent the header. // At this point we have only sent the header.
assert(req.output.length === 1); const headerLen = req._header.length;
const headerLen = req.output[0].length;
req.on('continue', () => { req.on('continue', () => {
// Has only the header been sent? // Has only the header been sent?
assert.strictEqual(req.socket.bytesWritten, headerLen); assert.strictEqual(req.socket.bytesWritten, headerLen);
// Send the body since the continue event has been emitted. // Send the body since the continue event has been emitted.
return req.end(body); return req.end(body);
}); });
req.on('close', () => { req.on('response', res => {
res.on('data', () => {});
res.on('end', () => {
const expected = body.length + headerLen; const expected = body.length + headerLen;
// Has the entire body been sent? // Has the entire body been sent?
assert.strictEqual(req.socket.bytesWritten, expected); assert.strictEqual(req.socket.bytesWritten, expected);
return cb(); return cb();
}); });
res.on('error', err => cb(err));
});
req.on('error', err => cb(err));
}
shouldNotGetContinue(cb) {
const options = this.getRequestOptions();
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
const req = transport.request(options);
req.flushHeaders();
// At this point we have only sent the header.
const headerLen = req._header.length;
req.on('continue', () => cb('Continue beeing seen when 403 is expected'));
req.on('response', res => {
res.on('data', () => {});
res.on('end', () => {
const expected = headerLen;
assert.strictEqual(req.socket.bytesWritten, expected);
return cb();
});
res.on('error', err => cb(err));
});
req.on('error', err => cb(err)); req.on('error', err => cb(err));
} }
} }
@ -100,7 +129,7 @@ describeSkipIfE2E('PUT public object with 100-continue header', () => {
const signedUrl = s3.getSignedUrl('putObject', params); const signedUrl = s3.getSignedUrl('putObject', params);
const { path } = url.parse(signedUrl); const { path } = url.parse(signedUrl);
continueRequest = new ContinueRequestHandler(path); continueRequest = new ContinueRequestHandler(path);
return s3.createBucketPromise({ Bucket: bucket }); return s3.createBucket({ Bucket: bucket }).promise();
}); });
afterEach(() => afterEach(() =>
@ -125,8 +154,8 @@ describeSkipIfE2E('PUT public object with 100-continue header', () => {
it('should wait for continue event before sending body', done => it('should wait for continue event before sending body', done =>
continueRequest.sendsBodyOnContinue(done)); continueRequest.sendsBodyOnContinue(done));
it('should continue if a public user', done => it('should not send continue if denied for a public user', done =>
continueRequest.setRequestPath(invalidSignedURL) continueRequest.setRequestPath(invalidSignedURL)
.sendsBodyOnContinue(done)); .shouldNotGetContinue(done));
}); });
}); });

View File

@ -23,13 +23,13 @@ describe('Abort MPU', () => {
beforeEach(() => { beforeEach(() => {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket }) return s3.createBucket({ Bucket: bucket }).promise()
.then(() => s3.createMultipartUploadPromise({ .then(() => s3.createMultipartUpload({
Bucket: bucket, Key: key })) Bucket: bucket, Key: key }).promise())
.then(res => { .then(res => {
uploadId = res.UploadId; uploadId = res.UploadId;
return s3.uploadPartPromise({ Bucket: bucket, Key: key, return s3.uploadPart({ Bucket: bucket, Key: key,
PartNumber: 1, UploadId: uploadId, Body: bodyFirstPart }); PartNumber: 1, UploadId: uploadId, Body: bodyFirstPart }).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write(`Error in beforeEach: ${err}\n`); process.stdout.write(`Error in beforeEach: ${err}\n`);
@ -38,11 +38,11 @@ describe('Abort MPU', () => {
}); });
afterEach(() => afterEach(() =>
s3.abortMultipartUploadPromise({ s3.abortMultipartUpload({
Bucket: bucket, Bucket: bucket,
Key: key, Key: key,
UploadId: uploadId, UploadId: uploadId,
}) }).promise()
.then(() => bucketUtil.empty(bucket)) .then(() => bucketUtil.empty(bucket))
.then(() => bucketUtil.deleteOne(bucket)) .then(() => bucketUtil.deleteOne(bucket))
); );
@ -71,7 +71,7 @@ describe('Abort MPU - No Such Upload', () => {
beforeEach(() => { beforeEach(() => {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket }); return s3.createBucket({ Bucket: bucket }).promise();
}); });
afterEach(() => bucketUtil.deleteOne(bucket)); afterEach(() => bucketUtil.deleteOne(bucket));

View File

@ -22,7 +22,7 @@ describe('Tag condition keys updateRequestContext', () => {
beforeEach(() => { beforeEach(() => {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket }) return s3.createBucket({ Bucket: bucket }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;
@ -39,7 +39,7 @@ describe('Tag condition keys updateRequestContext', () => {
it('should update request contexts with request tags and existing object tags', done => { it('should update request contexts with request tags and existing object tags', done => {
const tagsToExist = 'oneKey=oneValue&twoKey=twoValue'; const tagsToExist = 'oneKey=oneValue&twoKey=twoValue';
const params = { Bucket: bucket, Key: object, Tagging: tagsToExist }; const params = { Bucket: bucket, Key: object, Tagging: tagsToExist };
s3.putObject(params, err => { return s3.putObject(params, err => {
assert.ifError(err); assert.ifError(err);
updateRequestContexts(objPutTaggingReq, requestContexts, 'objectPutTagging', log, updateRequestContexts(objPutTaggingReq, requestContexts, 'objectPutTagging', log,
(err, newRequestContexts) => { (err, newRequestContexts) => {

View File

@ -56,12 +56,17 @@ describe('Complete MPU', () => {
function _initiateMpuAndPutOnePart() { function _initiateMpuAndPutOnePart() {
const result = {}; const result = {};
return s3.createMultipartUploadPromise({ return s3.createMultipartUpload({
Bucket: bucket, Key: key }) Bucket: bucket, Key: key }).promise()
.then(data => { .then(data => {
result.uploadId = data.UploadId; result.uploadId = data.UploadId;
return s3.uploadPartPromise({ Bucket: bucket, Key: key, return s3.uploadPart({
PartNumber: 1, UploadId: data.UploadId, Body: 'foo' }); Bucket: bucket,
Key: key,
PartNumber: 1,
UploadId: data.UploadId,
Body: 'foo',
}).promise();
}) })
.then(data => { .then(data => {
result.eTag = data.ETag; result.eTag = data.ETag;
@ -107,8 +112,8 @@ describe('Complete MPU', () => {
let uploadId; let uploadId;
let eTag; let eTag;
beforeEach(() => s3.putBucketVersioningPromise({ Bucket: bucket, beforeEach(() => s3.putBucketVersioning({ Bucket: bucket,
VersioningConfiguration: versioningEnabled }) VersioningConfiguration: versioningEnabled }).promise()
.then(() => _initiateMpuAndPutOnePart()) .then(() => _initiateMpuAndPutOnePart())
.then(result => { .then(result => {
uploadId = result.uploadId; uploadId = result.uploadId;
@ -126,8 +131,8 @@ describe('Complete MPU', () => {
let uploadId; let uploadId;
let eTag; let eTag;
beforeEach(() => s3.putBucketVersioningPromise({ Bucket: bucket, beforeEach(() => s3.putBucketVersioning({ Bucket: bucket,
VersioningConfiguration: versioningSuspended }) VersioningConfiguration: versioningSuspended }).promise()
.then(() => _initiateMpuAndPutOnePart()) .then(() => _initiateMpuAndPutOnePart())
.then(result => { .then(result => {
uploadId = result.uploadId; uploadId = result.uploadId;

View File

@ -40,6 +40,7 @@ describe('Object Part Copy', () => {
beforeEach(() => { beforeEach(() => {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
s3.createBucketPromise = Promise.promisify(s3.createBucket);
if (process.env.ENABLE_KMS_ENCRYPTION === 'true') { if (process.env.ENABLE_KMS_ENCRYPTION === 'true') {
s3.createBucketPromise = createEncryptedBucketPromise; s3.createBucketPromise = createEncryptedBucketPromise;
} }
@ -54,22 +55,22 @@ describe('Object Part Copy', () => {
throw err; throw err;
}) })
.then(() => .then(() =>
s3.putObjectPromise({ s3.putObject({
Bucket: sourceBucketName, Bucket: sourceBucketName,
Key: sourceObjName, Key: sourceObjName,
Body: content, Body: content,
})) }).promise())
.then(res => { .then(res => {
etag = res.ETag; etag = res.ETag;
return s3.headObjectPromise({ return s3.headObject({
Bucket: sourceBucketName, Bucket: sourceBucketName,
Key: sourceObjName, Key: sourceObjName,
}); }).promise();
}).then(() => }).then(() =>
s3.createMultipartUploadPromise({ s3.createMultipartUpload({
Bucket: destBucketName, Bucket: destBucketName,
Key: destObjName, Key: destObjName,
})).then(iniateRes => { }).promise()).then(iniateRes => {
uploadId = iniateRes.UploadId; uploadId = iniateRes.UploadId;
}).catch(err => { }).catch(err => {
process.stdout.write(`Error in outer beforeEach: ${err}\n`); process.stdout.write(`Error in outer beforeEach: ${err}\n`);
@ -79,11 +80,11 @@ describe('Object Part Copy', () => {
afterEach(() => bucketUtil.empty(sourceBucketName) afterEach(() => bucketUtil.empty(sourceBucketName)
.then(() => bucketUtil.empty(destBucketName)) .then(() => bucketUtil.empty(destBucketName))
.then(() => s3.abortMultipartUploadPromise({ .then(() => s3.abortMultipartUpload({
Bucket: destBucketName, Bucket: destBucketName,
Key: destObjName, Key: destObjName,
UploadId: uploadId, UploadId: uploadId,
})) }).promise())
.catch(err => { .catch(err => {
if (err.code !== 'NoSuchUpload') { if (err.code !== 'NoSuchUpload') {
process.stdout.write(`Error in afterEach: ${err}\n`); process.stdout.write(`Error in afterEach: ${err}\n`);
@ -335,10 +336,10 @@ describe('Object Part Copy', () => {
const otherPartBuff = Buffer.alloc(5242880, 1); const otherPartBuff = Buffer.alloc(5242880, 1);
otherMd5HashPart.update(otherPartBuff); otherMd5HashPart.update(otherPartBuff);
const otherPartHash = otherMd5HashPart.digest('hex'); const otherPartHash = otherMd5HashPart.digest('hex');
return s3.createMultipartUploadPromise({ return s3.createMultipartUpload({
Bucket: sourceBucketName, Bucket: sourceBucketName,
Key: sourceMpuKey, Key: sourceMpuKey,
}).then(iniateRes => { }).promise().then(iniateRes => {
sourceMpuId = iniateRes.UploadId; sourceMpuId = iniateRes.UploadId;
}).catch(err => { }).catch(err => {
process.stdout.write(`Error initiating MPU ' + process.stdout.write(`Error initiating MPU ' +
@ -349,13 +350,13 @@ describe('Object Part Copy', () => {
for (let i = 1; i < 10; i++) { for (let i = 1; i < 10; i++) {
const partBuffHere = i % 2 ? partBuff : otherPartBuff; const partBuffHere = i % 2 ? partBuff : otherPartBuff;
const partHashHere = i % 2 ? partHash : otherPartHash; const partHashHere = i % 2 ? partHash : otherPartHash;
partUploads.push(s3.uploadPartPromise({ partUploads.push(s3.uploadPart({
Bucket: sourceBucketName, Bucket: sourceBucketName,
Key: sourceMpuKey, Key: sourceMpuKey,
PartNumber: i, PartNumber: i,
UploadId: sourceMpuId, UploadId: sourceMpuId,
Body: partBuffHere, Body: partBuffHere,
})); }).promise());
parts.push({ parts.push({
ETag: partHashHere, ETag: partHashHere,
PartNumber: i, PartNumber: i,
@ -369,14 +370,14 @@ describe('Object Part Copy', () => {
throw err; throw err;
}).then(() => { }).then(() => {
process.stdout.write('completing mpu'); process.stdout.write('completing mpu');
return s3.completeMultipartUploadPromise({ return s3.completeMultipartUpload({
Bucket: sourceBucketName, Bucket: sourceBucketName,
Key: sourceMpuKey, Key: sourceMpuKey,
UploadId: sourceMpuId, UploadId: sourceMpuId,
MultipartUpload: { MultipartUpload: {
Parts: parts, Parts: parts,
}, },
}); }).promise();
}).then(() => { }).then(() => {
process.stdout.write('finished completing mpu'); process.stdout.write('finished completing mpu');
}).catch(err => { }).catch(err => {
@ -385,11 +386,11 @@ describe('Object Part Copy', () => {
}); });
}); });
afterEach(() => s3.abortMultipartUploadPromise({ afterEach(() => s3.abortMultipartUpload({
Bucket: sourceBucketName, Bucket: sourceBucketName,
Key: sourceMpuKey, Key: sourceMpuKey,
UploadId: sourceMpuId, UploadId: sourceMpuId,
}).catch(err => { }).promise().catch(err => {
if (err.code !== 'NoSuchUpload' if (err.code !== 'NoSuchUpload'
&& err.code !== 'NoSuchBucket') { && err.code !== 'NoSuchBucket') {
process.stdout.write(`Error in afterEach: ${err}\n`); process.stdout.write(`Error in afterEach: ${err}\n`);
@ -418,27 +419,27 @@ describe('Object Part Copy', () => {
it('should copy two parts from a source bucket to a different ' + it('should copy two parts from a source bucket to a different ' +
'destination bucket and complete the MPU', () => { 'destination bucket and complete the MPU', () => {
process.stdout.write('Putting first part in MPU test'); process.stdout.write('Putting first part in MPU test');
return s3.uploadPartCopyPromise({ Bucket: destBucketName, return s3.uploadPartCopy({ Bucket: destBucketName,
Key: destObjName, Key: destObjName,
CopySource: `${sourceBucketName}/${sourceMpuKey}`, CopySource: `${sourceBucketName}/${sourceMpuKey}`,
PartNumber: 1, PartNumber: 1,
UploadId: uploadId, UploadId: uploadId,
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.ETag, totalMpuObjectHash); assert.strictEqual(res.ETag, totalMpuObjectHash);
assert(res.LastModified); assert(res.LastModified);
}).then(() => { }).then(() => {
process.stdout.write('Putting second part in MPU test'); process.stdout.write('Putting second part in MPU test');
return s3.uploadPartCopyPromise({ Bucket: destBucketName, return s3.uploadPartCopy({ Bucket: destBucketName,
Key: destObjName, Key: destObjName,
CopySource: `${sourceBucketName}/${sourceMpuKey}`, CopySource: `${sourceBucketName}/${sourceMpuKey}`,
PartNumber: 2, PartNumber: 2,
UploadId: uploadId, UploadId: uploadId,
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.ETag, totalMpuObjectHash); assert.strictEqual(res.ETag, totalMpuObjectHash);
assert(res.LastModified); assert(res.LastModified);
}).then(() => { }).then(() => {
process.stdout.write('Completing MPU'); process.stdout.write('Completing MPU');
return s3.completeMultipartUploadPromise({ return s3.completeMultipartUpload({
Bucket: destBucketName, Bucket: destBucketName,
Key: destObjName, Key: destObjName,
UploadId: uploadId, UploadId: uploadId,
@ -448,7 +449,7 @@ describe('Object Part Copy', () => {
{ ETag: totalMpuObjectHash, PartNumber: 2 }, { ETag: totalMpuObjectHash, PartNumber: 2 },
], ],
}, },
}); }).promise();
}).then(res => { }).then(res => {
assert.strictEqual(res.Bucket, destBucketName); assert.strictEqual(res.Bucket, destBucketName);
assert.strictEqual(res.Key, destObjName); assert.strictEqual(res.Key, destObjName);
@ -472,29 +473,29 @@ describe('Object Part Copy', () => {
// with number of parts at the end) // with number of parts at the end)
const finalCombinedETag = const finalCombinedETag =
'"e08ede4e8b942e18537cb2289f613ae3-2"'; '"e08ede4e8b942e18537cb2289f613ae3-2"';
return s3.uploadPartCopyPromise({ Bucket: destBucketName, return s3.uploadPartCopy({ Bucket: destBucketName,
Key: destObjName, Key: destObjName,
CopySource: `${sourceBucketName}/${sourceMpuKey}`, CopySource: `${sourceBucketName}/${sourceMpuKey}`,
PartNumber: 1, PartNumber: 1,
UploadId: uploadId, UploadId: uploadId,
CopySourceRange: 'bytes=5242890-15242880', CopySourceRange: 'bytes=5242890-15242880',
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.ETag, part1ETag); assert.strictEqual(res.ETag, part1ETag);
assert(res.LastModified); assert(res.LastModified);
}).then(() => { }).then(() => {
process.stdout.write('Putting second part in MPU test'); process.stdout.write('Putting second part in MPU test');
return s3.uploadPartCopyPromise({ Bucket: destBucketName, return s3.uploadPartCopy({ Bucket: destBucketName,
Key: destObjName, Key: destObjName,
CopySource: `${sourceBucketName}/${sourceMpuKey}`, CopySource: `${sourceBucketName}/${sourceMpuKey}`,
PartNumber: 2, PartNumber: 2,
UploadId: uploadId, UploadId: uploadId,
CopySourceRange: 'bytes=15242891-30242991', CopySourceRange: 'bytes=15242891-30242991',
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.ETag, part2ETag); assert.strictEqual(res.ETag, part2ETag);
assert(res.LastModified); assert(res.LastModified);
}).then(() => { }).then(() => {
process.stdout.write('Completing MPU'); process.stdout.write('Completing MPU');
return s3.completeMultipartUploadPromise({ return s3.completeMultipartUpload({
Bucket: destBucketName, Bucket: destBucketName,
Key: destObjName, Key: destObjName,
UploadId: uploadId, UploadId: uploadId,
@ -504,17 +505,17 @@ describe('Object Part Copy', () => {
{ ETag: part2ETag, PartNumber: 2 }, { ETag: part2ETag, PartNumber: 2 },
], ],
}, },
}); }).promise();
}).then(res => { }).then(res => {
assert.strictEqual(res.Bucket, destBucketName); assert.strictEqual(res.Bucket, destBucketName);
assert.strictEqual(res.Key, destObjName); assert.strictEqual(res.Key, destObjName);
assert.strictEqual(res.ETag, finalCombinedETag); assert.strictEqual(res.ETag, finalCombinedETag);
}).then(() => { }).then(() => {
process.stdout.write('Getting new object'); process.stdout.write('Getting new object');
return s3.getObjectPromise({ return s3.getObject({
Bucket: destBucketName, Bucket: destBucketName,
Key: destObjName, Key: destObjName,
}); }).promise();
}).then(res => { }).then(res => {
assert.strictEqual(res.ContentLength, 25000092); assert.strictEqual(res.ContentLength, 25000092);
assert.strictEqual(res.ETag, finalCombinedETag); assert.strictEqual(res.ETag, finalCombinedETag);
@ -529,27 +530,27 @@ describe('Object Part Copy', () => {
// AWS response etag for this completed MPU // AWS response etag for this completed MPU
const finalObjETag = '"db77ebbae9e9f5a244a26b86193ad818-1"'; const finalObjETag = '"db77ebbae9e9f5a244a26b86193ad818-1"';
process.stdout.write('Putting first part in MPU test'); process.stdout.write('Putting first part in MPU test');
return s3.uploadPartCopyPromise({ Bucket: destBucketName, return s3.uploadPartCopy({ Bucket: destBucketName,
Key: destObjName, Key: destObjName,
CopySource: `${sourceBucketName}/${sourceMpuKey}`, CopySource: `${sourceBucketName}/${sourceMpuKey}`,
PartNumber: 1, PartNumber: 1,
UploadId: uploadId, UploadId: uploadId,
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.ETag, totalMpuObjectHash); assert.strictEqual(res.ETag, totalMpuObjectHash);
assert(res.LastModified); assert(res.LastModified);
}).then(() => { }).then(() => {
process.stdout.write('Overwriting first part in MPU test'); process.stdout.write('Overwriting first part in MPU test');
return s3.uploadPartCopyPromise({ Bucket: destBucketName, return s3.uploadPartCopy({ Bucket: destBucketName,
Key: destObjName, Key: destObjName,
CopySource: `${sourceBucketName}/${sourceObjName}`, CopySource: `${sourceBucketName}/${sourceObjName}`,
PartNumber: 1, PartNumber: 1,
UploadId: uploadId }); UploadId: uploadId }).promise();
}).then(res => { }).then(res => {
assert.strictEqual(res.ETag, etag); assert.strictEqual(res.ETag, etag);
assert(res.LastModified); assert(res.LastModified);
}).then(() => { }).then(() => {
process.stdout.write('Completing MPU'); process.stdout.write('Completing MPU');
return s3.completeMultipartUploadPromise({ return s3.completeMultipartUpload({
Bucket: destBucketName, Bucket: destBucketName,
Key: destObjName, Key: destObjName,
UploadId: uploadId, UploadId: uploadId,
@ -558,7 +559,7 @@ describe('Object Part Copy', () => {
{ ETag: etag, PartNumber: 1 }, { ETag: etag, PartNumber: 1 },
], ],
}, },
}); }).promise();
}).then(res => { }).then(res => {
assert.strictEqual(res.Bucket, destBucketName); assert.strictEqual(res.Bucket, destBucketName);
assert.strictEqual(res.Key, destObjName); assert.strictEqual(res.Key, destObjName);
@ -566,10 +567,10 @@ describe('Object Part Copy', () => {
}).then(() => { }).then(() => {
process.stdout.write('Getting object put by MPU with ' + process.stdout.write('Getting object put by MPU with ' +
'overwrite part'); 'overwrite part');
return s3.getObjectPromise({ return s3.getObject({
Bucket: destBucketName, Bucket: destBucketName,
Key: destObjName, Key: destObjName,
}); }).promise();
}).then(res => { }).then(res => {
assert.strictEqual(res.ETag, finalObjETag); assert.strictEqual(res.ETag, finalObjETag);
}).catch(err => { }).catch(err => {
@ -650,18 +651,18 @@ describe('Object Part Copy', () => {
beforeEach(() => { beforeEach(() => {
process.stdout.write('In other account before each'); process.stdout.write('In other account before each');
return otherAccountS3.createBucketPromise({ Bucket: return otherAccountS3.createBucket({ Bucket:
otherAccountBucket }) otherAccountBucket }).promise()
.catch(err => { .catch(err => {
process.stdout.write('Error creating other account ' + process.stdout.write('Error creating other account ' +
`bucket: ${err}\n`); `bucket: ${err}\n`);
throw err; throw err;
}).then(() => { }).then(() => {
process.stdout.write('Initiating other account MPU'); process.stdout.write('Initiating other account MPU');
return otherAccountS3.createMultipartUploadPromise({ return otherAccountS3.createMultipartUpload({
Bucket: otherAccountBucket, Bucket: otherAccountBucket,
Key: otherAccountKey, Key: otherAccountKey,
}); }).promise();
}).then(iniateRes => { }).then(iniateRes => {
otherAccountUploadId = iniateRes.UploadId; otherAccountUploadId = iniateRes.UploadId;
}).catch(err => { }).catch(err => {
@ -672,11 +673,11 @@ describe('Object Part Copy', () => {
}); });
afterEach(() => otherAccountBucketUtility.empty(otherAccountBucket) afterEach(() => otherAccountBucketUtility.empty(otherAccountBucket)
.then(() => otherAccountS3.abortMultipartUploadPromise({ .then(() => otherAccountS3.abortMultipartUpload({
Bucket: otherAccountBucket, Bucket: otherAccountBucket,
Key: otherAccountKey, Key: otherAccountKey,
UploadId: otherAccountUploadId, UploadId: otherAccountUploadId,
})) }).promise())
.catch(err => { .catch(err => {
if (err.code !== 'NoSuchUpload') { if (err.code !== 'NoSuchUpload') {
process.stdout.write('Error in other account ' + process.stdout.write('Error in other account ' +

View File

@ -54,10 +54,10 @@ describe('DELETE multipart', () => {
`${confLocation.name}`, `${confLocation.name}`,
() => { () => {
beforeEach(() => beforeEach(() =>
s3.createBucketPromise({ Bucket: bucket, s3.createBucket({ Bucket: bucket,
CreateBucketConfiguration: { CreateBucketConfiguration: {
LocationConstraint: confLocation.location, LocationConstraint: confLocation.location,
} }) } }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error in beforeEach: ${err}\n`); process.stdout.write(`Error in beforeEach: ${err}\n`);
throw err; throw err;
@ -89,10 +89,10 @@ describe('DELETE multipart', () => {
let uploadId; let uploadId;
beforeEach(() => beforeEach(() =>
s3.createMultipartUploadPromise({ s3.createMultipartUpload({
Bucket: bucket, Bucket: bucket,
Key: key, Key: key,
}) }).promise()
.then(res => { .then(res => {
uploadId = res.UploadId; uploadId = res.UploadId;
return s3.uploadPart({ return s3.uploadPart({

View File

@ -19,11 +19,11 @@ describe('DELETE object', () => {
describe('with multipart upload', () => { describe('with multipart upload', () => {
before(() => { before(() => {
process.stdout.write('creating bucket\n'); process.stdout.write('creating bucket\n');
return s3.createBucketPromise({ Bucket: bucketName }) return s3.createBucket({ Bucket: bucketName }).promise()
.then(() => { .then(() => {
process.stdout.write('initiating multipart upload\n'); process.stdout.write('initiating multipart upload\n');
return s3.createMultipartUploadPromise({ Bucket: bucketName, return s3.createMultipartUpload({ Bucket: bucketName,
Key: objectName }); Key: objectName }).promise();
}) })
.then(res => { .then(res => {
process.stdout.write('uploading parts\n'); process.stdout.write('uploading parts\n');
@ -31,13 +31,13 @@ describe('DELETE object', () => {
const uploads = []; const uploads = [];
for (let i = 1; i <= 3; i++) { for (let i = 1; i <= 3; i++) {
uploads.push( uploads.push(
s3.uploadPartPromise({ s3.uploadPart({
Bucket: bucketName, Bucket: bucketName,
Key: objectName, Key: objectName,
PartNumber: i, PartNumber: i,
Body: testfile, Body: testfile,
UploadId: uploadId, UploadId: uploadId,
}) }).promise()
); );
} }
return Promise.all(uploads); return Promise.all(uploads);
@ -49,7 +49,7 @@ describe('DELETE object', () => {
.then(res => { .then(res => {
process.stdout.write('about to complete multipart ' + process.stdout.write('about to complete multipart ' +
'upload\n'); 'upload\n');
return s3.completeMultipartUploadPromise({ return s3.completeMultipartUpload({
Bucket: bucketName, Bucket: bucketName,
Key: objectName, Key: objectName,
UploadId: uploadId, UploadId: uploadId,
@ -60,7 +60,7 @@ describe('DELETE object', () => {
{ ETag: res[2].ETag, PartNumber: 3 }, { ETag: res[2].ETag, PartNumber: 3 },
], ],
}, },
}); }).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write('completeMultipartUpload error: ' + process.stdout.write('completeMultipartUpload error: ' +
@ -99,20 +99,20 @@ describe('DELETE object', () => {
const retainDate = moment().add(10, 'days').toISOString(); const retainDate = moment().add(10, 'days').toISOString();
before(() => { before(() => {
process.stdout.write('creating bucket\n'); process.stdout.write('creating bucket\n');
return s3.createBucketPromise({ return s3.createBucket({
Bucket: bucketName, Bucket: bucketName,
ObjectLockEnabledForBucket: true, ObjectLockEnabledForBucket: true,
}) }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket ${err}\n`); process.stdout.write(`Error creating bucket ${err}\n`);
throw err; throw err;
}) })
.then(() => { .then(() => {
process.stdout.write('putting object\n'); process.stdout.write('putting object\n');
return s3.putObjectPromise({ return s3.putObject({
Bucket: bucketName, Bucket: bucketName,
Key: objectName, Key: objectName,
}); }).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write('Error putting object'); process.stdout.write('Error putting object');
@ -121,14 +121,14 @@ describe('DELETE object', () => {
.then(res => { .then(res => {
versionIdOne = res.VersionId; versionIdOne = res.VersionId;
process.stdout.write('putting object retention\n'); process.stdout.write('putting object retention\n');
return s3.putObjectRetentionPromise({ return s3.putObjectRetention({
Bucket: bucketName, Bucket: bucketName,
Key: objectName, Key: objectName,
Retention: { Retention: {
Mode: 'GOVERNANCE', Mode: 'GOVERNANCE',
RetainUntilDate: retainDate, RetainUntilDate: retainDate,
}, },
}); }).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write('Err putting object retention\n'); process.stdout.write('Err putting object retention\n');
@ -136,10 +136,10 @@ describe('DELETE object', () => {
}) })
.then(() => { .then(() => {
process.stdout.write('putting object\n'); process.stdout.write('putting object\n');
return s3.putObjectPromise({ return s3.putObject({
Bucket: bucketName, Bucket: bucketName,
Key: objectNameTwo, Key: objectNameTwo,
}); }).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write(('Err putting second object\n')); process.stdout.write(('Err putting second object\n'));
@ -148,13 +148,13 @@ describe('DELETE object', () => {
.then(res => { .then(res => {
versionIdTwo = res.VersionId; versionIdTwo = res.VersionId;
process.stdout.write('putting object legal hold\n'); process.stdout.write('putting object legal hold\n');
return s3.putObjectLegalHoldPromise({ return s3.putObjectLegalHold({
Bucket: bucketName, Bucket: bucketName,
Key: objectNameTwo, Key: objectNameTwo,
LegalHold: { LegalHold: {
Status: 'ON', Status: 'ON',
}, },
}); }).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write('Err putting object legal hold\n'); process.stdout.write('Err putting object legal hold\n');

View File

@ -105,7 +105,6 @@ describe('GET object', () => {
UploadId: uploadId, UploadId: uploadId,
Body: Buffer.alloc(partSize).fill(partNumber), Body: Buffer.alloc(partSize).fill(partNumber),
}; };
return s3.uploadPart(uploadPartParams, (err, data) => { return s3.uploadPart(uploadPartParams, (err, data) => {
checkNoError(err); checkNoError(err);
ETags = ETags.concat(data.ETag); ETags = ETags.concat(data.ETag);
@ -1069,10 +1068,10 @@ describe('GET object with object lock', () => {
ObjectLockMode: mockMode, ObjectLockMode: mockMode,
ObjectLockLegalHoldStatus: 'ON', ObjectLockLegalHoldStatus: 'ON',
}; };
return s3.createBucketPromise( return s3.createBucket(
{ Bucket: bucket, ObjectLockEnabledForBucket: true }) { Bucket: bucket, ObjectLockEnabledForBucket: true }).promise()
.then(() => s3.putObjectPromise(params)) .then(() => s3.putObject(params).promise())
.then(() => s3.getObjectPromise({ Bucket: bucket, Key: key })) .then(() => s3.getObject({ Bucket: bucket, Key: key }).promise())
/* eslint-disable no-return-assign */ /* eslint-disable no-return-assign */
.then(res => versionId = res.VersionId) .then(res => versionId = res.VersionId)
.catch(err => { .catch(err => {
@ -1082,7 +1081,7 @@ describe('GET object with object lock', () => {
}); });
afterEach(() => changeLockPromise([{ bucket, key, versionId }], '') afterEach(() => changeLockPromise([{ bucket, key, versionId }], '')
.then(() => s3.listObjectVersionsPromise({ Bucket: bucket })) .then(() => s3.listObjectVersions({ Bucket: bucket }).promise())
.then(res => res.Versions.forEach(object => { .then(res => res.Versions.forEach(object => {
const params = [ const params = [
{ {
@ -1097,7 +1096,7 @@ describe('GET object with object lock', () => {
process.stdout.write('Emptying and deleting buckets\n'); process.stdout.write('Emptying and deleting buckets\n');
return bucketUtil.empty(bucket); return bucketUtil.empty(bucket);
}) })
.then(() => s3.deleteBucketPromise({ Bucket: bucket })) .then(() => s3.deleteBucket({ Bucket: bucket }).promise())
.catch(err => { .catch(err => {
process.stdout.write('Error in afterEach'); process.stdout.write('Error in afterEach');
throw err; throw err;

View File

@ -43,11 +43,11 @@ describe('GET multipart upload object [Cache-Control, Content-Disposition, ' +
}) })
.then(() => { .then(() => {
process.stdout.write('creating bucket\n'); process.stdout.write('creating bucket\n');
return s3.createBucketPromise({ Bucket: bucketName }); return s3.createBucket({ Bucket: bucketName }).promise();
}) })
.then(() => { .then(() => {
process.stdout.write('initiating multipart upload\n'); process.stdout.write('initiating multipart upload\n');
return s3.createMultipartUploadPromise(params); return s3.createMultipartUpload(params).promise();
}) })
.then(res => { .then(res => {
uploadId = res.UploadId; uploadId = res.UploadId;
@ -75,14 +75,14 @@ describe('GET multipart upload object [Cache-Control, Content-Disposition, ' +
() => { () => {
const params = { Bucket: bucketName, Key: 'key', PartNumber: 1, const params = { Bucket: bucketName, Key: 'key', PartNumber: 1,
UploadId: uploadId }; UploadId: uploadId };
return s3.uploadPartPromise(params) return s3.uploadPart(params).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error in uploadPart ${err}\n`); process.stdout.write(`Error in uploadPart ${err}\n`);
throw err; throw err;
}) })
.then(res => { .then(res => {
process.stdout.write('about to complete multipart upload\n'); process.stdout.write('about to complete multipart upload\n');
return s3.completeMultipartUploadPromise({ return s3.completeMultipartUpload({
Bucket: bucketName, Bucket: bucketName,
Key: objectName, Key: objectName,
UploadId: uploadId, UploadId: uploadId,
@ -91,7 +91,7 @@ describe('GET multipart upload object [Cache-Control, Content-Disposition, ' +
{ ETag: res.ETag, PartNumber: 1 }, { ETag: res.ETag, PartNumber: 1 },
], ],
}, },
}); }).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write(`Error completing upload ${err}\n`); process.stdout.write(`Error completing upload ${err}\n`);
@ -99,9 +99,9 @@ describe('GET multipart upload object [Cache-Control, Content-Disposition, ' +
}) })
.then(() => { .then(() => {
process.stdout.write('about to get object\n'); process.stdout.write('about to get object\n');
return s3.getObjectPromise({ return s3.getObject({
Bucket: bucketName, Key: objectName, Bucket: bucketName, Key: objectName,
}); }).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write(`Error getting object ${err}\n`); process.stdout.write(`Error getting object ${err}\n`);

View File

@ -23,20 +23,20 @@ describe('GET object legal hold', () => {
beforeEach(() => { beforeEach(() => {
process.stdout.write('Putting buckets and objects\n'); process.stdout.write('Putting buckets and objects\n');
return s3.createBucketPromise( return s3.createBucket(
{ Bucket: bucket, ObjectLockEnabledForBucket: true }) { Bucket: bucket, ObjectLockEnabledForBucket: true }).promise()
.then(() => s3.createBucketPromise({ Bucket: unlockedBucket })) .then(() => s3.createBucket({ Bucket: unlockedBucket }).promise())
.then(() => s3.putObjectPromise({ Bucket: unlockedBucket, Key: key })) .then(() => s3.putObject({ Bucket: unlockedBucket, Key: key }).promise())
.then(() => s3.putObjectPromise({ Bucket: bucket, Key: keyNoHold })) .then(() => s3.putObject({ Bucket: bucket, Key: keyNoHold }).promise())
.then(() => s3.putObjectPromise({ Bucket: bucket, Key: key })) .then(() => s3.putObject({ Bucket: bucket, Key: key }).promise())
.then(res => { .then(res => {
versionId = res.VersionId; versionId = res.VersionId;
process.stdout.write('Putting object legal hold\n'); process.stdout.write('Putting object legal hold\n');
return s3.putObjectLegalHoldPromise({ return s3.putObjectLegalHold({
Bucket: bucket, Bucket: bucket,
Key: key, Key: key,
LegalHold: { Status: 'ON' }, LegalHold: { Status: 'ON' },
}); }).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write('Error in beforeEach\n'); process.stdout.write('Error in beforeEach\n');

View File

@ -28,17 +28,17 @@ describe('aws-node-sdk range test of large end position', () => {
beforeEach(() => { beforeEach(() => {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucketName }) return s3.createBucket({ Bucket: bucketName }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;
}).then(() => }).then(() =>
s3.putObjectPromise({ s3.putObject({
Bucket: bucketName, Bucket: bucketName,
Key: objName, Key: objName,
Body: Buffer.allocUnsafe(2890).fill(0, 0, 2800) Body: Buffer.allocUnsafe(2890).fill(0, 0, 2800)
.fill(1, 2800), .fill(1, 2800),
})) }).promise())
.catch(err => { .catch(err => {
process.stdout.write(`Error in beforeEach: ${err}\n`); process.stdout.write(`Error in beforeEach: ${err}\n`);
throw err; throw err;

View File

@ -43,20 +43,20 @@ describe('GET object retention', () => {
beforeEach(() => { beforeEach(() => {
process.stdout.write('Putting buckets and objects\n'); process.stdout.write('Putting buckets and objects\n');
return s3.createBucketPromise( return s3.createBucket(
{ Bucket: bucketName, ObjectLockEnabledForBucket: true }) { Bucket: bucketName, ObjectLockEnabledForBucket: true }).promise()
.then(() => s3.createBucketPromise({ Bucket: unlockedBucket })) .then(() => s3.createBucket({ Bucket: unlockedBucket }).promise())
.then(() => s3.putObjectPromise({ Bucket: unlockedBucket, Key: objectName })) .then(() => s3.putObject({ Bucket: unlockedBucket, Key: objectName }).promise())
.then(() => s3.putObjectPromise({ Bucket: bucketName, Key: noRetentionObject })) .then(() => s3.putObject({ Bucket: bucketName, Key: noRetentionObject }).promise())
.then(() => s3.putObjectPromise({ Bucket: bucketName, Key: objectName })) .then(() => s3.putObject({ Bucket: bucketName, Key: objectName }).promise())
.then(res => { .then(res => {
versionId = res.VersionId; versionId = res.VersionId;
process.stdout.write('Putting object retention\n'); process.stdout.write('Putting object retention\n');
return s3.putObjectRetentionPromise({ return s3.putObjectRetention({
Bucket: bucketName, Bucket: bucketName,
Key: objectName, Key: objectName,
Retention: retentionConfig, Retention: retentionConfig,
}); }).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write('Error in beforeEach\n'); process.stdout.write('Error in beforeEach\n');

View File

@ -18,7 +18,7 @@ describe('Initiate MPU', () => {
beforeEach(() => { beforeEach(() => {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket }) return s3.createBucket({ Bucket: bucket }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;

View File

@ -23,15 +23,15 @@ describe('List parts', () => {
beforeEach(() => { beforeEach(() => {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket }) return s3.createBucket({ Bucket: bucket }).promise()
.then(() => s3.createMultipartUploadPromise({ .then(() => s3.createMultipartUpload({
Bucket: bucket, Key: key })) Bucket: bucket, Key: key }).promise())
.then(res => { .then(res => {
uploadId = res.UploadId; uploadId = res.UploadId;
return s3.uploadPartPromise({ Bucket: bucket, Key: key, return s3.uploadPart({ Bucket: bucket, Key: key,
PartNumber: 1, UploadId: uploadId, Body: bodyFirstPart }); PartNumber: 1, UploadId: uploadId, Body: bodyFirstPart }).promise();
}).then(() => s3.uploadPartPromise({ Bucket: bucket, Key: key, }).then(() => s3.uploadPart({ Bucket: bucket, Key: key,
PartNumber: 2, UploadId: uploadId, Body: bodySecondPart }) PartNumber: 2, UploadId: uploadId, Body: bodySecondPart }).promise()
).then(res => { ).then(res => {
secondEtag = res.ETag; secondEtag = res.ETag;
return secondEtag; return secondEtag;
@ -44,9 +44,9 @@ describe('List parts', () => {
afterEach(() => { afterEach(() => {
process.stdout.write('Emptying bucket'); process.stdout.write('Emptying bucket');
return s3.abortMultipartUploadPromise({ return s3.abortMultipartUpload({
Bucket: bucket, Key: key, UploadId: uploadId, Bucket: bucket, Key: key, UploadId: uploadId,
}) }).promise()
.then(() => bucketUtil.empty(bucket)) .then(() => bucketUtil.empty(bucket))
.then(() => { .then(() => {
process.stdout.write('Deleting bucket'); process.stdout.write('Deleting bucket');
@ -80,13 +80,13 @@ describe('List parts', () => {
/* eslint-disable no-param-reassign */ /* eslint-disable no-param-reassign */
function createPart(sigCfg, bucketUtil, s3, key) { function createPart(sigCfg, bucketUtil, s3, key) {
let uploadId; let uploadId;
return s3.createBucketPromise({ Bucket: bucket }) return s3.createBucket({ Bucket: bucket }).promise()
.then(() => s3.createMultipartUploadPromise({ .then(() => s3.createMultipartUpload({
Bucket: bucket, Key: key })) Bucket: bucket, Key: key }).promise())
.then(res => { .then(res => {
uploadId = res.UploadId; uploadId = res.UploadId;
return s3.uploadPartPromise({ Bucket: bucket, Key: key, return s3.uploadPart({ Bucket: bucket, Key: key,
PartNumber: 1, UploadId: uploadId, Body: bodyFirstPart }); PartNumber: 1, UploadId: uploadId, Body: bodyFirstPart }).promise();
}) })
.then(() => Promise.resolve(uploadId)); .then(() => Promise.resolve(uploadId));
} }
@ -94,9 +94,9 @@ function createPart(sigCfg, bucketUtil, s3, key) {
function deletePart(s3, bucketUtil, key, uploadId) { function deletePart(s3, bucketUtil, key, uploadId) {
process.stdout.write('Emptying bucket'); process.stdout.write('Emptying bucket');
return s3.abortMultipartUploadPromise({ return s3.abortMultipartUpload({
Bucket: bucket, Key: key, UploadId: uploadId, Bucket: bucket, Key: key, UploadId: uploadId,
}) }).promise()
.then(() => bucketUtil.empty(bucket)) .then(() => bucketUtil.empty(bucket))
.then(() => { .then(() => {
process.stdout.write('Deleting bucket'); process.stdout.write('Deleting bucket');

View File

@ -85,34 +85,34 @@ describe('aws-node-sdk test suite of listMultipartUploads', () =>
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket }) return s3.createBucket({ Bucket: bucket }).promise()
.then(() => bucketUtil.getOwner()) .then(() => bucketUtil.getOwner())
.then(res => { .then(res => {
// The owner of the bucket will also be the MPU upload owner. // The owner of the bucket will also be the MPU upload owner.
data.displayName = res.DisplayName; data.displayName = res.DisplayName;
data.userId = res.ID; data.userId = res.ID;
}) })
.then(() => s3.createMultipartUploadPromise({ .then(() => s3.createMultipartUpload({
Bucket: bucket, Bucket: bucket,
Key: objectKey, Key: objectKey,
})) }).promise())
.then(res => { .then(res => {
data.uploadId = res.UploadId; data.uploadId = res.UploadId;
}); });
}); });
afterEach(() => afterEach(() =>
s3.abortMultipartUploadPromise({ s3.abortMultipartUpload({
Bucket: bucket, Bucket: bucket,
Key: objectKey, Key: objectKey,
UploadId: data.uploadId, UploadId: data.uploadId,
}) }).promise()
.then(() => bucketUtil.empty(bucket)) .then(() => bucketUtil.empty(bucket))
.then(() => bucketUtil.deleteOne(bucket)) .then(() => bucketUtil.deleteOne(bucket))
); );
it('should list ongoing multipart uploads', () => it('should list ongoing multipart uploads', () =>
s3.listMultipartUploadsPromise({ Bucket: bucket }) s3.listMultipartUploads({ Bucket: bucket }).promise()
.then(res => checkValues(res, data)) .then(res => checkValues(res, data))
); );
@ -121,22 +121,22 @@ describe('aws-node-sdk test suite of listMultipartUploads', () =>
data.delimiter = 'test-delimiter'; data.delimiter = 'test-delimiter';
data.maxUploads = 1; data.maxUploads = 1;
return s3.listMultipartUploadsPromise({ return s3.listMultipartUploads({
Bucket: bucket, Bucket: bucket,
Prefix: 'to', Prefix: 'to',
Delimiter: 'test-delimiter', Delimiter: 'test-delimiter',
MaxUploads: 1, MaxUploads: 1,
}) }).promise()
.then(res => checkValues(res, data)); .then(res => checkValues(res, data));
}); });
it('should list 0 multipart uploads when MaxUploads is 0', () => { it('should list 0 multipart uploads when MaxUploads is 0', () => {
data.maxUploads = 0; data.maxUploads = 0;
return s3.listMultipartUploadsPromise({ return s3.listMultipartUploads({
Bucket: bucket, Bucket: bucket,
MaxUploads: 0, MaxUploads: 0,
}) }).promise()
.then(res => checkValues(res, data)); .then(res => checkValues(res, data));
}); });
}) })

View File

@ -61,7 +61,7 @@ describe('Multi-Object Delete Success', function success() {
signatureVersion: 'v4', signatureVersion: 'v4',
}); });
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucketName }) return s3.createBucket({ Bucket: bucketName }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;
@ -76,11 +76,11 @@ describe('Multi-Object Delete Success', function success() {
const putPromises = objects.map(key => { const putPromises = objects.map(key => {
const mustComplete = Math.max(0, queued.length - parallel + 1); const mustComplete = Math.max(0, queued.length - parallel + 1);
const result = Promise.some(queued, mustComplete).then(() => const result = Promise.some(queued, mustComplete).then(() =>
s3.putObjectPromise({ s3.putObject({
Bucket: bucketName, Bucket: bucketName,
Key: key, Key: key,
Body: 'somebody', Body: 'somebody',
}) }).promise()
); );
queued.push(result); queued.push(result);
return result; return result;
@ -92,17 +92,17 @@ describe('Multi-Object Delete Success', function success() {
}); });
}); });
afterEach(() => s3.deleteBucketPromise({ Bucket: bucketName })); afterEach(() => s3.deleteBucket({ Bucket: bucketName }).promise());
it('should batch delete 1000 objects', () => { it('should batch delete 1000 objects', () => {
const objects = createObjectsList(1000); const objects = createObjectsList(1000);
return s3.deleteObjectsPromise({ return s3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
Quiet: false, Quiet: false,
}, },
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.Deleted.length, 1000); assert.strictEqual(res.Deleted.length, 1000);
// order of returned objects not sorted // order of returned objects not sorted
assert.deepStrictEqual(sortList(res.Deleted), sortList(objects)); assert.deepStrictEqual(sortList(res.Deleted), sortList(objects));
@ -114,13 +114,13 @@ describe('Multi-Object Delete Success', function success() {
it('should batch delete 1000 objects quietly', () => { it('should batch delete 1000 objects quietly', () => {
const objects = createObjectsList(1000); const objects = createObjectsList(1000);
return s3.deleteObjectsPromise({ return s3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
Quiet: true, Quiet: true,
}, },
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.Deleted.length, 0); assert.strictEqual(res.Deleted.length, 0);
assert.strictEqual(res.Errors.length, 0); assert.strictEqual(res.Errors.length, 0);
}).catch(err => { }).catch(err => {
@ -137,24 +137,24 @@ describe('Multi-Object Delete Error Responses', () => {
beforeEach(() => { beforeEach(() => {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucketName }) return s3.createBucket({ Bucket: bucketName }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;
}); });
}); });
afterEach(() => s3.deleteBucketPromise({ Bucket: bucketName })); afterEach(() => s3.deleteBucket({ Bucket: bucketName }).promise());
it('should return error if request deletion of more than 1000 objects', it('should return error if request deletion of more than 1000 objects',
() => { () => {
const objects = createObjectsList(1001); const objects = createObjectsList(1001);
return s3.deleteObjectsPromise({ return s3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
}, },
}).catch(err => { }).promise().catch(err => {
checkError(err, 'MalformedXML'); checkError(err, 'MalformedXML');
}); });
}); });
@ -162,12 +162,12 @@ describe('Multi-Object Delete Error Responses', () => {
it('should return error if request deletion of 0 objects', it('should return error if request deletion of 0 objects',
() => { () => {
const objects = createObjectsList(0); const objects = createObjectsList(0);
return s3.deleteObjectsPromise({ return s3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
}, },
}).catch(err => { }).promise().catch(err => {
checkError(err, 'MalformedXML'); checkError(err, 'MalformedXML');
}); });
}); });
@ -175,12 +175,12 @@ describe('Multi-Object Delete Error Responses', () => {
it('should return no error if try to delete non-existent objects', it('should return no error if try to delete non-existent objects',
() => { () => {
const objects = createObjectsList(1000); const objects = createObjectsList(1000);
return s3.deleteObjectsPromise({ return s3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
}, },
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.Deleted.length, 1000); assert.strictEqual(res.Deleted.length, 1000);
assert.strictEqual(res.Errors.length, 0); assert.strictEqual(res.Errors.length, 0);
}).catch(err => { }).catch(err => {
@ -190,12 +190,12 @@ describe('Multi-Object Delete Error Responses', () => {
it('should return error if no such bucket', () => { it('should return error if no such bucket', () => {
const objects = createObjectsList(1); const objects = createObjectsList(1);
return s3.deleteObjectsPromise({ return s3.deleteObjects({
Bucket: 'nosuchbucket2323292093', Bucket: 'nosuchbucket2323292093',
Delete: { Delete: {
Objects: objects, Objects: objects,
}, },
}).catch(err => { }).promise().catch(err => {
checkError(err, 'NoSuchBucket'); checkError(err, 'NoSuchBucket');
}); });
}); });
@ -213,18 +213,18 @@ describe('Multi-Object Delete Access', function access() {
signatureVersion: 'v4', signatureVersion: 'v4',
}); });
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucketName }) return s3.createBucket({ Bucket: bucketName }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;
}) })
.then(() => { .then(() => {
for (let i = 1; i < 501; i++) { for (let i = 1; i < 501; i++) {
createObjects.push(s3.putObjectPromise({ createObjects.push(s3.putObject({
Bucket: bucketName, Bucket: bucketName,
Key: `${key}${i}`, Key: `${key}${i}`,
Body: 'somebody', Body: 'somebody',
})); }).promise());
} }
return Promise.all(createObjects) return Promise.all(createObjects)
.catch(err => { .catch(err => {
@ -234,7 +234,7 @@ describe('Multi-Object Delete Access', function access() {
}); });
}); });
after(() => s3.deleteBucketPromise({ Bucket: bucketName })); after(() => s3.deleteBucket({ Bucket: bucketName }).promise());
it('should return access denied error for each object where no acl ' + it('should return access denied error for each object where no acl ' +
'permission', () => { 'permission', () => {
@ -245,13 +245,13 @@ describe('Multi-Object Delete Access', function access() {
item.Code = 'AccessDenied'; item.Code = 'AccessDenied';
item.Message = 'Access Denied'; item.Message = 'Access Denied';
}); });
return otherAccountS3.deleteObjectsPromise({ return otherAccountS3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
Quiet: false, Quiet: false,
}, },
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.Deleted.length, 0); assert.strictEqual(res.Deleted.length, 0);
assert.deepStrictEqual(sortList(res.Errors), sortList(errorList)); assert.deepStrictEqual(sortList(res.Errors), sortList(errorList));
assert.strictEqual(res.Errors.length, 500); assert.strictEqual(res.Errors.length, 500);
@ -263,13 +263,13 @@ describe('Multi-Object Delete Access', function access() {
it('should batch delete objects where requester has permission', () => { it('should batch delete objects where requester has permission', () => {
const objects = createObjectsList(500); const objects = createObjectsList(500);
return s3.deleteObjectsPromise({ return s3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
Quiet: false, Quiet: false,
}, },
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.Deleted.length, 500); assert.strictEqual(res.Deleted.length, 500);
assert.strictEqual(res.Errors.length, 0); assert.strictEqual(res.Errors.length, 0);
}).catch(err => { }).catch(err => {
@ -289,11 +289,11 @@ describe('Multi-Object Delete with Object Lock', () => {
signatureVersion: 'v4', signatureVersion: 'v4',
}); });
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ return s3.createBucket({
Bucket: bucketName, Bucket: bucketName,
ObjectLockEnabledForBucket: true, ObjectLockEnabledForBucket: true,
}) }).promise()
.then(() => s3.putObjectLockConfigurationPromise({ .then(() => s3.putObjectLockConfiguration({
Bucket: bucketName, Bucket: bucketName,
ObjectLockConfiguration: { ObjectLockConfiguration: {
ObjectLockEnabled: 'Enabled', ObjectLockEnabled: 'Enabled',
@ -304,18 +304,18 @@ describe('Multi-Object Delete with Object Lock', () => {
}, },
}, },
}, },
})) }).promise())
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;
}) })
.then(() => { .then(() => {
for (let i = 1; i < 6; i++) { for (let i = 1; i < 6; i++) {
createObjects.push(s3.putObjectPromise({ createObjects.push(s3.putObject({
Bucket: bucketName, Bucket: bucketName,
Key: `${key}${i}`, Key: `${key}${i}`,
Body: 'somebody', Body: 'somebody',
})); }).promise());
} }
return Promise.all(createObjects) return Promise.all(createObjects)
.then(res => { .then(res => {
@ -330,17 +330,17 @@ describe('Multi-Object Delete with Object Lock', () => {
}); });
}); });
after(() => s3.deleteBucketPromise({ Bucket: bucketName })); after(() => s3.deleteBucket({ Bucket: bucketName }).promise());
it('should not delete locked objects', () => { it('should not delete locked objects', () => {
const objects = createObjectsList(5, versionIds); const objects = createObjectsList(5, versionIds);
return s3.deleteObjectsPromise({ return s3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
Quiet: false, Quiet: false,
}, },
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.Errors.length, 5); assert.strictEqual(res.Errors.length, 5);
res.Errors.forEach(err => assert.strictEqual(err.Code, 'AccessDenied')); res.Errors.forEach(err => assert.strictEqual(err.Code, 'AccessDenied'));
}); });
@ -361,13 +361,13 @@ describe('Multi-Object Delete with Object Lock', () => {
date: moment().subtract(10, 'days').toISOString(), date: moment().subtract(10, 'days').toISOString(),
}; };
return changeLockPromise(objectsCopy, newRetention) return changeLockPromise(objectsCopy, newRetention)
.then(() => s3.deleteObjectsPromise({ .then(() => s3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
Quiet: false, Quiet: false,
}, },
})).then(res => { }).promise()).then(res => {
assert.strictEqual(res.Deleted.length, 5); assert.strictEqual(res.Deleted.length, 5);
assert.strictEqual(res.Errors.length, 0); assert.strictEqual(res.Errors.length, 0);
}).catch(err => { }).catch(err => {

View File

@ -99,7 +99,7 @@ describe('Object Copy', () => {
}); });
}); });
beforeEach(() => s3.putObjectPromise({ beforeEach(() => s3.putObject({
Bucket: sourceBucketName, Bucket: sourceBucketName,
Key: sourceObjName, Key: sourceObjName,
Body: content, Body: content,
@ -109,13 +109,13 @@ describe('Object Copy', () => {
ContentEncoding: originalContentEncoding, ContentEncoding: originalContentEncoding,
Expires: originalExpires, Expires: originalExpires,
Tagging: originalTagging, Tagging: originalTagging,
}).then(res => { }).promise().then(res => {
etag = res.ETag; etag = res.ETag;
etagTrim = etag.substring(1, etag.length - 1); etagTrim = etag.substring(1, etag.length - 1);
return s3.headObjectPromise({ return s3.headObject({
Bucket: sourceBucketName, Bucket: sourceBucketName,
Key: sourceObjName, Key: sourceObjName,
}); }).promise();
}).then(res => { }).then(res => {
lastModified = res.LastModified; lastModified = res.LastModified;
})); }));
@ -1258,19 +1258,19 @@ describe('Object Copy with object lock enabled on both destination ' +
}); });
}); });
beforeEach(() => s3.putObjectPromise({ beforeEach(() => s3.putObject({
Bucket: sourceBucketName, Bucket: sourceBucketName,
Key: sourceObjName, Key: sourceObjName,
Body: content, Body: content,
Metadata: originalMetadata, Metadata: originalMetadata,
ObjectLockMode: 'GOVERNANCE', ObjectLockMode: 'GOVERNANCE',
ObjectLockRetainUntilDate: new Date(2050, 1, 1), ObjectLockRetainUntilDate: new Date(2050, 1, 1),
}).then(res => { }).promise().then(res => {
versionId = res.VersionId; versionId = res.VersionId;
s3.headObjectPromise({ return s3.headObject({
Bucket: sourceBucketName, Bucket: sourceBucketName,
Key: sourceObjName, Key: sourceObjName,
}); }).promise();
})); }));
afterEach(() => bucketUtil.empty(sourceBucketName) afterEach(() => bucketUtil.empty(sourceBucketName)

View File

@ -64,15 +64,15 @@ describe('HEAD object, conditions', () => {
}, fields), cb); }, fields), cb);
} }
beforeEach(() => s3.putObjectPromise({ beforeEach(() => s3.putObject({
Bucket: bucketName, Bucket: bucketName,
Key: objectName, Key: objectName,
Body: 'I am the best content ever', Body: 'I am the best content ever',
}).then(res => { }).promise().then(res => {
etag = res.ETag; etag = res.ETag;
etagTrim = etag.substring(1, etag.length - 1); etagTrim = etag.substring(1, etag.length - 1);
return s3.headObjectPromise( return s3.headObject(
{ Bucket: bucketName, Key: objectName }); { Bucket: bucketName, Key: objectName }).promise();
}).then(res => { }).then(res => {
lastModified = res.LastModified; lastModified = res.LastModified;
})); }));
@ -554,10 +554,10 @@ describe('HEAD object with object lock', () => {
ObjectLockMode: mockMode, ObjectLockMode: mockMode,
ObjectLockLegalHoldStatus: 'ON', ObjectLockLegalHoldStatus: 'ON',
}; };
return s3.createBucketPromise( return s3.createBucket(
{ Bucket: bucket, ObjectLockEnabledForBucket: true }) { Bucket: bucket, ObjectLockEnabledForBucket: true }).promise()
.then(() => s3.putObjectPromise(params)) .then(() => s3.putObject(params).promise())
.then(() => s3.getObjectPromise({ Bucket: bucket, Key: key })) .then(() => s3.getObject({ Bucket: bucket, Key: key }).promise())
/* eslint-disable no-return-assign */ /* eslint-disable no-return-assign */
.then(res => versionId = res.VersionId) .then(res => versionId = res.VersionId)
.catch(err => { .catch(err => {
@ -567,7 +567,7 @@ describe('HEAD object with object lock', () => {
}); });
afterEach(() => changeLockPromise([{ bucket, key, versionId }], '') afterEach(() => changeLockPromise([{ bucket, key, versionId }], '')
.then(() => s3.listObjectVersionsPromise({ Bucket: bucket })) .then(() => s3.listObjectVersions({ Bucket: bucket }).promise())
.then(res => res.Versions.forEach(object => { .then(res => res.Versions.forEach(object => {
const params = [ const params = [
{ {
@ -582,7 +582,7 @@ describe('HEAD object with object lock', () => {
process.stdout.write('Emptying and deleting buckets\n'); process.stdout.write('Emptying and deleting buckets\n');
return bucketUtil.empty(bucket); return bucketUtil.empty(bucket);
}) })
.then(() => s3.deleteBucketPromise({ Bucket: bucket })) .then(() => s3.deleteBucket({ Bucket: bucket }).promise())
.catch(err => { .catch(err => {
process.stdout.write('Error in afterEach'); process.stdout.write('Error in afterEach');
throw err; throw err;

View File

@ -40,7 +40,7 @@ describe('HEAD object, compatibility headers [Cache-Control, ' +
ContentEncoding: contentEncoding, ContentEncoding: contentEncoding,
Expires: expires, Expires: expires,
}; };
return s3.putObjectPromise(params); return s3.putObject(params).promise();
}) })
.catch(err => { .catch(err => {
process.stdout.write(`Error with putObject: ${err}\n`); process.stdout.write(`Error with putObject: ${err}\n`);

View File

@ -32,13 +32,13 @@ describe('Put object with same key as prior object', () => {
.catch(done); .catch(done);
}); });
beforeEach(() => s3.putObjectPromise({ beforeEach(() => s3.putObject({
Bucket: bucketName, Bucket: bucketName,
Key: objectName, Key: objectName,
Body: 'I am the best content ever', Body: 'I am the best content ever',
Metadata: firstPutMetadata, Metadata: firstPutMetadata,
}).then(() => }).promise().then(() =>
s3.headObjectPromise({ Bucket: bucketName, Key: objectName }) s3.headObject({ Bucket: bucketName, Key: objectName }).promise()
).then(res => { ).then(res => {
assert.deepStrictEqual(res.Metadata, firstPutMetadata); assert.deepStrictEqual(res.Metadata, firstPutMetadata);
})); }));
@ -48,13 +48,13 @@ describe('Put object with same key as prior object', () => {
after(() => bucketUtil.deleteOne(bucketName)); after(() => bucketUtil.deleteOne(bucketName));
it('should overwrite all user metadata and data on overwrite put', it('should overwrite all user metadata and data on overwrite put',
() => s3.putObjectPromise({ () => s3.putObject({
Bucket: bucketName, Bucket: bucketName,
Key: objectName, Key: objectName,
Body: 'Much different', Body: 'Much different',
Metadata: secondPutMetadata, Metadata: secondPutMetadata,
}).then(() => }).promise().then(() =>
s3.getObjectPromise({ Bucket: bucketName, Key: objectName }) s3.getObject({ Bucket: bucketName, Key: objectName }).promise()
).then(res => { ).then(res => {
assert.deepStrictEqual(res.Metadata, secondPutMetadata); assert.deepStrictEqual(res.Metadata, secondPutMetadata);
assert.deepStrictEqual(res.Body.toString(), assert.deepStrictEqual(res.Body.toString(),

View File

@ -26,7 +26,7 @@ describe('PUT object', () => {
beforeEach(() => { beforeEach(() => {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket }) return s3.createBucket({ Bucket: bucket }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;
@ -278,10 +278,10 @@ describe('PUT object with object lock', () => {
beforeEach(() => { beforeEach(() => {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ return s3.createBucket({
Bucket: bucket, Bucket: bucket,
ObjectLockEnabledForBucket: true, ObjectLockEnabledForBucket: true,
}) }).promise()
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
throw err; throw err;

View File

@ -73,9 +73,9 @@ describe('PUT Object ACL', () => {
]; ];
Promise Promise
.mapSeries(objects, param => s3.putObjectPromise(param)) .mapSeries(objects, param => s3.putObject(param).promise())
.then(() => s3.putObjectAclPromise({ Bucket, Key, .then(() => s3.putObjectAcl({ Bucket, Key,
ACL: 'public-read' })) ACL: 'public-read' }).promise())
.then(data => { .then(data => {
assert(data); assert(data);
done(); done();

View File

@ -41,11 +41,11 @@ describe('PUT object legal hold', () => {
beforeEach(() => { beforeEach(() => {
process.stdout.write('Putting buckets and objects\n'); process.stdout.write('Putting buckets and objects\n');
return s3.createBucketPromise( return s3.createBucket(
{ Bucket: bucket, ObjectLockEnabledForBucket: true }) { Bucket: bucket, ObjectLockEnabledForBucket: true }).promise()
.then(() => s3.createBucketPromise({ Bucket: unlockedBucket })) .then(() => s3.createBucket({ Bucket: unlockedBucket }).promise())
.then(() => s3.putObjectPromise({ Bucket: unlockedBucket, Key: key })) .then(() => s3.putObject({ Bucket: unlockedBucket, Key: key }).promise())
.then(() => s3.putObjectPromise({ Bucket: bucket, Key: key })) .then(() => s3.putObject({ Bucket: bucket, Key: key }).promise())
.then(res => { .then(res => {
versionId = res.VersionId; versionId = res.VersionId;
}) })

View File

@ -15,9 +15,9 @@ describe('PUT object', () => {
beforeEach(() => { beforeEach(() => {
bucketUtil = new BucketUtility('default', sigCfg); bucketUtil = new BucketUtility('default', sigCfg);
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
return s3.createBucketPromise({ Bucket: bucket }) return s3.createBucket({ Bucket: bucket }).promise()
.then(() => s3.createMultipartUploadPromise({ .then(() => s3.createMultipartUpload({
Bucket: bucket, Key: key })) Bucket: bucket, Key: key }).promise())
.then(res => { .then(res => {
uploadId = res.UploadId; uploadId = res.UploadId;
return uploadId; return uploadId;
@ -30,9 +30,9 @@ describe('PUT object', () => {
afterEach(() => { afterEach(() => {
process.stdout.write('Emptying bucket'); process.stdout.write('Emptying bucket');
return s3.abortMultipartUploadPromise({ return s3.abortMultipartUpload({
Bucket: bucket, Key: key, UploadId: uploadId, Bucket: bucket, Key: key, UploadId: uploadId,
}) }).promise()
.then(() => bucketUtil.empty(bucket)) .then(() => bucketUtil.empty(bucket))
.then(() => { .then(() => {
process.stdout.write('Deleting bucket'); process.stdout.write('Deleting bucket');

View File

@ -25,11 +25,11 @@ describe('PUT object retention', () => {
beforeEach(() => { beforeEach(() => {
process.stdout.write('Putting buckets and objects\n'); process.stdout.write('Putting buckets and objects\n');
return s3.createBucketPromise( return s3.createBucket(
{ Bucket: bucketName, ObjectLockEnabledForBucket: true }) { Bucket: bucketName, ObjectLockEnabledForBucket: true }).promise()
.then(() => s3.createBucketPromise({ Bucket: unlockedBucket })) .then(() => s3.createBucket({ Bucket: unlockedBucket }).promise())
.then(() => s3.putObjectPromise({ Bucket: unlockedBucket, Key: objectName })) .then(() => s3.putObject({ Bucket: unlockedBucket, Key: objectName }).promise())
.then(() => s3.putObjectPromise({ Bucket: bucketName, Key: objectName })) .then(() => s3.putObject({ Bucket: bucketName, Key: objectName }).promise())
.then(res => { .then(res => {
versionId = res.VersionId; versionId = res.VersionId;
}) })

View File

@ -35,11 +35,11 @@ function getOuterRange(range, bytes) {
// Get the ranged object from a bucket. Write the response body to a file, then // Get the ranged object from a bucket. Write the response body to a file, then
// use getRangeExec to check that all the bytes are in the correct location. // use getRangeExec to check that all the bytes are in the correct location.
function checkRanges(range, bytes) { function checkRanges(range, bytes) {
return s3.getObjectPromise({ return s3.getObject({
Bucket: bucket, Bucket: bucket,
Key: key, Key: key,
Range: `bytes=${range}`, Range: `bytes=${range}`,
}) }).promise()
.then(res => { .then(res => {
const { begin, end } = getOuterRange(range, bytes); const { begin, end } = getOuterRange(range, bytes);
const total = (end - begin) + 1; const total = (end - begin) + 1;
@ -68,13 +68,13 @@ function uploadParts(bytes, uploadId) {
return Promise.map([1, 2], part => return Promise.map([1, 2], part =>
execFileAsync('dd', [`if=${name}`, `of=${name}.mpuPart${part}`, execFileAsync('dd', [`if=${name}`, `of=${name}.mpuPart${part}`,
'bs=5242880', `skip=${part - 1}`, 'count=1']) 'bs=5242880', `skip=${part - 1}`, 'count=1'])
.then(() => s3.uploadPartPromise({ .then(() => s3.uploadPart({
Bucket: bucket, Bucket: bucket,
Key: key, Key: key,
PartNumber: part, PartNumber: part,
UploadId: uploadId, UploadId: uploadId,
Body: createReadStream(`${name}.mpuPart${part}`), Body: createReadStream(`${name}.mpuPart${part}`),
})) }).promise())
); );
} }
@ -97,17 +97,17 @@ describe('aws-node-sdk range tests', () => {
let uploadId; let uploadId;
beforeEach(() => beforeEach(() =>
s3.createBucketPromise({ Bucket: bucket }) s3.createBucket({ Bucket: bucket }).promise()
.then(() => s3.createMultipartUploadPromise({ .then(() => s3.createMultipartUpload({
Bucket: bucket, Bucket: bucket,
Key: key, Key: key,
})) }).promise())
.then(res => { .then(res => {
uploadId = res.UploadId; uploadId = res.UploadId;
}) })
.then(() => createHashedFile(fileSize)) .then(() => createHashedFile(fileSize))
.then(() => uploadParts(fileSize, uploadId)) .then(() => uploadParts(fileSize, uploadId))
.then(res => s3.completeMultipartUploadPromise({ .then(res => s3.completeMultipartUpload({
Bucket: bucket, Bucket: bucket,
Key: key, Key: key,
UploadId: uploadId, UploadId: uploadId,
@ -123,15 +123,15 @@ describe('aws-node-sdk range tests', () => {
}, },
], ],
}, },
})) }).promise())
); );
afterEach(() => bucketUtil.empty(bucket) afterEach(() => bucketUtil.empty(bucket)
.then(() => s3.abortMultipartUploadPromise({ .then(() => s3.abortMultipartUpload({
Bucket: bucket, Bucket: bucket,
Key: key, Key: key,
UploadId: uploadId, UploadId: uploadId,
})) }).promise())
.catch(err => new Promise((resolve, reject) => { .catch(err => new Promise((resolve, reject) => {
if (err.code !== 'NoSuchUpload') { if (err.code !== 'NoSuchUpload') {
reject(err); reject(err);
@ -164,13 +164,13 @@ describe('aws-node-sdk range tests', () => {
const fileSize = 2000; const fileSize = 2000;
beforeEach(() => beforeEach(() =>
s3.createBucketPromise({ Bucket: bucket }) s3.createBucket({ Bucket: bucket }).promise()
.then(() => createHashedFile(fileSize)) .then(() => createHashedFile(fileSize))
.then(() => s3.putObjectPromise({ .then(() => s3.putObject({
Bucket: bucket, Bucket: bucket,
Key: key, Key: key,
Body: createReadStream(`hashedFile.${fileSize}`), Body: createReadStream(`hashedFile.${fileSize}`),
}))); }).promise()));
afterEach(() => afterEach(() =>
bucketUtil.empty(bucket) bucketUtil.empty(bucket)
@ -221,13 +221,13 @@ describe('aws-node-sdk range tests', () => {
const fileSize = 2900; const fileSize = 2900;
beforeEach(() => beforeEach(() =>
s3.createBucketPromise({ Bucket: bucket }) s3.createBucket({ Bucket: bucket }).promise()
.then(() => createHashedFile(fileSize)) .then(() => createHashedFile(fileSize))
.then(() => s3.putObjectPromise({ .then(() => s3.putObject({
Bucket: bucket, Bucket: bucket,
Key: key, Key: key,
Body: createReadStream(`hashedFile.${fileSize}`), Body: createReadStream(`hashedFile.${fileSize}`),
}))); }).promise()));
afterEach(() => afterEach(() =>
bucketUtil.empty(bucket) bucketUtil.empty(bucket)

View File

@ -34,21 +34,21 @@ describe('User visits bucket website endpoint and requests resource ' +
describe('when x-amz-website-redirect-location: /redirect.html', () => { describe('when x-amz-website-redirect-location: /redirect.html', () => {
beforeEach(() => { beforeEach(() => {
const webConfig = new WebsiteConfigTester('index.html'); const webConfig = new WebsiteConfigTester('index.html');
return s3.putBucketWebsitePromise({ Bucket: bucket, return s3.putBucketWebsite({ Bucket: bucket,
WebsiteConfiguration: webConfig }) WebsiteConfiguration: webConfig }).promise()
.then(() => s3.putObjectPromise({ Bucket: bucket, .then(() => s3.putObject({ Bucket: bucket,
Key: 'index.html', Key: 'index.html',
ACL: 'public-read', ACL: 'public-read',
Body: fs.readFileSync(path.join(__dirname, Body: fs.readFileSync(path.join(__dirname,
'/websiteFiles/index.html')), '/websiteFiles/index.html')),
ContentType: 'text/html', ContentType: 'text/html',
WebsiteRedirectLocation: '/redirect.html' })) WebsiteRedirectLocation: '/redirect.html' }).promise())
.then(() => s3.putObjectPromise({ Bucket: bucket, .then(() => s3.putObject({ Bucket: bucket,
Key: 'redirect.html', Key: 'redirect.html',
ACL: 'public-read', ACL: 'public-read',
Body: fs.readFileSync(path.join(__dirname, Body: fs.readFileSync(path.join(__dirname,
'/websiteFiles/redirect.html')), '/websiteFiles/redirect.html')),
ContentType: 'text/html' })); ContentType: 'text/html' }).promise());
}); });
afterEach(() => bucketUtil.empty(bucket)); afterEach(() => bucketUtil.empty(bucket));
@ -76,15 +76,15 @@ describe('User visits bucket website endpoint and requests resource ' +
() => { () => {
beforeEach(() => { beforeEach(() => {
const webConfig = new WebsiteConfigTester('index.html'); const webConfig = new WebsiteConfigTester('index.html');
return s3.putBucketWebsitePromise({ Bucket: bucket, return s3.putBucketWebsite({ Bucket: bucket,
WebsiteConfiguration: webConfig }) WebsiteConfiguration: webConfig }).promise()
.then(() => s3.putObjectPromise({ Bucket: bucket, .then(() => s3.putObject({ Bucket: bucket,
Key: 'index.html', Key: 'index.html',
ACL: 'public-read', ACL: 'public-read',
Body: fs.readFileSync(path.join(__dirname, Body: fs.readFileSync(path.join(__dirname,
'/websiteFiles/index.html')), '/websiteFiles/index.html')),
ContentType: 'text/html', ContentType: 'text/html',
WebsiteRedirectLocation: 'https://www.google.com' })); WebsiteRedirectLocation: 'https://www.google.com' }).promise());
}); });
afterEach(() => bucketUtil.empty(bucket)); afterEach(() => bucketUtil.empty(bucket));
@ -112,14 +112,14 @@ describe('User visits bucket website endpoint and requests resource ' +
describe('when key with header is private', () => { describe('when key with header is private', () => {
beforeEach(() => { beforeEach(() => {
const webConfig = new WebsiteConfigTester('index.html'); const webConfig = new WebsiteConfigTester('index.html');
return s3.putBucketWebsitePromise({ Bucket: bucket, return s3.putBucketWebsite({ Bucket: bucket,
WebsiteConfiguration: webConfig }) WebsiteConfiguration: webConfig }).promise()
.then(() => s3.putObjectPromise({ Bucket: bucket, .then(() => s3.putObject({ Bucket: bucket,
Key: 'index.html', Key: 'index.html',
Body: fs.readFileSync(path.join(__dirname, Body: fs.readFileSync(path.join(__dirname,
'/websiteFiles/index.html')), '/websiteFiles/index.html')),
ContentType: 'text/html', ContentType: 'text/html',
WebsiteRedirectLocation: 'https://www.google.com' })); WebsiteRedirectLocation: 'https://www.google.com' }).promise());
}); });
afterEach(() => bucketUtil.empty(bucket)); afterEach(() => bucketUtil.empty(bucket));
@ -154,20 +154,20 @@ describe('User visits bucket website endpoint and requests resource ' +
HostName: 'www.google.com', HostName: 'www.google.com',
}; };
webConfig.addRoutingRule(redirect, condition); webConfig.addRoutingRule(redirect, condition);
return s3.putBucketWebsitePromise({ Bucket: bucket, return s3.putBucketWebsite({ Bucket: bucket,
WebsiteConfiguration: webConfig }) WebsiteConfiguration: webConfig }).promise()
.then(() => s3.putObjectPromise({ Bucket: bucket, .then(() => s3.putObject({ Bucket: bucket,
Key: 'index.html', Key: 'index.html',
Body: fs.readFileSync(path.join(__dirname, Body: fs.readFileSync(path.join(__dirname,
'/websiteFiles/index.html')), '/websiteFiles/index.html')),
ContentType: 'text/html', ContentType: 'text/html',
WebsiteRedirectLocation: '/redirect.html' })) WebsiteRedirectLocation: '/redirect.html' }).promise())
.then(() => s3.putObjectPromise({ Bucket: bucket, .then(() => s3.putObject({ Bucket: bucket,
Key: 'redirect.html', Key: 'redirect.html',
ACL: 'public-read', ACL: 'public-read',
Body: fs.readFileSync(path.join(__dirname, Body: fs.readFileSync(path.join(__dirname,
'/websiteFiles/redirect.html')), '/websiteFiles/redirect.html')),
ContentType: 'text/html' })); ContentType: 'text/html' }).promise());
}); });
afterEach(() => bucketUtil.empty(bucket)); afterEach(() => bucketUtil.empty(bucket));
@ -203,15 +203,15 @@ describe('User visits bucket website endpoint and requests resource ' +
}; };
const webConfig = new WebsiteConfigTester(null, null, const webConfig = new WebsiteConfigTester(null, null,
redirectAllTo); redirectAllTo);
return s3.putBucketWebsitePromise({ Bucket: bucket, return s3.putBucketWebsite({ Bucket: bucket,
WebsiteConfiguration: webConfig }) WebsiteConfiguration: webConfig }).promise()
.then(() => s3.putObjectPromise({ Bucket: bucket, .then(() => s3.putObject({ Bucket: bucket,
Key: 'index.html', Key: 'index.html',
ACL: 'public-read', ACL: 'public-read',
Body: fs.readFileSync(path.join(__dirname, Body: fs.readFileSync(path.join(__dirname,
'/websiteFiles/index.html')), '/websiteFiles/index.html')),
ContentType: 'text/html', ContentType: 'text/html',
WebsiteRedirectLocation: '/redirect.html' })); WebsiteRedirectLocation: '/redirect.html' }).promise());
}); });
afterEach(() => bucketUtil.empty(bucket)); afterEach(() => bucketUtil.empty(bucket));
@ -250,15 +250,15 @@ describe('User visits bucket website endpoint and requests resource ' +
HostName: 'www.google.com', HostName: 'www.google.com',
}; };
webConfig.addRoutingRule(redirect, condition); webConfig.addRoutingRule(redirect, condition);
return s3.putBucketWebsitePromise({ Bucket: bucket, return s3.putBucketWebsite({ Bucket: bucket,
WebsiteConfiguration: webConfig }) WebsiteConfiguration: webConfig }).promise()
.then(() => s3.putObjectPromise({ Bucket: bucket, .then(() => s3.putObject({ Bucket: bucket,
Key: 'about/index.html', Key: 'about/index.html',
ACL: 'public-read', ACL: 'public-read',
Body: fs.readFileSync(path.join(__dirname, Body: fs.readFileSync(path.join(__dirname,
'/websiteFiles/index.html')), '/websiteFiles/index.html')),
ContentType: 'text/html', ContentType: 'text/html',
WebsiteRedirectLocation: '/redirect.html' })); WebsiteRedirectLocation: '/redirect.html' }).promise());
}); });
afterEach(() => bucketUtil.empty(bucket)); afterEach(() => bucketUtil.empty(bucket));
@ -296,21 +296,21 @@ describe('User visits bucket website endpoint and requests resource ' +
ReplaceKeyWith: 'redirect.html', ReplaceKeyWith: 'redirect.html',
}; };
webConfig.addRoutingRule(redirect, condition); webConfig.addRoutingRule(redirect, condition);
return s3.putBucketWebsitePromise({ Bucket: bucket, return s3.putBucketWebsite({ Bucket: bucket,
WebsiteConfiguration: webConfig }) WebsiteConfiguration: webConfig }).promise()
.then(() => s3.putObjectPromise({ Bucket: bucket, .then(() => s3.putObject({ Bucket: bucket,
Key: 'index.html', Key: 'index.html',
ACL: 'public-read', ACL: 'public-read',
Body: fs.readFileSync(path.join(__dirname, Body: fs.readFileSync(path.join(__dirname,
'/websiteFiles/index.html')), '/websiteFiles/index.html')),
ContentType: 'text/html', ContentType: 'text/html',
WebsiteRedirectLocation: 'https://www.google.com' })) WebsiteRedirectLocation: 'https://www.google.com' }).promise())
.then(() => s3.putObjectPromise({ Bucket: bucket, .then(() => s3.putObject({ Bucket: bucket,
Key: 'redirect.html', Key: 'redirect.html',
ACL: 'public-read', ACL: 'public-read',
Body: fs.readFileSync(path.join(__dirname, Body: fs.readFileSync(path.join(__dirname,
'/websiteFiles/redirect.html')), '/websiteFiles/redirect.html')),
ContentType: 'text/html' })); ContentType: 'text/html' }).promise());
}); });
afterEach(() => bucketUtil.empty(bucket)); afterEach(() => bucketUtil.empty(bucket));

View File

@ -1,6 +1,6 @@
const assert = require('assert'); const assert = require('assert');
const tv4 = require('tv4'); const tv4 = require('tv4');
const Promise = require('bluebird'); const bluebird = require('bluebird');
const async = require('async'); const async = require('async');
const { S3 } = require('aws-sdk'); const { S3 } = require('aws-sdk');
@ -153,7 +153,7 @@ describeFn('GET Service - AWS.S3.listBuckets', function getService() {
it('should list buckets', done => { it('should list buckets', done => {
s3 s3
.listBucketsPromise() .listBuckets().promise()
.then(data => { .then(data => {
const isValidResponse = tv4.validate(data, svcSchema); const isValidResponse = tv4.validate(data, svcSchema);
if (!isValidResponse) { if (!isValidResponse) {
@ -196,13 +196,13 @@ describeFn('GET Service - AWS.S3.listBuckets', function getService() {
let anotherS3; let anotherS3;
before(() => { before(() => {
anotherS3 = Promise.promisifyAll(new S3(getConfig('lisa')), anotherS3 = new S3(getConfig('lisa'));
{ suffix: 'Promise' }); anotherS3.config.setPromisesDependency(bluebird);
}); });
it('should not return other accounts bucket list', done => { it('should not return other accounts bucket list', done => {
anotherS3 anotherS3
.listBucketsPromise() .listBuckets().promise()
.then(data => { .then(data => {
const hasSameBuckets = data.Buckets const hasSameBuckets = data.Buckets
.filter(filterFn) .filter(filterFn)

View File

@ -29,7 +29,7 @@ describe('aws-node-sdk test delete bucket', () => {
async.waterfall([ async.waterfall([
next => s3.createBucket({ Bucket: bucketName }, next => s3.createBucket({ Bucket: bucketName },
err => next(err)), err => next(err)),
next => s3.putBucketVersioningPromise({ next => s3.putBucketVersioning({
Bucket: bucketName, Bucket: bucketName,
VersioningConfiguration: { VersioningConfiguration: {
Status: 'Enabled', Status: 'Enabled',

View File

@ -94,13 +94,13 @@ describe('Multi-Object Versioning Delete Success', function success() {
it('should batch delete 1000 objects quietly', () => { it('should batch delete 1000 objects quietly', () => {
const objects = objectsRes.slice(0, 1000).map(obj => const objects = objectsRes.slice(0, 1000).map(obj =>
({ Key: obj.Key, VersionId: obj.VersionId })); ({ Key: obj.Key, VersionId: obj.VersionId }));
return s3.deleteObjectsPromise({ return s3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
Quiet: true, Quiet: true,
}, },
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.Deleted.length, 0); assert.strictEqual(res.Deleted.length, 0);
assert.strictEqual(res.Errors.length, 0); assert.strictEqual(res.Errors.length, 0);
}).catch(err => { }).catch(err => {
@ -111,13 +111,13 @@ describe('Multi-Object Versioning Delete Success', function success() {
it('should batch delete 1000 objects', () => { it('should batch delete 1000 objects', () => {
const objects = objectsRes.slice(0, 1000).map(obj => const objects = objectsRes.slice(0, 1000).map(obj =>
({ Key: obj.Key, VersionId: obj.VersionId })); ({ Key: obj.Key, VersionId: obj.VersionId }));
return s3.deleteObjectsPromise({ return s3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
Quiet: false, Quiet: false,
}, },
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.Deleted.length, 1000); assert.strictEqual(res.Deleted.length, 1000);
// order of returned objects not sorted // order of returned objects not sorted
assert.deepStrictEqual(sortList(res.Deleted), assert.deepStrictEqual(sortList(res.Deleted),
@ -133,12 +133,12 @@ describe('Multi-Object Versioning Delete Success', function success() {
const objects = objectsRes.slice(0, 1000).map(obj => const objects = objectsRes.slice(0, 1000).map(obj =>
({ Key: obj.Key, VersionId: obj.VersionId })); ({ Key: obj.Key, VersionId: obj.VersionId }));
objects[0].VersionId = 'invalid-version-id'; objects[0].VersionId = 'invalid-version-id';
return s3.deleteObjectsPromise({ return s3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
}, },
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.Deleted.length, 999); assert.strictEqual(res.Deleted.length, 999);
assert.strictEqual(res.Errors.length, 1); assert.strictEqual(res.Errors.length, 1);
assert.strictEqual(res.Errors[0].Code, 'NoSuchVersion'); assert.strictEqual(res.Errors[0].Code, 'NoSuchVersion');
@ -153,12 +153,12 @@ describe('Multi-Object Versioning Delete Success', function success() {
const objects = objectsRes.slice(0, 1000).map(obj => const objects = objectsRes.slice(0, 1000).map(obj =>
({ Key: obj.Key, VersionId: obj.VersionId })); ({ Key: obj.Key, VersionId: obj.VersionId }));
objects[0].VersionId = nonExistingId; objects[0].VersionId = nonExistingId;
return s3.deleteObjectsPromise({ return s3.deleteObjects({
Bucket: bucketName, Bucket: bucketName,
Delete: { Delete: {
Objects: objects, Objects: objects,
}, },
}).then(res => { }).promise().then(res => {
assert.strictEqual(res.Deleted.length, 1000); assert.strictEqual(res.Deleted.length, 1000);
assert.strictEqual(res.Errors.length, 0); assert.strictEqual(res.Errors.length, 0);
const foundVersionId = res.Deleted.find(entry => const foundVersionId = res.Deleted.find(entry =>
@ -183,7 +183,7 @@ describe('Multi-Object Versioning Delete - deleting delete marker',
async.waterfall([ async.waterfall([
next => s3.createBucket({ Bucket: bucketName }, next => s3.createBucket({ Bucket: bucketName },
err => next(err)), err => next(err)),
next => s3.putBucketVersioningPromise({ next => s3.putBucketVersioning({
Bucket: bucketName, Bucket: bucketName,
VersioningConfiguration: { VersioningConfiguration: {
Status: 'Enabled', Status: 'Enabled',

View File

@ -88,11 +88,11 @@ describe('Object Version Copy', () => {
beforeEach(() => bucketUtil.createOne(sourceBucketName) beforeEach(() => bucketUtil.createOne(sourceBucketName)
.then(() => bucketUtil.createOne(destBucketName)) .then(() => bucketUtil.createOne(destBucketName))
.then(() => s3.putBucketVersioningPromise({ .then(() => s3.putBucketVersioning({
Bucket: sourceBucketName, Bucket: sourceBucketName,
VersioningConfiguration: { Status: 'Enabled' }, VersioningConfiguration: { Status: 'Enabled' },
})) }).promise())
.then(() => s3.putObjectPromise({ .then(() => s3.putObject({
Bucket: sourceBucketName, Bucket: sourceBucketName,
Key: sourceObjName, Key: sourceObjName,
Body: content, Body: content,
@ -102,22 +102,22 @@ describe('Object Version Copy', () => {
ContentEncoding: originalContentEncoding, ContentEncoding: originalContentEncoding,
Expires: originalExpires, Expires: originalExpires,
Tagging: originalTagging, Tagging: originalTagging,
})).then(res => { }).promise()).then(res => {
etag = res.ETag; etag = res.ETag;
versionId = res.VersionId; versionId = res.VersionId;
copySource = `${sourceBucketName}/${sourceObjName}` + copySource = `${sourceBucketName}/${sourceObjName}` +
`?versionId=${versionId}`; `?versionId=${versionId}`;
etagTrim = etag.substring(1, etag.length - 1); etagTrim = etag.substring(1, etag.length - 1);
copySourceVersionId = res.VersionId; copySourceVersionId = res.VersionId;
return s3.headObjectPromise({ return s3.headObject({
Bucket: sourceBucketName, Bucket: sourceBucketName,
Key: sourceObjName, Key: sourceObjName,
}); }).promise();
}).then(res => { }).then(res => {
lastModified = res.LastModified; lastModified = res.LastModified;
}).then(() => s3.putObjectPromise({ Bucket: sourceBucketName, }).then(() => s3.putObject({ Bucket: sourceBucketName,
Key: sourceObjName, Key: sourceObjName,
Body: secondContent })) Body: secondContent }).promise())
); );
afterEach(done => async.parallel([ afterEach(done => async.parallel([

View File

@ -50,7 +50,7 @@ describe('Versioning on a replication source bucket', () => {
beforeEach(done => { beforeEach(done => {
async.waterfall([ async.waterfall([
cb => s3.createBucket({ Bucket: bucketName }, e => cb(e)), cb => s3.createBucket({ Bucket: bucketName }, e => cb(e)),
cb => s3.putBucketVersioningPromise({ cb => s3.putBucketVersioning({
Bucket: bucketName, Bucket: bucketName,
VersioningConfiguration: { VersioningConfiguration: {
Status: 'Enabled', Status: 'Enabled',

View File

@ -111,13 +111,13 @@ describeSkipIfAWS('backbeat routes', () => {
bucketUtil = new BucketUtility( bucketUtil = new BucketUtility(
'default', { signatureVersion: 'v4' }); 'default', { signatureVersion: 'v4' });
s3 = bucketUtil.s3; s3 = bucketUtil.s3;
s3.createBucketPromise({ Bucket: TEST_BUCKET }) s3.createBucket({ Bucket: TEST_BUCKET }).promise()
.then(() => s3.putBucketVersioningPromise( .then(() => s3.putBucketVersioning(
{ {
Bucket: TEST_BUCKET, Bucket: TEST_BUCKET,
VersioningConfiguration: { Status: 'Enabled' }, VersioningConfiguration: { Status: 'Enabled' },
})) }).promise())
.then(() => s3.createBucketPromise({ Bucket: NONVERSIONED_BUCKET })) .then(() => s3.createBucket({ Bucket: NONVERSIONED_BUCKET }).promise())
.then(() => done()) .then(() => done())
.catch(err => { .catch(err => {
process.stdout.write(`Error creating bucket: ${err}\n`); process.stdout.write(`Error creating bucket: ${err}\n`);
@ -126,8 +126,8 @@ describeSkipIfAWS('backbeat routes', () => {
}); });
after(done => { after(done => {
bucketUtil.empty(TEST_BUCKET) bucketUtil.empty(TEST_BUCKET)
.then(() => s3.deleteBucketPromise({ Bucket: TEST_BUCKET })) .then(() => s3.deleteBucket({ Bucket: TEST_BUCKET }).promise())
.then(() => s3.deleteBucketPromise({ Bucket: NONVERSIONED_BUCKET })) .then(() => s3.deleteBucket({ Bucket: NONVERSIONED_BUCKET }).promise())
.then(() => done()); .then(() => done());
}); });

View File

135
yarn.lock
View File

@ -466,6 +466,15 @@ agent-base@~4.2.1:
dependencies: dependencies:
es6-promisify "^5.0.0" es6-promisify "^5.0.0"
agentkeepalive@^4.1.3:
version "4.1.3"
resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.3.tgz#360a09d743a1f4fde749f9ba07caa6575d08259a"
integrity sha512-wn8fw19xKZwdGPO47jivonaHRTd+nGOMP1z11sgGeQzDy2xd5FG0R67dIMcKHDE2cJ5y+YXV30XVGUBPRSY7Hg==
dependencies:
debug "^4.1.0"
depd "^1.1.2"
humanize-ms "^1.2.1"
ajv-keywords@^1.0.0: ajv-keywords@^1.0.0:
version "1.5.1" version "1.5.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
@ -614,12 +623,13 @@ arraybuffer.slice@~0.0.7:
resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
"arsenal@github:scality/Arsenal#26a00ba": "arsenal@github:scality/Arsenal#w/7.9/bugfix/S3C-2201-econnreset-rest-client-keep-alive":
version "7.7.0" version "7.7.0"
resolved "https://codeload.github.com/scality/Arsenal/tar.gz/26a00babb422403691c7b5c6fff31d24cc721388" resolved "https://codeload.github.com/scality/Arsenal/tar.gz/b8bef65f002f2d396747b736fa7bd6b8c87d0e7b"
dependencies: dependencies:
"@hapi/joi" "^15.1.0" "@hapi/joi" "^15.1.0"
JSONStream "^1.0.0" JSONStream "^1.0.0"
agentkeepalive "^4.1.3"
ajv "6.12.2" ajv "6.12.2"
async "~2.1.5" async "~2.1.5"
debug "~2.6.9" debug "~2.6.9"
@ -639,81 +649,6 @@ arraybuffer.slice@~0.0.7:
optionalDependencies: optionalDependencies:
ioctl "2.0.0" ioctl "2.0.0"
arsenal@scality/Arsenal#32c895b:
version "7.4.3"
resolved "https://codeload.github.com/scality/Arsenal/tar.gz/32c895b21a31eb67dacc6e76d7f58b8142bf3ad1"
dependencies:
"@hapi/joi" "^15.1.0"
JSONStream "^1.0.0"
ajv "4.10.0"
async "~2.1.5"
debug "~2.3.3"
diskusage "^1.1.1"
ioredis "4.9.5"
ipaddr.js "1.2.0"
level "~5.0.1"
level-sublevel "~6.6.5"
node-forge "^0.7.1"
simple-glob "^0.1"
socket.io "~1.7.3"
socket.io-client "~1.7.3"
utf8 "2.1.2"
uuid "^3.0.1"
werelogs scality/werelogs#0ff7ec82
xml2js "~0.4.16"
optionalDependencies:
ioctl "2.0.0"
arsenal@scality/Arsenal#9f2e74e:
version "7.4.3"
resolved "https://codeload.github.com/scality/Arsenal/tar.gz/9f2e74ec6972527c2a9ca6ecb4155618f123fc19"
dependencies:
JSONStream "^1.0.0"
ajv "4.10.0"
async "~2.1.5"
debug "~2.3.3"
diskusage "^1.1.1"
ioredis "4.9.5"
ipaddr.js "1.2.0"
joi "^10.6"
level "~5.0.1"
level-sublevel "~6.6.5"
node-forge "^0.7.1"
simple-glob "^0.1"
socket.io "~1.7.3"
socket.io-client "~1.7.3"
utf8 "2.1.2"
uuid "^3.0.1"
werelogs scality/werelogs#0ff7ec82
xml2js "~0.4.16"
optionalDependencies:
ioctl "2.0.0"
arsenal@scality/Arsenal#b03f5b8:
version "7.4.3"
resolved "https://codeload.github.com/scality/Arsenal/tar.gz/b03f5b80acd6acaaf8dd2d49cd955e6b95279ab3"
dependencies:
JSONStream "^1.0.0"
ajv "4.10.0"
async "~2.1.5"
debug "~2.3.3"
diskusage "^1.1.1"
ioredis "4.9.5"
ipaddr.js "1.2.0"
joi "^10.6"
level "~5.0.1"
level-sublevel "~6.6.5"
node-forge "^0.7.1"
simple-glob "^0.1"
socket.io "~1.7.3"
socket.io-client "~1.7.3"
utf8 "2.1.2"
uuid "^3.0.1"
werelogs scality/werelogs#0ff7ec82
xml2js "~0.4.16"
optionalDependencies:
ioctl "2.0.0"
asap@~2.0.3: asap@~2.0.3:
version "2.0.6" version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
@ -789,19 +724,19 @@ asynckit@^0.4.0:
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
aws-sdk@2.363.0: aws-sdk@2.831.0:
version "2.363.0" version "2.831.0"
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.363.0.tgz#6d366a78d5b008fd927d6ff24815d39d78b54778" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.831.0.tgz#02607cc911a2136e5aabe624c1282e821830aef2"
integrity sha512-kQOfjzCEllH45OFN0z3fvhpSWDFWu19715A7TztHx6IEWKwwIEyd3b2XhTZtQLJrI1Giv7iGALwH46gybH9HJw== integrity sha512-lrOjbGFpjk2xpESyUx2PGsTZgptCy5xycZazPeakNbFO19cOoxjHx3xyxOHsMCYb3pQwns35UvChQT60B4u6cw==
dependencies: dependencies:
buffer "4.9.1" buffer "4.9.2"
events "1.1.1" events "1.1.1"
ieee754 "1.1.8" ieee754 "1.1.13"
jmespath "0.15.0" jmespath "0.15.0"
querystring "0.2.0" querystring "0.2.0"
sax "1.2.1" sax "1.2.1"
url "0.10.3" url "0.10.3"
uuid "3.1.0" uuid "3.3.2"
xml2js "0.4.19" xml2js "0.4.19"
aws-sdk@^2.2.23: aws-sdk@^2.2.23:
@ -1095,15 +1030,6 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
buffer@4.9.1:
version "4.9.1"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
dependencies:
base64-js "^1.0.2"
ieee754 "^1.1.4"
isarray "^1.0.0"
buffer@4.9.2: buffer@4.9.2:
version "4.9.2" version "4.9.2"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
@ -1605,7 +1531,7 @@ debug@3.1.0, debug@=3.1.0, debug@~3.1.0:
dependencies: dependencies:
ms "2.0.0" ms "2.0.0"
debug@4, debug@^4.1.1, debug@^4.2.0: debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
version "4.3.1" version "4.3.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
@ -1708,7 +1634,7 @@ denque@^1.1.0:
resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf" resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf"
integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ== integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==
depd@~1.1.2: depd@^1.1.2, depd@~1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
@ -2931,6 +2857,13 @@ https-proxy-agent@^3.0.0:
agent-base "^4.3.0" agent-base "^4.3.0"
debug "^3.1.0" debug "^3.1.0"
humanize-ms@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=
dependencies:
ms "^2.0.0"
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
version "0.4.24" version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@ -2943,11 +2876,6 @@ ieee754@1.1.13:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
ieee754@1.1.8:
version "1.1.8"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=
ieee754@^1.1.13, ieee754@^1.1.4: ieee754@^1.1.13, ieee754@^1.1.4:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
@ -4383,7 +4311,7 @@ ms@2.1.2:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
ms@^2.1.1: ms@^2.0.0, ms@^2.1.1:
version "2.1.3" version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@ -6781,11 +6709,6 @@ utils-merge@1.0.1:
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
uuid@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
integrity sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==
uuid@3.3.2: uuid@3.3.2:
version "3.3.2" version "3.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"