public void DistributedPubSubMediator_should_transfer_delta_correctly()
{
DistributedPubSubMediator_should_send_one_message_to_each_group();
var firstAddress = Node(_first).Address;
var secondAddress = Node(_second).Address;
var thirdAddress = Node(_third).Address;
RunOn(() =>
{
Mediator.Tell(new Tools.PublishSubscribe.Internal.Status(new Dictionary<Address, long>()));
var deltaBuckets = ExpectMsg<Delta>().Buckets;
Assert.Equal(3, deltaBuckets.Count());
Assert.Equal(9, deltaBuckets.First(x => x.Owner == firstAddress).Content.Count);
Assert.Equal(8, deltaBuckets.First(x => x.Owner == secondAddress).Content.Count);
Assert.Equal(2, deltaBuckets.First(x => x.Owner == thirdAddress).Content.Count);
}, _first);
EnterBarrier("verified-initial-delta");
// this test is configured with max-delta-elements = 500
var many = 1010;
RunOn(() =>
{
for (int i = 1; i <= many; i++)
{
Mediator.Tell(new Put(CreateChatUser("u" + (i + 1000))));
}
Mediator.Tell(new Tools.PublishSubscribe.Internal.Status(new Dictionary<Address, long>()));
var deltaBuckets1 = ExpectMsg<Delta>().Buckets;
Assert.Equal(500, deltaBuckets1.Sum(x => x.Content.Count));
Mediator.Tell(new Tools.PublishSubscribe.Internal.Status(deltaBuckets1.ToDictionary(b => b.Owner, b => b.Version)));
var deltaBuckets2 = ExpectMsg<Delta>().Buckets;
Assert.Equal(500, deltaBuckets2.Sum(x => x.Content.Count));
Mediator.Tell(new Tools.PublishSubscribe.Internal.Status(deltaBuckets2.ToDictionary(b => b.Owner, b => b.Version)));
var deltaBuckets3 = ExpectMsg<Delta>().Buckets;
Assert.Equal(9 + 8 + 2 + many - 500 - 500, deltaBuckets3.Sum(x => x.Content.Count));
}, _first);
EnterBarrier("verified-delta-with-many");
Within(TimeSpan.FromSeconds(10), () =>
{
AwaitCount(17 + many);
});
EnterBarrier("after-13");
}