UNPKG

nope-js-node

Version:

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

201 lines (200 loc) 9.11 kB
"use strict"; /** * @author Martin Karkowski * @email m.karkowski@zema.de * @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 ConnectivityManager_1 = require("./ConnectivityManager"); (0, mocha_1.describe)("NopeConnectivityManager", function () { // Describe the required Test: let first = new ConnectivityManager_1.NopeConnectivityManager({ communicator: (0, getLayer_nodejs_1.getLayer)("event", "", false), logger: false, }, () => new nopeObservable_1.NopeObservable(), "first"); (0, mocha_1.describe)("Configuration", function () { let communicator = (0, getLayer_nodejs_1.getLayer)("event", "", false); (0, mocha_1.beforeEach)((done) => { first.dispose(true); communicator = (0, getLayer_nodejs_1.getLayer)("event", "", false); // Create a new Observer first = new ConnectivityManager_1.NopeConnectivityManager({ communicator, logger: false, }, () => new nopeObservable_1.NopeObservable(), "test"); first.ready.waitFor().then(() => done()); }); (0, mocha_1.it)("adapting timings", async () => { // Remove the Old Timer first.setTimings({ checkInterval: 10, dead: 25, remove: 30, sendAliveInterval: 5, slow: 15, warn: 20, }); first.dispose(); }); (0, mocha_1.it)("master-flag", async () => { // Remove the Old Timer (0, chai_1.expect)(first.isMaster, "Expecting to be the master"); first.isMaster = true; (0, chai_1.expect)(first.isMaster, "Expecting to be the master"); first.isMaster = false; (0, chai_1.expect)(!first.isMaster, "Expecting to be the master"); first.dispose(); }); }); (0, mocha_1.describe)("NopeConnectivityManager Communication", function () { let communicator = (0, getLayer_nodejs_1.getLayer)("event", "", false); (0, mocha_1.beforeEach)((done) => { first.dispose(true); communicator = (0, getLayer_nodejs_1.getLayer)("event", "", false); // Create a new Observer first = new ConnectivityManager_1.NopeConnectivityManager({ communicator, logger: false, }, () => new nopeObservable_1.NopeObservable(), "first"); first.ready.waitFor().then(() => done()); }); (0, mocha_1.it)("new detection", (done) => { let sub = null; sub = first.dispatchers.onChange.subscribe((changes) => { if (changes.added.length >= 1) { done(); first.dispose(true); sub.unsubscribe(); } else { done(new Error("Not found")); first.dispose(true); sub.unsubscribe(); } }); const second = new ConnectivityManager_1.NopeConnectivityManager({ communicator, logger: false, timeouts: { checkInterval: 10, dead: 25, remove: 30, sendAliveInterval: 5, slow: 15, warn: 20, }, }, () => new nopeObservable_1.NopeObservable(), "second"); second.dispose(true); }); (0, mocha_1.it)("removed detection", (done) => { let sub = null; let firstCall = true; // We want our first dispatcher to detect the loss ==> // We adapt the time. That our second dispatcher will be // more less directly offline. first.setTimings({ checkInterval: 10, dead: 25, remove: 30, sendAliveInterval: 5, slow: 15, warn: 20, }); sub = first.dispatchers.onChange.subscribe((changes) => { if (firstCall) { firstCall = false; } else { if (changes.removed.length >= 1) { done(); first.dispose(true); second.dispose(true); sub.unsubscribe(); } else { done(new Error("removing has not been detected")); first.dispose(true); second.dispose(true); sub.unsubscribe(); } } }); const second = new ConnectivityManager_1.NopeConnectivityManager({ communicator, logger: false, }, () => new nopeObservable_1.NopeObservable(), "second"); }); (0, mocha_1.it)("synchronizing time", async () => { // Remove the Old Timer first.dispose(true); first = new ConnectivityManager_1.NopeConnectivityManager({ communicator, }, () => new nopeObservable_1.NopeObservable(), "first"); const timestamp = first.now; // Now we want to simulate an delay. let start = Date.now(); await (0, async_1.sleep)(30); let end = Date.now(); // We have waited something like 100 ms (+-) // thats our delay. Now if we use that delay, // we are able sync our time. first.syncTime(timestamp, end - start); // Get the Adapted Timestamp. const adapted = first.info.timestamp; end = Date.now(); // Dispose our Delay. first.dispose(true); (0, chai_1.assert)(end - adapted < 5, "There should not be an delta."); }); (0, mocha_1.it)("master", async () => { // Wait for the Handshake await (0, async_1.sleep)(10); (0, chai_1.assert)(first.isMaster, "First should be master"); // Create the second Element. const second = new ConnectivityManager_1.NopeConnectivityManager({ communicator, logger: false, }, () => new nopeObservable_1.NopeObservable(), "second"); // Wait for the Handshake await (0, async_1.sleep)(10); (0, chai_1.assert)(first.isMaster, "First should be master"); (0, chai_1.assert)(second.isMaster == false, "Second should not be master"); (0, chai_1.assert)(first.master.id == first.id, "First should recognize the first as master"); (0, chai_1.assert)(second.master.id == first.id, "Second should recognize the first as master"); first.dispose(true); second.dispose(true); }); (0, mocha_1.it)("master - forced", async () => { // Wait for the Handshake await (0, async_1.sleep)(10); (0, chai_1.assert)(first.isMaster, "First should be master"); first.isMaster = false; // Create the second Element. const second = new ConnectivityManager_1.NopeConnectivityManager({ communicator, logger: false, }, () => new nopeObservable_1.NopeObservable(), "second"); // Wait for the Handshake await (0, async_1.sleep)(10); (0, chai_1.assert)(first.isMaster == false, "First should not be master"); (0, chai_1.assert)(second.isMaster == true, "Second should be master"); (0, chai_1.assert)(first.master.id == second.id, "First should recognize the second as master"); (0, chai_1.assert)(second.master.id == second.id, "Second should recognize the second as master"); // Wait for the Handshake first.isMaster = null; await (0, async_1.sleep)(40); (0, chai_1.assert)(first.isMaster === true, "First should be master"); (0, chai_1.assert)(second.isMaster == false, "Second should not be master"); (0, chai_1.assert)(first.master.id == first.id, "First should recognize the first as master"); (0, chai_1.assert)(second.master.id == first.id, "Second should recognize the first as master"); first.dispose(true); second.dispose(true); }); }); });