UNPKG

5.51 kBJavaScriptView Raw
1const debug = require('debug')('ssb-blobs')
2var tape = require('tape')
3var Blobs = require('../inject')
4var pull = require('pull-stream')
5var bitflipper = require('pull-bitflipper')
6var assert = require('assert')
7
8var u = require('./util')
9var Fake = u.fake
10var hash = u.hash
11
12module.exports = function (createBlobs, createAsync) {
13
14
15 function log (name) {
16 if(LOGGING)
17 return pull.through(function (e) {
18 debug(name, e)
19 })
20 else
21 return pull.through()
22 }
23
24 tape('want - has', function (t) {
25 createAsync(function (async) {
26 var alice = createBlobs('alice', async)
27 var bob = createBlobs('bob', async)
28 var blob = Fake('foobar', 64)
29 var h = hash(blob)
30
31 u.peers('alice', alice, 'bob', bob)//, async)
32
33 alice.want(h, function (err, has) {
34 if(err) throw err
35 debug('ALICE has?', h, has)
36 alice.has(h, function (err, has) {
37 debug('ALICE has!', h, has)
38 if(err) throw err
39 assert.ok(has)
40 async.done()
41 })
42 })
43
44 pull(pull.once(blob), bob.add())
45 }, function (err) {
46 if(err) throw err
47 t.end()
48 })
49 })
50
51 tape('want - has 2', function (t) {
52 createAsync(function (async) {
53 var alice = createBlobs('alice', async)
54 var bob = createBlobs('bob', async)
55 var blob = Fake('foobar', 64)
56 var h = hash(blob)
57
58 u.peers('bob', bob, 'alice', alice)
59 pull(pull.once(blob), bob.add())
60
61 alice.want(h, function (err, has) {
62 if(err) throw err
63 alice.has(h, function (err, has) {
64 if(err) throw err
65 assert.ok(has)
66 async.done()
67 })
68 })
69 }, function (err) {
70 if(err) throw err
71 t.end()
72 })
73 })
74
75 tape('want - want -has', function (t) {
76 createAsync(function (async) {
77 var alice = createBlobs('alice', async)
78 var bob = createBlobs('bob', async)
79 var carol = createBlobs('carol', async)
80
81 var blob = Fake('baz', 64)
82 var h = hash(blob)
83
84 u.peers('alice', alice, 'bob', bob)
85 u.peers('bob', bob, 'carol', carol)
86
87 alice.want(h, function (err, has) {
88 if(err) throw err
89 alice.has(h, function (err, has) {
90 if(err) throw err
91 assert.ok(has)
92 async.done()
93 })
94 })
95
96 pull(pull.once(blob), carol.add())
97 }, function (err) {
98 if(err) throw err
99 t.end()
100 })
101 })
102
103
104 tape('peers want what you have', function (t) {
105 createAsync(function (async) {
106 if(Array.isArray(process._events['exit']))
107 debug(process._events['exit'].reverse())
108 var alice = createBlobs('alice', async)
109 var bob = createBlobs('bob', async)
110 var carol = createBlobs('carol', async)
111
112 var blob = Fake('baz', 64)
113 var h = hash(blob)
114
115 u.peers('alice', alice, 'bob', bob)
116 u.peers('bob', bob, 'carol', carol)
117
118 pull(
119 carol.changes(),
120 pull.drain(function (_h) {
121 assert.equal(_h, h)
122 async.done()
123 })
124 )
125
126 alice.want(h, function () {})
127 pull(pull.once(blob), alice.add())
128 }, function (err) {
129 if(err) throw err
130 t.end()
131 })
132 })
133
134
135 tape('triangle', function (t) {
136 createAsync(function (async) {
137 var n = 0
138 var alice = createBlobs('alice', async)
139 var bob = createBlobs('bob', async)
140 var carol = createBlobs('carol', async)
141
142 var blob = Fake('baz', 64)
143 var h = hash(blob)
144
145 u.peers('alice', alice, 'bob', bob)
146 u.peers('bob', bob, 'carol', carol)
147
148 pull(
149 bob.changes(),
150 pull.drain(function (_h) {
151 assert.equal(_h, h)
152 async.done()
153 })
154 )
155
156 pull(pull.once(blob), alice.add())
157 pull(pull.once(blob), carol.add())
158
159 bob.want(h, function () {})
160 }, function (err) {
161 if(err) throw err
162 t.end()
163 })
164 })
165
166 tape('corrupt', function (t) {
167 createAsync(function (async) {
168 var n = 0
169 var alice = createBlobs('alice', async)
170 var bob = createBlobs('bob', async)
171 var carol = createBlobs('carol', async)
172
173 //everything that comes from bob is corrupt
174 var get = alice.get
175 alice.get = function (id) {
176 return pull(get(id), bitflipper(1))
177 }
178
179 var blob = Fake('baz', 64)
180 var h = hash(blob)
181
182 u.peers('alice', alice, 'bob', bob)
183 u.peers('bob', bob, 'carol', carol)
184
185 pull(
186 bob.changes(),
187 pull.drain(function (_h) {
188 debug('HAS', _h)
189 assert.equal(_h, h)
190 async.done()
191 })
192 )
193
194 bob.want(h, function () {})
195 pull(pull.once(blob), alice.add())
196 pull(pull.once(blob), carol.add())
197 }, function (err) {
198 if(err) throw err
199 t.end()
200 })
201 })
202
203 tape('cycle', function (t) {
204 createAsync(function (async) {
205 var n = 0
206 var alice = createBlobs('alice', async)
207 var bob = createBlobs('bob', async)
208 var carol = createBlobs('carol', async)
209 var dan = createBlobs('dan', async)
210 u.peers('alice', alice, 'bob', bob)
211 u.peers('bob', bob, 'carol', carol)
212 u.peers('carol', carol, 'dan', dan)
213 u.peers('dan', dan, 'alice', alice)
214
215 var blob = Fake('gurg', 64)
216 var h = hash(blob)
217 alice.want(h, function (err, has) {
218 async.done()
219 })
220
221 pull(pull.once(blob), dan.add(h))
222 }, function (err) {
223 if(err) throw err
224 t.end()
225 })
226
227 })
228}
229
230if(!module.parent)
231 u.tests(module.exports)
232
233
234