diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c093c64e..b2b27ad0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -114,3 +114,10 @@ jobs: - uses: actions/checkout@v2 - run: yarn - run: cd examples && yarn && npm run test -- pnet + test-protocol-and-stream-muxing-example: + needs: check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: yarn + - run: cd examples && yarn && npm run test -- protocol-and-stream-muxing diff --git a/examples/protocol-and-stream-muxing/test-1.js b/examples/protocol-and-stream-muxing/test-1.js new file mode 100644 index 00000000..35314ab9 --- /dev/null +++ b/examples/protocol-and-stream-muxing/test-1.js @@ -0,0 +1,31 @@ +'use strict' + +const path = require('path') +const execa = require('execa') +const pDefer = require('p-defer') +const uint8ArrayToString = require('uint8arrays/to-string') + +async function test() { + const messageDefer = pDefer() + process.stdout.write('1.js\n') + + const proc = execa('node', [path.join(__dirname, '1.js')], { + cwd: path.resolve(__dirname), + all: true + }) + + proc.all.on('data', async (data) => { + process.stdout.write(data) + + const line = uint8ArrayToString(data) + + if (line.includes('my own protocol, wow!')) { + messageDefer.resolve() + } + }) + + await messageDefer.promise + proc.kill() +} + +module.exports = test diff --git a/examples/protocol-and-stream-muxing/test-2.js b/examples/protocol-and-stream-muxing/test-2.js new file mode 100644 index 00000000..e8d934cb --- /dev/null +++ b/examples/protocol-and-stream-muxing/test-2.js @@ -0,0 +1,38 @@ +'use strict' + +const path = require('path') +const execa = require('execa') +const pWaitFor = require('p-wait-for') +const uint8ArrayToString = require('uint8arrays/to-string') + +const messages = [ + 'protocol (a)', + 'protocol (b)', + 'another stream on protocol (b)' +] + +async function test() { + process.stdout.write('2.js\n') + + let count = 0 + const proc = execa('node', [path.join(__dirname, '2.js')], { + cwd: path.resolve(__dirname), + all: true + }) + + proc.all.on('data', async (data) => { + process.stdout.write(data) + + const line = uint8ArrayToString(data) + + if (messages.find((m) => line.includes(m))) { + count += 1 + } + }) + + await pWaitFor(() => count === messages.length) + + proc.kill() +} + +module.exports = test diff --git a/examples/protocol-and-stream-muxing/test-3.js b/examples/protocol-and-stream-muxing/test-3.js new file mode 100644 index 00000000..e6dff441 --- /dev/null +++ b/examples/protocol-and-stream-muxing/test-3.js @@ -0,0 +1,37 @@ +'use strict' + +const path = require('path') +const execa = require('execa') +const pWaitFor = require('p-wait-for') +const uint8ArrayToString = require('uint8arrays/to-string') + +const messages = [ + 'from 1 to 2', + 'from 2 to 1' +] + +async function test() { + process.stdout.write('3.js\n') + + let count = 0 + const proc = execa('node', [path.join(__dirname, '3.js')], { + cwd: path.resolve(__dirname), + all: true + }) + + proc.all.on('data', async (data) => { + process.stdout.write(data) + + const line = uint8ArrayToString(data) + + if (messages.find((m) => line.includes(m))) { + count += 1 + } + }) + + await pWaitFor(() => count === messages.length) + + proc.kill() +} + +module.exports = test diff --git a/examples/protocol-and-stream-muxing/test.js b/examples/protocol-and-stream-muxing/test.js new file mode 100644 index 00000000..72fa27ee --- /dev/null +++ b/examples/protocol-and-stream-muxing/test.js @@ -0,0 +1,13 @@ +'use strict' + +const test1 = require('./test-1') +const test2 = require('./test-2') +const test3 = require('./test-3') + +async function test() { + await test1() + await test2() + await test3() +} + +module.exports = test