nope-js-node
Version:
NoPE Runtime for Nodejs. For Browser-Support please use nope-browser
286 lines (285 loc) • 13.8 kB
JavaScript
"use strict";
/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2022-01-05 17:50:44
* @modify date 2022-01-05 17:50:44
* @desc [description]
*/
Object.defineProperty(exports, "__esModule", { value: true });
const chai_1 = require("chai");
const mocha_1 = require("mocha");
require("reflect-metadata");
const getLayer_nodejs_1 = require("../../communication/getLayer.nodejs");
const async_1 = require("../../helpers/async");
const nopeObservable_1 = require("../../observables/nopeObservable");
const NopeRpcManager_1 = require("./NopeRpcManager");
(0, mocha_1.describe)("NopeRpcManager", function () {
// Describe the required Test:
let manager = new NopeRpcManager_1.NopeRpcManager({
communicator: (0, getLayer_nodejs_1.getLayer)("event", "", false),
logger: false,
}, () => new nopeObservable_1.NopeObservable(), async () => "test", "test");
(0, mocha_1.describe)("serviceHandeling", function () {
(0, mocha_1.beforeEach)((done) => {
// Create a new Observer
manager = new NopeRpcManager_1.NopeRpcManager({
communicator: (0, getLayer_nodejs_1.getLayer)("event", "", false),
logger: false,
}, () => new nopeObservable_1.NopeObservable(), async () => "test", "test");
manager.ready.waitFor().then(() => done());
});
const helloworld = async (greetings) => {
return "Hello " + greetings + "!";
};
const delay = async (greetings) => {
await (0, async_1.sleep)(1000);
return "Hello " + greetings + "!";
};
(0, mocha_1.it)("registering service", async () => {
await manager.ready.waitFor();
// Now we register the Service
await manager.registerService(helloworld, {
id: "helloworld",
schema: {
description: "Hello World Service",
},
});
await (0, async_1.sleep)(10);
// Get the Services
const services = manager.services.extractedKey;
(0, chai_1.expect)(services).to.include("helloworld");
(0, chai_1.assert)(manager.services.amountOf.get("helloworld") == 1, "There should be one Provider for this service");
(0, chai_1.assert)(manager.services.keyMappingReverse.get("helloworld").size == 1, "There should be one Provider for this service");
(0, chai_1.assert)(manager.services.conflicts.size == 0, "There should be no conflict");
(0, chai_1.assert)(manager.serviceExists("helloworld"), "Service should be known!");
(0, chai_1.assert)(manager.serviceExists("helloworld2") == false, "Service should not be known!");
(0, chai_1.assert)(Array.from(manager.services.keyMappingReverse.get("helloworld"))[0] ==
"test", "The Provider should be 'test'");
});
(0, mocha_1.it)("call service", async () => {
await manager.ready.waitFor();
await manager.registerService(helloworld, {
id: "helloworld",
schema: {
description: "Hello World Service",
},
});
await (0, async_1.sleep)(10);
const result = await manager.performCall("helloworld", ["Mocha"]);
(0, chai_1.expect)(result).to.equal("Hello Mocha!", "result is not matching");
});
(0, mocha_1.it)("call service via methodInterface", async () => {
await manager.ready.waitFor();
await manager.registerService(helloworld, {
id: "helloworld",
schema: {
description: "Hello World Service",
},
});
await (0, async_1.sleep)(10);
const result = await manager.methodInterface.helloworld("Mocha");
(0, chai_1.expect)(result).to.equal("Hello Mocha!", "result is not matching");
});
(0, mocha_1.it)("call service with a timeout", async () => {
await manager.ready.waitFor();
await manager.registerService(delay, {
id: "helloworld",
schema: {
description: "Hello World Service",
},
});
await (0, async_1.sleep)(10);
const err = Error("Error not thrown");
try {
const result = await manager.methodInterfaceWithOptions.helloworld({
timeout: 50,
}, "Mocha");
throw err;
}
catch (e) {
if (e == err) {
throw err;
}
}
});
(0, mocha_1.it)("multi-call", async () => {
await manager.ready.waitFor();
await manager.registerService(helloworld, {
id: "helloworld_00",
schema: {
description: "Hello World Service",
},
});
await manager.registerService(helloworld, {
id: "helloworld_01",
schema: {
description: "Hello World Service",
},
});
await (0, async_1.sleep)(10);
const result = await manager.performCall(["helloworld_00", "helloworld_01"], ["test"]);
(0, chai_1.expect)(result.length).to.eq(2);
});
});
(0, mocha_1.describe)("RpcManager Communication", function () {
let caller = new NopeRpcManager_1.NopeRpcManager({
communicator: (0, getLayer_nodejs_1.getLayer)("event", "", false),
logger: false,
}, () => new nopeObservable_1.NopeObservable(), async () => "test", "caller");
(0, mocha_1.beforeEach)(() => {
const communicator = (0, getLayer_nodejs_1.getLayer)("event", "", false);
if (manager) {
manager.dispose();
}
// Create a new Observer
manager = new NopeRpcManager_1.NopeRpcManager({
communicator,
logger: false,
}, () => new nopeObservable_1.NopeObservable(), async () => "test", "test");
if (caller) {
caller.dispose();
}
caller = new NopeRpcManager_1.NopeRpcManager({
communicator,
logger: false,
}, () => new nopeObservable_1.NopeObservable(), async () => "test", "caller");
});
const helloworld = async (greetings) => {
return "Hello " + greetings + "!";
};
const delay = async (greetings) => {
await (0, async_1.sleep)(1000);
return "Hello " + greetings + "!";
};
(0, mocha_1.it)("registering service - static id", async () => {
await manager.ready.waitFor();
await caller.ready.waitFor();
await manager.registerService(helloworld, {
id: "helloworld",
schema: {
description: "Hello World Service",
},
});
await (0, async_1.sleep)(10);
// Get the Services
const services = caller.services.extractedKey;
(0, chai_1.expect)(caller.services.extractedKey).to.include("helloworld");
(0, chai_1.assert)(caller.services.amountOf.get("helloworld") == 1, "There should be one Provider for this service");
(0, chai_1.assert)(caller.services.keyMappingReverse.get("helloworld").size == 1, "There should be one Provider for this service");
(0, chai_1.assert)(caller.services.conflicts.size == 0, "There should be no conflict");
(0, chai_1.assert)(caller.serviceExists("helloworld"), "Service should be known!");
(0, chai_1.assert)(caller.serviceExists("helloworld2") == false, "Service should not be known!");
(0, chai_1.assert)(Array.from(caller.services.keyMappingReverse.get("helloworld"))[0] ==
"test", "The Provider should be 'test'");
});
(0, mocha_1.it)("registering service - dynamic id", async () => {
await manager.ready.waitFor();
await caller.ready.waitFor();
const r = await manager.registerService(helloworld, {
schema: {},
});
(0, chai_1.assert)(r.id !== "helloworld", "There should be an dynamic id");
await (0, async_1.sleep)(10);
// Get the Services
const services = caller.services.extractedKey;
(0, chai_1.expect)(services).to.include(r.id);
});
(0, mocha_1.it)("call service", async () => {
await manager.ready.waitFor();
await caller.ready.waitFor();
await manager.registerService(helloworld, {
id: "helloworld",
schema: {
description: "Hello World Service",
},
});
await (0, async_1.sleep)(10);
const result = await caller.performCall("helloworld", ["Mocha"]);
(0, chai_1.expect)(result).to.equal("Hello Mocha!", "result is not matching");
});
(0, mocha_1.it)("call service via methodInterface", async () => {
await manager.ready.waitFor();
await caller.ready.waitFor();
await manager.registerService(helloworld, {
id: "helloworld",
schema: {
description: "Hello World Service",
},
});
await (0, async_1.sleep)(10);
const result = await caller.methodInterface.helloworld("Mocha");
(0, chai_1.expect)(result).to.equal("Hello Mocha!", "result is not matching");
});
(0, mocha_1.it)("call service with a timeout", async () => {
await manager.ready.waitFor();
await caller.ready.waitFor();
await manager.registerService(delay, {
id: "helloworld",
schema: {
description: "Hello World Service",
},
});
await (0, async_1.sleep)(10);
const err = Error("Error not thrown");
try {
const result = await caller.methodInterfaceWithOptions.helloworld({
timeout: 50,
}, "Mocha");
throw err;
}
catch (e) {
if (e == err) {
throw err;
}
}
});
(0, mocha_1.it)("providing multiple providers", async () => {
await manager.ready.waitFor();
await caller.ready.waitFor();
await manager.registerService(delay, {
id: "helloworld",
schema: {
description: "Hello World Service",
},
});
await caller.registerService(delay, {
id: "helloworld",
schema: {
description: "Hello World Service",
},
});
await (0, async_1.sleep)(10);
(0, chai_1.expect)(manager.services.extractedKey).to.include("helloworld");
(0, chai_1.assert)(manager.services.amountOf.get("helloworld") == 2, "There should be two Provider for this service");
(0, chai_1.assert)(manager.services.keyMappingReverse.get("helloworld").size == 2, "There should be two Provider for this service");
(0, chai_1.assert)(manager.services.conflicts.size == 0, "There should be no conflict");
(0, chai_1.assert)(manager.serviceExists("helloworld"), "Service should be known!");
(0, chai_1.assert)(manager.serviceExists("helloworld2") == false, "Service should not be known!");
let providers = Array.from(manager.services.keyMappingReverse.get("helloworld"));
(0, chai_1.assert)(providers.includes("test"), "The Provider should be 'test'");
(0, chai_1.assert)(providers.includes("caller"), "The Provider should be 'test'");
(0, chai_1.expect)(caller.services.extractedKey).to.include("helloworld");
(0, chai_1.assert)(caller.services.amountOf.get("helloworld") == 2, "There should be two Provider for this service");
(0, chai_1.assert)(caller.services.keyMappingReverse.get("helloworld").size == 2, "There should be two Provider for this service");
(0, chai_1.assert)(caller.services.conflicts.size == 0, "There should be no conflict");
(0, chai_1.assert)(caller.serviceExists("helloworld"), "Service should be known!");
(0, chai_1.assert)(caller.serviceExists("helloworld2") == false, "Service should not be known!");
providers = Array.from(caller.services.keyMappingReverse.get("helloworld"));
(0, chai_1.assert)(providers.includes("test"), "The Provider should be 'test'");
(0, chai_1.assert)(providers.includes("caller"), "The Provider should be 'test'");
const err = Error("Error not thrown");
try {
const result = await caller.methodInterfaceWithOptions.helloworld({
timeout: 50,
}, "Mocha");
throw err;
}
catch (e) {
if (e == err) {
throw err;
}
}
});
});
});