telehash
Version:
A telehash library for node and browserify
177 lines (147 loc) • 5.18 kB
JavaScript
var expect = require('chai').expect;
var concat = require('concat-stream');
var httplib = require('http');
var telehash = require('../../lib/mesh.js');
var lob = require('lob-enc');
var stream = require('../../ext/stream.js');
var thtp = require('../../ext/thtp.js');
var fs = require("fs")
describe('telehash/thtp', function(){
var idA = {"keys":{"1a":"akndnx5kbansip6xphxymwckpqkjj26fcm"},"secrets":{"1a":"ksxslm5mmtymnbph7nvxergb7oy3r35u"},"hashname":"5uegloufcyvnf34jausszmsabbfbcrg6fyxpcqzhddqxeefuapvq"};
var idB = {"keys":{"1a":"apkoh54rkobkeela6d62hblhqd7grqd5dm"},"secrets":{"1a":"ljfm3ov42x2fl6gsg6bxiqgtstnxls7r"},"hashname":"fvifxlr3bsaan2jajo5qqn4au5ldy2ypiweazmuwjtgtg43tirkq"};
it('should export an extension', function(){
expect(thtp).to.be.a('object');
expect(thtp.name).to.be.equal('thtp');
expect(thtp.mesh).to.be.a('function');
});
it('should create a new extension', function(done){
var mesh = {};
thtp.mesh(mesh, function(err, ext){
expect(err).to.not.exist;
expect(ext).to.be.a('object');
expect(ext.link).to.be.a('function');
expect(mesh.proxy).to.be.a('function');
expect(mesh.request).to.be.a('function');
var link = {};
ext.link(link, function(err){
expect(err).to.not.exist;
expect(link.proxy).to.be.a('function');
expect(link.request).to.be.a('function');
done();
})
});
});
it('should receive an internal proxy request', function(done){
// telehash.log({debug:console.log});
var meshA = telehash.mesh({id:idA,extensions:{stream:stream,thtp:thtp}});
expect(meshA).to.exist;
var meshB = telehash.mesh({id:idB,extensions:{stream:stream,thtp:thtp}});
expect(meshB).to.exist;
// pair them
meshA.mesh(meshB);
var linkAB = meshA.link(meshB.hashname);
// dummy proxy
var proxy = {emit:function(on, req, res){
expect(on).to.be.equal('request');
expect(req.method).to.be.equal('POST');
expect(req.url).to.be.equal('/');
req.pipe(concat(function(body){
expect(body).to.exist;
expect(body.toString()).to.be.equal('test');
done();
}));
}};
meshB.proxy(proxy);
// send request
linkAB.request({method:'post',path:'/'}, function(err){
expect(err).to.not.exist;
}).end('test');
});
/*
it('should proxy to a real server', function(done){
// telehash.log({debug:console.log});
var meshA = telehash.mesh({id:idA,extensions:{stream:stream,thtp:thtp}});
expect(meshA).to.exist;
var meshB = telehash.mesh({id:idB,extensions:{stream:stream,thtp:thtp}});
expect(meshB).to.exist;
// pair them
meshA.mesh(meshB);
var linkAB = meshA.link(meshB.hashname);
// dummy proxy
var proxy = httplib.createServer(function(req, res){
expect(req.url).to.be.equal('/test');
res.end('test');
});
meshB.proxy(proxy);
// send request and gather response
linkAB.request('/test', function(err, res){
expect(err).to.not.exist;
res.pipe(concat(function(body){
expect(body.toString()).to.be.equal('test');
done();
}));
});
});
it('should handle piping to response', function(done){
// telehash.log({debug:console.log});
var meshA = telehash.mesh({id:idA,extensions:{stream:stream,thtp:thtp}});
expect(meshA).to.exist;
var meshB = telehash.mesh({id:idB,extensions:{stream:stream,thtp:thtp}});
expect(meshB).to.exist;
// pair them
meshA.mesh(meshB);
var linkAB = meshA.link(meshB.hashname);
var ch = 0
// dummy proxy
var proxy = httplib.createServer(function(req, res){
expect(req.url).to.be.equal('/test');
var fss =
fs
.createReadStream(__dirname + "/thtp.test.js");
fss.pipe(res)
fss.on('end',function(){
res.end( )
})
});
meshB.proxy(proxy);
// send request and gather response
linkAB.request('/test', function(err, res){
expect(err).to.not.exist;
res.pipe(concat(function(body){
fs
.createReadStream(__dirname + "/thtp.test.js")
.pipe(concat(function(comp){
expect(body.toString()).to.be.equal(comp.toString())
done()
}));
}))
});
});
it("should proxy to a url", function(done){
var meshA = telehash.mesh({id:idA,extensions:{stream:stream,thtp:thtp}});
expect(meshA).to.exist;
var meshB = telehash.mesh({id:idB,extensions:{stream:stream,thtp:thtp}});
expect(meshB).to.exist;
// pair them
meshA.mesh(meshB);
var linkAB = meshA.link(meshB.hashname);
// dummy proxy
var proxy = httplib.createServer(function(req, res){
expect(req.url).to.be.equal('/test');
res.end('test')
})
proxy.listen(9876);
meshB.proxy("http://localhost:9876");
setTimeout(function(){
linkAB.request("http://localhost:9876/test", function(err, res){
expect(err).to.not.exist;
res.pipe(concat(function(body){
expect(body.toString()).to.be.equal('test');
done();
}));
})
},100)
// send request and gather response
})
*/
});