-
Notifications
You must be signed in to change notification settings - Fork 1
/
tester.js
90 lines (81 loc) · 2.1 KB
/
tester.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
const assert = require('assert');
const { createSchema } = require('./schemaTest');
const createServerCore = require('./serverCore');
const testJWT = require('./testJWT');
const dynamoEmulator = require('@conduitvc/dynamodb-emulator/client');
const create = async ({
serverless,
schemaPath,
port = 0,
dynamodbConfig = null,
} = {}) => {
let dynamodb;
let emulator;
// when dynamodbConfig is passed to this method
// instead of spinning up a dynamodb emulator using java
// we connect to an existing instance provided in dynamodbConfig
if (dynamodbConfig) {
const { DynamoDB } = require('aws-sdk');
dynamodb = new DynamoDB(dynamodbConfig);
} else {
// For performance we leverage a single emulator instance per process.
// To keep things unqiue between runs we use table names which are specific
// to each invocation of 'create'
emulator = await dynamoEmulator.launch();
dynamodb = dynamoEmulator.getClient(emulator);
}
const {
pubusb,
subscriptions,
schema,
close: schemaClose,
tables,
} = await createSchema({
serverless,
schemaPath,
dynamodb,
});
const { url, mqttServer, mqttURL, server } = await createServerCore({
port,
pubusb,
schema,
subscriptions,
});
const close = async () => {
server.close();
// schema deletes tables so we must close the emulator after.
await schemaClose();
};
const terminate = () => emulator && emulator.terminate();
return {
close,
terminate,
url,
mqttServer,
mqttURL,
schema,
server,
dynamoEndpoint: dynamodb.endpoint.href,
tables,
};
};
const connect = (
serverConfig,
AWSAppSyncClient,
AUTH_TYPE = 'AMAZON_COGNITO_USER_POOLS',
configs = {},
) => {
assert(serverConfig.url, 'must have serverConfig with url');
assert(AWSAppSyncClient, 'must pass AWSAppSyncClient');
return new AWSAppSyncClient({
url: serverConfig.url,
region: 'us-fake-1',
disableOffline: true,
auth: {
type: AUTH_TYPE,
jwtToken: testJWT.generateTestJWT(),
},
...configs,
});
};
module.exports = { create, connect };