2016-05-20 21:29:53 +02:00
|
|
|
/* eslint-env mocha */
|
|
|
|
'use strict'
|
|
|
|
|
2016-06-13 19:10:38 +02:00
|
|
|
const pair = require('pull-pair/duplex')
|
2016-05-20 21:29:53 +02:00
|
|
|
const expect = require('chai').expect
|
2016-05-22 13:19:17 +02:00
|
|
|
const PeerId = require('peer-id')
|
2016-05-22 22:39:36 +02:00
|
|
|
const crypto = require('libp2p-crypto')
|
2016-05-26 19:44:13 +02:00
|
|
|
const parallel = require('run-parallel')
|
|
|
|
const series = require('run-series')
|
|
|
|
const ms = require('multistream-select')
|
2016-06-13 19:10:38 +02:00
|
|
|
const pull = require('pull-stream')
|
2016-05-26 19:44:13 +02:00
|
|
|
const Listener = ms.Listener
|
|
|
|
const Dialer = ms.Dialer
|
2016-05-20 21:29:53 +02:00
|
|
|
|
2016-05-22 22:39:36 +02:00
|
|
|
const SecureSession = require('../src').SecureSession
|
2016-05-20 21:29:53 +02:00
|
|
|
|
|
|
|
describe('libp2p-secio', () => {
|
2016-06-13 19:10:38 +02:00
|
|
|
it('upgrades a connection', (done) => {
|
|
|
|
const p = pair()
|
2016-05-22 13:19:17 +02:00
|
|
|
|
2016-06-13 19:10:38 +02:00
|
|
|
const local = createSession(p[0])
|
|
|
|
const remote = createSession(p[1])
|
|
|
|
const localSecure = local.session.secure
|
2016-05-22 13:19:17 +02:00
|
|
|
|
2016-06-13 19:10:38 +02:00
|
|
|
pull(
|
|
|
|
pull.values(['hello world']),
|
|
|
|
localSecure
|
|
|
|
)
|
2016-05-22 13:19:17 +02:00
|
|
|
|
2016-06-13 19:10:38 +02:00
|
|
|
const remoteSecure = remote.session.secure
|
|
|
|
pull(
|
|
|
|
remoteSecure,
|
|
|
|
pull.collect((err, chunks) => {
|
2016-05-22 13:19:17 +02:00
|
|
|
expect(err).to.not.exist
|
2016-06-13 19:10:38 +02:00
|
|
|
expect(chunks).to.be.eql([new Buffer('hello world')])
|
2016-05-26 19:44:13 +02:00
|
|
|
done()
|
2016-06-13 19:10:38 +02:00
|
|
|
})
|
|
|
|
)
|
2016-05-26 19:44:13 +02:00
|
|
|
})
|
2016-05-22 22:39:36 +02:00
|
|
|
|
2016-05-26 19:44:13 +02:00
|
|
|
it('works over multistream', (done) => {
|
2016-06-13 19:10:38 +02:00
|
|
|
const p = pair()
|
2016-05-26 19:44:13 +02:00
|
|
|
|
|
|
|
const listener = new Listener()
|
|
|
|
const dialer = new Dialer()
|
|
|
|
let local
|
|
|
|
let remote
|
|
|
|
series([
|
|
|
|
(cb) => parallel([
|
2016-06-13 19:10:38 +02:00
|
|
|
(cb) => listener.handle(p[0], cb),
|
|
|
|
(cb) => dialer.handle(p[1], cb)
|
2016-05-26 19:44:13 +02:00
|
|
|
], cb),
|
|
|
|
(cb) => {
|
|
|
|
listener.addHandler('/banana/1.0.0', (conn) => {
|
2016-06-13 19:10:38 +02:00
|
|
|
local = createSession(conn).session.secure
|
|
|
|
pull(
|
|
|
|
local,
|
|
|
|
pull.collect((err, chunks) => {
|
|
|
|
expect(err).to.not.exist
|
|
|
|
expect(chunks).to.be.eql([new Buffer('hello world')])
|
|
|
|
done()
|
|
|
|
})
|
|
|
|
)
|
2016-05-22 22:39:36 +02:00
|
|
|
})
|
2016-05-26 19:44:13 +02:00
|
|
|
cb()
|
|
|
|
},
|
|
|
|
(cb) => dialer.select('/banana/1.0.0', (err, conn) => {
|
2016-06-13 19:10:38 +02:00
|
|
|
remote = createSession(conn).session.secure
|
|
|
|
pull(
|
|
|
|
pull.values(['hello world']),
|
|
|
|
remote
|
|
|
|
)
|
2016-05-26 19:44:13 +02:00
|
|
|
cb(err)
|
2016-05-22 22:39:36 +02:00
|
|
|
})
|
2016-05-26 19:44:13 +02:00
|
|
|
], (err) => {
|
|
|
|
if (err) throw err
|
2016-05-22 22:39:36 +02:00
|
|
|
})
|
2016-05-22 13:19:17 +02:00
|
|
|
})
|
2016-05-20 21:29:53 +02:00
|
|
|
})
|
2016-05-22 22:39:36 +02:00
|
|
|
|
2016-05-26 19:44:13 +02:00
|
|
|
function createSession (insecure) {
|
|
|
|
const key = crypto.generateKeyPair('RSA', 2048)
|
|
|
|
const id = PeerId.createFromPrivKey(key.bytes)
|
|
|
|
return {
|
|
|
|
id,
|
|
|
|
key,
|
|
|
|
insecure,
|
|
|
|
session: new SecureSession(id, key, insecure)
|
|
|
|
}
|
2016-05-22 22:39:36 +02:00
|
|
|
}
|