mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-03-28 05:11:04 +00:00
BREAKING CHANGES: top level types were updated, multiaddr@9.0.0 is used, dialer and keychain internal property names changed and connectionManager minPeers is not supported anymore
96 lines
2.8 KiB
JavaScript
96 lines
2.8 KiB
JavaScript
'use strict'
|
|
|
|
const path = require('path')
|
|
const execa = require('execa')
|
|
const pDefer = require('p-defer')
|
|
const uint8ArrayToString = require('uint8arrays/to-string')
|
|
const { chromium } = require('playwright');
|
|
|
|
function startNode (name, args = []) {
|
|
return execa('node', [path.join(__dirname, name), ...args], {
|
|
cwd: path.resolve(__dirname),
|
|
all: true
|
|
})
|
|
}
|
|
|
|
function startBrowser (name, args = []) {
|
|
return execa('parcel', [path.join(__dirname, name), ...args], {
|
|
preferLocal: true,
|
|
localDir: __dirname,
|
|
cwd: __dirname,
|
|
all: true
|
|
})
|
|
}
|
|
|
|
async function test () {
|
|
// Step 1, listener process
|
|
const listenerProcReady = pDefer()
|
|
let listenerOutput = ''
|
|
process.stdout.write('listener.js\n')
|
|
const listenerProc = startNode('listener.js')
|
|
|
|
listenerProc.all.on('data', async (data) => {
|
|
process.stdout.write(data)
|
|
listenerOutput += uint8ArrayToString(data)
|
|
if (listenerOutput.includes('Listening on:') && listenerOutput.includes('12D3KooWCuo3MdXfMgaqpLC5Houi1TRoFqgK9aoxok4NK5udMu8m')) {
|
|
listenerProcReady.resolve()
|
|
}
|
|
})
|
|
|
|
await listenerProcReady.promise
|
|
process.stdout.write('==================================================================\n')
|
|
|
|
// Step 2, dialer process
|
|
process.stdout.write('dialer.js\n')
|
|
let dialerUrl = ''
|
|
const dialerProc = startBrowser('index.html')
|
|
|
|
dialerProc.all.on('data', async (chunk) => {
|
|
/**@type {string} */
|
|
const out = chunk.toString()
|
|
|
|
if (out.includes('Server running at')) {
|
|
dialerUrl = out.split('Server running at ')[1]
|
|
}
|
|
|
|
|
|
if (out.includes('Built in ')) {
|
|
|
|
try {
|
|
const browser = await chromium.launch();
|
|
const page = await browser.newPage();
|
|
await page.goto(dialerUrl);
|
|
await page.waitForFunction(selector => document.querySelector(selector).innerText === 'libp2p started!', '#status')
|
|
await page.waitForFunction(
|
|
selector => {
|
|
const text = document.querySelector(selector).innerText
|
|
return text.includes('libp2p id is') &&
|
|
text.includes('Found peer') &&
|
|
text.includes('Connected to')
|
|
},
|
|
'#output',
|
|
{ timeout: 10000 }
|
|
)
|
|
await browser.close();
|
|
} catch (err) {
|
|
console.error(err)
|
|
process.exit(1)
|
|
} finally {
|
|
dialerProc.cancel()
|
|
listenerProc.kill()
|
|
}
|
|
}
|
|
})
|
|
|
|
await Promise.all([
|
|
listenerProc,
|
|
dialerProc,
|
|
]).catch((err) => {
|
|
if (err.signal !== 'SIGTERM') {
|
|
throw err
|
|
}
|
|
})
|
|
}
|
|
|
|
module.exports = test
|