malkusch\lock\mutex\TransactionalMutexTest::testReplayTransaction PHP Метод

testReplayTransaction() публичный Метод

Tests replaying the transaction.
public testReplayTransaction ( Exception $exception )
$exception Exception The thrown exception.
    public function testReplayTransaction(\Exception $exception)
    {
        $pdo = $this->buildMySqlPdo();
        $mutex = new TransactionalMutex($pdo);
        $pdo->exec("\n            CREATE TEMPORARY TABLE testExceptionRollsback(\n                id int primary key\n            ) engine=innodb\n        ");
        $i = 0;
        $mutex->synchronized(function () use($pdo, &$i, $exception) {
            $i++;
            $count = $pdo->query("SELECT count(*) FROM testExceptionRollsback")->fetchColumn();
            $this->assertEquals(0, $count);
            $pdo->exec("INSERT INTO testExceptionRollsback VALUES(1)");
            // this provokes the replay
            if ($i < 5) {
                throw $exception;
            }
        });
        $count = $pdo->query("SELECT count(*) FROM testExceptionRollsback")->fetchColumn();
        $this->assertEquals(1, $count);
        $this->assertEquals(5, $i);
    }