UNPKG

nope-js-node

Version:

NoPE Runtime for Nodejs. For Browser-Support please use nope-browser

286 lines (285 loc) 13.8 kB
"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; } } }); }); });