public void MetricsGossip_must_merge_an_existing_metric_set_for_a_node_and_update_node_ring() { var m1 = new NodeMetrics(new Address("akka.tcp", "sys", "a", 2554), StandardMetrics.NewTimestamp(), _collector.Sample().Metrics); var m2 = new NodeMetrics(new Address("akka.tcp", "sys", "a", 2555), StandardMetrics.NewTimestamp(), _collector.Sample().Metrics); var m3 = new NodeMetrics(new Address("akka.tcp", "sys", "a", 2556), StandardMetrics.NewTimestamp(), _collector.Sample().Metrics); var m2Updated = m2.Copy(metrics: _collector.Sample().Metrics, timestamp: m2.Timestamp + 1000); var g1 = MetricsGossip.Empty + m1 + m2; var g2 = MetricsGossip.Empty + m3 + m2Updated; Assert.True(g1.Nodes.All(x => x.Address == m1.Address || x.Address == m2.Address)); //should contain nodes 1,3 and the most recent version of 2 var mergedGossip = g1.Merge(g2); XAssert.Equivalent(mergedGossip.Nodes.Select(x => x.Address), new[] { m1.Address, m2.Address, m3.Address }); mergedGossip.NodeMetricsFor(m1.Address).Metrics.ShouldBe(m1.Metrics); mergedGossip.NodeMetricsFor(m2.Address).Metrics.ShouldBe(m2Updated.Metrics); mergedGossip.NodeMetricsFor(m3.Address).Metrics.ShouldBe(m3.Metrics); Assert.True(mergedGossip.Nodes.All(x => x.Metrics.Count > 3)); mergedGossip.NodeMetricsFor(m2.Address).Timestamp.ShouldBe(m2Updated.Timestamp); }
public void Controller_must_publish_its_nodes() { var c = Sys.ActorOf(Props.Create(() => new Controller(1, new IPEndPoint(IPAddress.Loopback, 0)))); c.Tell(new Controller.NodeInfo(A, Address.Parse("akka://sys"), TestActor)); ExpectMsg <ToClient <Done> >(); c.Tell(new Controller.NodeInfo(B, Address.Parse("akka://sys"), TestActor)); ExpectMsg <ToClient <Done> >(); c.Tell(Controller.GetNodes.Instance); ExpectMsg <IEnumerable <RoleName> >(names => XAssert.Equivalent(names, new[] { A, B })); c.Tell(PoisonPill.Instance); }
public void ClusterDomainEventPublisherMustSendEventsCorrespondingToCurrentStateWhenSubscribe() { var subscriber = CreateTestProbe(); _publisher.Tell(new InternalClusterAction.PublishChanges(g8)); _publisher.Tell(new InternalClusterAction.Subscribe(subscriber.Ref, ClusterEvent.SubscriptionInitialStateMode.InitialStateAsEvents, ImmutableHashSet.Create(typeof(ClusterEvent.IMemberEvent), typeof(ClusterEvent.ReachabilityEvent)))); var received = subscriber.ReceiveN(4); XAssert.Equivalent( new object[] { new ClusterEvent.MemberUp(aUp), new ClusterEvent.MemberUp(cUp), new ClusterEvent.MemberUp(dUp), new ClusterEvent.MemberExited(bExiting) }, received); subscriber.ExpectMsg(new ClusterEvent.UnreachableMember(dUp)); subscriber.ExpectNoMsg(TimeSpan.FromMilliseconds(500)); }
public void AGossipMustMergeUnreachable() { var r1 = Reachability.Empty.Unreachable(b1.UniqueAddress, a1.UniqueAddress) .Unreachable(b1.UniqueAddress, c1.UniqueAddress); var g1 = new Gossip(ImmutableSortedSet.Create(a1, b1, c1), new GossipOverview(r1)); var r2 = Reachability.Empty.Unreachable(a1.UniqueAddress, d1.UniqueAddress); var g2 = new Gossip(ImmutableSortedSet.Create(a1, b1, c1, d1), new GossipOverview(r2)); var merged1 = g1.Merge(g2); XAssert.Equivalent(ImmutableHashSet.Create(a1.UniqueAddress, c1.UniqueAddress, d1.UniqueAddress), merged1.Overview.Reachability.AllUnreachable); var merged2 = g2.Merge(g1); XAssert.Equivalent(merged1.Overview.Reachability.AllUnreachable, merged2.Overview.Reachability.AllUnreachable ); }