public void DefaultResizer_must_backoff()
{
Within(TimeSpan.FromSeconds(10), () =>
{
var resizer = new DefaultResizer(2, 5, pressureThreshold: 1, rampupRate: 1.0d, backoffRate: 1.0d,
messagesPerResize: 2, backoffThreshold: 0.4d);
var router = Sys.ActorOf(Props.Create<BackoffActor>().WithRouter(new RoundRobinPool(0, resizer)));
// put some pressure on the router
for (var i = 0; i < 200; i++)
{
router.Tell(150);
if (RouteeSize(router) > 2)
break;
Thread.Sleep(20);
}
var z = RouteeSize(router);
Assert.True(z > 2);
Thread.Sleep(300);
// let it cool down
AwaitAssert(() =>
{
router.Tell(0); //trigger resize
Thread.Sleep(20);
RouteeSize(router).Should().BeLessThan(z);
}, null, TimeSpan.FromSeconds(1));
});
}