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