public function testSerialWithRetries() { $directory = new FooDirectory($this->getMongoDB()); $model = $directory->createAndSave(['bar' => 'baz']); PHPUnit::assertEquals('baz', $model['bar']); $attempts = 0; $directory->updateWithSerialConstraint($model, function ($model, $update_vars, $attempt_offset) use(&$attempts) { if ($attempt_offset < 5) { $this->makeExternalModificationToModel($model, $attempt_offset); } ++$attempts; return array('goodMod' => 1); }, 10, 1000); PHPUnit::assertEquals(6, $attempts); $model = $directory->reload($model); PHPUnit::assertEquals(5, $model['badMod']); PHPUnit::assertEquals(1, $model['goodMod']); }