In waitUntilAllForksFinished verstreicht nicht die übergebene Wartezeit
Zusammenfassung
waitUntilAllForksFinished lässt nicht die übergebene Wartezeit verstreichen. Im Angehängten Testfall vergehen drei Sekunden (Durchlaufzeit der drei mal zwei Callbacks) statt fünf (Retry-Zeit)
STR
Angehängten Testfall ausführen.
Ist
Es vergehen drei Sekunden,
Soll
Es vergehen fünf Sekunden, da vom Hauptprozess die Forks abgespalten werden, die im kompletten Durchlauf drei Sekunden brauchen und die Prüfung, ob alle Prozesse abgeschlossen sind, vorher stattfindet. Der Durchlauf sollte also mindestens fünf Sekunden dauern, da mindestens 1x vor dem nächsten Versuch gewartet werden muss.
Testfall
/**
* Expect sleepInterval to be configureable for waitUntilAllForksFinished
*/
function testWaitUntilAllForksFinishedWithAdjustestSleepInterval() {
$cloSleepOneSecond = function() {
sleep(1);
};
$objSlottedForkMachine = new \SFM\SlottedForkMachine();
/*
* Setup the Slot
*/
$objSlottedForkMachine->createSlot("alpha", 2);
$objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
$objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
$objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
$objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
$objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
$objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
/*
* Execute the Test while measuring time
*/
$intTimeStart = time();
$objSlottedForkMachine->run();
$objSlottedForkMachine->waitUntilAllForksFinished(5_000_000);
$intTimeEnd = time();
/*
* This has to take at least 4 seconds
*/
$intTimeDiff = $intTimeEnd - $intTimeStart;
assertTrue($intTimeDiff > 3, "Timediff is " . $intTimeDiff);
assertFalse($objSlottedForkMachine->forkInSlot("alpha"));
}