-
Notifications
You must be signed in to change notification settings - Fork 124
feat: ipns working locally #327
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
'use strict' | ||
const { createSuite } = require('../utils/suite') | ||
|
||
const tests = { | ||
publish: require('./publish'), | ||
resolve: require('./resolve') | ||
} | ||
|
||
module.exports = createSuite(tests) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
/* eslint-env mocha */ | ||
'use strict' | ||
|
||
const hat = require('hat') | ||
|
||
const { fixture } = require('./utils') | ||
const { spawnNodeWithId } = require('../utils/spawn') | ||
const { getDescribe, getIt, expect } = require('../utils/mocha') | ||
|
||
module.exports = (createCommon, options) => { | ||
const describe = getDescribe(options) | ||
const it = getIt(options) | ||
const common = createCommon() | ||
|
||
describe('.name.publish', function () { | ||
const keyName = hat() | ||
let ipfs | ||
let nodeId | ||
|
||
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() | ||
|
||
spawnNodeWithId(factory, (err, node) => { | ||
expect(err).to.not.exist() | ||
|
||
ipfs = node | ||
nodeId = node.peerId.id | ||
|
||
ipfs.files.add(fixture.data, { pin: false }, done) | ||
}) | ||
}) | ||
}) | ||
|
||
after((done) => common.teardown(done)) | ||
|
||
it('should publish an IPNS record with the default params', (done) => { | ||
this.timeout(50 * 1000) | ||
|
||
const value = fixture.cid | ||
|
||
ipfs.name.publish(value, (err, res) => { | ||
expect(err).to.not.exist() | ||
expect(res).to.exist() | ||
expect(res.Name).to.equal(nodeId) | ||
expect(res.Value).to.equal(`/ipfs/${value}`) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The HTTP API in js-ipfs sends js-ipfs core should respond with js-ipfs-api then takes the response from the HTTP API and converts to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done! And also updated on js-ipfs#1400 |
||
|
||
done() | ||
}) | ||
}) | ||
|
||
it('should publish correctly when the file was not added but resolve is disabled', (done) => { | ||
this.timeout(50 * 1000) | ||
|
||
const value = 'QmPFVLPmp9zv5Z5KUqLhe2EivAGccQW2r7M7jhVJGLZoZU' | ||
|
||
const options = { | ||
resolve: false, | ||
lifetime: '1m', | ||
ttl: '10s', | ||
key: 'self' | ||
} | ||
|
||
ipfs.name.publish(value, options, (err, res) => { | ||
expect(err).to.not.exist() | ||
expect(res).to.exist() | ||
expect(res.Name).to.equal(nodeId) | ||
expect(res.Value).to.equal(`/ipfs/${value}`) | ||
|
||
done() | ||
}) | ||
}) | ||
|
||
it('should recursively resolve to an IPFS hash', (done) => { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This test might need to be renamed or rewritten. Was the intention to ensure that publishing There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Recursive: Resolve until the result is not an IPNS name. Default: “false”. Required: no. (according to the docs at https://ipfs.io/docs/api/#apiv0namepublish) This test aims to do the following:
In this test, the resolve happens recursively until the stop condition (obtaining an Maybe the test description is not the most understandable, but for the people who know what the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Wrong test name in fact, this was for |
||
this.timeout(90 * 1000) | ||
|
||
const value = fixture.cid | ||
const options = { | ||
resolve: false, | ||
lifetime: '24h', | ||
ttl: '10s', | ||
key: keyName | ||
} | ||
|
||
ipfs.key.gen(keyName, { type: 'rsa', size: 2048 }, (err, key) => { | ||
expect(err).to.not.exist() | ||
|
||
ipfs.name.publish(value, options, (err, res) => { | ||
expect(err).to.not.exist() | ||
expect(res).to.exist() | ||
expect(res.Name).to.equal(key.id) | ||
expect(res.Value).to.equal(`/ipfs/${value}`) | ||
|
||
done() | ||
}) | ||
}) | ||
}) | ||
}) | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
/* eslint max-nested-callbacks: ["error", 6] */ | ||
/* eslint-env mocha */ | ||
'use strict' | ||
|
||
const hat = require('hat') | ||
|
||
const { fixture } = require('./utils') | ||
const { spawnNodeWithId } = require('../utils/spawn') | ||
const { getDescribe, getIt, expect } = require('../utils/mocha') | ||
|
||
module.exports = (createCommon, options) => { | ||
const describe = getDescribe(options) | ||
const it = getIt(options) | ||
const common = createCommon() | ||
|
||
describe('.name.resolve', function () { | ||
const keyName = hat() | ||
let ipfs | ||
let nodeId | ||
let keyId | ||
|
||
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() | ||
|
||
spawnNodeWithId(factory, (err, node) => { | ||
expect(err).to.not.exist() | ||
|
||
ipfs = node | ||
nodeId = node.peerId.id | ||
|
||
ipfs.files.add(fixture.data, { pin: false }, done) | ||
}) | ||
}) | ||
}) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please see comments for the before block in name.publish - I think they mostly all apply here too. |
||
|
||
after((done) => common.teardown(done)) | ||
|
||
it('should resolve a record with the default params after a publish', (done) => { | ||
this.timeout(50 * 1000) | ||
|
||
const value = fixture.cid | ||
|
||
ipfs.name.publish(value, (err, res) => { | ||
expect(err).to.not.exist() | ||
expect(res).to.exist() | ||
|
||
ipfs.name.resolve(nodeId, (err, res) => { | ||
expect(err).to.not.exist() | ||
expect(res).to.exist() | ||
expect(res.Path).to.equal(`/ipfs/${value}`) | ||
|
||
done() | ||
}) | ||
}) | ||
}) | ||
|
||
it('should not get the entry if its validity time expired', (done) => { | ||
this.timeout(50 * 1000) | ||
|
||
const value = fixture.cid | ||
const publishOptions = { | ||
resolve: true, | ||
lifetime: '1ms', | ||
ttl: '10s', | ||
key: 'self' | ||
} | ||
|
||
ipfs.name.publish(value, publishOptions, (err, res) => { | ||
expect(err).to.not.exist() | ||
expect(res).to.exist() | ||
|
||
setTimeout(function () { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this required? There might be a bug if we can't immediately resolve a value after publishing it. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The |
||
ipfs.name.resolve(nodeId, (err, res) => { | ||
expect(err).to.exist() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is there an error message we can assert on here (would have to be the same for go-ipfs and js-ipfs)? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. yeah, I am using the same message as |
||
expect(res).to.not.exist() | ||
|
||
done() | ||
}) | ||
}, 1) | ||
}) | ||
}) | ||
|
||
it('should recursively resolve to an IPFS hash', (done) => { | ||
this.timeout(100 * 1000) | ||
|
||
const value = fixture.cid | ||
const publishOptions = { | ||
resolve: true, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't this be There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It will be the same having it enabled or disabled. In fact, However, as I have other tests with |
||
lifetime: '24h', | ||
ttl: '10s', | ||
key: 'self' | ||
} | ||
|
||
// Generate new key | ||
ipfs.key.gen(keyName, { type: 'rsa', size: 2048 }, (err, key) => { | ||
expect(err).to.not.exist() | ||
|
||
keyId = key.id | ||
|
||
// publish ipfs | ||
ipfs.name.publish(value, publishOptions, (err, res) => { | ||
expect(err).to.not.exist() | ||
expect(res).to.exist() | ||
|
||
publishOptions.key = keyName | ||
|
||
// publish ipns with the generated key | ||
ipfs.name.publish(`/ipns/${nodeId}`, publishOptions, (err, res) => { | ||
expect(err).to.not.exist() | ||
expect(res).to.exist() | ||
|
||
const resolveOptions = { | ||
nocache: false, | ||
recursive: true | ||
} | ||
|
||
// recursive resolve (will get ipns first, and will resolve again to find the ipfs) | ||
ipfs.name.resolve(keyId, resolveOptions, (err, res) => { | ||
expect(err).to.not.exist() | ||
expect(res).to.exist() | ||
expect(res.Path).to.equal(`/ipfs/${value}`) | ||
|
||
done() | ||
}) | ||
}) | ||
}) | ||
}) | ||
}) | ||
}) | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
'use strict' | ||
|
||
const loadFixture = require('aegir/fixtures') | ||
|
||
exports.fixture = Object.freeze({ | ||
data: loadFixture('js/test/fixtures/testfile.txt', 'interface-ipfs-core'), | ||
cid: 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP' | ||
}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Apologies I've just noticed that a bunch of these tests are using
this.timeout
in an arrow function - you'll need to change it tofunction (done) {/*...*/}
for it to be referring to the correctthis
(otherwise you're referring tothis
from thedescribe
block)