mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-03-30 06:11:05 +00:00
In order to support no-copy operations in streams, update all deps to support streaming Uint8ArrayLists.
77 lines
2.1 KiB
JavaScript
77 lines
2.1 KiB
JavaScript
import path from 'path'
|
|
import { execa } from 'execa'
|
|
import pDefer from 'p-defer'
|
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
|
|
import { fileURLToPath } from 'url'
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
|
|
function startProcess(name) {
|
|
return execa('node', [path.join(__dirname, name)], {
|
|
cwd: path.resolve(__dirname),
|
|
all: true
|
|
})
|
|
}
|
|
|
|
export async function test () {
|
|
const message = 'test message'
|
|
let listenerOutput = ''
|
|
let dialerOutput = ''
|
|
|
|
let isListening = false
|
|
let messageSent = false
|
|
const listenerReady = pDefer()
|
|
const dialerReady = pDefer()
|
|
const messageReceived = pDefer()
|
|
|
|
// Step 1 process
|
|
process.stdout.write('node listener.js\n')
|
|
const listenerProc = startProcess('src/listener.js')
|
|
listenerProc.all.on('data', async (data) => {
|
|
process.stdout.write(data)
|
|
|
|
listenerOutput += uint8ArrayToString(data)
|
|
|
|
if (!isListening && listenerOutput.includes('Listener ready, listening on')) {
|
|
listenerReady.resolve()
|
|
isListening = true
|
|
} else if (isListening && listenerOutput.includes(message)) {
|
|
messageReceived.resolve()
|
|
}
|
|
})
|
|
|
|
await listenerReady.promise
|
|
process.stdout.write('==================================================================\n')
|
|
|
|
// Step 2 process
|
|
process.stdout.write('node dialer.js\n')
|
|
const dialerProc = startProcess('src/dialer.js')
|
|
dialerProc.all.on('data', async (data) => {
|
|
process.stdout.write(data)
|
|
dialerOutput += uint8ArrayToString(data)
|
|
|
|
if (!messageSent && dialerOutput.includes('Type a message and see what happens')) {
|
|
dialerReady.resolve()
|
|
dialerProc.stdin.write(message)
|
|
dialerProc.stdin.write('\n')
|
|
messageSent = true
|
|
}
|
|
})
|
|
|
|
await dialerReady.promise
|
|
process.stdout.write('==================================================================\n')
|
|
await messageReceived.promise
|
|
process.stdout.write('chat message received\n')
|
|
|
|
listenerProc.kill()
|
|
dialerProc.kill()
|
|
await Promise.all([
|
|
listenerProc,
|
|
dialerProc
|
|
]).catch((err) => {
|
|
if (err.signal !== 'SIGTERM') {
|
|
throw err
|
|
}
|
|
})
|
|
}
|