/** * @issue https://github.com/arvenil/ninja-mutex/pull/4 */ public function testIfMutexDestructorThrowsWhenBackendIsUnavailable() { $lockImplementor = new MockLock(); $mutex = new Mutex('forfiter', $lockImplementor); $this->assertFalse($mutex->isAcquired()); $this->assertTrue($mutex->acquireLock()); $this->assertTrue($mutex->isAcquired()); $this->assertTrue($mutex->acquireLock()); $this->assertTrue($mutex->isAcquired()); // make backend unavailable $lockImplementor->setAvailable(false); try { // explicit __destructor() call, should throw UnrecoverableMutexException $mutex->__destruct(); } catch (UnrecoverableMutexException $e) { // make backend available again $lockImplementor->setAvailable(true); // release lock $this->assertTrue($mutex->releaseLock()); $this->assertFalse($mutex->releaseLock()); return; } $this->fail('An expected exception has not been raised.'); }