sleepInterval wird für run() nicht korrekt übernommen
Zusammenfassung
Run führt die Callbacks aller Slots aus und kann ein sleepInterval in Mikrosekunden erhalten, das festlegt, wie oft geprüft werden soll, wann die maximale Anzahl an Prozessen wieder unter das Limit gefallen ist und folglich der nächste Prozess gestartet werden kann. Das SleepInterval wird nicht übernommen.
STR
Angehängten Testfall ausführen.
Ist
Die Durchlaufzeit ist zwei Sekunden (Dauer der beiden Callbacks addiert).
Soll
Die Durchlaufzeit ist größer als 3 Sekunden (weil nur alle drei Sekunden geprüft wird, ob ein erneuter Prozess gestartet werden kann + 1 Sekunde für den Callback, der genau eine Sekunde dauert).
Testfall
/**
* Expect sleepInterval to be configureable for run
*/
function testRunWithAdjustedSleepInterval() {
$cloSleepOneSecond = function() {
sleep(1);
};
$objSlottedForkMachine = new \SFM\SlottedForkMachine();
/*
* Setup the Slots
*/
$objSlottedForkMachine->createSlot("alpha", 1);
$objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
$objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
/*
* Execute the Test while measuring time
*/
$intTimeStart = time();
$objSlottedForkMachine->run(2_000_000);
$objSlottedForkMachine->waitUntilAllForksFinished();
$intTimeEnd = time();
/*
* This has to take at least 3 seconds
*/
$intTimeDiff = $intTimeEnd - $intTimeStart;
assertTrue($intTimeDiff > 2);
assertFalse($objSlottedForkMachine->forkInSlot("alpha"));
}