diff --git a/.travis.yml b/.travis.yml index bac6922..b0136de 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,4 +9,11 @@ before_install: script: - npm run lint - - npm test \ No newline at end of file + - npm test + +addons: + firefox: 'latest' + +before_script: + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..718564b --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,39 @@ +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['mocha'], + + files: [ + 'tests/multiplex-test.js', + 'tests/browser.js' + ], + + preprocessors: { + 'tests/*': ['webpack'] + }, + + webpack: { + resolve: { + extensions: ['', '.js'] + }, + node: { + Buffer: true + } + }, + + webpackMiddleware: { + noInfo: true, + stats: { + colors: true + } + }, + reporters: ['spec'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: false, + browsers: process.env.TRAVIS ? ['Firefox'] : ['Chrome'], + captureTimeout: 60000, + singleRun: true + }) +} diff --git a/package.json b/package.json index 2b12151..65821f4 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,9 @@ "main": "src/index.js", "scripts": { "lint": "standard", - "test": "mocha tests/*-test.js", + "test:node": "mocha tests/*-test.js", + "test:browser": "node tests/karma.js", + "test": "npm run test:node && npm run test:browser", "compliance": "node tests/compliance.js" }, "repository": { @@ -24,12 +26,20 @@ "devDependencies": { "chai": "^3.5.0", "interface-stream-muxer": "^0.3.1", + "karma": "^0.13.22", + "karma-chrome-launcher": "^0.2.2", + "karma-firefox-launcher": "^0.1.7", + "karma-mocha": "^0.2.2", + "karma-spec-reporter": "0.0.24", + "karma-webpack": "^1.7.0", + "libp2p-websockets": "^0.2.1", + "mocha": "^2.4.5", "pre-commit": "^1.1.2", "standard": "^6.0.7", "stream-pair": "^1.0.3", "tape": "^4.2.0", "timed-tape": "^0.1.0", - "mocha": "^2.4.5" + "webpack": "^2.1.0-beta.4" }, "dependencies": { "multiplex": "^6.7.0" diff --git a/tests/browser.js b/tests/browser.js new file mode 100644 index 0000000..59d904e --- /dev/null +++ b/tests/browser.js @@ -0,0 +1,35 @@ +/* eslint-env mocha */ + +const expect = require('chai').expect +const WSlibp2p = require('libp2p-websockets') +const multiplex = require('../src') +const multiaddr = require('multiaddr') + +describe('browser + server', () => { + var ws + before((done) => { + ws = new WSlibp2p() + done() + }) + + it('create a stream and wait for server to create another', (done) => { + const mh = multiaddr('/ip4/127.0.0.1/tcp/9090/websockets') + const dialerSocket = ws.dial(mh) + + const dialer = multiplex(dialerSocket, false) + dialer.on('stream', (conn) => { + conn.on('data', (data) => { + expect(data.toString()).to.equal('hey') + conn.end() + done() + }) + }) + + const conn = dialer.newStream() + conn.write('hey') + + conn.on('error', (err) => { + expect(err).to.not.exist + }) + }) +}) diff --git a/tests/karma.js b/tests/karma.js new file mode 100644 index 0000000..e0a4980 --- /dev/null +++ b/tests/karma.js @@ -0,0 +1,38 @@ +const Server = require('karma').Server +const path = require('path') +const WSlibp2p = require('libp2p-websockets') +const multiaddr = require('multiaddr') +const multiplex = require('../src') + +var ws + +function createServer (done) { + ws = new WSlibp2p() + const mh = multiaddr('/ip4/127.0.0.1/tcp/9090/websockets') + ws.createListener(mh, (socket) => { + const listener = multiplex(socket, true) + + listener.on('stream', (connA) => { + listener.newStream((err, connB) => { + if (err) { + throw err + } + + connA.pipe(connB) + }) + }) + }, done) +} + +function stopServer (done) { + ws.close(done) +} + +function runTests (done) { + new Server({ + configFile: path.join(__dirname, '/../karma.conf.js'), + singleRun: true + }, done).start() +} + +createServer(() => runTests(() => stopServer(() => null)))