nope/test/testDispatcherSelector.ts
2021-08-17 17:52:46 +02:00

132 lines
3.4 KiB
TypeScript

/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2021-08-11 17:32:24
* @modify date 2021-08-17 16:24:10
* @desc [description]
*/
import { promisify } from "util";
import { runNopeBackend } from "../lib/cli/runNopeBackend";
import { EventMirror } from "../lib/communication/mirrors/eventMirror";
import { deepClone } from "../lib/helpers/objectMethods";
import { getNopeLogger } from "../lib/logger/getLogger";
import { DESCRIPTION } from "../modules/helloworld/src/helloworld.package";
const sleep = promisify(setTimeout);
const logger = getNopeLogger("test-script");
async function main() {
// Define the loaders
const loader_01 = await runNopeBackend({
skipLoadingConfig: true,
log: "info",
channel: "event",
singleton: false
});
const loader_02 = await runNopeBackend({
skipLoadingConfig: true,
log: "info",
channel: "event",
singleton: false
});
const mirror = new EventMirror();
await loader_01.dispatcher.communicator.addMirror(mirror);
await loader_02.dispatcher.communicator.addMirror(mirror);
const package_01 = deepClone(DESCRIPTION);
package_01.defaultInstances = [];
await loader_01.addPackage(package_01);
const package_02 = deepClone(DESCRIPTION);
package_02.defaultInstances = [];
await loader_02.addPackage(package_02);
await sleep(300);
// 1. We now want to specificy the dispatcher which should host
// the instance. In this case, we want to host the instance on
// the dispatcher of the loader_01. We define this be adding
// the *selector* : "dispatcher"
const instance_01_a = await loader_01.dispatcher.generateInstance({
identifier: "instance01",
type: package_01.providedClasses[0].description.name,
params: [],
}, {
selector: "dispatcher"
});
logger.info(instance_01_a.identifier, "created");
// Now we just want to create an additional accessor for the instance
// again. We dont care, on which system we are
const instance_01_b = await loader_02.dispatcher.generateInstance({
identifier: "instance01",
type: package_01.providedClasses[0].description.name,
params: [],
}, {
selector: "first"
});
logger.info(instance_01_b.identifier, "created");
const error = new Error("failed");
try {
await loader_02.dispatcher.generateInstance({
identifier: "instance01",
type: package_01.providedClasses[0].description.name,
params: [],
}, {
selector: "dispatcher"
});
throw error;
} catch (e) {
if (error === e) {
logger.error("Failed to raise an error");
} else {
logger.info("Successfully prevent to create the instance, because the Dispatcher is a mismatch");
}
}
const instance_02_a = await loader_01.dispatcher.generateInstance({
identifier: "instance02",
type: package_01.providedClasses[0].description.name,
params: [],
}, {
selector: "free-ram"
});
logger.info(instance_02_a.identifier, "created by 'free-ram'");
// This shouldnt be created.
const instance_02_b = await loader_02.dispatcher.generateInstance({
identifier: "instance02",
type: package_01.providedClasses[0].description.name,
params: [],
}, {
selector: "cpu-usage"
});
logger.info(instance_02_b.identifier, "created by 'cpu-usage'");
logger.info("done");
await loader_01.dispatcher.dispose();
await loader_02.dispatcher.dispose();
process.exit();
}
main().catch(console.error);