tests/index.jsView |
---|
110 | 110 | process.exit() |
111 | 111 | }) |
112 | 112 | }) |
113 | 113 | |
114 | | - tape.skip('should wait on parent', async t => { |
115 | | - let r |
116 | | - const lock = new Promise((resolve, reject) => { |
117 | | - r = resolve |
118 | | - }) |
| 114 | + tape.only('ping pong', async t => { |
| 115 | + class Ping extends BaseContainer { |
| 116 | + async run (m) { |
| 117 | + console.log('ping') |
| 118 | + let port = this.kernel.ports.getRef('child') |
| 119 | + if (!port) { |
| 120 | + port = await this.kernel.createPort('pong', 'child') |
| 121 | + } |
119 | 122 | |
120 | | - let parentHasFinished = false |
121 | | - let childHasFinished = false |
122 | | - class testVMContainer extends BaseContainer { |
123 | | - async run (m) { |
124 | | - console.log('in parent') |
125 | | - const port = await this.kernel.createPort(this.kernel.ports, 'test2', 'child') |
126 | | - await this.kernel.send(port, m) |
127 | | - await lock |
128 | | - return new Promise((resolve, reject) => { |
129 | | - setTimeout(() => { |
130 | | - console.log('parent done') |
131 | | - this.kernel.incrementTicks(1) |
132 | | - parentHasFinished = true |
133 | | - t.equals(childHasFinished, false, 'child should not have finished at this point') |
134 | | - resolve() |
135 | | - }, 200) |
136 | | - }) |
| 123 | + if (this.kernel.ticks < 100) { |
| 124 | + this.kernel.incrementTicks(1) |
| 125 | + console.log('here') |
| 126 | + return this.kernel.send(port, new Message()) |
| 127 | + } |
137 | 128 | } |
138 | 129 | } |
139 | 130 | |
140 | | - |
141 | | - class testVMContainer2 extends BaseContainer { |
142 | | - async run (m) { |
143 | | - console.log('in child') |
144 | | - childHasFinished = true |
145 | | - r() |
146 | | - this.kernel.incrementTicks(1) |
147 | | - try { |
148 | | - await this.kernel.ports.getNextMessage() |
149 | | - } catch (e) { |
150 | | - console.log(e) |
151 | | - } |
152 | | - t.equals(parentHasFinished, true, 'parent should have finished at this point') |
| 131 | + class Pong extends BaseContainer { |
| 132 | + run (m) { |
| 133 | + console.log('pong') |
| 134 | + const port = m.fromPort |
| 135 | + return this.kernel.send(port, new Message()) |
153 | 136 | } |
154 | 137 | } |
155 | 138 | |
156 | | - const hypervisor = new Hypervisor({dag: node.dag}) |
157 | | - hypervisor.addVM('test', testVMContainer) |
158 | | - hypervisor.addVM('test2', testVMContainer2) |
159 | | - const port = hypervisor.createPort('test') |
| 139 | + const hypervisor = new Hypervisor({ |
| 140 | + dag: node.dag |
| 141 | + }) |
160 | 142 | |
161 | | - let message = new Message() |
162 | 143 | try { |
163 | | - await hypervisor.send(port, message) |
164 | | - await hypervisor.createStateRoot(port, Infinity) |
| 144 | + hypervisor.registerContainer('ping', Ping) |
| 145 | + hypervisor.registerContainer('pong', Pong) |
| 146 | + const root = await hypervisor.createInstance('pong') |
| 147 | + const port = await root.createPort('ping', 'child') |
| 148 | + |
| 149 | + await root.send(port, new Message()) |
165 | 150 | } catch (e) { |
166 | 151 | console.log(e) |
167 | 152 | } |
168 | | - |
169 | | - t.end() |
170 | 153 | }) |
171 | 154 | }) |