Skip to content

Commit c32871d

Browse files
authored
test(client-cognito-identity): add cross platform integ tests (#1309)
1 parent 8ea8e73 commit c32871d

File tree

6 files changed

+186
-3
lines changed

6 files changed

+186
-3
lines changed

clients/client-cognito-identity/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ package-lock.json
1111

1212
*.d.ts
1313
*.js
14+
!karma.conf.js
1415
*.js.map
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
/coverage/
22
/docs/
3+
/e2e/
34
tsconfig.test.json
45
*.tsbuildinfo
6+
jest.config.js
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
/// <reference types="mocha" />
2+
/**
3+
* This is the integration test that make sure the client can make request cross-platform-ly
4+
* in NodeJS, Chromium and Firefox. This test is written in mocha.
5+
*/
6+
import { expect } from "chai";
7+
import { CognitoIdentity } from "../index";
8+
import { Credentials } from "@aws-sdk/types";
9+
import { IAM } from "@aws-sdk/client-iam";
10+
// There will be default values of defaultRegion, credentials, and isBrowser variable in browser tests.
11+
// Define the values for Node.js tests
12+
const region: string | undefined =
13+
(globalThis as any).defaultRegion || undefined;
14+
const credentials: Credentials | undefined =
15+
(globalThis as any).credentials || undefined;
16+
17+
describe("@aws-sdk/client-cognito-identity", function () {
18+
this.timeout(50000);
19+
// Required in run
20+
const unAuthClient = new CognitoIdentity({
21+
region
22+
});
23+
const authClient = new CognitoIdentity({
24+
credentials,
25+
region
26+
});
27+
const iam = new IAM({ credentials, region });
28+
const identityPoolName = `aws_sdk_unit_test_${Date.now()}`;
29+
const identityPoolRoleName = `${identityPoolName}-role`;
30+
let identityPoolRole: string;
31+
let identityPoolId: string;
32+
33+
before(async () => {
34+
// Create an identity pool
35+
const createIdentityPoolResult = await authClient.createIdentityPool({
36+
IdentityPoolName: identityPoolName,
37+
AllowUnauthenticatedIdentities: true
38+
});
39+
expect(createIdentityPoolResult.$metadata.httpStatusCode).to.equal(200);
40+
expect(typeof createIdentityPoolResult.IdentityPoolId).to.equal("string");
41+
identityPoolId = createIdentityPoolResult.IdentityPoolId as string;
42+
43+
// Create a role to be attached to identity pool
44+
const { Role } = await iam.createRole({
45+
RoleName: identityPoolRoleName,
46+
AssumeRolePolicyDocument: `{
47+
"Version": "2012-10-17",
48+
"Statement": [
49+
{
50+
"Effect": "Allow",
51+
"Principal": {
52+
"Federated": "cognito-identity.amazonaws.com"
53+
},
54+
"Action": "sts:AssumeRoleWithWebIdentity"
55+
}
56+
]
57+
}`
58+
});
59+
identityPoolRole = Role?.Arn as string;
60+
61+
// wait for role creating
62+
// TODO: add RoleExists waiter
63+
await new Promise(resolve => setTimeout(resolve, 5000));
64+
65+
// Set role to identity pool
66+
await authClient.setIdentityPoolRoles({
67+
IdentityPoolId: identityPoolId,
68+
Roles: {
69+
unauthenticated: identityPoolRole!
70+
}
71+
});
72+
73+
// wait for role propagating
74+
// TODO: add waiters
75+
await new Promise(resolve => setTimeout(resolve, 10000));
76+
});
77+
78+
after(async () => {
79+
// Delete the identity pool
80+
if (identityPoolId) {
81+
await authClient.deleteIdentityPool({
82+
IdentityPoolId: identityPoolId
83+
});
84+
}
85+
// Delete identity pool role
86+
if (identityPoolRole) {
87+
await iam.deleteRole({ RoleName: identityPoolRoleName });
88+
}
89+
});
90+
91+
it("should successfully fetch Id and get credentials", async () => {
92+
// Test getId()
93+
const getIdResult = await unAuthClient.getId({
94+
IdentityPoolId: identityPoolId
95+
});
96+
expect(getIdResult.$metadata.httpStatusCode).to.equal(200);
97+
expect(typeof getIdResult.IdentityId).to.equal("string");
98+
99+
// Test getCredentialsForIdentity() with Id from above
100+
const getCredentialsResult = await unAuthClient.getCredentialsForIdentity({
101+
IdentityId: getIdResult.IdentityId
102+
});
103+
expect(getCredentialsResult.$metadata.httpStatusCode).to.equal(200);
104+
expect(typeof getCredentialsResult.Credentials?.AccessKeyId).to.equal(
105+
"string"
106+
);
107+
expect(typeof getCredentialsResult.Credentials?.SecretKey).to.equal(
108+
"string"
109+
);
110+
});
111+
});
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
module.exports = function (config) {
2+
config.set({
3+
basePath: "",
4+
frameworks: ["mocha", "chai"],
5+
files: ["e2e/**/*.ispec.ts"],
6+
preprocessors: {
7+
"e2e/**/*.ispec.ts": ["webpack", "sourcemap", "credentials"]
8+
},
9+
webpackMiddleware: {
10+
stats: "minimal"
11+
},
12+
webpack: {
13+
resolve: {
14+
extensions: [".ts", ".js"]
15+
},
16+
mode: "development",
17+
module: {
18+
rules: [
19+
{
20+
test: /\.tsx?$/,
21+
use: [
22+
{
23+
loader: "ts-loader",
24+
options: {
25+
configFile: "tsconfig.json",
26+
compilerOptions: {
27+
rootDir: "./"
28+
}
29+
}
30+
}
31+
],
32+
exclude: /node_modules/
33+
}
34+
]
35+
},
36+
devtool: "inline-source-map"
37+
},
38+
plugins: [
39+
"@aws-sdk/karma-credential-loader",
40+
"karma-chrome-launcher",
41+
"karma-firefox-launcher",
42+
"karma-mocha",
43+
"karma-chai",
44+
"karma-webpack",
45+
"karma-coverage",
46+
"karma-sourcemap-loader"
47+
],
48+
reporters: ["progress"],
49+
port: 9876,
50+
colors: true,
51+
logLevel: config.LOG_WARN,
52+
autoWatch: false,
53+
browsers: ["ChromeHeadless", "FirefoxHeadless"],
54+
customLaunchers: {
55+
FirefoxHeadless: {
56+
base: "Firefox",
57+
flags: ["-headless"]
58+
}
59+
},
60+
singleRun: true,
61+
concurrency: Infinity,
62+
exclude: ["**/*.d.ts", "*.spec.ts"]
63+
});
64+
};

clients/client-cognito-identity/package.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
"remove-documentation": "rimraf ./docs",
1313
"remove-js": "rimraf *.js && rimraf ./commands/*.js && rimraf ./models/*.js && rimraf ./protocols/*.js",
1414
"remove-maps": "rimraf *.js.map && rimraf ./commands/*.js.map && rimraf ./models/*.js.map && rimraf ./protocols/*.js.map",
15-
"test": "exit 0",
15+
"test:unit": "mocha **/cjs/**/*.spec.js",
16+
"test:e2e": "mocha **/cjs/**/*.ispec.js && karma start karma.conf.js",
17+
"test": "yarn test:unit",
1618
"build:es": "tsc -p tsconfig.es.json",
1719
"build": "yarn pretest && yarn build:es"
1820
},
@@ -60,8 +62,10 @@
6062
"tslib": "^1.8.0"
6163
},
6264
"devDependencies": {
65+
"@types/chai": "^4.2.11",
66+
"@types/mocha": "^7.0.2",
6367
"@types/node": "^12.7.5",
64-
"jest": "^25.1.0",
68+
"@aws-sdk/client-iam": "1.0.0-gamma.2",
6569
"rimraf": "^3.0.0",
6670
"tslib": "^1.8.0",
6771
"typedoc": "^0.15.0",

clients/client-cognito-identity/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
"incremental": true,
1313
"resolveJsonModule": true,
1414
"declarationDir": "./types",
15-
"outDir": "dist/cjs"
15+
"outDir": "dist/cjs",
16+
"types": ["mocha", "node"]
1617
},
1718
"typedocOptions": {
1819
"exclude": "**/node_modules/**",

0 commit comments

Comments
 (0)