public void ClusterSharding_should_use_third_and_fourth_node()
{
ClusterSharding_should_failover_shards_on_crashed_node();
Within(TimeSpan.FromSeconds(15), () =>
{
Join(_third, _first);
Join(_fourth, _first);
RunOn(() =>
{
var r = _region.Value;
for (int i = 0; i < 10; i++)
r.Tell(new Counter.EntityEnvelope(3, Counter.Increment.Instance));
r.Tell(new Counter.Get(3));
ExpectMsg(10);
Assert.Equal(r.Path / "3" / "3", LastSender.Path);
}, _third);
EnterBarrier("third-update");
RunOn(() =>
{
var r = _region.Value;
for (int i = 0; i < 20; i++)
r.Tell(new Counter.EntityEnvelope(4, Counter.Increment.Instance));
r.Tell(new Counter.Get(4));
ExpectMsg(20);
Assert.Equal(r.Path / "4" / "4", LastSender.Path);
}, _fourth);
EnterBarrier("fourth-update");
RunOn(() =>
{
var r = _region.Value;
r.Tell(new Counter.EntityEnvelope(3, Counter.Increment.Instance));
r.Tell(new Counter.Get(3));
ExpectMsg(11);
Assert.Equal(Node(_third) / "user" / "counterRegion" / "3" / "3", LastSender.Path);
r.Tell(new Counter.EntityEnvelope(4, Counter.Increment.Instance));
r.Tell(new Counter.Get(4));
ExpectMsg(21);
Assert.Equal(Node(_third) / "user" / "counterRegion" / "4" / "4", LastSender.Path);
}, _first);
EnterBarrier("first-update");
RunOn(() =>
{
var r = _region.Value;
r.Tell(new Counter.Get(3));
ExpectMsg(11);
Assert.Equal(r.Path / "3" / "3", LastSender.Path);
}, _third);
RunOn(() =>
{
var r = _region.Value;
r.Tell(new Counter.Get(4));
ExpectMsg(21);
Assert.Equal(r.Path / "4" / "4", LastSender.Path);
}, _fourth);
EnterBarrier("after-7");
});
}