Skip to content

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"));

}