diff --git a/.aegir.js b/.aegir.js index f43cfb2..3f672dc 100644 --- a/.aegir.js +++ b/.aegir.js @@ -1,21 +1,24 @@ 'use strict' const multiaddr = require('multiaddr') -const pull = require('pull-stream') +const pipe = require('it-pipe') const WS = require('./src') let listener function boot (done) { + console.log('boot!') const ws = new WS() const ma = multiaddr('/ip4/127.0.0.1/tcp/9095/ws') - listener = ws.createListener((conn) => pull(conn, conn)) - listener.listen(ma, done) + listener = ws.createListener(conn => pipe(conn, conn)) + listener.listen(ma).then(() => done()).catch(done) + listener.on('error', console.error) } function shutdown (done) { - listener.close(done) + console.log('shutdown') + listener.close().then(done).catch(done) } module.exports = { diff --git a/package.json b/package.json index c09b80d..0ba2833 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "aegir": "^18.0.3", "chai": "^4.1.2", "dirty-chai": "^2.0.1", - "interface-transport": "~0.3.6", + "interface-transport": "github:libp2p/interface-transport#feat/async-await", "it-goodbye": "^1.0.0", "it-pipe": "^1.0.0", "multiaddr": "^6.0.3", diff --git a/src/listener.js b/src/listener.js index 7b3ed25..5c5422e 100644 --- a/src/listener.js +++ b/src/listener.js @@ -12,10 +12,10 @@ module.exports = (options, handler) => { options = options || {} - const server = createServer(options, socket => { + const server = createServer(options, handler ? socket => { socket.getObservedAddrs = () => [] handler(socket) - }) + } : null) let listeningMultiaddr diff --git a/test/adapter/browser.js b/test/adapter/browser.js new file mode 100644 index 0000000..39cc612 --- /dev/null +++ b/test/adapter/browser.js @@ -0,0 +1,81 @@ +/* eslint-env mocha */ +'use strict' + +const chai = require('chai') +const dirtyChai = require('dirty-chai') +const expect = chai.expect +chai.use(dirtyChai) + +const multiaddr = require('multiaddr') +const pull = require('pull-stream') +const goodbye = require('pull-goodbye') + +const WS = require('../../src/adapter') + +describe('adapter libp2p-websockets', () => { + const ma = multiaddr('/ip4/127.0.0.1/tcp/9095/ws') + let ws + let conn + + beforeEach((done) => { + ws = new WS() + expect(ws).to.exist() + conn = ws.dial(ma, (err, res) => { + expect(err).to.not.exist() + done() + }) + }) + + it('echo', (done) => { + const message = 'Hello World!' + + const s = goodbye({ + source: pull.values([message]), + sink: pull.collect((err, results) => { + expect(err).to.not.exist() + expect(results).to.eql([message]) + done() + }) + }) + + pull(s, conn, s) + }) + + describe('stress', () => { + it('one big write', (done) => { + const rawMessage = Buffer.allocUnsafe(1000000).fill('a') + + const s = goodbye({ + source: pull.values([rawMessage]), + sink: pull.collect((err, results) => { + expect(err).to.not.exist() + expect(results).to.eql([rawMessage]) + done() + }) + }) + pull(s, conn, s) + }) + + it('many writes', function (done) { + this.timeout(100000) + const s = goodbye({ + source: pull( + pull.infinite(), + pull.take(20000), + pull.map((val) => Buffer.from(val.toString())) + ), + sink: pull.collect((err, result) => { + expect(err).to.not.exist() + expect(result).to.have.length(20000) + done() + }) + }) + + pull(s, conn, s) + }) + }) +}) + +it('.createServer throws in browser', () => { + expect(new WS().createListener).to.throw() +}) diff --git a/test/adapter/index.js b/test/adapter/index.js index 24be09b..a09dc02 100644 --- a/test/adapter/index.js +++ b/test/adapter/index.js @@ -1,2 +1,4 @@ +'use strict' + require('./compliance.node') require('./node') diff --git a/test/browser.js b/test/browser.js index bc4e9db..f627fb3 100644 --- a/test/browser.js +++ b/test/browser.js @@ -7,71 +7,57 @@ const expect = chai.expect chai.use(dirtyChai) const multiaddr = require('multiaddr') -const pull = require('pull-stream') -const goodbye = require('pull-goodbye') +const pipe = require('it-pipe') +const goodbye = require('it-goodbye') +const { collect, take } = require('streaming-iterables') const WS = require('../src') +// require('./adapter/browser') + describe('libp2p-websockets', () => { const ma = multiaddr('/ip4/127.0.0.1/tcp/9095/ws') let ws let conn - beforeEach((done) => { + beforeEach(async () => { ws = new WS() - expect(ws).to.exist() - conn = ws.dial(ma, (err, res) => { - expect(err).to.not.exist() - done() - }) + conn = await ws.dial(ma) }) - it('echo', (done) => { + it('echo', async () => { const message = 'Hello World!' + const s = goodbye({ source: [message], sink: collect }) - const s = goodbye({ - source: pull.values([message]), - sink: pull.collect((err, results) => { - expect(err).to.not.exist() - expect(results).to.eql([message]) - done() - }) - }) - - pull(s, conn, s) + const results = await pipe(s, conn, s) + expect(results).to.eql([message]) }) describe('stress', () => { - it('one big write', (done) => { + it('one big write', async () => { const rawMessage = Buffer.allocUnsafe(1000000).fill('a') - const s = goodbye({ - source: pull.values([rawMessage]), - sink: pull.collect((err, results) => { - expect(err).to.not.exist() - expect(results).to.eql([rawMessage]) - done() - }) - }) - pull(s, conn, s) + const s = goodbye({ source: [rawMessage], sink: collect }) + + const results = await pipe(s, conn, s) + expect(results).to.eql([rawMessage]) }) - it('many writes', function (done) { - this.timeout(10000) + it('many writes', async function () { + this.timeout(100000) const s = goodbye({ - source: pull( - pull.infinite(), - pull.take(1000), - pull.map((val) => Buffer.from(val.toString())) + source: pipe( + { + [Symbol.iterator] () { return this }, + next: () => ({ done: false, value: Buffer.from(Math.random().toString()) }) + }, + take(20000) ), - sink: pull.collect((err, result) => { - expect(err).to.not.exist() - expect(result).to.have.length(1000) - done() - }) + sink: collect }) - pull(s, conn, s) + const result = await pipe(s, conn, s) + expect(result).to.have.length(20000) }) }) }) diff --git a/test/compliance.node.js b/test/compliance.node.js index 3f31f97..e625142 100644 --- a/test/compliance.node.js +++ b/test/compliance.node.js @@ -5,20 +5,18 @@ const tests = require('interface-transport') const multiaddr = require('multiaddr') const WS = require('../src') -describe('compliance', () => { +describe('adapter compliance', () => { tests({ - setup (callback) { - let ws = new WS() + async setup () { + const ws = new WS() const addrs = [ multiaddr('/ip4/127.0.0.1/tcp/9091/ws'), multiaddr('/ip4/127.0.0.1/tcp/9092/wss'), multiaddr('/dns4/ipfs.io/tcp/9092/ws'), multiaddr('/dns4/ipfs.io/tcp/9092/wss') ] - callback(null, ws, addrs) + return { transport: ws, addrs } }, - teardown (callback) { - callback() - } + async teardown () {} }) }) diff --git a/test/node.js b/test/node.js index 6ff4d48..95add5c 100644 --- a/test/node.js +++ b/test/node.js @@ -13,7 +13,7 @@ const pipe = require('it-pipe') const WS = require('../src') -// require('./compliance.node') +require('./compliance.node') describe('instantiate the transport', () => { it('create', () => {