Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.

Commit 240c0b3

Browse files
vasco-santosAlan Shaw
authored and
Alan Shaw
committed
chore: enable name-pubsub core test (#2003)
1 parent dd817ad commit 240c0b3

File tree

3 files changed

+53
-7
lines changed

3 files changed

+53
-7
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
"homepage": "https://github.com./ipfs/js-ipfs#readme",
6565
"devDependencies": {
6666
"aegir": "^18.1.0",
67+
"base64url": "^3.0.1",
6768
"chai": "^4.2.0",
6869
"delay": "^4.1.0",
6970
"detect-node": "^2.0.4",

test/core/name-pubsub.js

+51-7
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,21 @@ const dirtyChai = require('dirty-chai')
88
const expect = chai.expect
99
chai.use(dirtyChai)
1010

11+
const base64url = require('base64url')
12+
const { fromB58String } = require('multihashes')
1113
const parallel = require('async/parallel')
14+
const retry = require('async/retry')
15+
const series = require('async/series')
1216

1317
const isNode = require('detect-node')
18+
const ipns = require('ipns')
1419
const IPFS = require('../../src')
20+
const waitFor = require('../utils/wait-for')
1521

1622
const DaemonFactory = require('ipfsd-ctl')
1723
const df = DaemonFactory.create({ type: 'proc' })
1824

25+
const namespace = '/record/'
1926
const ipfsRef = '/ipfs/QmPFVLPmp9zv5Z5KUqLhe2EivAGccQW2r7M7jhVJGLZoZU'
2027

2128
describe('name-pubsub', function () {
@@ -76,19 +83,56 @@ describe('name-pubsub', function () {
7683
it('should publish and then resolve correctly', function (done) {
7784
this.timeout(80 * 1000)
7885

86+
let subscribed = false
87+
88+
function checkMessage (msg) {
89+
subscribed = true
90+
}
91+
92+
const alreadySubscribed = (cb) => {
93+
return cb(null, subscribed === true)
94+
}
95+
96+
// Wait until a peer subscribes a topic
97+
const waitForPeerToSubscribe = (node, topic, callback) => {
98+
retry({
99+
times: 5,
100+
interval: 2000
101+
}, (next) => {
102+
node.pubsub.peers(topic, (error, res) => {
103+
if (error) {
104+
return next(error)
105+
}
106+
107+
if (!res || !res.length) {
108+
return next(new Error('Could not find subscription'))
109+
}
110+
111+
return next(null, res)
112+
})
113+
}, callback)
114+
}
115+
116+
const keys = ipns.getIdKeys(fromB58String(idA.id))
117+
const topic = `${namespace}${base64url.encode(keys.routingKey.toBuffer())}`
118+
79119
nodeB.name.resolve(idA.id, (err) => {
80120
expect(err).to.exist()
81121

82-
nodeA.name.publish(ipfsRef, { resolve: false }, (err, res) => {
122+
series([
123+
(cb) => waitForPeerToSubscribe(nodeA, topic, cb),
124+
(cb) => nodeB.pubsub.subscribe(topic, checkMessage, cb),
125+
(cb) => nodeA.name.publish(ipfsRef, { resolve: false }, cb),
126+
(cb) => waitFor((callback) => alreadySubscribed(callback), cb),
127+
(cb) => setTimeout(() => cb(), 1000), // guarantee record is written
128+
(cb) => nodeB.name.resolve(idA.id, cb)
129+
], (err, res) => {
83130
expect(err).to.not.exist()
84131
expect(res).to.exist()
85132

86-
nodeB.name.resolve(idA.id, (err, res) => {
87-
expect(err).to.not.exist()
88-
expect(res).to.exist()
89-
expect(res.path).to.equal(ipfsRef)
90-
done()
91-
})
133+
expect(res[5]).to.exist()
134+
expect(res[5].path).to.equal(ipfsRef)
135+
done()
92136
})
93137
})
94138
})

test/core/node.js

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
require('./circuit-relay')
44
require('./files-regular-utils')
55
require('./name')
6+
require('./name-pubsub')
67
require('./key-exchange')
78
require('./pin')
89
require('./pin-set')

0 commit comments

Comments
 (0)