sleepInterval wird für runSlot nicht korrekt übernommen
Zusammenfassung
SleepInterval wird für runInSlot nicht korrekt übernommen. Nach der Terminierung eines Prozesses startet sofort dessen Nachfolgeprozess.
STR
Angehängten Testfall ausführen.
Ist
Die Durchlaufzeit ist 2s.
Soll
Die Durchlaufzeit ist größer 3s, da SleepInterval nach Termination des ersten Prozesses + 1 Sekunde verstreichen sollte.
Testfall
/**
* Expect sleepInterval to be configureable for runSlot
*/
function testRunSlotWithAdjustedSleepInterval() {
$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();
assertTrue($objSlottedForkMachine->runSlot("alpha", 3_000_000));
$objSlottedForkMachine->waitUntilAllForksFinished();
$intTimeEnd = time();
/*
* This has to take at least 3 seconds
*/
$intTimeDiff = $intTimeEnd - $intTimeStart;
assertTrue($intTimeDiff > 2);
assertFalse($objSlottedForkMachine->forkInSlot("alpha"));
}