Skip to content

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

}