Skip to content
This repository was archived by the owner on Aug 23, 2019. It is now read-only.

Commit d771a12

Browse files
committed
add webrtc-star transport tests
1 parent 3cd5cbb commit d771a12

File tree

6 files changed

+175
-29
lines changed

6 files changed

+175
-29
lines changed

package.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,17 @@
4444
"gulp": "^3.9.1",
4545
"istanbul": "^0.4.3",
4646
"libp2p-multiplex": "^0.2.1",
47-
"libp2p-spdy": "^0.6.0",
48-
"libp2p-tcp": "^0.5.1",
49-
"libp2p-webrtc-star": "^0.1.0",
50-
"libp2p-websockets": "^0.5.0",
47+
"libp2p-spdy": "^0.6.1",
48+
"libp2p-tcp": "^0.6.0",
49+
"libp2p-webrtc-star": "^0.1.3",
50+
"libp2p-websockets": "^0.6.0",
5151
"pre-commit": "^1.1.2",
5252
"stream-pair": "^1.0.3",
5353
"webrtcsupport": "^2.2.0"
5454
},
5555
"dependencies": {
5656
"babel-runtime": "^6.6.1",
57+
"browserify-zlib": "github:ipfs/browserify-zlib",
5758
"duplex-passthrough": "github:diasdavid/duplex-passthrough",
5859
"ip-address": "^5.8.0",
5960
"lodash.contains": "^2.4.3",

src/dial.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ module.exports = function dial (swarm) {
7070
const tKeys = swarm.availableTransports(pi)
7171

7272
if (tKeys.length === 0) {
73-
return cb(new Error('No available tranport to dial to'))
73+
return cb(new Error('No available transport to dial to'))
7474
}
7575

7676
nextTransport(tKeys.shift())

src/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ function Swarm (peerInfo) {
6262
return Object.keys(this.transports).filter((ts) => {
6363
// ipfs multiaddrs are not dialable so we drop them here
6464
let dialable = addrs.map((addr) => {
65+
// webrtc-star needs the /ipfs/QmHash
66+
if (addr.toString().indexOf('webrtc-star') > 0) {
67+
return addr
68+
}
69+
6570
if (contains(addr.protoNames(), 'ipfs')) {
6671
return addr.decapsulate('ipfs')
6772
}

src/transport.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ module.exports = function (swarm) {
105105
// for the given transport `tp`.
106106
function dialables (tp, multiaddrs) {
107107
return tp.filter(multiaddrs.map((addr) => {
108+
// webrtc-star needs the /ipfs/QmHash
109+
if (addr.toString().indexOf('webrtc-star') > 0) {
110+
return addr
111+
}
112+
108113
// ipfs multiaddrs are not dialable so we drop them here
109114
if (contains(addr.protoNames(), 'ipfs')) {
110115
return addr.decapsulate('ipfs')

test/browser-01-transport-webrtc-star.js

Lines changed: 65 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,90 @@
11
/* eslint-env mocha */
22
'use strict'
33

4-
/*
54
const expect = require('chai').expect
65
const multiaddr = require('multiaddr')
7-
const Id = require('peer-id')
8-
const Peer = require('peer-info')
9-
const WebSockets = require('libp2p-websockets')
6+
const peerId = require('peer-id')
7+
const PeerInfo = require('peer-info')
8+
const WebRTCStar = require('libp2p-webrtc-star')
109
const bl = require('bl')
10+
const parallel = require('run-parallel')
1111

1212
const Swarm = require('../src')
13+
1314
describe('transport - webrtc-star', function () {
1415
this.timeout(10000)
1516

16-
var swarm
17+
let swarm1
18+
let peer1
19+
20+
let swarm2
21+
let peer2
1722

1823
before(() => {
19-
const b58IdSrc = 'QmYzgdesgjdvD3okTPGZT9NPmh1BuH5FfTVNKjsvaAprhb'
20-
// use a pre generated Id to save time
21-
const idSrc = Id.createFromB58String(b58IdSrc)
22-
const peerSrc = new Peer(idSrc)
23-
swarm = new Swarm(peerSrc)
24+
const id1 = peerId.createFromB58String('QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooooA')
25+
peer1 = new PeerInfo(id1)
26+
const mh1 = multiaddr('/libp2p-webrtc-star/ip4/127.0.0.1/tcp/15555/ws/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooooA')
27+
peer1.multiaddr.add(mh1)
28+
29+
const id2 = peerId.createFromB58String('QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooooB')
30+
peer2 = new PeerInfo(id2)
31+
const mh2 = multiaddr('/libp2p-webrtc-star/ip4/127.0.0.1/tcp/15555/ws/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooooB')
32+
peer2.multiaddr.add(mh2)
33+
34+
swarm1 = new Swarm(peer1)
35+
swarm2 = new Swarm(peer2)
2436
})
2537

26-
it('add', (done) => {
27-
swarm.transport.add('ws', new WebSockets(), () => {
28-
expect(Object.keys(swarm.transports).length).to.equal(1)
38+
it('add WebRTCStar transport to swarm 1', (done) => {
39+
swarm1.transport.add('wstar', new WebRTCStar(), () => {
40+
expect(Object.keys(swarm1.transports).length).to.equal(1)
2941
done()
3042
})
3143
})
3244

33-
it('dial', (done) => {
34-
const ma = multiaddr('/ip4/127.0.0.1/tcp/9100/ws')
45+
it('add WebRTCStar transport to swarm 2', (done) => {
46+
swarm2.transport.add('wstar', new WebRTCStar(), () => {
47+
expect(Object.keys(swarm2.transports).length).to.equal(1)
48+
done()
49+
})
50+
})
51+
52+
it('listen on swarm 1', (done) => {
53+
swarm1.transport.listen('wstar', {}, (conn) => {
54+
conn.pipe(conn)
55+
}, done)
56+
})
57+
58+
it('listen on swarm 2', (done) => {
59+
swarm2.transport.listen('wstar', {}, (conn) => {
60+
conn.pipe(conn)
61+
}, done)
62+
})
3563

36-
const conn = swarm.transport.dial('ws', ma, (err, conn) => {
64+
it('dial', (done) => {
65+
swarm1.transport.dial('wstar', peer2.multiaddrs[0], (err, conn) => {
3766
expect(err).to.not.exist
67+
68+
const text = 'Hello World'
69+
conn.pipe(bl((err, data) => {
70+
expect(err).to.not.exist
71+
expect(data.toString()).to.equal(text)
72+
done()
73+
}))
74+
75+
conn.write(text)
76+
conn.end()
3877
})
78+
})
3979

40-
conn.pipe(bl((err, data) => {
41-
expect(err).to.not.exist
42-
expect(data.toString()).to.equal('hey')
43-
done()
44-
}))
45-
conn.write('hey')
46-
conn.end()
80+
it('close', (done) => {
81+
parallel([
82+
(cb) => {
83+
swarm1.transport.close('wstar', cb)
84+
},
85+
(cb) => {
86+
swarm2.transport.close('wstar', cb)
87+
}
88+
], done)
4789
})
4890
})
49-
*/
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
/* eslint-env mocha */
2+
'use strict'
3+
4+
const expect = require('chai').expect
5+
const multiaddr = require('multiaddr')
6+
const peerId = require('peer-id')
7+
const PeerInfo = require('peer-info')
8+
const WebRTCStar = require('libp2p-webrtc-star')
9+
const spdy = require('libp2p-spdy')
10+
const bl = require('bl')
11+
const parallel = require('run-parallel')
12+
13+
const Swarm = require('../src')
14+
15+
describe('high level API (swarm with spdy + webrtc-star)', function () {
16+
this.timeout(5000)
17+
18+
let swarm1
19+
let peer1
20+
21+
let swarm2
22+
let peer2
23+
24+
before(() => {
25+
const id1 = peerId.createFromB58String('QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooooA')
26+
peer1 = new PeerInfo(id1)
27+
const mh1 = multiaddr('/libp2p-webrtc-star/ip4/127.0.0.1/tcp/15555/ws/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooooC')
28+
peer1.multiaddr.add(mh1)
29+
30+
const id2 = peerId.createFromB58String('QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooooB')
31+
peer2 = new PeerInfo(id2)
32+
const mh2 = multiaddr('/libp2p-webrtc-star/ip4/127.0.0.1/tcp/15555/ws/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooooD')
33+
peer2.multiaddr.add(mh2)
34+
35+
swarm1 = new Swarm(peer1)
36+
swarm2 = new Swarm(peer2)
37+
})
38+
39+
it('add WebRTCStar transport to swarm 1', () => {
40+
swarm1.transport.add('wstar', new WebRTCStar())
41+
expect(Object.keys(swarm1.transports).length).to.equal(1)
42+
})
43+
44+
it('add WebRTCStar transport to swarm 2', () => {
45+
swarm2.transport.add('wstar', new WebRTCStar())
46+
expect(Object.keys(swarm2.transports).length).to.equal(1)
47+
})
48+
49+
it('listen on swarm 1', (done) => {
50+
swarm1.listen(done)
51+
})
52+
53+
it('listen on swarm 2', (done) => {
54+
swarm2.listen(done)
55+
})
56+
57+
it('add spdy', () => {
58+
swarm1.connection.addStreamMuxer(spdy)
59+
// swarm1.connection.reuse()
60+
swarm2.connection.addStreamMuxer(spdy)
61+
// swarm2.connection.reuse()
62+
})
63+
64+
it('handle proto', () => {
65+
swarm2.handle('/echo/1.0.0', (conn) => {
66+
conn.pipe(conn)
67+
})
68+
})
69+
70+
it('dial on proto', (done) => {
71+
swarm1.dial(peer2, '/echo/1.0.0', (err, conn) => {
72+
expect(err).to.not.exist
73+
expect(Object.keys(swarm1.muxedConns).length).to.equal(1)
74+
75+
const text = 'Hello World'
76+
conn.pipe(bl((err, data) => {
77+
expect(err).to.not.exist
78+
expect(data.toString()).to.equal(text)
79+
// expect(Object.keys(swarm2.muxedConns).length).to.equal(1)
80+
done()
81+
}))
82+
83+
conn.write(text)
84+
conn.end()
85+
})
86+
})
87+
88+
it('close', (done) => {
89+
parallel([
90+
swarm1.close,
91+
swarm2.close
92+
], done)
93+
})
94+
})

0 commit comments

Comments
 (0)