tests/index.jsView |
---|
3 | 3 | const Hypervisor = require('primea-hypervisor') |
4 | 4 | const Message = require('primea-message') |
5 | 5 | const WasmContainer = require('../index.js') |
6 | 6 | const testInterface = require('./testInterface.js') |
7 | | -const IPFS = require('ipfs') |
| 7 | +const level = require('level') |
| 8 | +const RadixTree = require('dfinity-radix-tree') |
| 9 | +const db = level('./testdb') |
8 | 10 | |
9 | | -const node = new IPFS({ |
10 | | - start: false |
| 11 | +const tree = new RadixTree({ |
| 12 | + db: db |
11 | 13 | }) |
12 | 14 | |
13 | 15 | class ContainerTestInterface { |
14 | 16 | constructor (wasmContainer) { |
35 | 37 | this.wasmContainer.execute(cb) |
36 | 38 | } |
37 | 39 | } |
38 | 40 | |
39 | | -node.on('ready', () => { |
40 | | - tape('wasm container - main', async t => { |
41 | | - t.plan(1) |
42 | | - const hypervisor = new Hypervisor(node.dag) |
43 | | - const main = fs.readFileSync(`${__dirname}/wasm/run.wasm`) |
44 | | - hypervisor.registerContainer(WasmContainer, { |
45 | | - test: testInterface(t) |
46 | | - }) |
47 | | - const instance = await hypervisor.createInstance(WasmContainer.typeId, new Message({ |
48 | | - data: main |
49 | | - })) |
50 | | - instance.message(instance.createMessage()) |
| 41 | +tape('wasm container - main', async t => { |
| 42 | + t.plan(1) |
| 43 | + const hypervisor = new Hypervisor(tree) |
| 44 | + const main = fs.readFileSync(`${__dirname}/wasm/run.wasm`) |
| 45 | + hypervisor.registerContainer(WasmContainer, { |
| 46 | + test: testInterface(t) |
51 | 47 | }) |
52 | 48 | |
53 | | - tape('referances', async t => { |
54 | | - t.plan(1) |
55 | | - const hypervisor = new Hypervisor(node.dag) |
56 | | - const main = fs.readFileSync(`${__dirname}/wasm/referances.wasm`) |
57 | | - hypervisor.registerContainer(WasmContainer, { |
58 | | - env: ContainerTestInterface, |
59 | | - test: testInterface(t) |
60 | | - }) |
61 | | - const ports = hypervisor.createChannel() |
62 | | - await hypervisor.createInstance(WasmContainer.typeId, new Message({ |
63 | | - data: main, |
64 | | - ports: ports |
65 | | - })) |
66 | | - }) |
| 49 | + const port = hypervisor.creationService.getPort() |
67 | 50 | |
68 | | - tape('wasm container - mem', async t => { |
69 | | - t.plan(1) |
70 | | - try { |
71 | | - const hypervisor = new Hypervisor(node.dag) |
72 | | - const readMem = fs.readFileSync(`${__dirname}/wasm/readMem.wasm`) |
73 | | - hypervisor.registerContainer(WasmContainer, { |
74 | | - env: ContainerTestInterface, |
75 | | - test: testInterface(t) |
76 | | - }) |
77 | | - await hypervisor.createInstance(WasmContainer.typeId, new Message({ |
78 | | - data: readMem |
79 | | - })) |
80 | | - } catch (e) { |
81 | | - console.log(e) |
| 51 | + let instance = await hypervisor.send(port, new Message({ |
| 52 | + data: { |
| 53 | + type: WasmContainer.typeId, |
| 54 | + code: main |
82 | 55 | } |
| 56 | + })) |
| 57 | + instance.message(instance.createMessage()) |
| 58 | +}) |
| 59 | + |
| 60 | +tape('referances', async t => { |
| 61 | + t.plan(1) |
| 62 | + const hypervisor = new Hypervisor(tree) |
| 63 | + const main = fs.readFileSync(`${__dirname}/wasm/referances.wasm`) |
| 64 | + hypervisor.registerContainer(WasmContainer, { |
| 65 | + env: ContainerTestInterface, |
| 66 | + test: testInterface(t) |
83 | 67 | }) |
| 68 | + const ports = hypervisor.createChannel() |
| 69 | + const port = hypervisor.creationService.getPort() |
84 | 70 | |
85 | | - tape('write mem', async t => { |
86 | | - try { |
87 | | - const hypervisor = new Hypervisor(node.dag) |
88 | | - const readMem = fs.readFileSync(`${__dirname}/wasm/writeMem.wasm`) |
89 | | - hypervisor.registerContainer(WasmContainer, { |
90 | | - env: ContainerTestInterface, |
91 | | - test: testInterface(t) |
92 | | - }) |
93 | | - const root = await hypervisor.createInstance(WasmContainer.typeId, new Message({ |
94 | | - data: readMem |
95 | | - })) |
96 | | - const mem = root.container.getMemory(0, 1) |
97 | | - t.equals(mem[0], 9) |
98 | | - t.end() |
99 | | - } catch (e) { |
100 | | - console.log(e) |
101 | | - } |
| 71 | + hypervisor.send(port, new Message({ |
| 72 | + data: { |
| 73 | + type: WasmContainer.typeId, |
| 74 | + code: main |
| 75 | + }, |
| 76 | + ports: ports |
| 77 | + })) |
| 78 | +}) |
| 79 | + |
| 80 | +tape('wasm container - mem', async t => { |
| 81 | + t.plan(1) |
| 82 | + const hypervisor = new Hypervisor(tree) |
| 83 | + const readMem = fs.readFileSync(`${__dirname}/wasm/readMem.wasm`) |
| 84 | + hypervisor.registerContainer(WasmContainer, { |
| 85 | + env: ContainerTestInterface, |
| 86 | + test: testInterface(t) |
102 | 87 | }) |
103 | 88 | |
104 | | - tape('wasm container - callbacks', async t => { |
105 | | - t.plan(1) |
106 | | - const hypervisor = new Hypervisor(node.dag) |
107 | | - const callBackWasm = fs.readFileSync(`${__dirname}/wasm/callback.wasm`) |
108 | | - hypervisor.registerContainer(WasmContainer, { |
109 | | - env: ContainerTestInterface, |
110 | | - test: testInterface(t) |
111 | | - }) |
112 | | - hypervisor.createInstance(WasmContainer.typeId, new Message({ |
113 | | - data: callBackWasm |
114 | | - })) |
| 89 | + const port = hypervisor.creationService.getPort() |
| 90 | + |
| 91 | + hypervisor.send(port, new Message({ |
| 92 | + data: { |
| 93 | + type: WasmContainer.typeId, |
| 94 | + code: readMem |
| 95 | + } |
| 96 | + })) |
| 97 | +}) |
| 98 | + |
| 99 | +tape('write mem', async t => { |
| 100 | + const hypervisor = new Hypervisor(tree) |
| 101 | + const readMem = fs.readFileSync(`${__dirname}/wasm/writeMem.wasm`) |
| 102 | + hypervisor.registerContainer(WasmContainer, { |
| 103 | + env: ContainerTestInterface, |
| 104 | + test: testInterface(t) |
115 | 105 | }) |
116 | 106 | |
117 | | - tape('wasm container - invalid', async t => { |
118 | | - t.plan(1) |
119 | | - const hypervisor = new Hypervisor(node.dag) |
120 | | - hypervisor.registerContainer(WasmContainer, { |
121 | | - env: ContainerTestInterface, |
122 | | - test: testInterface(t) |
123 | | - }) |
| 107 | + const port = hypervisor.creationService.getPort() |
| 108 | + const root = await hypervisor.send(port, new Message({ |
| 109 | + data: { |
| 110 | + type: WasmContainer.typeId, |
| 111 | + code: readMem |
| 112 | + } |
| 113 | + })) |
| 114 | + const mem = root.container.getMemory(0, 1) |
| 115 | + t.equals(mem[0], 9) |
| 116 | + t.end() |
| 117 | +}) |
124 | 118 | |
125 | | - const message = new Message({ |
126 | | - data: Buffer.from([0x00]) |
127 | | - }) |
| 119 | +tape('wasm container - callbacks', async t => { |
| 120 | + t.plan(1) |
| 121 | + const hypervisor = new Hypervisor(tree) |
| 122 | + const callBackWasm = fs.readFileSync(`${__dirname}/wasm/callback.wasm`) |
| 123 | + hypervisor.registerContainer(WasmContainer, { |
| 124 | + env: ContainerTestInterface, |
| 125 | + test: testInterface(t) |
| 126 | + }) |
128 | 127 | |
129 | | - const rp = message.responsePort = {destPort: {messages: []}} |
| 128 | + const port = hypervisor.creationService.getPort() |
| 129 | + await hypervisor.send(port, new Message({ |
| 130 | + data: { |
| 131 | + type: WasmContainer.typeId, |
| 132 | + code: callBackWasm |
| 133 | + } |
| 134 | + })) |
| 135 | +}) |
130 | 136 | |
131 | | - await hypervisor.createInstance(WasmContainer.typeId, message) |
132 | | - t.equals(rp.destPort.messages[0].data.exception, true) |
| 137 | +tape('wasm container - invalid', async t => { |
| 138 | + t.plan(1) |
| 139 | + const hypervisor = new Hypervisor(tree) |
| 140 | + hypervisor.registerContainer(WasmContainer, { |
| 141 | + env: ContainerTestInterface, |
| 142 | + test: testInterface(t) |
133 | 143 | }) |
134 | 144 | |
135 | | - tape('initailize', async t => { |
136 | | - t.plan(2) |
| 145 | + const message = new Message({ |
| 146 | + data: { |
| 147 | + type: WasmContainer.typeId, |
| 148 | + code: Buffer.from([0x00]) |
| 149 | + } |
| 150 | + }) |
137 | 151 | |
138 | | - const callBackWasm = fs.readFileSync(`${__dirname}/wasm/callback.wasm`) |
| 152 | + const rp = message.responsePort = {destPort: {messages: []}} |
139 | 153 | |
140 | | - class ContainerTestInterface { |
141 | | - constructor (wasmContainer) { |
142 | | - this.wasmContainer = wasmContainer |
143 | | - } |
| 154 | + const port = hypervisor.creationService.getPort() |
| 155 | + await hypervisor.send(port, message) |
144 | 156 | |
145 | | - readMem (offset) { |
146 | | - return this.wasmContainer.getMemory(offset, 1) |
147 | | - } |
| 157 | + t.equals(rp.destPort.messages[0].data.exception, true) |
| 158 | +}) |
148 | 159 | |
149 | | - async callback (cb) { |
150 | | - const promise = new Promise((resolve, reject) => { |
151 | | - resolve() |
152 | | - }) |
153 | | - await this.wasmContainer.pushOpsQueue(promise) |
154 | | - this.wasmContainer.execute(cb) |
155 | | - } |
| 160 | +tape('initailize', async t => { |
| 161 | + t.plan(2) |
156 | 162 | |
157 | | - static initialize (code) { |
158 | | - t.equals(code, callBackWasm) |
159 | | - return code |
160 | | - } |
| 163 | + const callBackWasm = fs.readFileSync(`${__dirname}/wasm/callback.wasm`) |
| 164 | + |
| 165 | + class ContainerTestInterface { |
| 166 | + constructor (wasmContainer) { |
| 167 | + this.wasmContainer = wasmContainer |
161 | 168 | } |
162 | 169 | |
163 | | - const hypervisor = new Hypervisor(node.dag) |
164 | | - hypervisor.registerContainer(WasmContainer, { |
165 | | - env: ContainerTestInterface, |
166 | | - test: testInterface(t) |
167 | | - }) |
| 170 | + readMem (offset) { |
| 171 | + return this.wasmContainer.getMemory(offset, 1) |
| 172 | + } |
168 | 173 | |
169 | | - const message = new Message({ |
170 | | - data: callBackWasm |
171 | | - }) |
| 174 | + async callback (cb) { |
| 175 | + const promise = new Promise((resolve, reject) => { |
| 176 | + resolve() |
| 177 | + }) |
| 178 | + await this.wasmContainer.pushOpsQueue(promise) |
| 179 | + this.wasmContainer.execute(cb) |
| 180 | + } |
172 | 181 | |
173 | | - hypervisor.createInstance(WasmContainer.typeId, message) |
| 182 | + static initialize (code) { |
| 183 | + t.equals(code, callBackWasm) |
| 184 | + return code |
| 185 | + } |
| 186 | + } |
| 187 | + |
| 188 | + const hypervisor = new Hypervisor(tree) |
| 189 | + hypervisor.registerContainer(WasmContainer, { |
| 190 | + env: ContainerTestInterface, |
| 191 | + test: testInterface(t) |
174 | 192 | }) |
| 193 | + |
| 194 | + const port = hypervisor.creationService.getPort() |
| 195 | + hypervisor.send(port, new Message({ |
| 196 | + data: { |
| 197 | + type: WasmContainer.typeId, |
| 198 | + code: callBackWasm |
| 199 | + } |
| 200 | + })) |
175 | 201 | }) |