-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_util.mjs
129 lines (111 loc) · 3.88 KB
/
test_util.mjs
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import { readFileSync } from 'fs';
import got from 'got';
import * as util from './util.mjs';
import * as db from './db.mjs';
const MAIN_CONFIG = JSON.parse(readFileSync('./config/main.config.json'));
export const _db = {};
export let _server;
export let _generator;
export const match_id = /[0-9a-f]{32}/; // 32 hex digits
export const match_short_id = /[0-9A-Za-z]{7,32}/; // 7 or more, full alphabet
export const match_color = /#[0-9a-f]{6}/; // hex color
export const match_timestamp = /[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z/ // eg. 2021-05-23T17:56:54.223Z
export async function setup_mock_db() {
console.log('setup mock db:')
const rnd_id = util.rnd_hash(7);
_db.tokens_db = db.DB.tokens_db + '-' + rnd_id;
_db.interactions_db = db.DB.interactions_db + '-' + rnd_id;
console.log('creating db ' + _db.tokens_db);
await db.create_db(_db.tokens_db);
console.log('creating db ' + _db.interactions_db);
await db.create_db(_db.interactions_db);
await util.sleep(500); // will fail if putting immediately
// Set default dbs
_db.orig_tokens_db = db.DB.tokens_db;
_db.orig_interactions_db = db.DB.interactions_db;
db.DB.tokens_db = _db.tokens_db;
db.DB.interactions_db = _db.interactions_db;
console.log('creating design docs');
await db.create_design_docs();
// create a bunch of token docs
console.log('creating tokens');
_db.tokens = [];
for (let i=0; i<10; i++) {
const token = {
svg: util.random_svg(),
generated: util.timestamp(),
offset: i
};
const res = await db.put_token(token);
token.id = res.id;
_db.tokens.push(token);
}
_db.tokens.reverse();
return _db.tokens;
}
export async function teardown_mock_db() {
console.log('teardown mock db:');
// Reset default dbs
db.DB.tokens_db = _db.orig_tokens_db;
db.DB.interactions_db = _db.orig_interactions_db;
console.log('deleting db ' + _db.tokens_db);
await db.delete_db(_db.tokens_db);
console.log('deleting db ' + _db.interactions_db);
await db.delete_db(_db.interactions_db);
await cleanup_mock_dbs();
}
export async function cleanup_mock_dbs() {
console.log('cleanup mock dbs:');
let dbs = await db.all_dbs();
dbs = dbs.filter( db => (/-[0-9a-f]{7}/).test(db) );
if (dbs.length == 0) {
console.log('all clean');
return;
}
console.log('deleting dbs', dbs.join(', '));
const deletes = dbs.map(db.delete_db);
return Promise.all(deletes);
}
export async function start_server(enable_auth=false, queue_limit=3) {
console.log('starting server');
const main = await import('./main.mjs');
main.CONFIG.auth.enabled = enable_auth;
main.CONFIG.queue_limit = queue_limit;
_server = main.default;
return main;
}
export function stop_server() {
console.log('stopping server');
_server.close(0);
}
export async function start_generator() {
console.log('starting mock generator');
if (!_generator) {
_generator = await import('./mock-generator.mjs');
_generator.CONFIG.initial_delay = 500;
_generator.CONFIG.display_time = 1500;
} else {
await _generator.start();
}
return _generator;
}
export function stop_generator() {
console.log('stopping mock generator');
_generator.stop();
}
// Version of the got function
// Uses server url from config - only path is needed
// Allows self signed certificates
// Sets retry to 0 for faster testing
// Note: Not defined async (no need, since it doesn't use await). Async removes cancel method from returned promise
export function request(path='', options = {}) {
const is_localhost = ['localhost', '127.0.0.1', '0.0.0.0'].includes(MAIN_CONFIG.host);
options = Object.assign({
https: {
rejectUnauthorized: !is_localhost // allow self signed cert locally
},
retry: { limit: 0 }
}, options);
const url = `${MAIN_CONFIG.https.enabled ? 'https' : 'http'}://${MAIN_CONFIG.host}:${MAIN_CONFIG.port}`;
return got(url + path, options);
}