Пример #1
0
        private static void threadProcHub(object testData_)
        {
            var _log = NLog.LogManager.GetLogger("HubThread");

            var testData = (TestData)testData_;

            _log.Info("Creating keystore for Hub...");
            var hubKeystore = new MemoryKeyStore(RSA.Default);

            hubKeystore.Load(testData.HubKeys);

            _log.Info("Waiting for node A to fail the connection...");
            Thread.Sleep(4000);

            _log.Info("Creating Hub...");
            var hub = new Nemesis.NemesisHub(
                new IPEndPoint(testData.Host, testData.Ports[0]),
                new IPEndPoint(testData.Host, testData.Ports[1])
                );

            hub.CommandReceived += Hub_CommandReceived;

            _log.Info("Enable encryption for nodes A and B...");

            //hub.EnableEncryption(hubKeystore);
            hub.AllowUnknownGuid = true;

            var nodeAKeyStore = new MemoryKeyStore(RSA.Default);

            nodeAKeyStore.Load(testData.NodeAKeys);

            hub.NodesPublicKeys.AddOrUpdate(testData.NodeAId, nodeAKeyStore.PublicKey,
                                            (a, b) => { return(nodeAKeyStore.PublicKey); });

            var nodeBKeyStore = new MemoryKeyStore(RSA.Default);

            nodeBKeyStore.Load(testData.NodeBKeys);

            hub.NodesPublicKeys.AddOrUpdate(testData.NodeBId, nodeBKeyStore.PublicKey,
                                            (a, b) => { return(nodeBKeyStore.PublicKey); });

            _log.Info("Waiting for connections to establish...");

            var cmdTest = "test";

            _log.Info($"Sending command \"{cmdTest}\" (1/2) to Node A ({testData.NodeAId})");
            Task.Run(async() => {
                var response2 = await hub.SendCommand(cmdTest, testData.NodeAId);
                _log.Info("Got response: {0}", response2);
            });

            _log.Info($"Sending command \"{cmdTest}\" (2/2) to Node A ({testData.NodeAId})");
            Task.Run(async() => {
                var response2 = await hub.SendCommand(cmdTest, testData.NodeAId);
                _log.Info("Got response: {0}", response2);
            });
        }
Пример #2
0
        private static void threadProcHub(object testData_)
        {
            var _log = NLog.LogManager.GetLogger("HubThread");

            var testData = (TestData)testData_;

            _log.Info("Creating keystore for Hub...");
            var hubKeystore = new MemoryKeyStore(RSA.Default);
            hubKeystore.Load(testData.HubKeys);

            _log.Info("Waiting for node A to fail the connection...");
            Thread.Sleep(4000);

            _log.Info("Creating Hub...");
            var hub = new Nemesis.NemesisHub(
                new IPEndPoint(testData.Host, testData.Ports[0]),
                new IPEndPoint(testData.Host, testData.Ports[1])
            );
            hub.CommandReceived += Hub_CommandReceived;

            _log.Info("Enable encryption for nodes A and B...");

            //hub.EnableEncryption(hubKeystore);
            hub.AllowUnknownGuid = true;

            var nodeAKeyStore = new MemoryKeyStore(RSA.Default);
            nodeAKeyStore.Load(testData.NodeAKeys);

            hub.NodesPublicKeys.AddOrUpdate(testData.NodeAId, nodeAKeyStore.PublicKey,
                (a, b) => { return nodeAKeyStore.PublicKey; });

            var nodeBKeyStore = new MemoryKeyStore(RSA.Default);
            nodeBKeyStore.Load(testData.NodeBKeys);

            hub.NodesPublicKeys.AddOrUpdate(testData.NodeBId, nodeBKeyStore.PublicKey,
                (a, b) => { return nodeBKeyStore.PublicKey; });

            _log.Info("Waiting for connections to establish...");

            var cmdTest = "test";
            _log.Info($"Sending command \"{cmdTest}\" (1/2) to Node A ({testData.NodeAId})");
            Task.Run(async () => {
                var response2 = await hub.SendCommand(cmdTest, testData.NodeAId);
                _log.Info("Got response: {0}", response2);
            });

            _log.Info($"Sending command \"{cmdTest}\" (2/2) to Node A ({testData.NodeAId})");
            Task.Run(async () => {
                var response2 = await hub.SendCommand(cmdTest, testData.NodeAId);
                _log.Info("Got response: {0}", response2);
            });

        }
        public void SimpleNodeAndHub()
        {
            var answerTimeout = TimeSpan.FromSeconds(10);

            var NodeMessageReceived = new TaskCompletionSource<string>();

            var testData = Shared.GetTestSettings();

            var nodeAkeyStore = new MemoryKeyStore();
            nodeAkeyStore.Load(testData.NodeAKeys);

            var hubKeystore = new MemoryKeyStore();
            hubKeystore.Load(testData.HubKeys);

            var hubThread = new Thread(() =>
            {

                var hub = new NemesisHub(
                    new IPEndPoint(testData.Host, testData.Ports[0]),
                    new IPEndPoint(testData.Host, testData.Ports[1])
                );
                hub.EnableEncryption(hubKeystore);


                hub.NodesPublicKeys.AddOrUpdate(testData.NodeAId, nodeAkeyStore.PublicKey,
                    (a, b) => { return nodeAkeyStore.PublicKey; });

                hub.CommandReceived += (sender, e) =>
                {
                    Trace.WriteLine("Hub command received: " + e.Command);

                    e.ResultSource.SetResult("ok");
                };

                var nodeResponse = hub.SendCommand("h2n", testData.NodeAId);

                NodeMessageReceived.SetResult(nodeResponse.Result);


            });

            hubThread.Start();

            var nodeA = new NemesisNode(testData.NodeAId, testData.Ports, testData.Host.ToString(), false);
            nodeA.HubPublicKey = hubKeystore.PublicKey;
            nodeA.EnableEncryption(nodeAkeyStore);

            nodeA.CommandReceived += (sender, e) =>
            {
                Trace.WriteLine("nodeA command received: " + e.Command);

                e.ResultSource.SetResult("ok");
            };

            nodeA.Connect();

            var hubResponse = nodeA.SendCommand("n2h");

            hubResponse.Wait(answerTimeout);
            var hubResult = hubResponse.IsCompleted ? hubResponse.Result : "timeout";
            Assert.AreEqual("ok", hubResult, "Hub -> Node command error");

            NodeMessageReceived.Task.Wait(answerTimeout);
            var nodeResult = NodeMessageReceived.Task.IsCompleted ? NodeMessageReceived.Task.Result : "timeout";
            Assert.AreEqual("ok", nodeResult, "Node -> Hub command error");

        }