git ssb

0+

Dominic / ssb-peer-invites



Tree: b6540cc83c887c7a955b7a6e3e2280c017951e30

Files: b6540cc83c887c7a955b7a6e3e2280c017951e30 / test / accept5.js

3123 bytesRaw
1var crypto = require('crypto')
2var I = require('../valid')
3var createClient = require('ssb-client')
4var u = require('../util')
5
6var ssbKeys = require('ssb-keys')
7var tape = require('tape')
8//var explain = require('explain-error')
9var pull = require('pull-stream')
10//var u = require('../lib/util')
11var ref = require('ssb-ref')
12
13var createSbot = require('scuttlebot')
14 .use(require('ssb-links'))
15 .use({
16 name: 'replicate', version: '1.0.0',
17 manifest: { request: 'sync' },
18 init: function () {
19 return { request: function () {} }
20 }
21 })
22 .use(require('ssb-query'))
23 .use(require('ssb-device-address'))
24 .use(require('ssb-identities'))
25 .use(require('ssb-friends'))
26 .use(require('../'))
27
28function toId(msg) {
29 return '%'+ssbKeys.hash(JSON.stringify(msg, null, 2))
30}
31
32function all(stream, cb) {
33 return pull(stream, pull.collect(cb))
34}
35
36var caps = {
37 sign: crypto.randomBytes(32),//.toString('base64'),
38 userInvite: crypto.randomBytes(32),//.toString('base64'),
39 shs: crypto.randomBytes(32),//.toString('base64'),
40}
41
42var alice = createSbot({
43 temp: true,
44 timeout: 1000,
45 port: 12342,
46 keys:ssbKeys.generate(),
47 caps: caps
48})
49var bob = createSbot({
50 temp: true,
51 timeout: 1000,
52 port: 12343,
53 keys:ssbKeys.generate(),
54 caps: caps
55})
56
57tape('create an invite', function (t) {
58
59 alice.userInvites.create({allowWithoutPubs: true}, function (err, _invite) {
60 if(err) throw err
61 var invite = u.parse(_invite)
62 var seed = invite.seed
63 var invite_id = invite.invite
64
65 //use device address, just for tests
66 invite.pubs.push(alice.getAddress('device'))
67
68 bob.userInvites.openInvite(invite, function (err, invite_msg, data) {
69 if(err) throw err
70 t.ok(invite)
71 t.equal(toId(invite_msg), invite_id)
72 t.deepEqual(data, {reveal: undefined, private: undefined})
73
74 //bob publishes accept_content manually. simulates that he crashed
75 //before causing confirm.
76 var accept_content = I.createAccept(invite_msg, seed, bob.id, caps)
77 bob.publish(accept_content, function (err, accept) {
78 if(err) throw err
79
80 //alice manually creates confrim, to simulate receiving it, but crashing
81 //before bob receives it back, and so he calls again.
82
83 alice.publish(I.createConfirm(accept.value), function (err, _confirm) {
84 if(err) throw err
85 bob.userInvites.acceptInvite(invite, function (err, confirm) {
86 if(err) throw err
87 //alice returns the same confirm message, does not create a new one
88 t.equal(toId(confirm), toId(_confirm.value), 'id is equal')
89 t.deepEqual(confirm, _confirm.value)
90
91 //check that alice and bob both understand the other to be following them.
92 bob.friends.hops({reverse: true}, function (err, hops) {
93 t.equal(hops[alice.id], 1)
94 alice.friends.hops({reverse: true}, function (err, hops) {
95 t.equal(hops[bob.id], 1)
96 alice.close()
97 bob.close()
98 t.end()
99 })
100 })
101 })
102 })
103 })
104 })
105 })
106})
107
108

Built with git-ssb-web