UNPKG

3.39 kBJavaScriptView Raw
1'use strict'
2var tape = require('tape')
3var pull = require('pull-stream')
4var explain = require('explain-error')
5var ssbKeys = require('ssb-keys')
6
7function encode (obj) {
8 return JSON.stringify(obj, null, 2)
9}
10
11var createFeed = require('../')
12
13var opts = ssbKeys
14opts.keys = opts
15
16var ssb = require('./mock')()
17var create = require('../util').create
18
19 var validate = require('../validator')(ssb, opts)
20
21 tape('single', function (t) {
22 var keys = opts.keys.generate()
23 var msg = create(keys, null, {type: 'init', public: keys.public})
24
25 validate(msg, function (err, msg) {
26 if(err) throw err
27 ssb.get(msg.key, function (err, _msg) {
28 t.deepEqual(_msg, msg.value)
29 t.end()
30 })
31 })
32 })
33
34 tape('simple', function (t) {
35 var keys = opts.keys.generate()
36 var prev
37 var messages = [
38 prev = create(keys, null, {type: 'init', public: keys.public}),
39 prev = create(keys, 'msg', 'hello', prev),
40 prev = create(keys, 'msg', 'hello2', prev)
41 ]
42
43 var _msg = null
44 messages.forEach(function (msg) {
45 validate(msg, function (err) {
46 if(_msg)
47 t.equal('%'+opts.hash(encode(_msg)), msg.previous)
48 _msg = msg
49 if(err) throw err
50 if(msg.sequence === 3)
51 t.end()
52 })
53 })
54 })
55
56 tape('add & validate', function (t) {
57 var keys = opts.keys.generate()
58 var prev
59 ssb.add(
60 prev = create(keys, null, {type: 'init', public: keys.public}),
61 function (err) {
62 if(err) throw explain(err, 'init failed')
63
64 ssb.add(
65 prev = create(keys, 'msg', 'hello', prev),
66 function (err) {
67 if(err) throw explain(err, 'hello failed')
68
69 ssb.add(
70 prev = create(keys, 'msg', 'hello2', prev),
71 function (err) {
72 if(err) throw explain(err, 'hello2 failed')
73 pull(
74 ssb.createFeedStream({ keys: false }),
75 pull.collect(function (err, ary) {
76 if(err) throw explain(err, 'createFeedStream failed')
77 t.deepEqual(ary.pop(), prev)
78 t.end()
79 })
80 )
81 }
82 )
83 }
84 )
85 }
86 )
87 })
88
89 tape('race: should queue', function (t) {
90 var keys = opts.keys.generate()
91 var prev, calls = 0
92 ssb.add(
93 prev = create(keys,null, {type: 'init', public: keys.public}),
94 function (err) {
95 if(err) throw err
96 calls ++
97 }
98 )
99 ssb.add(
100 prev = create(keys, 'msg', 'hello', prev),
101 function (err) {
102 if(err) throw err
103 calls ++
104 }
105 )
106 ssb.add(
107 prev = create(keys, 'msg', 'hello2', prev),
108 function (err) {
109 if(err) throw err
110 calls ++
111 }
112 )
113 setTimeout(function () {
114 ssb.add(
115 prev = create(keys, 'msg', 'hello3', prev),
116 function (err) {
117 if(err) throw err
118 calls ++
119 t.equal(calls, 4)
120 t.end()
121 }
122 )
123 })
124 })
125
126 tape('too big', function (t) {
127 var keys = opts.keys.generate()
128 var str = ''
129 for (var i=0; i < 808; i++) str += '1234567890'
130
131 var msg = create(keys, null, {type: 'msg', value: str})
132
133 validate(msg, function (err, msg) {
134 if(!err) throw new Error('too big was allowed')
135 t.end()
136 })
137 })
138
139