Skip to content

Commit 510702b

Browse files
RangerMauveandrewosh
authored andcommitted
Added tests for function extensions and encoding
1 parent 533d7ed commit 510702b

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed

test/all.js

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,99 @@ test('can register extensions with the same name', async t => {
333333
t.end()
334334
})
335335

336+
test('can register function based extensions', async t => {
337+
const { networker: networker1 } = await create()
338+
const { networker: networker2 } = await create()
339+
const { networker: networker3 } = await create()
340+
341+
const froms = [networker2.keyPair.publicKey, networker3.keyPair.publicKey]
342+
const msgs = ['hello', 'world']
343+
let received = 0
344+
345+
var onmessage = null
346+
const allReceivedProm = new Promise(resolve => {
347+
onmessage = (msg, from) => {
348+
t.true(from.remotePublicKey.equals(froms[received]))
349+
t.same(msg, msgs[received])
350+
received++
351+
if (received === froms.length) return resolve()
352+
}
353+
})
354+
355+
const extension = (ext) => ({
356+
encoding: 'utf8',
357+
onmessage
358+
})
359+
360+
// Note: Must use name outside of the function handler for now
361+
networker1.registerExtension('test-extension', extension)
362+
const n2Ext = networker2.registerExtension('test-extension', extension)
363+
const n3Ext = networker3.registerExtension('test-extension', extension)
364+
365+
networker2.on('peer-add', peer => {
366+
n2Ext.send('hello', peer)
367+
})
368+
networker3.on('peer-add', peer => {
369+
n3Ext.send('world', peer)
370+
})
371+
const dkey = hypercoreCrypto.randomBytes(32)
372+
await networker1.configure(dkey)
373+
await networker2.configure(dkey, { announce: false, lookup: true, flush: true })
374+
await networker3.configure(dkey, { announce: false, lookup: true, flush: true })
375+
376+
await new Promise(resolve => setTimeout(resolve, 100))
377+
await allReceivedProm
378+
379+
await cleanup([networker1, networker2, networker3])
380+
t.end()
381+
})
382+
383+
test('can use other encodings', async t => {
384+
const { networker: networker1 } = await create()
385+
const { networker: networker2 } = await create()
386+
const { networker: networker3 } = await create()
387+
388+
const froms = [networker2.keyPair.publicKey, networker3.keyPair.publicKey]
389+
const msgs = [{ message: 'hello' }, { message: 'world' }]
390+
let received = 0
391+
392+
var onmessage = null
393+
const allReceivedProm = new Promise(resolve => {
394+
onmessage = (msg, from) => {
395+
t.true(from.remotePublicKey.equals(froms[received]))
396+
t.same(msg, msgs[received])
397+
received++
398+
if (received === froms.length) return resolve()
399+
}
400+
})
401+
402+
const extension = {
403+
name: 'test-extension',
404+
encoding: 'json',
405+
onmessage
406+
}
407+
networker1.registerExtension(extension)
408+
const n2Ext = networker2.registerExtension(extension)
409+
const n3Ext = networker3.registerExtension(extension)
410+
411+
networker2.on('peer-add', peer => {
412+
n2Ext.send({ message: 'hello' }, peer)
413+
})
414+
networker3.on('peer-add', peer => {
415+
n3Ext.send({ message: 'world' }, peer)
416+
})
417+
const dkey = hypercoreCrypto.randomBytes(32)
418+
await networker1.configure(dkey)
419+
await networker2.configure(dkey, { announce: false, lookup: true, flush: true })
420+
await networker3.configure(dkey, { announce: false, lookup: true, flush: true })
421+
422+
await new Promise(resolve => setTimeout(resolve, 100))
423+
await allReceivedProm
424+
425+
await cleanup([networker1, networker2, networker3])
426+
t.end()
427+
})
428+
336429
test('bidirectional extension send/receive', async t => {
337430
const { networker: networker1 } = await create()
338431
const { networker: networker2 } = await create()

0 commit comments

Comments
 (0)