git ssb

0+

wanderer🌟 / js-primea-wasm-container



Tree: 6731ea092f0166164cf1bbc8653439f46a7f6bd6

Files: 6731ea092f0166164cf1bbc8653439f46a7f6bd6 / tests / index.js

4247 bytesRaw
1const tape = require('tape')
2const fs = require('fs')
3const Hypervisor = require('primea-hypervisor')
4const Message = require('primea-message')
5const WasmContainer = require('../index.js')
6const testInterface = require('./testInterface.js')
7const level = require('level')
8const RadixTree = require('dfinity-radix-tree')
9const db = level('./testdb')
10
11const tree = new RadixTree({
12 db: db
13})
14
15class ContainerTestInterface {
16 constructor (wasmContainer) {
17 this.wasmContainer = wasmContainer
18 }
19
20 readMem (offset) {
21 return this.wasmContainer.getMemory(offset, 1)
22 }
23
24 writeMem (offset, val) {
25 return this.wasmContainer.setMemory(offset, [val])
26 }
27
28 numOfReferances () {
29 return this.wasmContainer.referanceMap.size
30 }
31
32 async callback (cb) {
33 const promise = new Promise((resolve, reject) => {
34 resolve()
35 })
36 await this.wasmContainer.pushOpsQueue(promise)
37 this.wasmContainer.execute(cb)
38 }
39}
40
41tape('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)
47 })
48
49 let cap = await hypervisor.createActor(WasmContainer.typeId, new Message({
50 data: main
51 }))
52 hypervisor.send(cap, new Message())
53})
54
55tape('referances', async t => {
56 t.plan(1)
57 const hypervisor = new Hypervisor(tree)
58 const main = fs.readFileSync(`${__dirname}/wasm/referances.wasm`)
59 hypervisor.registerContainer(WasmContainer, {
60 env: ContainerTestInterface,
61 test: testInterface(t)
62 })
63
64 hypervisor.createActor(WasmContainer.typeId, new Message({
65 data: main
66 }))
67})
68
69tape('wasm container - mem', async t => {
70 t.plan(1)
71 const hypervisor = new Hypervisor(tree)
72 const readMem = fs.readFileSync(`${__dirname}/wasm/readMem.wasm`)
73 hypervisor.registerContainer(WasmContainer, {
74 env: ContainerTestInterface,
75 test: testInterface(t)
76 })
77
78 hypervisor.createActor(WasmContainer.typeId, new Message({
79 data: readMem
80 }))
81})
82
83tape('write mem', async t => {
84 const hypervisor = new Hypervisor(tree)
85 const readMem = fs.readFileSync(`${__dirname}/wasm/writeMem.wasm`)
86
87 class WasmContainerNoIdle extends WasmContainer {
88 onIdle () {}
89 }
90
91 hypervisor.registerContainer(WasmContainerNoIdle, {
92 env: ContainerTestInterface,
93 test: testInterface(t)
94 })
95
96 const cap = await hypervisor.createActor(WasmContainerNoIdle.typeId, new Message({
97 data: readMem
98 }))
99 const actor = await hypervisor.getActor(cap.destId)
100 const mem = actor.container.getMemory(0, 1)
101 t.equals(mem[0], 9)
102 t.end()
103})
104
105tape('wasm container - callbacks', async t => {
106 t.plan(1)
107 const hypervisor = new Hypervisor(tree)
108 const callBackWasm = fs.readFileSync(`${__dirname}/wasm/callback.wasm`)
109 hypervisor.registerContainer(WasmContainer, {
110 env: ContainerTestInterface,
111 test: testInterface(t)
112 })
113
114 await hypervisor.createActor(WasmContainer.typeId, new Message({
115 data: callBackWasm
116 }))
117})
118
119tape('wasm container - invalid', async t => {
120 t.plan(1)
121 const hypervisor = new Hypervisor(tree)
122 hypervisor.registerContainer(WasmContainer, {
123 env: ContainerTestInterface,
124 test: testInterface(t)
125 })
126
127 const message = new Message({
128 data: Buffer.from([0])
129 })
130
131 message.on('execution:error', (e) => {
132 console.log(e)
133 t.pass('should cature error')
134 })
135
136 await hypervisor.createActor(WasmContainer.typeId, message)
137})
138
139tape('initailize', async t => {
140 t.plan(2)
141
142 const callBackWasm = fs.readFileSync(`${__dirname}/wasm/callback.wasm`)
143
144 class ContainerTestInterface {
145 constructor (wasmContainer) {
146 this.wasmContainer = wasmContainer
147 }
148
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 }
156
157 static initialize (code) {
158 t.deepEquals(code, callBackWasm)
159 return code
160 }
161 }
162
163 const hypervisor = new Hypervisor(tree)
164 hypervisor.registerContainer(WasmContainer, {
165 env: ContainerTestInterface,
166 test: testInterface(t)
167 })
168
169 await hypervisor.createActor(WasmContainer.typeId, new Message({
170 data: callBackWasm
171 }))
172})
173

Built with git-ssb-web