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