From 49e55289fee7d102af153345a5ce6567486d7b35 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Thu, 3 Jan 2019 11:41:57 +0000 Subject: [PATCH] fix: code review --- package.json | 2 +- test/ipns-dht.js | 112 +++++++++++++++++++ test/ipns.js | 283 ++++++++++++++++------------------------------- test/node.js | 1 + 4 files changed, 207 insertions(+), 191 deletions(-) create mode 100644 test/ipns-dht.js diff --git a/package.json b/package.json index b9b6516f..17828db2 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "form-data": "^2.3.3", "go-ipfs-dep": "~0.4.18", "hat": "0.0.3", - "ipfs": "ipfs/js-ipfs#feat/ipns-over-dht", + "ipfs": "0.34.0-rc.0", "ipfs-api": "^26.1.2", "ipfs-unixfs": "~0.1.16", "ipfsd-ctl": "~0.40.0", diff --git a/test/ipns-dht.js b/test/ipns-dht.js new file mode 100644 index 00000000..b0f4dcdb --- /dev/null +++ b/test/ipns-dht.js @@ -0,0 +1,112 @@ +/* eslint-env mocha */ +'use strict' + +const chai = require('chai') +const dirtyChai = require('dirty-chai') +const expect = chai.expect +chai.use(dirtyChai) + +const series = require('async/series') +const parallel = require('async/parallel') +const os = require('os') +const path = require('path') +const hat = require('hat') + +const DaemonFactory = require('ipfsd-ctl') + +const ipfsRef = '/ipfs/QmPFVLPmp9zv5Z5KUqLhe2EivAGccQW2r7M7jhVJGLZoZU' + +const spawnJsDaemon = (callback) => { + DaemonFactory.create({ type: 'js' }) + .spawn({ + disposable: true, + initOptions: { bits: 512 }, + args: ['--enable-dht-experiment'], // enable dht + config: { Bootstrap: [] } + }, callback) +} + +const spawnGoDaemon = (callback) => { + DaemonFactory.create() + .spawn({ + disposable: true, + initOptions: { bits: 1024 }, + config: { Bootstrap: [] } + }, callback) +} + +describe.only('ipns over dht', () => { + let nodeAId + let nodeBId + let nodes = [] + + // Spawn daemons + before(function (done) { + // CI takes longer to instantiate the daemon, so we need to increase the timeout + this.timeout(80 * 1000) + series([ + (cb) => spawnGoDaemon(cb), + (cb) => spawnJsDaemon(cb), + (cb) => spawnGoDaemon(cb) + ], (err, daemons) => { + expect(err).to.not.exist() + nodes = daemons + done() + }) + }) + + // Get node ids + before(function (done) { + this.timeout(100 * 1000) + parallel([ + (cb) => nodes[0].api.id(cb), + (cb) => nodes[1].api.id(cb) + ], (err, ids) => { + expect(err).to.not.exist() + expect(ids).to.exist() + expect(ids[0].id).to.exist() + expect(ids[1].id).to.exist() + nodeAId = ids[0] + nodeBId = ids[1] + parallel([ + (cb) => nodes[2].api.swarm.connect(ids[0].addresses[0], cb), // C => A + (cb) => nodes[2].api.swarm.connect(ids[1].addresses[0], cb) // C => B + ], done) + }) + }) + + after(function (done) { + this.timeout(60 * 1000) + parallel(nodes.map((node) => (cb) => node.stop(cb)), done) + }) + + it('should publish the record to a go node and resolve it using a js node', function (done) { + this.timeout(50 * 1000) + series([ + (cb) => nodes[0].api.name.publish(ipfsRef, { resolve: false }, cb), + (cb) => nodes[1].api.name.resolve(nodeAId.id, cb) + ], (err, res) => { + expect(err).to.not.exist() + expect(res).to.exist() + expect(res[0].value).to.equal(ipfsRef) + expect(res[0].name).to.equal(nodeAId.id) + expect(res[1]).to.equal(ipfsRef) + done() + }) + }) + + it('should publish the record to a js node and resolve it using a go node', function (done) { + this.timeout(50 * 1000) + series([ + (cb) => nodes[1].api.name.publish(ipfsRef, { resolve: false }, cb), + (cb) => nodes[0].api.name.resolve(nodeBId.id, cb) + ], (err, res) => { + expect(err).to.not.exist() + expect(res).to.exist() + expect(res[0].value).to.equal(ipfsRef) + expect(res[0].name).to.equal(nodeBId.id) + expect(res[1]).to.equal(ipfsRef) + done() + }) + }) +}) diff --git a/test/ipns.js b/test/ipns.js index 780f6441..d3e35320 100644 --- a/test/ipns.js +++ b/test/ipns.js @@ -14,212 +14,115 @@ const hat = require('hat') const DaemonFactory = require('ipfsd-ctl') -const ipfsRef = '/ipfs/QmPFVLPmp9zv5Z5KUqLhe2EivAGccQW2r7M7jhVJGLZoZU' +const spawnJsDaemon = (dir, callback) => { + DaemonFactory.create({ type: 'js' }) + .spawn({ + repoPath: dir, + disposable: false, + initOptions: { bits: 512 }, + args: ['--offline'] + }, callback) +} + +const spawnGoDaemon = (dir, callback) => { + DaemonFactory.create() + .spawn({ + repoPath: dir, + disposable: false, + initOptions: { bits: 1024 }, + args: ['--offline'] + }, callback) +} -describe('ipns', () => { - describe('ipns locally using the same repo across implementations', () => { - const spawnJsDaemon = (dir, callback) => { - DaemonFactory.create({ type: 'js' }) - .spawn({ - repoPath: dir, - disposable: false, - initOptions: { bits: 512 }, - args: ['--offline'] - }, callback) - } - - const spawnGoDaemon = (dir, callback) => { - DaemonFactory.create() - .spawn({ - repoPath: dir, - disposable: false, - initOptions: { bits: 1024 }, - args: ['--offline'] - }, callback) - } - - const publishAndResolve = (publisherDaemon, resolverDaemon, callback) => { - let nodeId - let sameDaemon = false - - if (typeof resolverDaemon === 'function') { - callback = resolverDaemon - resolverDaemon = publisherDaemon - sameDaemon = true - } - - const stopPublisherAndStartResolverDaemon = (callback) => { - series([ - (cb) => publisherDaemon.stop(cb), - (cb) => setTimeout(cb, 2000), - (cb) => resolverDaemon.start(cb) - ], callback) - } - - series([ - (cb) => publisherDaemon.init(cb), - (cb) => publisherDaemon.start(cb), - (cb) => publisherDaemon.api.id((err, res) => { - expect(err).to.not.exist() - nodeId = res.id - cb() - }), - (cb) => publisherDaemon.api.name.publish(ipfsRef, { resolve: false }, cb), - (cb) => sameDaemon ? cb() : stopPublisherAndStartResolverDaemon(cb), - (cb) => { - resolverDaemon.api.name.resolve(nodeId, { local: true }, (err, res) => { - expect(err).to.not.exist() - expect(res).to.equal(ipfsRef) - cb() - }) - }, - (cb) => resolverDaemon.stop(cb), - (cb) => setTimeout(cb, 2000), - (cb) => resolverDaemon.cleanup(cb) - ], callback) - } - - it('should publish an ipns record to a js daemon and resolve it using the same js daemon', function (done) { - this.timeout(120 * 1000) - const dir = path.join(os.tmpdir(), hat()) - - spawnJsDaemon(dir, (err, jsDaemon) => { - expect(err).to.not.exist() - publishAndResolve(jsDaemon, done) - }) - }) - - it('should publish an ipns record to a go daemon and resolve it using the same go daemon', function (done) { - this.timeout(160 * 1000) - const dir = path.join(os.tmpdir(), hat()) +const ipfsRef = '/ipfs/QmPFVLPmp9zv5Z5KUqLhe2EivAGccQW2r7M7jhVJGLZoZU' - spawnGoDaemon(dir, (err, goDaemon) => { +const publishAndResolve = (publisherDaemon, resolverDaemon, callback) => { + let nodeId + let sameDaemon = false + + if (typeof resolverDaemon === 'function') { + callback = resolverDaemon + resolverDaemon = publisherDaemon + sameDaemon = true + } + + const stopPublisherAndStartResolverDaemon = (callback) => { + series([ + (cb) => publisherDaemon.stop(cb), + (cb) => setTimeout(cb, 2000), + (cb) => resolverDaemon.start(cb) + ], callback) + } + + series([ + (cb) => publisherDaemon.init(cb), + (cb) => publisherDaemon.start(cb), + (cb) => publisherDaemon.api.id((err, res) => { + expect(err).to.not.exist() + nodeId = res.id + cb() + }), + (cb) => publisherDaemon.api.name.publish(ipfsRef, { resolve: false }, cb), + (cb) => sameDaemon ? cb() : stopPublisherAndStartResolverDaemon(cb), + (cb) => { + resolverDaemon.api.name.resolve(nodeId, { local: true }, (err, res) => { expect(err).to.not.exist() - publishAndResolve(goDaemon, done) + expect(res).to.equal(ipfsRef) + cb() }) + }, + (cb) => resolverDaemon.stop(cb), + (cb) => setTimeout(cb, 2000), + (cb) => resolverDaemon.cleanup(cb) + ], callback) +} + +describe('ipns locally using the same repo across implementations', () => { + it('should publish an ipns record to a js daemon and resolve it using the same js daemon', function (done) { + this.timeout(120 * 1000) + const dir = path.join(os.tmpdir(), hat()) + + spawnJsDaemon(dir, (err, jsDaemon) => { + expect(err).to.not.exist() + publishAndResolve(jsDaemon, done) }) + }) - it('should publish an ipns record to a js daemon and resolve it using a go daemon through the reuse of the same repo', function (done) { - this.timeout(120 * 1000) - const dir = path.join(os.tmpdir(), hat()) - - series([ - (cb) => spawnJsDaemon(dir, cb), - (cb) => spawnGoDaemon(dir, cb) - ], (err, daemons) => { - expect(err).to.not.exist() + it('should publish an ipns record to a go daemon and resolve it using the same go daemon', function (done) { + this.timeout(160 * 1000) + const dir = path.join(os.tmpdir(), hat()) - publishAndResolve(daemons[0], daemons[1], done) - }) + spawnGoDaemon(dir, (err, goDaemon) => { + expect(err).to.not.exist() + publishAndResolve(goDaemon, done) }) + }) - it('should publish an ipns record to a go daemon and resolve it using a js daemon through the reuse of the same repo', function (done) { - this.timeout(160 * 1000) - const dir = path.join(os.tmpdir(), hat()) + it('should publish an ipns record to a js daemon and resolve it using a go daemon through the reuse of the same repo', function (done) { + this.timeout(120 * 1000) + const dir = path.join(os.tmpdir(), hat()) - series([ - (cb) => spawnGoDaemon(dir, cb), - (cb) => spawnJsDaemon(dir, cb) - ], (err, daemons) => { - expect(err).to.not.exist() + series([ + (cb) => spawnJsDaemon(dir, cb), + (cb) => spawnGoDaemon(dir, cb) + ], (err, daemons) => { + expect(err).to.not.exist() - publishAndResolve(daemons[0], daemons[1], done) - }) + publishAndResolve(daemons[0], daemons[1], done) }) }) - describe('ipns over dht', () => { - const spawnJsDaemon = (callback) => { - DaemonFactory.create({ type: 'js' }) - .spawn({ - disposable: true, - initOptions: { bits: 512 }, - args: ['--enable-dht-experiment'], // enable dht - config: { Bootstrap: [] } - }, callback) - } - - const spawnGoDaemon = (callback) => { - DaemonFactory.create() - .spawn({ - disposable: true, - initOptions: { bits: 1024 }, - config: { Bootstrap: [] } - }, callback) - } - - let nodeAId - let nodeBId - let nodes = [] - - // Spawn daemons - before(function (done) { - // CI takes longer to instantiate the daemon, so we need to increase the timeout - this.timeout(80 * 1000) - series([ - (cb) => spawnGoDaemon(cb), - (cb) => spawnJsDaemon(cb), - (cb) => spawnGoDaemon(cb) - ], (err, daemons) => { - expect(err).to.not.exist() - nodes = daemons - done() - }) - }) + it('should publish an ipns record to a go daemon and resolve it using a js daemon through the reuse of the same repo', function (done) { + this.timeout(160 * 1000) + const dir = path.join(os.tmpdir(), hat()) - // Get node ids - before(function (done) { - this.timeout(100 * 1000) - parallel([ - (cb) => nodes[0].api.id(cb), - (cb) => nodes[1].api.id(cb) - ], (err, ids) => { - expect(err).to.not.exist() - expect(ids).to.exist() - expect(ids[0].id).to.exist() - expect(ids[1].id).to.exist() - nodeAId = ids[0] - nodeBId = ids[1] - parallel([ - (cb) => nodes[2].api.swarm.connect(ids[0].addresses[0], cb), // C => A - (cb) => nodes[2].api.swarm.connect(ids[1].addresses[0], cb) // C => B - ], done) - }) - }) - - after(function (done) { - this.timeout(60 * 1000) - parallel(nodes.map((node) => (cb) => node.stop(cb)), done) - }) + series([ + (cb) => spawnGoDaemon(dir, cb), + (cb) => spawnJsDaemon(dir, cb) + ], (err, daemons) => { + expect(err).to.not.exist() - it('should publish the record to a go node and resolve it using a js node', function (done) { - this.timeout(50 * 1000) - series([ - (cb) => nodes[0].api.name.publish(ipfsRef, { resolve: false }, cb), - (cb) => nodes[1].api.name.resolve(nodeAId.id, cb) - ], (err, res) => { - expect(err).to.not.exist() - expect(res).to.exist() - expect(res[0].value).to.equal(ipfsRef) - expect(res[0].name).to.equal(nodeAId.id) - expect(res[1]).to.equal(ipfsRef) - done() - }) - }) - - it('should publish the record to a js node and resolve it using a go node', function (done) { - this.timeout(50 * 1000) - series([ - (cb) => nodes[1].api.name.publish(ipfsRef, { resolve: false }, cb), - (cb) => nodes[0].api.name.resolve(nodeBId.id, cb) - ], (err, res) => { - expect(err).to.not.exist() - expect(res).to.exist() - expect(res[0].value).to.equal(ipfsRef) - expect(res[0].name).to.equal(nodeBId.id) - expect(res[1]).to.equal(ipfsRef) - done() - }) + publishAndResolve(daemons[0], daemons[1], done) }) }) }) diff --git a/test/node.js b/test/node.js index 2d4fbbe0..9664ef76 100644 --- a/test/node.js +++ b/test/node.js @@ -6,6 +6,7 @@ require('./circuit') require('./repo') require('./exchange-files') require('./ipns') +require('./ipns-dht') require('./kad-dht') require('./pin') require('./files')