UNPKG

4.41 kBJavaScriptView Raw
1var assert = require('assert');
2var path = require('path');
3var levelup = require('levelup');
4var memdown = require('memdown');
5var PeerRegistry = require('../lib/peer_registry');
6var Query = require('calypso').Query;
7
8var dbPath = path.join(__dirname, './.peers');
9
10describe('Peer Registry', function() {
11 var db, opts;
12
13 beforeEach(function(done) {
14 db = levelup(dbPath, { db: memdown });
15 opts = { db: db, collection: 'peers' };
16 done();
17 });
18
19 afterEach(function(done) {
20 if (db) {
21 db.close(done);
22 }
23 });
24
25 it('should save a peer', function(done) {
26 var reg = new PeerRegistry(opts);
27 reg.save({ id: 0 }, function(err) {
28 assert.ifError(err);
29 done();
30 });
31 });
32
33 it('should remove error property on peer save when status is not failed', function(done) {
34 var reg = new PeerRegistry(opts);
35 reg.save({ id: 0, error: new Error() }, function() {
36 reg.get(0, function(err, result) {
37 assert.equal(result.error, undefined);
38 done();
39 });
40 });
41 })
42
43 it('should find multiple peers', function(done) {
44 var reg = new PeerRegistry(opts);
45 reg.save({ id: 0 }, function() {
46 reg.save({ id: 1 }, function() {
47 var query = Query.of('peers');
48 reg.find(query, function(err, results) {
49 assert.equal(results.length, 2);
50 done();
51 });
52 });
53 });
54 });
55
56 it('should get peers by id', function(done) {
57 var reg = new PeerRegistry(opts);
58 reg.save({ id: 012345 }, function() {
59 reg.get(012345, function(err, peer) {
60 assert(peer);
61 done();
62 });
63 });
64 });
65
66 it('should delete peers', function(done) {
67 var reg = new PeerRegistry(opts);
68 var peer = { id: 0123456 };
69 reg.save(peer, function() {
70 reg.remove(peer, function(err, peer) {
71 assert.ifError(err);
72 done();
73 });
74 });
75 });
76
77 it('should close', function(done) {
78 var reg = new PeerRegistry(opts);
79 reg.close(function(err) {
80 assert.ifError(err);
81 done();
82 });
83 });
84
85 describe('#add', function() {
86 it('should save new peers', function(done) {
87 var reg = new PeerRegistry(opts);
88 var peer = {id: 'someid'};
89
90 reg.add(peer, function(err, result) {
91 assert.ok(result);
92 done();
93 });
94 });
95
96 it('should generate an ID for new peers', function(done) {
97 var reg = new PeerRegistry(opts);
98 var peer = {id: 'someid'};
99
100 reg.add(peer, function(err, result) {
101 assert.ok(result.id);
102 done();
103 });
104 });
105
106 it('should update existing peers', function(done) {
107 var reg = new PeerRegistry(opts);
108 var peer = { id: 012345 };
109
110 reg.save(peer, function() {
111 reg.add(peer, function(err, result) {
112 assert.equal(result.id, peer.id);
113 done();
114 });
115 });
116 });
117
118 it('propagates errors from #find', function(done) {
119 var reg = new PeerRegistry(opts);
120 var peer = {id: 'someid'};
121
122 reg.find = function(key, cb) {
123 cb(new Error());
124 };
125
126 reg.add(peer, function(err, result) {
127 assert.ok(err);
128 done();
129 });
130 });
131
132 it('propagates errors from #save', function(done) {
133 var reg = new PeerRegistry(opts);
134 var peer = {};
135
136 reg.save = function(key, cb) {
137 cb(new Error());
138 };
139
140 reg.add(peer, function(err, result) {
141 assert.ok(err);
142 done();
143 });
144 });
145
146
147 it('it should not match entries when both .url are undefined or null', function(done) {
148 var reg = new PeerRegistry(opts);
149 var peer1 = { id: 'some-peer-1'};
150 var peer2 = { id: 'some-peer-2'};
151
152 reg.add(peer1, function(err, result1) {
153 assert.ok(result1.id);
154 reg.add(peer2, function(err, result2) {
155 assert.ok(result2.id);
156 assert.ok(result1.id !== result2.id, 'should create two unique peers')
157 done();
158 });
159 });
160 });
161
162 // issue 308: https://github.com/zettajs/zetta/issues/308
163 it('should get a peer added with an ID greater than Number.MAX_VALUE', function(done) {
164 var reg = new PeerRegistry(opts);
165 var peer = { id: '1e309'};
166 reg.add(peer, function() {
167 reg.get('1e309', function(err, peer) {
168 console.log(err);
169 assert(peer);
170 done();
171 });
172 });
173 });
174
175
176 });
177});