Skip to content

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

}