import crypto from 'node:crypto';
import test from 'ava';
import plugin from './_plugin.js';
export default testFile => {
test('becomes available', async t => {
await t.notThrowsAsync(plugin.available);
});
test('replies', async t => {
const expected1 = new Uint8Array(crypto.randomBytes(16));
const expected2 = new Uint8Array(crypto.randomBytes(16));
for await (const reply1 of plugin.publish(expected1).replies()) {
t.deepEqual(reply1.data, expected1);
for await (const reply2 of reply1.reply(expected2).replies()) {
t.deepEqual(reply2.data, expected2);
return;
}
}
});
test('broadcasts', async t => {
for await (const message of plugin.subscribe()) {
if (message.data.broadcast === testFile) {
const expected = new Uint8Array(crypto.randomBytes(16));
for await (const reply of message.reply(expected).replies()) {
t.deepEqual(reply.data, expected);
return;
}
}
}
});
test('workers are registered', async t => {
for await (const message of plugin.subscribe()) {
if ('hello' in message.data) {
t.is(message.data.hello, testFile);
const expected = new Uint8Array(crypto.randomBytes(16));
for await (const reply of plugin.publish(expected).replies()) {
t.deepEqual(reply.data, expected);
break;
}
plugin.publish('👋');
}
if (message.data.bye === testFile) {
t.is(message.data.byeCount, 1);
return;
}
}
});
};