Skip to content

In waitUntilAllForksFinished verstreicht nicht die übergebene Wartezeit

Zusammenfassung

waitUntilAllForksFinished lässt nicht die übergebene Wartezeit verstreichen. Im Angehängten Testfall vergehen drei Sekunden (Durchlaufzeit der drei mal zwei Callbacks) statt fünf (Retry-Zeit)

STR

Angehängten Testfall ausführen.

Ist

Es vergehen drei Sekunden,

Soll

Es vergehen fünf Sekunden, da vom Hauptprozess die Forks abgespalten werden, die im kompletten Durchlauf drei Sekunden brauchen und die Prüfung, ob alle Prozesse abgeschlossen sind, vorher stattfindet. Der Durchlauf sollte also mindestens fünf Sekunden dauern, da mindestens 1x vor dem nächsten Versuch gewartet werden muss.

Testfall

/**
  * Expect sleepInterval to be configureable for waitUntilAllForksFinished
  */
function testWaitUntilAllForksFinishedWithAdjustestSleepInterval() {

  $cloSleepOneSecond = function() {

    sleep(1);

  };

  $objSlottedForkMachine = new \SFM\SlottedForkMachine();

  /*
   * Setup the Slot
   */

  $objSlottedForkMachine->createSlot("alpha", 2);

  $objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
  $objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
  $objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
  $objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
  $objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);
  $objSlottedForkMachine->queueIntoSlot("alpha", $cloSleepOneSecond);

  /*
   * Execute the Test while measuring time
   */
  $intTimeStart = time();

  $objSlottedForkMachine->run();
  $objSlottedForkMachine->waitUntilAllForksFinished(5_000_000);

  $intTimeEnd = time();

  /*
   * This has to take at least 4 seconds
   */
  $intTimeDiff = $intTimeEnd - $intTimeStart;

  assertTrue($intTimeDiff > 3, "Timediff is " . $intTimeDiff);
  assertFalse($objSlottedForkMachine->forkInSlot("alpha"));

}