mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
MINOR: test doesn't fail anymore due to time differences between db and php. The test now issues notices, warnings and errors depending on the severity of the offset
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@113933 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
febcc15c3a
commit
1fb51c6c5d
@ -1,19 +1,27 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
class DbDatetimeTest extends FunctionalTest {
|
class DbDatetimeTest extends FunctionalTest {
|
||||||
|
|
||||||
static $fixture_file = 'sapphire/tests/model/DbDatetimeTest.yml';
|
static $fixture_file = 'sapphire/tests/model/DbDatetimeTest.yml';
|
||||||
|
|
||||||
|
private static $offset = 0; // number of seconds of php and db time are out of sync
|
||||||
|
private static $offset_thresholds = array( // throw an error if the offset exceeds 30 minutes
|
||||||
|
E_USER_ERROR => 1800,
|
||||||
|
E_USER_WARNING => 60,
|
||||||
|
E_USER_NOTICE => 5,
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if dates match more or less. This takes into the account the db query
|
* Check if dates match more or less. This takes into the account the db query
|
||||||
* can overflow to the next second giving offset readings.
|
* can overflow to the next second giving offset readings.
|
||||||
*/
|
*/
|
||||||
private function matchesRoughly($date1, $date2, $comment = '') {
|
private function matchesRoughly($date1, $date2, $comment = '') {
|
||||||
$allowedDifference = 15; // seconds
|
$allowedDifference = 5 + abs(self::$offset); // seconds
|
||||||
|
|
||||||
$time1 = is_numeric($date1) ? $date1 : strtotime($date1);
|
$time1 = is_numeric($date1) ? $date1 : strtotime($date1);
|
||||||
$time2 = is_numeric($date2) ? $date2 : strtotime($date2);
|
$time2 = is_numeric($date2) ? $date2 : strtotime($date2);
|
||||||
|
|
||||||
$this->assertTrue(abs($time1-$time2)<$allowedDifference, $comment . " ($date1, $date2)");
|
$this->assertTrue(abs($time1-$time2)<$allowedDifference, $comment . " (times differ by " . abs($time1-$time2) . " seconds)");
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getDbNow() {
|
private function getDbNow() {
|
||||||
@ -21,6 +29,18 @@ class DbDatetimeTest extends FunctionalTest {
|
|||||||
return DB::query($query)->value();
|
return DB::query($query)->value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setUpOnce() {
|
||||||
|
parent::setUpOnce();
|
||||||
|
|
||||||
|
self::$offset = time() - strtotime(DB::query('SELECT ' . DB::getConn()->now())->value());
|
||||||
|
foreach(self::$offset_thresholds as $code => $offset) {
|
||||||
|
if(abs(self::$offset) > $offset) {
|
||||||
|
trigger_error('The time of the databse is out of sync with the webserver by ' . abs(self::$offset) . ' seconds.', $code);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function setUp() {
|
function setUp() {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
$this->adapter = DB::getConn();
|
$this->adapter = DB::getConn();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user