Compare commits

...

6 Commits

Author SHA1 Message Date
8e95df7f22 chore: release version v0.25.6 2019-08-20 16:12:04 +02:00
67cbec17a6 chore: update contributors 2019-08-20 16:12:03 +02:00
2f6fea9756 fix: config validation (#405)
* test: backport content provide test update

* fix: avoid using superstruct interface
2019-08-20 15:53:04 +02:00
b4a70ea476 chore: release version v0.25.5 2019-07-12 13:10:55 +01:00
45716da465 chore: update contributors 2019-07-12 13:10:53 +01:00
905c911946 fix: peer routing for delegate router (#377)
* fix: peer routing tests

* test: fix mock payload type

Provider results are type 4, not type 1: 6e566d10f4/routing/query.go (L15-L24)
2019-07-12 13:02:03 +01:00
5 changed files with 50 additions and 33 deletions

View File

@ -1,3 +1,23 @@
<a name="0.25.6"></a>
## [0.25.6](https://github.com/libp2p/js-libp2p/compare/v0.25.5...v0.25.6) (2019-08-20)
### Bug Fixes
* config validation ([#405](https://github.com/libp2p/js-libp2p/issues/405)) ([2f6fea9](https://github.com/libp2p/js-libp2p/commit/2f6fea9))
<a name="0.25.5"></a>
## [0.25.5](https://github.com/libp2p/js-libp2p/compare/v0.25.4...v0.25.5) (2019-07-12)
### Bug Fixes
* peer routing for delegate router ([#377](https://github.com/libp2p/js-libp2p/issues/377)) ([905c911](https://github.com/libp2p/js-libp2p/commit/905c911)), closes [/github.com/libp2p/go-libp2p-core/blob/6e566d10f4a5447317a66d64c7459954b969bdab/routing/query.go#L15-L24](https://github.com//github.com/libp2p/go-libp2p-core/blob/6e566d10f4a5447317a66d64c7459954b969bdab/routing/query.go/issues/L15-L24)
<a name="0.25.4"></a> <a name="0.25.4"></a>
## [0.25.4](https://github.com/libp2p/js-libp2p/compare/v0.25.3...v0.25.4) (2019-06-07) ## [0.25.4](https://github.com/libp2p/js-libp2p/compare/v0.25.3...v0.25.4) (2019-06-07)

View File

@ -1,6 +1,6 @@
{ {
"name": "libp2p", "name": "libp2p",
"version": "0.25.4", "version": "0.25.6",
"description": "JavaScript implementation of libp2p, a modular peer to peer network stack", "description": "JavaScript implementation of libp2p, a modular peer to peer network stack",
"leadMaintainer": "Jacob Heun <jacobheun@gmail.com>", "leadMaintainer": "Jacob Heun <jacobheun@gmail.com>",
"main": "src/index.js", "main": "src/index.js",
@ -129,8 +129,8 @@
"Sönke Hahn <soenkehahn@gmail.com>", "Sönke Hahn <soenkehahn@gmail.com>",
"Thomas Eizinger <thomas@eizinger.io>", "Thomas Eizinger <thomas@eizinger.io>",
"Tiago Alves <alvesjtiago@gmail.com>", "Tiago Alves <alvesjtiago@gmail.com>",
"Vasco Santos <vasco.santos@ua.pt>",
"Vasco Santos <vasco.santos@moxy.studio>", "Vasco Santos <vasco.santos@moxy.studio>",
"Vasco Santos <vasco.santos@ua.pt>",
"Volker Mische <volker.mische@gmail.com>", "Volker Mische <volker.mische@gmail.com>",
"Yusef Napora <yusef@napora.org>", "Yusef Napora <yusef@napora.org>",
"Zane Starr <zcstarr@gmail.com>", "Zane Starr <zcstarr@gmail.com>",

View File

@ -4,29 +4,33 @@ const { struct, superstruct } = require('superstruct')
const { optional, list } = struct const { optional, list } = struct
// Define custom types // Define custom types
const s = superstruct() const s = superstruct({
const transport = s.union([ types: {
s.interface({ transport: value => {
createListener: 'function', if (value.length === 0) return 'ERROR_EMPTY'
dial: 'function' value.forEach(i => {
}), if (!i.dial) return 'ERR_NOT_A_TRANSPORT'
'function' })
]) return true
},
protector: value => {
if (!value.protect) return 'ERR_NOT_A_PROTECTOR'
return true
}
}
})
const modulesSchema = s({ const modulesSchema = s({
connEncryption: optional(list([s('object|function')])), connEncryption: optional(list([s('object|function')])),
// this is hacky to simulate optional because interface doesnt work correctly with it // this is hacky to simulate optional because interface doesnt work correctly with it
// change to optional when fixed upstream // change to optional when fixed upstream
connProtector: s.union(['undefined', s.interface({ protect: 'function' })]), connProtector: s('undefined|protector'),
contentRouting: optional(list(['object'])), contentRouting: optional(list(['object'])),
dht: optional(s('null|function|object')), dht: optional(s('null|function|object')),
peerDiscovery: optional(list([s('object|function')])), peerDiscovery: optional(list([s('object|function')])),
peerRouting: optional(list(['object'])), peerRouting: optional(list(['object'])),
streamMuxer: optional(list([s('object|function')])), streamMuxer: optional(list([s('object|function')])),
transport: s.intersection([[transport], s.interface({ transport: 'transport'
length (v) {
return v > 0 ? true : 'ERROR_EMPTY'
}
})])
}) })
const configSchema = s({ const configSchema = s({

View File

@ -47,7 +47,7 @@ module.exports = (node) => {
}) })
tryEach(tasks, (err, results) => { tryEach(tasks, (err, results) => {
if (err && err.code !== 'NOT_FOUND') { if (err) {
return callback(err) return callback(err)
} }
results = results || [] results = results || []

View File

@ -121,8 +121,9 @@ describe('.contentRouting', () => {
const cid = new CID('QmTp9VkYvnHyrqKQuFPiuZkiX9gPcqj6x5LJ1rmWuSnnnn') const cid = new CID('QmTp9VkYvnHyrqKQuFPiuZkiX9gPcqj6x5LJ1rmWuSnnnn')
nodeE.contentRouting.findProviders(cid, { maxTimeout: 5000 }, (err, providers) => { nodeE.contentRouting.findProviders(cid, { maxTimeout: 5000 }, (err, providers) => {
expect(err).to.not.exist() expect(err).to.exist()
expect(providers).to.have.length(0) expect(err.code).to.eql('ERR_NOT_FOUND')
expect(providers).to.not.exist()
done() done()
}) })
}) })
@ -185,19 +186,10 @@ describe('.contentRouting', () => {
it('should be able to register as a provider', (done) => { it('should be able to register as a provider', (done) => {
const cid = new CID('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB') const cid = new CID('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB')
const mockApi = nock('http://0.0.0.0:60197') const mockApi = nock('http://0.0.0.0:60197')
// mock the swarm connect
.post('/api/v0/swarm/connect')
.query({
arg: `/ip4/0.0.0.0/tcp/60194/p2p-circuit/ipfs/${nodeA.peerInfo.id.toB58String()}`,
'stream-channels': true
})
.reply(200, {
Strings: [`connect ${nodeA.peerInfo.id.toB58String()} success`]
}, ['Content-Type', 'application/json'])
// mock the refs call // mock the refs call
.post('/api/v0/refs') .post('/api/v0/refs')
.query({ .query({
recursive: true, recursive: false,
arg: cid.toBaseEncodedString(), arg: cid.toBaseEncodedString(),
'stream-channels': true 'stream-channels': true
}) })
@ -216,10 +208,11 @@ describe('.contentRouting', () => {
it('should handle errors when registering as a provider', (done) => { it('should handle errors when registering as a provider', (done) => {
const cid = new CID('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB') const cid = new CID('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB')
const mockApi = nock('http://0.0.0.0:60197') const mockApi = nock('http://0.0.0.0:60197')
// mock the swarm connect // mock the refs call
.post('/api/v0/swarm/connect') .post('/api/v0/refs')
.query({ .query({
arg: `/ip4/0.0.0.0/tcp/60194/p2p-circuit/ipfs/${nodeA.peerInfo.id.toB58String()}`, recursive: false,
arg: cid.toBaseEncodedString(),
'stream-channels': true 'stream-channels': true
}) })
.reply(502, 'Bad Gateway', ['Content-Type', 'application/json']) .reply(502, 'Bad Gateway', ['Content-Type', 'application/json'])
@ -251,7 +244,7 @@ describe('.contentRouting', () => {
timeout: '1000ms', timeout: '1000ms',
'stream-channels': true 'stream-channels': true
}) })
.reply(200, `{"Extra":"","ID":"QmWKqWXCtRXEeCQTo3FoZ7g4AfnGiauYYiczvNxFCHicbB","Responses":[{"Addrs":["/ip4/0.0.0.0/tcp/0"],"ID":"${provider}"}],"Type":1}\n`, [ .reply(200, `{"Extra":"","ID":"QmWKqWXCtRXEeCQTo3FoZ7g4AfnGiauYYiczvNxFCHicbB","Responses":[{"Addrs":["/ip4/0.0.0.0/tcp/0"],"ID":"${provider}"}],"Type":4}\n`, [
'Content-Type', 'application/json', 'Content-Type', 'application/json',
'X-Chunked-Output', '1' 'X-Chunked-Output', '1'
]) ])