forkInSlot führt im Slot nur einen einzelnen callback aus, in abhängigen Prozessen aber die gesamte Liste
Zusammenfassung
Wenn forkInSlot auf einen Slot mit Abhängigkeiten ausgeführt wird, dann wird im ursprünglichen Slot nur EIN Callback ausgeführt, in den Abhängigen Slots aber alle.
STR
Angehängten Testfall ausführen
Ist
Während in den abhängigen Slots ALLE Callbacks ausgeführt werden, ist es im Ursprünglichen nur der erste.
Soll
ZU DEFINIEREN – Das Verhalten kann auf mehrere Weisen Sinn ergeben. Aktuell erscheint es aber nicht sinnvoll, dass der Ursprüngliche Slot NICHT abgearbeitet wird (im Testfall "alpha"), alle anderen aber schon.
Testfall
/**
* Expect chaining Slots to work properly.
*/
function testSlottedForkMachineWithChaining() {
$cloSleepOneSecond = function() {
sleep(1);
};
$objSlottedForkMachine = new \SFM\SlottedForkMachine();
/*
* Setup the Slots
*/
$objSlottedForkMachine->createSlot("gamma", 2);
$objSlottedForkMachine->createSlot("beta", 2);
$objSlottedForkMachine->createSlot("alpha", 2, [ "beta", "gamma" ]);
$objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
$objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
$objSlottedForkMachine->queueIntoSlot("beta", $cloSleepOneSecond);
$objSlottedForkMachine->queueIntoSlot("beta", $cloSleepOneSecond);
$objSlottedForkMachine->queueIntoSlot("gamma", $cloSleepOneSecond);
$objSlottedForkMachine->queueIntoSlot("gamma", $cloSleepOneSecond);
/*
* Execute the Test while measuring time
*/
$intTimeStart = time();
assertTrue($objSlottedForkMachine->forkInSlot("alpha"));
$objSlottedForkMachine->waitUntilAllForksFinished();
$intTimeEnd = time();
/*
* If this took 6 seconds, the slots did not run in parallel
*
* If it's possible to fork in slots, the queues were not empty.
*/
$intTimeDiff = $intTimeEnd - $intTimeStart;
assertTrue($intTimeDiff < 5);
assertFalse($objSlottedForkMachine->forkInSlot("alpha"));
assertFalse($objSlottedForkMachine->forkInSlot("beta"));
assertFalse($objSlottedForkMachine->forkInSlot("gamma"));
}