Example #1
0
        public void IfStartPeerMonitoringMessadeReceived_ConnectsToPeerHealthUri()
        {
            var healthUri      = new Uri("tcp://127.0.0.2:9090");
            var peerIdentifier = new ReceiverIdentifier(Guid.NewGuid().ToByteArray());
            var payload        = new StartPeerMonitoringMessage
            {
                Uri            = "tcp://127.0.0.1:800",
                SocketIdentity = peerIdentifier.Identity,
                Health         = new global::kino.Messaging.Messages.Health
                {
                    Uri = healthUri.ToSocketAddress(),
                    HeartBeatInterval = TimeSpan.FromMinutes(1)
                }
            };
            var message = Message.Create(payload);
            var meta    = new ClusterMemberMeta
            {
                HealthUri             = payload.Health.Uri,
                HeartBeatInterval     = payload.Health.HeartBeatInterval,
                ScaleOutUri           = payload.Uri,
                LastKnownHeartBeat    = DateTime.UtcNow,
                ConnectionEstablished = false
            };

            connectedPeerRegistry.Setup(m => m.FindOrAdd(It.Is <ReceiverIdentifier>(id => id == peerIdentifier), It.IsAny <ClusterMemberMeta>())).Returns(meta);
            subscriberSocket.SetupMessageReceived(message, tokenSource.Token);
            //
            clusterHealthMonitor.Start();
            TimeSpan.FromMilliseconds(100).Sleep();
            tokenSource.Cancel();
            clusterHealthMonitor.Stop();
            //
            subscriberSocket.Verify(m => m.Connect(healthUri, false), Times.Once);
            Assert.IsTrue(meta.ConnectionEstablished);
        }
Example #2
0
        public void IfStartPeerMonitoringMessadeReceived_CheckDeadPeersMessageAfterPeerHeartBeatInterval()
        {
            config.StalePeersCheckInterval = TimeSpan.FromMinutes(1);
            var healthUri         = new Uri("tcp://127.0.0.2:9090");
            var heartBeatInterval = TimeSpan.FromMilliseconds(300);
            var peerIdentifier    = new ReceiverIdentifier(Guid.NewGuid().ToByteArray());
            var payload           = new StartPeerMonitoringMessage
            {
                Uri            = "tcp://127.0.0.1:800",
                SocketIdentity = peerIdentifier.Identity,
                Health         = new global::kino.Messaging.Messages.Health
                {
                    Uri = healthUri.ToSocketAddress(),
                    HeartBeatInterval = heartBeatInterval
                }
            };
            var message = Message.Create(payload);
            var meta    = new ClusterMemberMeta
            {
                HealthUri             = payload.Health.Uri,
                HeartBeatInterval     = payload.Health.HeartBeatInterval,
                ScaleOutUri           = payload.Uri,
                LastKnownHeartBeat    = DateTime.UtcNow,
                ConnectionEstablished = false
            };

            connectedPeerRegistry.Setup(m => m.FindOrAdd(It.Is <ReceiverIdentifier>(id => id == peerIdentifier), It.IsAny <ClusterMemberMeta>())).Returns(meta);
            subscriberSocket.SetupMessageReceived(message, tokenSource.Token);
            //
            clusterHealthMonitor.Start();
            heartBeatInterval.MultiplyBy(2).Sleep();
            tokenSource.Cancel();
            clusterHealthMonitor.Stop();
            //
            multiplexingSocket.Verify(m => m.Send(It.Is <IMessage>(msg => msg.Equals(KinoMessages.CheckDeadPeers))), Times.AtLeastOnce);
        }