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"));
 | 
						|
    }
 | 
						|
}
 |