tests/index.jsView |
---|
1 | 1 | const tape = require('tape') |
2 | 2 | const IPFS = require('ipfs') |
3 | 3 | const Hypervisor = require('../') |
4 | | -const Message = require('primea-message') |
5 | 4 | |
6 | 5 | const node = new IPFS() |
7 | 6 | |
8 | 7 | class BaseContainer { |
30 | 29 | }) |
31 | 30 | |
32 | 31 | tape('basic', async t => { |
33 | 32 | t.plan(2) |
34 | | - const message = new Message() |
| 33 | + let message |
35 | 34 | const expectedState = { |
36 | 35 | '/': 'zdpuAntkdU7yBJojcBT5Q9wBhrK56NmLnwpHPKaEGMFnAXpv7' |
37 | 36 | } |
38 | 37 | |
46 | 45 | hypervisor.registerContainer('test', testVMContainer) |
47 | 46 | |
48 | 47 | const rootContainer = await hypervisor.createInstance('test') |
49 | 48 | const port = rootContainer.ports.create('test') |
| 49 | + message = rootContainer.createMessage() |
50 | 50 | rootContainer.ports.bind(port, 'first') |
51 | 51 | |
52 | 52 | await rootContainer.send(port, message) |
53 | 53 | |
56 | 56 | }) |
57 | 57 | |
58 | 58 | tape('one child contract', async t => { |
59 | 59 | t.plan(4) |
60 | | - let message = new Message() |
| 60 | + let message |
61 | 61 | const expectedState = { |
62 | 62 | '/': 'zdpuAofSzrBqwYs6z1r28fMeb8z5oSKF6CcWA6m22RqazgoTB' |
63 | 63 | } |
64 | 64 | let hasResolved = false |
92 | 92 | let root = await hypervisor.createInstance('test') |
93 | 93 | let port = root.ports.create('test') |
94 | 94 | |
95 | 95 | root.ports.bind(port, 'first') |
| 96 | + message = root.createMessage() |
96 | 97 | |
97 | 98 | await root.send(port, message) |
98 | 99 | const stateRoot = await hypervisor.createStateRoot(root, Infinity) |
99 | 100 | t.true(hasResolved, 'should resolve before generating the state root') |
125 | 126 | } |
126 | 127 | |
127 | 128 | if (this.kernel.ticks < 100) { |
128 | 129 | this.kernel.incrementTicks(1) |
129 | | - return this.kernel.send(port, new Message()) |
| 130 | + return this.kernel.send(port, this.kernel.createMessage()) |
130 | 131 | } |
131 | 132 | } |
132 | 133 | } |
133 | 134 | |
134 | 135 | class Pong extends BaseContainer { |
135 | 136 | run (m) { |
136 | 137 | const port = m.fromPort |
137 | 138 | this.kernel.incrementTicks(2) |
138 | | - return this.kernel.send(port, new Message()) |
| 139 | + return this.kernel.send(port, this.kernel.createMessage()) |
139 | 140 | } |
140 | 141 | } |
141 | 142 | |
142 | 143 | const hypervisor = new Hypervisor(node.dag) |
146 | 147 | const root = await hypervisor.createInstance('pong') |
147 | 148 | const port = root.ports.create('ping') |
148 | 149 | root.ports.bind(port, 'child') |
149 | 150 | |
150 | | - await root.send(port, new Message()) |
| 151 | + await root.send(port, root.createMessage()) |
151 | 152 | await hypervisor.createStateRoot(root, Infinity) |
152 | 153 | |
153 | 154 | t.end() |
154 | 155 | }) |
167 | 168 | this.kernel.ports.bind(two, 'two') |
168 | 169 | this.kernel.ports.bind(three, 'three') |
169 | 170 | |
170 | 171 | await Promise.all([ |
171 | | - this.kernel.send(one, new Message()), |
172 | | - this.kernel.send(two, new Message()), |
173 | | - this.kernel.send(three, new Message()) |
| 172 | + this.kernel.send(one, this.kernel.createMessage()), |
| 173 | + this.kernel.send(two, this.kernel.createMessage()), |
| 174 | + this.kernel.send(three, this.kernel.createMessage()) |
174 | 175 | ]) |
175 | 176 | |
176 | 177 | return new Promise((resolve, reject) => { |
177 | 178 | setTimeout(() => { |
197 | 198 | const root = await hypervisor.createInstance('root') |
198 | 199 | const port = root.ports.create('root') |
199 | 200 | root.ports.bind(port, 'first') |
200 | 201 | |
201 | | - await root.send(port, new Message()) |
| 202 | + await root.send(port, root.createMessage()) |
202 | 203 | await root.wait(Infinity) |
203 | 204 | |
204 | 205 | t.equals(runs, 3, 'the number of run should be 3') |
205 | 206 | const nonce = await hypervisor.graph.get(root.state, 'ports/first/link/nonce/0') |
243 | 244 | const port = this.kernel.ports.create('root') |
244 | 245 | this.kernel.ports.bind(port, 'three') |
245 | 246 | this.kernel.ports.delete('three') |
246 | 247 | try { |
247 | | - await this.kernel.send(port, new Message()) |
| 248 | + await this.kernel.send(port, this.kernel.createMessage()) |
248 | 249 | } catch (e) { |
249 | 250 | t.pass() |
250 | 251 | } |
251 | 252 | } |
278 | 279 | this.kernel.ports.bind(one, 'one') |
279 | 280 | this.kernel.ports.bind(two, 'two') |
280 | 281 | |
281 | 282 | await Promise.all([ |
282 | | - this.kernel.send(one, new Message()), |
283 | | - this.kernel.send(two, new Message()) |
| 283 | + this.kernel.send(one, this.kernel.createMessage()), |
| 284 | + this.kernel.send(two, this.kernel.createMessage()) |
284 | 285 | ]) |
285 | 286 | |
286 | 287 | this.kernel.incrementTicks(6) |
287 | 288 | } else if (this.runs === 1) { |
295 | 296 | |
296 | 297 | class First extends BaseContainer { |
297 | 298 | async run (m) { |
298 | 299 | this.kernel.incrementTicks(1) |
299 | | - await this.kernel.send(m.fromPort, new Message({data: 'first'})) |
| 300 | + await this.kernel.send(m.fromPort, this.kernel.createMessage({data: 'first'})) |
300 | 301 | } |
301 | 302 | } |
302 | 303 | |
303 | 304 | class Second extends BaseContainer { |
304 | 305 | async run (m) { |
305 | 306 | this.kernel.incrementTicks(2) |
306 | | - await this.kernel.send(m.fromPort, new Message({data: 'second'})) |
| 307 | + await this.kernel.send(m.fromPort, this.kernel.createMessage({data: 'second'})) |
307 | 308 | } |
308 | 309 | } |
309 | 310 | |
310 | 311 | const hypervisor = new Hypervisor(node.dag) |
316 | 317 | const root = await hypervisor.createInstance('root') |
317 | 318 | const port = root.ports.create('root') |
318 | 319 | root.ports.bind(port, 'first') |
319 | 320 | |
320 | | - root.send(port, new Message()) |
| 321 | + root.send(port, root.createMessage()) |
321 | 322 | }) |
322 | 323 | |
323 | 324 | tape('message should arrive in the correct order, even if sent out of order', async t => { |
324 | 325 | t.plan(2) |
333 | 334 | this.kernel.ports.bind(one, 'one') |
334 | 335 | this.kernel.ports.bind(two, 'two') |
335 | 336 | |
336 | 337 | return Promise.all([ |
337 | | - this.kernel.send(one, new Message()), |
338 | | - this.kernel.send(two, new Message()) |
| 338 | + this.kernel.send(one, this.kernel.createMessage()), |
| 339 | + this.kernel.send(two, this.kernel.createMessage()) |
339 | 340 | ]) |
340 | 341 | } else if (this.runs === 1) { |
341 | 342 | this.runs++ |
342 | 343 | t.equals(m.data, 'second', 'should recive the first message') |
348 | 349 | |
349 | 350 | class First extends BaseContainer { |
350 | 351 | run (m) { |
351 | 352 | this.kernel.incrementTicks(2) |
352 | | - return this.kernel.send(m.fromPort, new Message({data: 'first'})) |
| 353 | + return this.kernel.send(m.fromPort, this.kernel.createMessage({data: 'first'})) |
353 | 354 | } |
354 | 355 | } |
355 | 356 | |
356 | 357 | class Second extends BaseContainer { |
357 | 358 | run (m) { |
358 | 359 | this.kernel.incrementTicks(1) |
359 | | - this.kernel.send(m.fromPort, new Message({data: 'second'})) |
| 360 | + this.kernel.send(m.fromPort, this.kernel.createMessage({data: 'second'})) |
360 | 361 | } |
361 | 362 | } |
362 | 363 | |
363 | 364 | const hypervisor = new Hypervisor(node.dag) |
369 | 370 | const root = await hypervisor.createInstance('root') |
370 | 371 | const port = root.ports.create('root') |
371 | 372 | root.ports.bind(port, 'first') |
372 | 373 | |
373 | | - root.send(port, new Message()) |
| 374 | + root.send(port, root.createMessage()) |
374 | 375 | }) |
375 | 376 | |
376 | 377 | tape('message should arrive in the correct order, even in a tie of ticks', async t => { |
377 | 378 | t.plan(2) |
386 | 387 | this.kernel.ports.bind(one, 'one') |
387 | 388 | this.kernel.ports.bind(two, 'two') |
388 | 389 | |
389 | 390 | await Promise.all([ |
390 | | - this.kernel.send(one, new Message()), |
391 | | - this.kernel.send(two, new Message()) |
| 391 | + this.kernel.send(one, this.kernel.createMessage()), |
| 392 | + this.kernel.send(two, this.kernel.createMessage()) |
392 | 393 | ]) |
393 | 394 | |
394 | 395 | this.kernel.incrementTicks(6) |
395 | 396 | } else if (this.runs === 1) { |
403 | 404 | |
404 | 405 | class First extends BaseContainer { |
405 | 406 | run (m) { |
406 | 407 | this.kernel.incrementTicks(2) |
407 | | - return this.kernel.send(m.fromPort, new Message({ |
| 408 | + return this.kernel.send(m.fromPort, this.kernel.createMessage({ |
408 | 409 | data: 'first' |
409 | 410 | })) |
410 | 411 | } |
411 | 412 | } |
412 | 413 | |
413 | 414 | class Second extends BaseContainer { |
414 | 415 | run (m) { |
415 | 416 | this.kernel.incrementTicks(2) |
416 | | - return this.kernel.send(m.fromPort, new Message({ |
| 417 | + return this.kernel.send(m.fromPort, this.kernel.createMessage({ |
417 | 418 | data: 'second' |
418 | 419 | })) |
419 | 420 | } |
420 | 421 | } |
427 | 428 | |
428 | 429 | const root = await hypervisor.createInstance('root') |
429 | 430 | const port = await root.ports.create('root') |
430 | 431 | root.ports.bind(port, 'first') |
431 | | - root.send(port, new Message()) |
| 432 | + root.send(port, root.createMessage()) |
432 | 433 | }) |
433 | 434 | |
434 | 435 | tape('message should arrive in the correct order, even in a tie of ticks', async t => { |
435 | 436 | t.plan(2) |
444 | 445 | this.kernel.ports.bind(two, 'two') |
445 | 446 | this.kernel.ports.bind(one, 'one') |
446 | 447 | |
447 | 448 | return Promise.all([ |
448 | | - this.kernel.send(two, new Message()), |
449 | | - this.kernel.send(one, new Message()) |
| 449 | + this.kernel.send(two, this.kernel.createMessage()), |
| 450 | + this.kernel.send(one, this.kernel.createMessage()) |
450 | 451 | ]) |
451 | 452 | } else if (this.runs === 1) { |
452 | 453 | this.runs++ |
453 | 454 | t.equals(m.data, 'second', 'should recive the first message') |
459 | 460 | |
460 | 461 | class First extends BaseContainer { |
461 | 462 | run (m) { |
462 | 463 | this.kernel.incrementTicks(2) |
463 | | - return this.kernel.send(m.fromPort, new Message({ |
| 464 | + return this.kernel.send(m.fromPort, this.kernel.createMessage({ |
464 | 465 | data: 'first' |
465 | 466 | })) |
466 | 467 | } |
467 | 468 | } |
468 | 469 | |
469 | 470 | class Second extends BaseContainer { |
470 | 471 | run (m) { |
471 | 472 | this.kernel.incrementTicks(2) |
472 | | - return this.kernel.send(m.fromPort, new Message({ |
| 473 | + return this.kernel.send(m.fromPort, this.kernel.createMessage({ |
473 | 474 | data: 'second' |
474 | 475 | })) |
475 | 476 | } |
476 | 477 | } |
485 | 486 | |
486 | 487 | const port = root.ports.create('root') |
487 | 488 | root.ports.bind(port, 'first') |
488 | 489 | |
489 | | - root.send(port, new Message()) |
| 490 | + root.send(port, root.createMessage()) |
490 | 491 | }) |
491 | 492 | |
492 | 493 | tape('message should arrive in the correct order, with a tie in ticks but with differnt proity', async t => { |
493 | 494 | t.plan(2) |
502 | 503 | this.kernel.ports.bind(one, 'one') |
503 | 504 | this.kernel.ports.bind(two, 'two') |
504 | 505 | |
505 | 506 | return Promise.all([ |
506 | | - this.kernel.send(two, new Message()), |
507 | | - this.kernel.send(one, new Message()) |
| 507 | + this.kernel.send(two, this.kernel.createMessage()), |
| 508 | + this.kernel.send(one, this.kernel.createMessage()) |
508 | 509 | ]) |
509 | 510 | } else if (this.runs === 1) { |
510 | 511 | this.runs++ |
511 | 512 | t.equals(m.data, 'first', 'should recive the first message') |
517 | 518 | |
518 | 519 | class First extends BaseContainer { |
519 | 520 | run (m) { |
520 | 521 | this.kernel.incrementTicks(2) |
521 | | - return this.kernel.send(m.fromPort, new Message({ |
| 522 | + return this.kernel.send(m.fromPort, this.kernel.createMessage({ |
522 | 523 | resources: { |
523 | 524 | priority: 100 |
524 | 525 | }, |
525 | 526 | data: 'first' |
529 | 530 | |
530 | 531 | class Second extends BaseContainer { |
531 | 532 | run (m) { |
532 | 533 | this.kernel.incrementTicks(2) |
533 | | - return this.kernel.send(m.fromPort, new Message({ |
| 534 | + return this.kernel.send(m.fromPort, this.kernel.createMessage({ |
534 | 535 | data: 'second' |
535 | 536 | })) |
536 | 537 | } |
537 | 538 | } |
544 | 545 | |
545 | 546 | const root = await hypervisor.createInstance('root') |
546 | 547 | const port = root.ports.create('root') |
547 | 548 | root.ports.bind(port, 'first') |
548 | | - root.send(port, new Message()) |
| 549 | + root.send(port, root.createMessage()) |
549 | 550 | }) |
550 | 551 | |
551 | 552 | tape('message should arrive in the correct order, with a tie in ticks but with differnt proity', async t => { |
552 | 553 | t.plan(2) |
562 | 563 | this.kernel.ports.bind(one, 'one') |
563 | 564 | this.kernel.ports.bind(two, 'two') |
564 | 565 | |
565 | 566 | return Promise.all([ |
566 | | - this.kernel.send(two, new Message()), |
567 | | - this.kernel.send(one, new Message()) |
| 567 | + this.kernel.send(two, this.kernel.createMessage()), |
| 568 | + this.kernel.send(one, this.kernel.createMessage()) |
568 | 569 | ]) |
569 | 570 | } else if (this.runs === 1) { |
570 | 571 | this.runs++ |
571 | 572 | t.equals(m.data, 'second', 'should recive the first message') |
577 | 578 | |
578 | 579 | class First extends BaseContainer { |
579 | 580 | run (m) { |
580 | 581 | this.kernel.incrementTicks(2) |
581 | | - return this.kernel.send(m.fromPort, new Message({ |
| 582 | + return this.kernel.send(m.fromPort, this.kernel.createMessage({ |
582 | 583 | data: 'first' |
583 | 584 | })) |
584 | 585 | } |
585 | 586 | } |
586 | 587 | |
587 | 588 | class Second extends BaseContainer { |
588 | 589 | run (m) { |
589 | 590 | this.kernel.incrementTicks(2) |
590 | | - return this.kernel.send(m.fromPort, new Message({ |
| 591 | + return this.kernel.send(m.fromPort, this.kernel.createMessage({ |
591 | 592 | resources: { |
592 | 593 | priority: 100 |
593 | 594 | }, |
594 | 595 | data: 'second' |
604 | 605 | |
605 | 606 | const root = await hypervisor.createInstance('root') |
606 | 607 | const port = root.ports.create('root') |
607 | 608 | root.ports.bind(port, 'first') |
608 | | - root.send(port, new Message()) |
| 609 | + root.send(port, root.createMessage()) |
609 | 610 | }) |
610 | 611 | |
611 | 612 | tape('should order parent messages correctly', async t => { |
612 | 613 | t.plan(1) |
618 | 619 | |
619 | 620 | const leaf = this.kernel.ports.create('leaf') |
620 | 621 | this.kernel.ports.bind(leaf, 'leaf') |
621 | 622 | |
622 | | - return this.kernel.send(leaf, new Message()) |
| 623 | + return this.kernel.send(leaf, this.kernel.createMessage()) |
623 | 624 | } else { |
624 | 625 | ++this.runs |
625 | 626 | if (this.runs === 3) { |
626 | 627 | t.equals(m.data, 'first') |
631 | 632 | |
632 | 633 | class Leaf extends BaseContainer { |
633 | 634 | run (m) { |
634 | 635 | this.kernel.incrementTicks(2) |
635 | | - return this.kernel.send(m.fromPort, new Message({ |
| 636 | + return this.kernel.send(m.fromPort, this.kernel.createMessage({ |
636 | 637 | data: 'first' |
637 | 638 | })) |
638 | 639 | } |
639 | 640 | } |
649 | 650 | |
650 | 651 | const port = root.ports.create('middle') |
651 | 652 | root.ports.bind(port, 'first') |
652 | 653 | |
653 | | - await root.send(port, new Message()) |
654 | | - root.send(port, new Message()) |
| 654 | + await root.send(port, root.createMessage()) |
| 655 | + root.send(port, root.createMessage()) |
655 | 656 | }) |
656 | 657 | |
657 | 658 | tape('get container instance by path', async t => { |
658 | 659 | t.plan(1) |