From f6a4cad827c915df63422a1b18642181ebb68560 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Wed, 10 Feb 2021 21:00:40 +0100 Subject: [PATCH] chore: add pubsub example tests (#850) --- .github/workflows/main.yml | 7 +++ examples/pubsub/message-filtering/test.js | 67 +++++++++++++++++++++++ examples/pubsub/test-1.js | 30 ++++++++++ examples/pubsub/test.js | 11 ++++ 4 files changed, 115 insertions(+) create mode 100644 examples/pubsub/message-filtering/test.js create mode 100644 examples/pubsub/test-1.js create mode 100644 examples/pubsub/test.js diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b2b27ad0..e4fe13d5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -121,3 +121,10 @@ jobs: - uses: actions/checkout@v2 - run: yarn - run: cd examples && yarn && npm run test -- protocol-and-stream-muxing + test-pubsub-example: + needs: check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: yarn + - run: cd examples && yarn && npm run test -- pubsub diff --git a/examples/pubsub/message-filtering/test.js b/examples/pubsub/message-filtering/test.js new file mode 100644 index 00000000..229e2269 --- /dev/null +++ b/examples/pubsub/message-filtering/test.js @@ -0,0 +1,67 @@ +'use strict' + +const path = require('path') +const execa = require('execa') +const pDefer = require('p-defer') +const uint8ArrayToString = require('uint8arrays/to-string') + +const stdout = [ + { + topic: 'banana', + messageCount: 2 + }, + { + topic: 'apple', + messageCount: 2 + }, + { + topic: 'car', + messageCount: 0 + }, + { + topic: 'orange', + messageCount: 2 + }, +] + +async function test () { + const defer = pDefer() + let topicCount = 0 + let topicMessageCount = 0 + + process.stdout.write('message-filtering/1.js\n') + + const proc = execa('node', [path.join(__dirname, '1.js')], { + cwd: path.resolve(__dirname), + all: true + }) + + proc.all.on('data', async (data) => { + // End + if (topicCount === stdout.length) { + defer.resolve() + proc.all.removeAllListeners('data') + } + + process.stdout.write(data) + const line = uint8ArrayToString(data) + + if (stdout[topicCount] && line.includes(stdout[topicCount].topic)) { + // Validate previous number of messages + if (topicCount > 0 && topicMessageCount > stdout[topicCount - 1].messageCount) { + defer.reject() + throw new Error(`topic ${stdout[topicCount - 1].topic} had ${topicMessageCount} messages instead of ${stdout[topicCount - 1].messageCount}`) + } + + topicCount++ + topicMessageCount = 0 + } else { + topicMessageCount++ + } + }) + + await defer.promise + proc.kill() +} + +module.exports = test diff --git a/examples/pubsub/test-1.js b/examples/pubsub/test-1.js new file mode 100644 index 00000000..708b2039 --- /dev/null +++ b/examples/pubsub/test-1.js @@ -0,0 +1,30 @@ +'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 defer = 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('node1 received: Bird bird bird, bird is the word!')) { + defer.resolve() + } + }) + + await defer.promise + proc.kill() +} + +module.exports = test diff --git a/examples/pubsub/test.js b/examples/pubsub/test.js new file mode 100644 index 00000000..987c351a --- /dev/null +++ b/examples/pubsub/test.js @@ -0,0 +1,11 @@ +'use strict' + +const test1 = require('./test-1') +const testMessageFiltering = require('./message-filtering/test') + +async function test() { + await test1() + await testMessageFiltering() +} + +module.exports = test