awssum-amazon-s3
Version:
AwsSum plugin for Amazon Simple Storage Service (S3).
234 lines (203 loc) • 7.88 kB
JavaScript
// --------------------------------------------------------------------------------------------------------------------
//
// s3.js - test for AWS Simple Notification Service
//
// Copyright (c) 2011 AppsAttic Ltd - http://www.appsattic.com/
// Written by Andrew Chilton <chilts@appsattic.com>
//
// License: http://opensource.org/licenses/MIT
//
// --------------------------------------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------------------------------------
// requires
var _ = require('underscore');
var tap = require("tap");
var amazonS3 = require('../awssum-amazon-s3.js');
var S3 = amazonS3.S3;
var test = tap.test;
var plan = tap.plan;
// --------------------------------------------------------------------------------------------------------------------
// basic tests
test("create s3 object", function (t) {
var s3 = new S3({
accessKeyId : 'access_key_id',
secretAccessKey : 'secret_access_key',
awsAccountId : '1111-2222-3333',
region : amazonS3.US_WEST_1
});
t.equal('access_key_id', s3.accessKeyId(), 'Access Key ID set properly');
t.equal('secret_access_key', s3.secretAccessKey(), 'Secret Access Key set properly');
t.equal('111122223333', s3.awsAccountId(), 'a - AWS Account ID set properly');
t.equal('1111-2222-3333', s3._awsAccountId(), 'b - AWS Account ID set properly');
t.equal('us-west-1', s3.region(), 'Region is set properly');
t.end();
});
test("test all endpoints", function (t) {
var s31 = new S3({
accessKeyId : 'access_key_id',
secretAccessKey : 'secret_access_key',
awsAccountId : '1111-2222-3333',
region : amazonS3.US_EAST_1
});
var s32 = new S3({
accessKeyId : 'access_key_id',
secretAccessKey : 'secret_access_key',
awsAccountId : '1111-2222-3333',
region : amazonS3.US_WEST_1
});
var s33 = new S3({
accessKeyId : 'access_key_id',
secretAccessKey : 'secret_access_key',
awsAccountId : '1111-2222-3333',
region : amazonS3.EU_WEST_1
});
var s34 = new S3({
accessKeyId : 'access_key_id',
secretAccessKey : 'secret_access_key',
awsAccountId : '1111-2222-3333',
region : amazonS3.AP_SOUTHEAST_1
});
var s35 = new S3({
accessKeyId : 'access_key_id',
secretAccessKey : 'secret_access_key',
awsAccountId : '1111-2222-3333',
region : amazonS3.AP_NORTHEAST_1
});
t.equal('s3.amazonaws.com', s31.host(), '1) Endpoint is correct');
t.equal('s3-us-west-1.amazonaws.com', s32.host(), '2) Endpoint is correct');
t.equal('s3-eu-west-1.amazonaws.com', s33.host(), '3) Endpoint is correct');
t.equal('s3-ap-southeast-1.amazonaws.com', s34.host(), '4) Endpoint is correct');
t.equal('s3-ap-northeast-1.amazonaws.com', s35.host(), '5) Endpoint is correct');
t.end();
});
test("test strToSign", function (t) {
var s3 = new S3({
accessKeyId : 'access_key_id',
secretAccessKey : 'secret_access_key',
awsAccountId : '1111-2222-3333',
region : amazonS3.US_WEST_1
});
// NOTE: since strToSign() is really a private method, we have to set up the options to be pretty complete
// (including empty headers and params) since in the class they would have been setup before this method is every
// called.
var strToSignEmpty1 = s3.strToSign(
{
method : 'GET',
path : '/',
params : [],
headers : {},
},
{}
);
t.equal(strToSignEmpty1, "GET\n\n\n\n/", 'strToSign of ListBuckets');
// set up some generic headers first
var headers = {};
headers.Date = "Mon, 26 Oct 2011 16:07:36 Z";
// test an initial string
var strToSign = s3.strToSign(
{
method : 'POST',
path : '/',
params : [ { name : 'BucketName', value : 'bulk' } ],
headers : headers,
},
{ BucketName : 'bulk' }
);
t.equal(strToSign, "POST\n\n\nMon, 26 Oct 2011 16:07:36 Z\n/bulk/", 'strToSign of common params');
// do a subresource test
var strToSign2 = s3.strToSign(
{
method : 'POST',
path : '/',
params : [ { name : 'versioning' }, { name : 'BucketName', value : 'bulk' } ],
headers : headers,
},
{ BucketName : 'bulk' }
);
t.equal(
strToSign2,
"POST\n\n\nMon, 26 Oct 2011 16:07:36 Z\n/bulk/?versioning",
'strToSign with subresource of versioning'
);
// do a subresource test
var strToSign3 = s3.strToSign(
{
method : 'POST',
path : '/',
params : [ { name : 'website' }, { name : 'BucketName', value : 'bulk' } ],
headers : headers,
},
{ BucketName : 'bulk' }
);
t.equal(
strToSign3,
"POST\n\n\nMon, 26 Oct 2011 16:07:36 Z\n/bulk/?website",
'strToSign with subresource of website'
);
// do an object test
var strToSign4 = s3.strToSign(
{
method : 'PUT',
path : '/',
params : [ { name : 'BucketName', value : 'bulk' }, { name : 'ObjectName', value : 'my-object.txt' } ],
headers : headers,
},
{ BucketName : 'bulk', ObjectName : 'my-object.txt' }
);
t.equal(
strToSign4,
"PUT\n\n\nMon, 26 Oct 2011 16:07:36 Z\n/bulk/my-object.txt",
'strToSign with an object'
);
// do an object with a space in the name
var strToSign5 = s3.strToSign(
{
method : 'PUT',
path : '/',
params : [ { name : 'BucketName', value : 'bulk' }, { name : 'ObjectName', value : 'my object.txt' } ],
headers : headers,
},
{ BucketName : 'bulk', ObjectName : 'my object.txt' }
);
t.equal(
strToSign5,
"PUT\n\n\nMon, 26 Oct 2011 16:07:36 Z\n/bulk/my%20object.txt",
'strToSign with an object'
);
// do an object with 'x-amz-*' headers
headers['x-amz-meta-username'] = "chilts";
var strToSign6 = s3.strToSign(
{
method : 'PUT',
path : '/',
params : [ { name : 'BucketName', value : 'bulk' }, { name : 'ObjectName', value : 'my-object.txt' } ],
headers : headers,
},
{ BucketName : 'bulk', ObjectName : 'my-object.txt' }
);
t.equal(
strToSign6,
"PUT\n\n\nMon, 26 Oct 2011 16:07:36 Z\nx-amz-meta-username:chilts\n/bulk/my-object.txt",
'strToSign with an object'
);
t.end();
});
test("test signature", function (t) {
var s3 = new S3({
accessKeyId : 'access_key_id',
secretAccessKey : 'secret_access_key',
awsAccountId : '1111-2222-3333',
region : amazonS3.US_WEST_1
});
var strToSign = "GET\n\n\nTue, 25 Oct 2011 03:09:21 UTC\n/";
var sig = s3.signature(strToSign);
t.equal(sig, 'OFs3nLlSvlN6EaeNy/IluZpS+E8=', 'signature of ListBuckets request');
var strToSign2 = "GET\n\n\nTue, 25 Oct 2011 03:09:21 UTC\n/bulk/?versioning";
var sig2 = s3.signature(strToSign2);
t.equal(sig2, 'zxmJifiGCl8WgMu2XLaiEx0o5Wo=', 'signature of ListBuckets request with versioning');
var strToSign3 = "PUT\n\n\nMon, 26 Oct 2011 16:07:36 Z\n/bulk/my-object.txt";
var sig3 = s3.signature(strToSign3);
t.equal(sig3, 'jngqlGWTmPDVu3BO7tcYSQHNglc=', 'signature of PutObject');
t.end();
});
// --------------------------------------------------------------------------------------------------------------------