Skip to content

Commit a84d69d

Browse files
jeskewsrchase
authored andcommitted
Feature/run sigv4 test suite (#58)
* Ensure asynchronous region and credential resolution is covered by tests * Factor SJCL-based SHA-256 into its own package to all usage without requiring all browser-based implementations * Add an HTTP message serialization/parsing library * Add support for switching to "S3 mode" via constructor parameters (applyChecksum = true and uriEscapePath = false) * Add official sigv4 test suite * Add a standalone NodeJS-based SigV4 package * Add a standalone browser-based SigV4 package * Add a standalone universal JS SigV4 package * Specify base when parsing HTTP status codes * Remove extra dependencies from crypto-sha256-browser * Ensure tests in signature-v4 are all using crypto-sha256-js
1 parent 103a1da commit a84d69d

File tree

178 files changed

+1740
-61
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

178 files changed

+1740
-61
lines changed

packages/signature-v4/.npmignore

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
/src/
22
/coverage/
3+
/suite/
4+
/scripts/
35
tsconfig.test.json
46

57
*.spec.js
68
*.spec.d.ts
79
*.spec.js.map
8-
9-
*.mock.js
10-
*.mock.d.ts
11-
*.mock.js.map
12-
13-
*.fixture.js
14-
*.fixture.d.ts
15-
*.fixture.js.map

packages/signature-v4/package.json

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22
"name": "@aws/signature-v4",
33
"private": true,
44
"version": "0.0.1",
5-
"description": "A standalone implementation of the AWS Signature V4 request signing algorithm ",
5+
"description": "A standalone implementation of the AWS Signature V4 request signing algorithm",
66
"main": "./build/index.js",
77
"scripts": {
8-
"prepublishOnly": "tsc",
8+
"build": "node scripts/buildSuiteFixture.js && tsc",
9+
"prepublishOnly": "npm run build",
910
"pretest": "tsc -p tsconfig.test.json",
1011
"test": "jest"
1112
},
12-
"author": "aws-javascript-sdk-team@amazon.com",
13-
"license": "UNLICENSED",
13+
"author": "aws-sdk-js@amazon.com",
14+
"license": "Apache-2.0",
1415
"dependencies": {
1516
"@aws/credential-provider-base": "^0.0.1",
1617
"@aws/is-array-buffer": "^0.0.1",
@@ -19,11 +20,12 @@
1920
"@aws/util-hex-encoding": "^0.0.1"
2021
},
2122
"devDependencies": {
22-
"@aws/crypto-sha256-node": "^0.0.1",
23+
"@aws/crypto-sha256-js": "^0.0.1",
24+
"@aws/http-serialization": "^0.0.1",
2325
"@aws/util-buffer-from": "^0.0.1",
2426
"@types/jest": "^20.0.2",
2527
"jest": "^20.0.4",
2628
"typescript": "^2.3"
2729
},
2830
"types": "./build/index.d.ts"
29-
}
31+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
const {parseRequest} = require('@aws/http-serialization');
2+
const {
3+
readdirSync,
4+
readFileSync,
5+
statSync,
6+
writeFileSync,
7+
} = require('fs');
8+
const {dirname, join} = require('path');
9+
10+
const packageRoot = dirname(__dirname);
11+
const suiteRoot = join(packageRoot, 'suite');
12+
13+
const testCases = [];
14+
15+
for (const [testDir, name] of getTestDirectories()) {
16+
testCases.push({
17+
name,
18+
request: Object.assign({protocol: 'https:'}, parseRequest(
19+
readFileSync(join(testDir, `${name}.req`), 'utf8')
20+
)),
21+
authorization: readFileSync(join(testDir, `${name}.authz`), 'utf8'),
22+
});
23+
}
24+
25+
writeFileSync(
26+
join(packageRoot, 'src', 'suite.fixture.ts'),
27+
`
28+
import {HttpRequest} from '@aws/types';
29+
30+
export interface TestCase {
31+
name: string;
32+
request: HttpRequest<string>;
33+
authorization: string;
34+
}
35+
36+
export const region = 'us-east-1';
37+
export const service = 'service';
38+
export const credentials = {
39+
accessKeyId: 'AKIDEXAMPLE',
40+
secretAccessKey: 'wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY'
41+
};
42+
43+
export const signingDate = new Date('2015-08-30T12:36:00Z');
44+
45+
export const requests: Array<TestCase> = ${JSON.stringify(testCases, null, 4)};
46+
`.trim()
47+
);
48+
49+
50+
function *getTestDirectories() {
51+
for (const basename of readdirSync(suiteRoot)) {
52+
const dir = join(suiteRoot, basename);
53+
if (!statSync(dir).isDirectory()) continue;
54+
55+
for (const entry of readdirSync(dir)) {
56+
if (entry.match(/\.req$/)) {
57+
yield [dir, entry.replace(/\.req$/, '')];
58+
}
59+
}
60+
}
61+
}

0 commit comments

Comments
 (0)