Commit dae3aeb0 authored by Stefan Bürk's avatar Stefan Bürk Committed by Christian Kuhn
Browse files

[BUGFIX] Tighten CleanerTaskTest setup for changed PHP 8.1 behaviour

CleanerTaskTest dynamically calculates the needed 'period' time to use
for testing, if one page records will survive the cleaning task, as
not being outside this periode grace time. This has worked quite some
time, but may crash now in a quite narrow timeframe, which failed core
ci tests, if they were run in this timeframe - and made it reproducible
only for a night owl, as the timeframe lays between UTC '00:00-01:00'.

PHP8.1.0RC6 included a regression bugfix which introduced another bug,
which leads to inconsinstent calculation behaviour for using 'diff()'
method of '\DateTime' or '\DateTimeImmutable', if timezone switches are
needed and there are the first hour leap (or two hour in summer time).
This is already fixed in PHP8.1.0 release.

As we do not really need that 1 hour leap calculation here, we are able
to tighten the test setup here and calculate the needed dynamic period
in way to work around this bug for PHP8.1.0RC6, be backwards compatible
and also being safe for 8.1.0 release.

PHP regression fix introduced new bug (8.1.0RC6):

PHP bugfix released with 8.1.0:

This patch uses '00:00:00' for the time part of both dates and further
uses 'UTC' timezone enforcement to calculate the period time, which
stabilizes this testcase and lets night owls do their stuff undisturbed.

Resolves: #96128
Releases: master, 11.5
Change-Id: Ib1f4201ce8556ae8f22eeb4463732c62394e3c14

Reviewed-by: Stephan Großberndt's avatarStephan Großberndt <>
Reviewed-by: Benni Mack's avatarBenni Mack <>
Reviewed-by: Christian Kuhn's avatarChristian Kuhn <>
Tested-by: Benni Mack's avatarBenni Mack <>
Tested-by: core-ci's avatarcore-ci <>
Tested-by: Christian Kuhn's avatarChristian Kuhn <>
parent ebbde86c
......@@ -48,11 +48,12 @@ class CleanerTaskTest extends FunctionalTestCase
$this->importCSVDataSet(__DIR__ . '/DataSet/Fixtures/pages.csv');
$subject = new CleanerTask();
$utcTimeZone = new \DateTimeZone('UTC');
// this is when the test was created. One of the fixtures (uid 4) has this date
$creationDate = date_create_immutable_from_format('d.m.Y', '28.09.2020')->setTime(0, 0, 0);
$creationDate = date_create_immutable_from_format('Y-m-d H:i:s', '2020-09-28 00:00:00', $utcTimeZone);
// we want to set the period in a way that older records get deleted, but not the one created today
$difference = $creationDate->diff(new \DateTime(), true);
$difference = $creationDate->diff(new \DateTime('today', $utcTimeZone), true);
// let's set the amount of days one higher than the reference date
$period = (int)$difference->format('%a') + 1;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment