diff --git a/karma.conf.js b/karma.conf.js index 07cb4fce..50ef8cb0 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -46,6 +46,7 @@ module.exports = function (config) { autoWatch: false, browsers: process.env.TRAVIS ? ['Firefox'] : ['Chrome'], captureTimeout: 60000, + browserNoActivityTimeout: 20000, singleRun: true }) } diff --git a/tests/browser.js b/tests/browser.js index 62d81f1f..5b679170 100644 --- a/tests/browser.js +++ b/tests/browser.js @@ -4,12 +4,20 @@ const expect = require('chai').expect // const async = require('async') const multiaddr = require('multiaddr') -// const Id = require('peer-id') +const PeerId = require('peer-id') const Peer = require('peer-info') const Swarm = require('../src') const WebSockets = require('libp2p-websockets') const bl = require('bl') +const PEER_ID_SERVER_A = 'QmWg2L4Fucx1x4KXJTfKHGixBJvveubzcd7DdhB2Mqwfh1' +const PEER_ID_SERVER_B = 'QmRy1iU6BHmG5Hd8rnPhPL98cy1W1przUSTAMcGDq9yAAV' +const MULTIADDR_SERVER_A = '/ip4/127.0.0.1/tcp/9888/websockets' +const MULTIADDR_SERVER_B = '/ip4/127.0.0.1/tcp/9999/websockets' + +// random id to be used on the tests +const PEER_ID_A = 'QmYzgdesgjdvD3okTPGZT9NPmh1BuH5FfTVNKjsvaAprhb' + describe('basics', () => { it('throws on missing peerInfo', (done) => { expect(Swarm).to.throw(Error) @@ -20,24 +28,24 @@ describe('basics', () => { describe('transport - websockets', function () { this.timeout(10000) - var swarmB - var peerB = new Peer() + var swarm + var peerId = PeerId.createFromB58String(PEER_ID_A) + var peer = new Peer(peerId) before((done) => { - peerB.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/9999/websockets')) - swarmB = new Swarm(peerB) + swarm = new Swarm(peer) done() }) it('add', (done) => { - swarmB.transport.add('ws', new WebSockets(), () => { - expect(Object.keys(swarmB.transports).length).to.equal(1) + swarm.transport.add('ws', new WebSockets(), () => { + expect(Object.keys(swarm.transports).length).to.equal(1) done() }) }) it('dial', (done) => { - const conn = swarmB.transport.dial('ws', multiaddr('/ip4/127.0.0.1/tcp/9888/websockets'), (err, conn) => { + const conn = swarm.transport.dial('ws', multiaddr(MULTIADDR_SERVER_A), (err, conn) => { expect(err).to.not.exist }) conn.pipe(bl((err, data) => { @@ -49,3 +57,77 @@ describe('transport - websockets', function () { conn.end() }) }) + +describe('high level API - 1st without stream multiplexing (on websockets)', function () { + this.timeout(10000) + + var swarm + var peerSelf + var peerServerA + var peerServerB + + before((done) => { + const peerServerAId = PeerId.createFromB58String(PEER_ID_SERVER_A) + peerServerA = new Peer(peerServerAId) + const peerServerBId = PeerId.createFromB58String(PEER_ID_SERVER_B) + peerServerB = new Peer(peerServerBId) + const peerSelfId = PeerId.createFromB58String(PEER_ID_A) + peerSelf = new Peer(peerSelfId) + + peerServerA.multiaddr.add(multiaddr(MULTIADDR_SERVER_A)) + peerServerB.multiaddr.add(multiaddr(MULTIADDR_SERVER_B)) + + swarm = new Swarm(peerSelf) + + swarm.transport.add('ws', new WebSockets()) + expect(Object.keys(swarm.transports).length).to.equal(1) + done() + }) + + // after((done) => { + // swarm.close(done) + // }) + + it('dial using transport interface', (done) => { + const conn = swarm.transport.dial('ws', peerServerA.multiaddrs, (err, conn) => { + expect(err).to.not.exist + }) + + conn.pipe(bl((err, data) => { + expect(err).to.not.exist + expect(data.toString()).to.equal('hey') + done() + })) + conn.write('hey') + conn.end() + }) + + it('dial on protocol', (done) => { + swarm.dial(peerServerB, '/pineapple/1.0.0', (err, conn) => { + expect(err).to.not.exist + conn.pipe(bl((err, data) => { + expect(err).to.not.exist + expect(data.toString()).to.equal('yo') + done() + })) + conn.write('yo') + conn.end() + }) + }) + + it('dial to warm a conn', (done) => { + swarm.dial(peerServerB, (err) => { + expect(err).to.not.exist + done() + }) + }) + + it('dial on protocol, reuse warmed conn', (done) => { + swarm.dial(peerServerB, '/pineapple/1.0.0', (err, conn) => { + expect(err).to.not.exist + conn.end() + conn.on('data', () => {}) // let it flow.. let it flooooow + conn.on('end', done) + }) + }) +}) diff --git a/tests/karma.js b/tests/karma.js index d41ea25e..b86a2f81 100644 --- a/tests/karma.js +++ b/tests/karma.js @@ -2,25 +2,58 @@ const Server = require('karma').Server const path = require('path') const Peer = require('peer-info') +const PeerId = require('peer-id') const WebSockets = require('libp2p-websockets') const Swarm = require('../src') const multiaddr = require('multiaddr') +const PEER_ID_SERVER_A = 'QmWg2L4Fucx1x4KXJTfKHGixBJvveubzcd7DdhB2Mqwfh1' +const PEER_ID_SERVER_B = 'QmRy1iU6BHmG5Hd8rnPhPL98cy1W1przUSTAMcGDq9yAAV' +const MULTIADDR_SERVER_A = '/ip4/127.0.0.1/tcp/9888/websockets' +const MULTIADDR_SERVER_B = '/ip4/127.0.0.1/tcp/9999/websockets' + var swarmA var peerA +var swarmB +var peerB -function createServer (done) { - peerA = new Peer() - peerA.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/9888/websockets')) - swarmA = new Swarm(peerA) - swarmA.transport.add('ws', new WebSockets()) - swarmA.transport.listen('ws', {}, (conn) => { - conn.pipe(conn) - }, done) +function createServers (done) { + function createServerA (cb) { + const id = PeerId.createFromB58String(PEER_ID_SERVER_A) + peerA = new Peer(id) + peerA.multiaddr.add(multiaddr(MULTIADDR_SERVER_A)) + swarmA = new Swarm(peerA) + swarmA.transport.add('ws', new WebSockets()) + swarmA.transport.listen('ws', {}, (conn) => { + conn.pipe(conn) + }, cb) + } + + function createServerB (cb) { + const id = PeerId.createFromB58String(PEER_ID_SERVER_B) + peerB = new Peer(id) + peerB.multiaddr.add(multiaddr(MULTIADDR_SERVER_B)) + swarmB = new Swarm(peerB) + swarmB.transport.add('ws', new WebSockets()) + swarmB.handle('/pineapple/1.0.0', (conn) => { + conn.pipe(conn) + }) + swarmB.transport.listen('ws', {}, null, cb) + } + + var count = 0 + const ready = () => ++count === 2 ? done() : null + + createServerA(ready) + createServerB(ready) } -function stopServer (done) { - swarmA.transport.close('ws', done) +function stopServers (done) { + var count = 0 + const ready = () => ++count === 2 ? done() : null + + swarmA.transport.close('ws', ready) + swarmB.transport.close('ws', ready) } function runTests (done) { @@ -30,4 +63,4 @@ function runTests (done) { }, done).start() } -createServer(() => runTests(() => stopServer(() => null))) +createServers(() => runTests(() => stopServers(() => null)))