Files: a12fcbf698618cd91b74a1da931067ede4b57f45 / tests / interfaceRunner.js
2348 bytesRaw
1 | const tape = require('tape') |
2 | const fs = require('fs') |
3 | const Vertex = require('ipld-graph-builder') |
4 | const Block = require('../deps/block') |
5 | const U128 = require('fixed-bn.js').U128 |
6 | const Address = require('fixed-bn.js').Address |
7 | // TODO remove fakeblockchain |
8 | const fakeBlockChain = require('../fakeBlockChain.js') |
9 | const Hypervisor = require('../hypervisor.js') |
10 | const Message = require('primea-message') |
11 | const common = require('../common') |
12 | const EVMinterface = require('../EVMinterface.js') |
13 | |
14 | const dir = `${__dirname}/interface` |
15 | // get the test names |
16 | let tests = fs.readdirSync(dir).filter((file) => file.endsWith('.wast')) |
17 | runTests(tests) |
18 | |
19 | function runTests (tests) { |
20 | for (let testName of tests) { |
21 | testName = testName.split('.')[0] |
22 | tape(testName, async (t) => { |
23 | const hypervisor = new Hypervisor(new Vertex(), [EVMinterface]) |
24 | const rootVertex = hypervisor.state |
25 | const code = fs.readFileSync(`${dir}/${testName}.wasm`) |
26 | const envData = JSON.parse(fs.readFileSync(`${dir}/${testName}.json`).toString()) |
27 | |
28 | for (let address in envData.state) { |
29 | const account = envData.state[address] |
30 | const accountVertex = new Vertex() |
31 | |
32 | accountVertex.set('code', new Vertex({ |
33 | value: code |
34 | })) |
35 | |
36 | accountVertex.set('balance', new Vertex({ |
37 | value: new Buffer(account.balance.slice(2), 'hex') |
38 | })) |
39 | |
40 | for (let key in account.storage) { |
41 | accountVertex.set(['storage', ...new Buffer(key.slice(2), 'hex')], new Vertex({ |
42 | value: new Buffer(account.storage[key].slice(2), 'hex') |
43 | })) |
44 | } |
45 | |
46 | const path = ['accounts', address] |
47 | rootVertex.set(path, accountVertex) |
48 | } |
49 | |
50 | rootVertex.set('blockchain', new Vertex({ |
51 | value: fakeBlockChain |
52 | })) |
53 | |
54 | const block = new Block() |
55 | block.header.coinbase = new Address(envData.coinbase) |
56 | |
57 | const message = new Message() |
58 | message.to = ['accounts', envData.caller, common.PARENT, envData.address, 'code'] |
59 | message.data = new Buffer(envData.callData.slice(2), 'hex') |
60 | message.value = new U128(envData.callValue) |
61 | message.gas = envData.gasLeft |
62 | message.block = block |
63 | message.blockchain = fakeBlockChain |
64 | |
65 | const results = await hypervisor.send(message) |
66 | t.equals(results.exception, undefined) |
67 | t.end() |
68 | }) |
69 | } |
70 | } |
71 |
Built with git-ssb-web