-
Notifications
You must be signed in to change notification settings - Fork 242
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
5145fce
commit acfdc78
Showing
4 changed files
with
235 additions
and
0 deletions.
There are no files selected for viewing
39 changes: 39 additions & 0 deletions
39
tests/functional/aws-node-sdk/test/bucket/deleteBucketQuota.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
const AWS = require('aws-sdk'); | ||
const S3 = AWS.S3; | ||
const assert = require('assert'); | ||
const getConfig = require('../support/config'); | ||
const sendRequest = require('../quota/tooling').sendRequest; | ||
|
||
const bucket = 'deletequotatestbucket'; | ||
const nonExistantBucket = 'deletequotatestnonexistantbucket'; | ||
|
||
describe('Test delete bucket quota', () => { | ||
let s3; | ||
|
||
before(() => { | ||
const config = getConfig('default', { signatureVersion: 'v4' }); | ||
s3 = new S3(config); | ||
AWS.config.update(config); | ||
}); | ||
|
||
beforeEach(done => s3.createBucket({ Bucket: bucket }, done)); | ||
|
||
afterEach(done => s3.deleteBucket({ Bucket: bucket }, done)); | ||
|
||
it('should delete the bucket quota', async () => { | ||
try { | ||
await sendRequest('DELETE', '127.0.0.1:8000', `/${bucket}/?quota=true`); | ||
assert.ok(true); | ||
} catch (err) { | ||
assert.fail(`Expected no error, but got ${err}`); | ||
} | ||
}); | ||
|
||
it('should return no such bucket error', async () => { | ||
try { | ||
await sendRequest('DELETE', '127.0.0.1:8000', `/${nonExistantBucket}/?quota=true`); | ||
} catch (err) { | ||
assert.strictEqual(err.Error.Code[0], 'NoSuchBucket'); | ||
} | ||
}); | ||
}); |
77 changes: 77 additions & 0 deletions
77
tests/functional/aws-node-sdk/test/bucket/getBucketQuota.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
const AWS = require('aws-sdk'); | ||
const S3 = AWS.S3; | ||
const assert = require('assert'); | ||
const getConfig = require('../support/config'); | ||
const sendRequest = require('../quota/tooling').sendRequest; | ||
|
||
const bucket = 'getquotatestbucket'; | ||
const quota = { quota: 1000 }; | ||
|
||
describe('Test get bucket quota', () => { | ||
let s3; | ||
|
||
before(() => { | ||
const config = getConfig('default', { signatureVersion: 'v4' }); | ||
s3 = new S3(config); | ||
AWS.config.update(config); | ||
}); | ||
|
||
beforeEach(done => s3.createBucket({ Bucket: bucket }, done)); | ||
|
||
afterEach(done => s3.deleteBucket({ Bucket: bucket }, done)); | ||
|
||
it('should return the quota', async () => { | ||
try { | ||
await sendRequest('PUT', '127.0.0.1:8000', `/${bucket}/?quota=true`, JSON.stringify(quota)); | ||
const data = await sendRequest('GET', '127.0.0.1:8000', `/${bucket}/?quota=true`); | ||
assert.strictEqual(data.GetBucketQuota.Name[0], bucket); | ||
assert.strictEqual(data.GetBucketQuota.Quota[0], '1000'); | ||
} catch (err) { | ||
assert.fail(`Expected no error, but got ${err}`); | ||
} | ||
}); | ||
|
||
it('should return no such bucket error', async () => { | ||
try { | ||
await sendRequest('GET', '127.0.0.1:8000', '/test/?quota=true'); | ||
} catch (err) { | ||
assert.strictEqual(err.Error.Code[0], 'NoSuchBucket'); | ||
} | ||
}); | ||
|
||
it('should return no such bucket quota', async () => { | ||
try { | ||
await sendRequest('DELETE', '127.0.0.1:8000', `/${bucket}/?quota=true`); | ||
try { | ||
await sendRequest('GET', '127.0.0.1:8000', `/${bucket}/?quota=true`); | ||
assert.fail('Expected NoSuchQuota error'); | ||
} catch (err) { | ||
assert.strictEqual(err.Error.Code[0], 'NoSuchQuota'); | ||
} | ||
} catch (err) { | ||
assert.fail(`Expected no error, but got ${err}`); | ||
} | ||
}); | ||
|
||
it('should return no such bucket error', async () => { | ||
try { | ||
await sendRequest('GET', '127.0.0.1:8000', '/test/?quota=true'); | ||
} catch (err) { | ||
assert.strictEqual(err.Error.Code[0], 'NoSuchBucket'); | ||
} | ||
}); | ||
|
||
it('should return no such bucket quota', async () => { | ||
try { | ||
await sendRequest('DELETE', '127.0.0.1:8000', `/${bucket}/?quota=true`); | ||
try { | ||
await sendRequest('GET', '127.0.0.1:8000', `/${bucket}/?quota=true`); | ||
assert.fail('Expected NoSuchQuota error'); | ||
} catch (err) { | ||
assert.strictEqual(err.Error.Code[0], 'NoSuchQuota'); | ||
} | ||
} catch (err) { | ||
assert.fail(`Expected no error, but got ${err}`); | ||
} | ||
}); | ||
}); |
70 changes: 70 additions & 0 deletions
70
tests/functional/aws-node-sdk/test/bucket/updateBucketQuota.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
const AWS = require('aws-sdk'); | ||
const S3 = AWS.S3; | ||
|
||
const assert = require('assert'); | ||
const getConfig = require('../support/config'); | ||
const sendRequest = require('../quota/tooling').sendRequest; | ||
|
||
const bucket = 'updatequotatestbucket'; | ||
const nonExistantBucket = 'updatequotatestnonexistantbucket'; | ||
const quota = { quota: 2000 }; | ||
const negativeQuota = { quota: -1000 }; | ||
const wrongquotaFromat = '1000'; | ||
const largeQuota = { quota: 1000000000000 }; | ||
|
||
describe('Test update bucket quota', () => { | ||
let s3; | ||
|
||
before(() => { | ||
const config = getConfig('default', { signatureVersion: 'v4' }); | ||
s3 = new S3(config); | ||
AWS.config.update(config); | ||
}); | ||
|
||
beforeEach(done => s3.createBucket({ Bucket: bucket }, done)); | ||
|
||
afterEach(done => s3.deleteBucket({ Bucket: bucket }, done)); | ||
|
||
it('should update the quota', async () => { | ||
try { | ||
await sendRequest('PUT', '127.0.0.1:8000', `/${bucket}/?quota=true`, JSON.stringify(quota)); | ||
assert.ok(true); | ||
} catch (err) { | ||
assert.fail(`Expected no error, but got ${err}`); | ||
} | ||
}); | ||
|
||
it('should return no such bucket error', async () => { | ||
try { | ||
await sendRequest('PUT', '127.0.0.1:8000', `/${nonExistantBucket}/?quota=true`, JSON.stringify(quota)); | ||
} catch (err) { | ||
assert.strictEqual(err.Error.Code[0], 'NoSuchBucket'); | ||
} | ||
}); | ||
|
||
it('should return error when quota is negative', async () => { | ||
try { | ||
await sendRequest('PUT', '127.0.0.1:8000', `/${bucket}/?quota=true`, JSON.stringify(negativeQuota)); | ||
} catch (err) { | ||
assert.strictEqual(err.Error.Code[0], 'InvalidArgument'); | ||
assert.strictEqual(err.Error.Message[0], 'Quota value must be a positive number'); | ||
} | ||
}); | ||
|
||
it('should return error when quota is not in correct format', async () => { | ||
try { | ||
await sendRequest('PUT', '127.0.0.1:8000', `/${bucket}/?quota=true`, wrongquotaFromat); | ||
} catch (err) { | ||
assert.strictEqual(err.Error.Code[0], 'InvalidArgument'); | ||
assert.strictEqual(err.Error.Message[0], 'Request body must be a JSON object'); | ||
} | ||
}); | ||
|
||
it('should handle large quota values', async () => { | ||
try { | ||
await sendRequest('PUT', '127.0.0.1:8000', `/${bucket}/?quota=true`, JSON.stringify(largeQuota)); | ||
} catch (err) { | ||
assert.fail(`Expected no error, but got ${err}`); | ||
} | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
const fetch = require('node-fetch'); | ||
const AWS = require('aws-sdk'); | ||
const xml2js = require('xml2js'); | ||
|
||
const sendRequest = async (method, host, path, body = '') => | ||
new Promise(async (resolve, reject) => { | ||
const service = 's3'; | ||
const endpoint = new AWS.Endpoint(host); | ||
|
||
const request = new AWS.HttpRequest(endpoint); | ||
request.method = method.toUpperCase(); | ||
request.path = path; | ||
request.body = body; | ||
request.headers.Host = host; | ||
request.headers['X-Amz-Date'] = new Date().toISOString().replace(/[:\-]|\.\d{3}/g, ''); | ||
const sha256hash = AWS.util.crypto.sha256(request.body || '', 'hex'); | ||
request.headers['X-Amz-Content-SHA256'] = sha256hash; | ||
request.region = 'us-east-1'; | ||
|
||
const signer = new AWS.Signers.V4(request, service); | ||
signer.addAuthorization(AWS.config.credentials, new Date()); | ||
|
||
const url = `http://${host}${path}`; | ||
const options = { | ||
method: request.method, | ||
headers: request.headers, | ||
}; | ||
|
||
if (method !== 'GET') { | ||
options.body = request.body; | ||
} | ||
|
||
try { | ||
const response = await fetch(url, options); | ||
const text = await response.text(); | ||
const result = await xml2js.parseStringPromise(text); | ||
if (result && result.Error) { | ||
reject(result); | ||
} else { | ||
resolve(result); | ||
} | ||
} catch (error) { | ||
reject(error); | ||
} | ||
}); | ||
|
||
module.exports = { | ||
sendRequest, | ||
}; |