node-swarm-kb
Version:
Kubernetes based inter-cluster communication
70 lines (57 loc) • 1.92 kB
JavaScript
/* This file is used for cluster testing when tests are executed from another pods */
const appPackage = require('../package.json');
process.env.DEBUG = `${appPackage.name}*`;
const debug = require('debug')(`${appPackage.name}:slave`);
const Swarm = require('../lib');
const Promise = require('bluebird');
// Register events
Swarm.on('ready', (nodes) =>
debug(`Current nodes ${nodes}`));
Swarm.on('error', (error) =>
console.error('Error', error.stack));
Swarm.on('nodeAdded', (node) =>
debug(`Node ${node.ip} has been added.`));
Swarm.on('nodeRemoved', (node) =>
debug(`Node ${node.ip} has been removed.`));
process.on('uncaughtException', (error) =>
console.error('Test failed:', error.stack) ||
process.exit(1));
const tasks = {
taskName:
(arg1, arg2) => arg1 + arg2,
taskWithPromise:
(arg1, arg2) => new Promise((resolve, reject) =>
arg2
? resolve(arg1 + arg2)
: reject(new Error('error'))),
stackingTask: {
handler: (arg1) => new Promise((resolve, reject) => setTimeout(_ => resolve(Date.now()), 100)),
maxQueueLength: 2
},
SingleTask: {
handler: (arg1) => new Promise((resolve, reject) => setTimeout(_ => resolve(Date.now()), 100)),
singleTrigger: true
},
NoStackingTask: {
handler: (arg1) => new Promise((resolve, reject) => setTimeout(_ => resolve(Date.now()), 100)),
singleTrigger: 'N'
},
ParallelTask: {
handler: (arg1) => new Promise((resolve, reject) => setTimeout(_ => resolve(Date.now()), 100)),
serialized: false
},
TimeoutTask: {
handler: (arg1) => new Promise((resolve, reject) => setTimeout(_ => resolve(Date.now()), 100)),
timeout: 50
}
};
// Start the connection
Swarm.init()
.then((nodes) => {
Swarm.messages.on('topic', (message, topics, from) => {
/* handle message */
debug(`Message from ${from}`, message);
return 'pong';
});
Swarm.tasks.register(tasks);
});