git ssb

0+

Dominic / ssb-peer-invites



Tree: a41f157208371363a64d45872e71c9ee8a1812de

Files: a41f157208371363a64d45872e71c9ee8a1812de / test / accept5.js

3053 bytesRaw
1var crypto = require('crypto')
2var I = require('../valid')
3var createClient = require('ssb-client')
4
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({}, function (err, invite) {
60 if(err) throw err
61 var seed = invite.seed
62 var invite_id = invite.invite
63
64 //use device address, just for tests
65 invite.pubs.push(alice.getAddress('device'))
66
67 bob.userInvites.openInvite(invite, function (err, invite_msg, data) {
68 if(err) throw err
69 t.ok(invite)
70 t.equal(toId(invite_msg), invite_id)
71 t.deepEqual(data, {reveal: undefined, private: undefined})
72
73 //bob publishes accept_content manually. simulates that he crashed
74 //before causing confirm.
75 var accept_content = I.createAccept(invite_msg, seed, bob.id, caps)
76 bob.publish(accept_content, function (err, accept) {
77 if(err) throw err
78
79 //alice manually creates confrim, to simulate receiving it, but crashing
80 //before bob receives it back, and so he calls again.
81
82 alice.publish(I.createConfirm(accept.value), function (err, _confirm) {
83 if(err) throw err
84 bob.userInvites.acceptInvite(invite, function (err, confirm) {
85 if(err) throw err
86 //alice returns the same confirm message, does not create a new one
87 t.equal(toId(confirm), toId(_confirm.value), 'id is equal')
88 t.deepEqual(confirm, _confirm.value)
89
90 //check that alice and bob both understand the other to be following them.
91 bob.friends.hops({reverse: true}, function (err, hops) {
92 t.equal(hops[alice.id], 1)
93 alice.friends.hops({reverse: true}, function (err, hops) {
94 t.equal(hops[bob.id], 1)
95 alice.close()
96 bob.close()
97 t.end()
98 })
99 })
100 })
101 })
102 })
103 })
104 })
105})
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120

Built with git-ssb-web