Skip to content
This repository has been archived by the owner on Mar 10, 2020. It is now read-only.

Commit

Permalink
fix: update dht tests
Browse files Browse the repository at this point in the history
  • Loading branch information
vasco-santos committed Dec 5, 2018
1 parent 4e6baa0 commit 3450077
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 13 deletions.
2 changes: 1 addition & 1 deletion js/src/dht/findpeer.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ module.exports = (createCommon, options) => {
nodeA.dht.findpeer(nodeB.peerId.id, (err, peer) => {
expect(err).to.not.exist()
// TODO upgrade the answer, format is weird
expect(peer[0].Responses[0].ID).to.be.equal(nodeB.peerId.id)
expect(peer.responses[0].id).to.be.equal(nodeB.peerId.id)
done()
})
})
Expand Down
2 changes: 1 addition & 1 deletion js/src/dht/findprovs.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ module.exports = (createCommon, options) => {
waterfall([
(cb) => nodeB.object.new('unixfs-dir', cb),
(dagNode, cb) => {
const cidV0 = new CID(dagNode.toJSON().multihash)
const cidV0 = new CID(dagNode.toJSON().hash)
nodeB.dht.provide(cidV0, (err) => cb(err, cidV0))
},
(cidV0, cb) => nodeA.dht.findprovs(cidV0, cb),
Expand Down
41 changes: 33 additions & 8 deletions js/src/dht/get.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* eslint-env mocha */
'use strict'

const hat = require('hat')
const waterfall = require('async/waterfall')
const { spawnNodesWithId } = require('../utils/spawn')
const { getDescribe, getIt, expect } = require('../utils/mocha')
Expand Down Expand Up @@ -30,7 +31,6 @@ module.exports = (createCommon, options) => {

nodeA = nodes[0]
nodeB = nodes[1]

connect(nodeA, nodeB.peerId.addresses[0], done)
})
})
Expand All @@ -39,29 +39,54 @@ module.exports = (createCommon, options) => {
after((done) => common.teardown(done))

it('should error when getting a non-existent key from the DHT', (done) => {
nodeA.dht.get('non-existing', { timeout: '100ms' }, (err, value) => {
nodeA.dht.get('non-existing', { timeout: '100ms' }, (err) => {
expect(err).to.be.an.instanceof(Error)
done()
})
})

it('should get a value after it was put on another node', function (done) {
it('should get a value after it was added on another node', function (done) {
this.timeout(80 * 1000)

// TODO - this test needs to keep tryingl instead of the setTimeout
waterfall([
(cb) => nodeB.object.new('unixfs-dir', cb),
(cb) => nodeB.object.put(Buffer.from(hat()), cb),
(dagNode, cb) => setTimeout(() => cb(null, dagNode), 20000),
(dagNode, cb) => {
const multihash = dagNode.toJSON().multihash
const hash = dagNode.toJSON().hash

nodeA.dht.get(multihash, cb)
nodeA.object.get(hash, cb)
},
(result, cb) => {
expect(result).to.eql('')
expect(result).to.exist()
cb()
}
], done)
})

it('should get a value after it was put on another node', function (done) {
this.timeout(80 * 1000)
const multihash = Buffer.from('/v/hello')
const data = Buffer.from('data')

// Rewrite validators to simply validate the record
nodeA._libp2pNode._dht.validators.v = nodeB._libp2pNode._dht.validators.v = {
func (key, publicKey, callback) {
setImmediate(callback)
},
sign: false
}

// Rewrite selectors to select first received record
nodeA._libp2pNode._dht.selectors.v = () => 0

waterfall([
(cb) => nodeB.dht.put(multihash, data, cb),
(cb) => nodeA.dht.get(multihash, (err, res) => {
expect(err).to.not.exist()
expect(res).to.eql(data)
cb()
})
], done)
})
})
}
27 changes: 24 additions & 3 deletions js/src/dht/put.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,50 @@
/* eslint-env mocha */
'use strict'

const { spawnNodesWithId } = require('../utils/spawn')
const { getDescribe, getIt, expect } = require('../utils/mocha')
const { connect } = require('../utils/swarm')

module.exports = (createCommon, options) => {
const describe = getDescribe(options)
const it = getIt(options)
const common = createCommon()

describe('.dht.put', function () {
this.timeout(80 * 1000)

let nodeA
let nodeB

before(function (done) {
// CI takes longer to instantiate the daemon, so we need to increase the
// timeout for the before step
this.timeout(60 * 1000)

common.setup((err, factory) => {
expect(err).to.not.exist()
done()

spawnNodesWithId(2, factory, (err, nodes) => {
expect(err).to.not.exist()

nodeA = nodes[0]
nodeB = nodes[1]
connect(nodeA, nodeB.peerId.addresses[0], done)
})
})
})

after((done) => common.teardown(done))

it.skip('should put a value on the DHT', (done) => {
// TODO: implement me
it('should put a value on the DHT and it become provided by the peer', (done) => {
this.timeout(80 * 1000)
const key = Buffer.from('QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn')
const data = Buffer.from('data')

nodeA.dht.put(key, data, (err) => {
expect(err).to.not.exist()
done()
})
})
})
}

0 comments on commit 3450077

Please sign in to comment.