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