Semaphore example

/** * @author Jérémy Derussé <jeremy@derusse.com> * @author Grégoire Pineau <lyrixx@lyrixx.info> */
class SemaphoreTest extends TestCase
{
    public function testAcquireReturnsTrue()
    {
        $key = new Key('key', 1);
        $store = $this->createMock(PersistingStoreInterface::class);
        $semaphore = new Semaphore($key$store);

        $store
            ->expects($this->once())
            ->method('save')
            ->with($key, 300.0)
        ;

        $this->assertTrue($semaphore->acquire());
        $this->assertGreaterThanOrEqual(299.0, $key->getRemainingLifetime());
    }

    
public function createSemaphore(string $resource, int $limit, int $weight = 1, ?float $ttlInSecond = 300.0, bool $autoRelease = true): SemaphoreInterface
    {
        return $this->createSemaphoreFromKey(new Key($resource$limit$weight)$ttlInSecond$autoRelease);
    }

    /** * @param float|null $ttlInSecond Maximum expected semaphore duration in seconds * @param bool $autoRelease Whether to automatically release the semaphore or not when the semaphore instance is destroyed */
    public function createSemaphoreFromKey(Key $key, ?float $ttlInSecond = 300.0, bool $autoRelease = true): SemaphoreInterface
    {
        $semaphore = new Semaphore($key$this->store, $ttlInSecond$autoRelease);
        if ($this->logger) {
            $semaphore->setLogger($this->logger);
        }

        return $semaphore;
    }
}
Home | Imprint | This part of the site doesn't use cookies.