70 lines
1.8 KiB
PHP
70 lines
1.8 KiB
PHP
|
<?php
|
||
|
namespace STS\Backoff;
|
||
|
|
||
|
use PHPUnit\Framework\TestCase;
|
||
|
use STS\Backoff\Strategies\ConstantStrategy;
|
||
|
|
||
|
class HelpersTest extends TestCase
|
||
|
{
|
||
|
public function testSuccessWithDefaults()
|
||
|
{
|
||
|
$result = backoff(function() {
|
||
|
return "success";
|
||
|
});
|
||
|
|
||
|
$this->assertEquals("success", $result);
|
||
|
}
|
||
|
|
||
|
public function testFailureWithDefaults()
|
||
|
{
|
||
|
$this->expectException(\Exception::class);
|
||
|
$this->expectExceptionMessage("failure");
|
||
|
|
||
|
backoff(function() {
|
||
|
throw new \Exception("failure");
|
||
|
}, 2);
|
||
|
}
|
||
|
|
||
|
public function testStrategy()
|
||
|
{
|
||
|
$start = microtime(true);
|
||
|
|
||
|
// We're going to run a test for 100 attempts, just to verify we were able to
|
||
|
// set our own strategy with a low sleep time.
|
||
|
|
||
|
try {
|
||
|
backoff(function() {
|
||
|
throw new \Exception("failure");
|
||
|
}, 100, new ConstantStrategy(1));
|
||
|
} catch(\Exception $e) {}
|
||
|
|
||
|
$end = microtime(true);
|
||
|
|
||
|
$elapsedMS = ($end - $start) * 1000;
|
||
|
|
||
|
// We expect that this took just a bit over the 100ms that we slept
|
||
|
$this->assertTrue($elapsedMS > 100 && $elapsedMS < 200);
|
||
|
}
|
||
|
|
||
|
public function testWaitCap()
|
||
|
{
|
||
|
$start = microtime(true);
|
||
|
|
||
|
// We're going to specify a really long sleep time, but with a short cap to override.
|
||
|
|
||
|
try {
|
||
|
backoff(function() {
|
||
|
throw new \Exception("failure");
|
||
|
}, 2, new ConstantStrategy(100000), 100);
|
||
|
} catch(\Exception $e) {}
|
||
|
|
||
|
$end = microtime(true);
|
||
|
|
||
|
$elapsedMS = ($end - $start) * 1000;
|
||
|
|
||
|
// We expect that this took just a bit over the 100ms that we slept
|
||
|
$this->assertTrue($elapsedMS > 90 && $elapsedMS < 150,
|
||
|
sprintf("Expected elapsedMS between 90 & 200, got: $elapsedMS\n"));
|
||
|
}
|
||
|
}
|