-
Notifications
You must be signed in to change notification settings - Fork 237
/
Copy pathtest-zoe-metering.js
87 lines (79 loc) · 2.98 KB
/
test-zoe-metering.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
/* global process __dirname */
// TODO Remove babel-standalone preinitialization
// https://github.com/endojs/endo/issues/768
import '@agoric/babel-standalone';
// eslint-disable-next-line import/no-extraneous-dependencies
import '@agoric/install-ses';
// eslint-disable-next-line import/no-extraneous-dependencies
import test from 'ava';
import { loadBasedir, buildVatController } from '@agoric/swingset-vat';
import fs from 'fs';
import bundleSource from '../../bundle-source';
// Don't let unhandled promises crash our process.
process.on('unhandledRejection', e => console.log('unhandled rejection', e));
const CONTRACT_FILES = [
'infiniteInstallLoop',
'infiniteInstanceLoop',
'infiniteTestLoop',
'testBuiltins',
];
const generateBundlesP = Promise.all(
CONTRACT_FILES.map(async contract => {
const bundle = await bundleSource(`${__dirname}/${contract}`);
const obj = { bundle, contract };
fs.writeFileSync(
`${__dirname}/bundle-${contract}.js`,
`export default ${JSON.stringify(obj)};`,
);
}),
);
async function main(argv) {
const config = await loadBasedir(__dirname);
config.defaultManagerType = 'xs-worker';
await generateBundlesP;
const controller = await buildVatController(config, argv);
await controller.run();
return controller.dump();
}
const infiniteInstallLoopLog = [
'installing infiniteInstallLoop',
'instantiating infiniteInstallLoop',
'error: RangeError: Compute meter exceeded',
];
// TODO: Unskip. See https://github.com/Agoric/agoric-sdk/issues/1625
test.skip('zoe - metering - infinite loop in installation', async t => {
const dump = await main(['infiniteInstallLoop']);
t.deepEqual(dump.log, infiniteInstallLoopLog, 'log is correct');
});
const infiniteInstanceLoopLog = [
'installing infiniteInstanceLoop',
'instantiating infiniteInstanceLoop',
'error: RangeError: Compute meter exceeded',
];
// TODO: Unskip. See https://github.com/Agoric/agoric-sdk/issues/1625
test.skip('zoe - metering - infinite loop in instantiation', async t => {
const dump = await main(['infiniteInstanceLoop']);
t.deepEqual(dump.log, infiniteInstanceLoopLog, 'log is correct');
});
const infiniteTestLoopLog = [
'installing infiniteTestLoop',
'instantiating infiniteTestLoop',
'invoking infiniteTestLoop.doTest()',
'error: RangeError: Compute meter exceeded',
];
// TODO: Unskip. See https://github.com/Agoric/agoric-sdk/issues/1625
test.skip('zoe - metering - infinite loop in contract method', async t => {
const dump = await main(['infiniteTestLoop']);
t.deepEqual(dump.log, infiniteTestLoopLog, 'log is correct');
});
const testBuiltinsLog = [
'installing testBuiltins',
'instantiating testBuiltins',
'invoking testBuiltins.doTest()',
'error: RangeError: Allocate meter exceeded',
];
// TODO: Unskip. See https://github.com/Agoric/agoric-sdk/issues/1625
test.skip('zoe - metering - expensive builtins in contract method', async t => {
const dump = await main(['testBuiltins']);
t.deepEqual(dump.log, testBuiltinsLog, 'log is correct');
});