telehash
Version:
A telehash library for node and browserify
117 lines (98 loc) • 4.43 kB
JavaScript
var expect = require('chai').expect;
var telehash = require('../../lib/mesh.js');
var lob = require('lob-enc');
var peer = require('../../ext/peer.js');
var stream = require("../../ext/stream.js")
describe('telehash/peer', function(){
var idA = {"keys":{"1a":"akndnx5kbansip6xphxymwckpqkjj26fcm"},"secrets":{"1a":"ksxslm5mmtymnbph7nvxergb7oy3r35u"},"hashname":"5uegloufcyvnf34jausszmsabbfbcrg6fyxpcqzhddqxeefuapvq"};
var idB = {"keys":{"1a":"apkoh54rkobkeela6d62hblhqd7grqd5dm"},"secrets":{"1a":"ljfm3ov42x2fl6gsg6bxiqgtstnxls7r"},"hashname":"fvifxlr3bsaan2jajo5qqn4au5ldy2ypiweazmuwjtgtg43tirkq"};
var idC = {"keys":{"1a":"ani5tcf3r3zgngisdogrg5haelxkckh5xq"},"secrets":{"1a":"bb2t3bxnaakil6rivdzahbpsgngaritm"},"hashname":"kw3akwcypoedvfdquuppofpujbu7rplhj3vjvmvbkvf7z3do7kkq"};
it('should export an extension', function(){
expect(peer).to.be.a('object');
expect(peer.name).to.be.equal('peer');
expect(peer.mesh).to.be.a('function');
});
it('should create a peer pipe', function(done){
telehash.mesh({id:idA,extensions:{}},function(err, mesh){
mesh.extend(peer, function(err){
expect(err).to.not.exist;
var link = mesh.link({keys:idB.keys});
link.addPath({type:'peer',hn:idA.hashname},function(pipe){
expect(pipe).to.be.an('object');
expect(pipe.isPipe).to.be.true;
expect(link.pipes.length).to.be.equal(1);
done();
});
});
});
});
it('should create a link through a peer', function(done){
//telehash.log({debug:function(){}});
telehash.mesh({id:idA,extensions:{peer:peer}},function(err, meshA){
expect(err).to.not.exist;
telehash.mesh({id:idB,extensions:{peer:peer}},function(err, meshB){
expect(err).to.not.exist;
telehash.mesh({id:idC,extensions:{peer:peer}},function(err, meshC){
expect(err).to.not.exist;
// connect both to B
Promise.all([meshA.mesh(meshB), meshC.mesh(meshB)])
.then(function(){
console.log("MESHED")
// let C trust A but not know more
expect(meshC.link(meshA.hashname)).to.exist;
// create a link from A->C with the peer path
var args = {hashname:meshC.hashname, paths:[]};
args.paths.push({type:'peer',hn:meshB.hashname});
var link = meshA.link(args);
expect(link).to.exist;
// it should go online
link.status(function(err){
expect(err).to.not.exist;
done();
});
});
});
});
});
})
it('should create a bridge through a peer', function(done){
this.timeout(5000)
//telehash.log({debug:function(){}});
telehash.mesh({id:idA,extensions:{peer:peer, stream:stream}},function(err, meshA){
expect(err).to.not.exist;
telehash.mesh({id:idB,extensions:{peer:peer, stream:stream}},function(err, meshB){
expect(err).to.not.exist;
telehash.mesh({id:idC,extensions:{peer:peer, stream:stream}},function(err, meshC){
expect(err).to.not.exist;
// connect both to B
Promise.all([meshA.mesh(meshB), meshC.mesh(meshB)])
.then(function(){
// let C trust A but not know more
expect(meshC.link(meshA.hashname)).to.exist;
meshC.stream(function(link,open,accept){
var stream = accept();
stream.on("data",function(data){
if (data.toString() == "accept")
done()
})
})
// create a link from A->C with the peer path
var args = {hashname:meshC.hashname, paths:[]};
args.paths.push({type:'peer',hn:meshB.hashname});
var link = meshA.link(args);
expect(link).to.exist;
// it should go online
console.log("LINK?")
link.status(function(err){
expect(err).to.not.exist;
var str = link.stream()
str.write("accept")
});
}).catch(function(err){
console.log("Er?", err.stack)
});
});
});
});
})
});