[pve-devel] [PATCH common 3/3] tests: update to utc flag and add daylight savings test
Wolfgang Bumiller
w.bumiller at proxmox.com
Wed Oct 31 10:54:18 CET 2018
Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
---
test/calendar_event_test.pl | 35 +++++++++++++++++++++++++++++++++--
1 file changed, 33 insertions(+), 2 deletions(-)
diff --git a/test/calendar_event_test.pl b/test/calendar_event_test.pl
index 0defafa..abbd74c 100755
--- a/test/calendar_event_test.pl
+++ b/test/calendar_event_test.pl
@@ -3,12 +3,17 @@
use lib '../src';
use strict;
use warnings;
+use POSIX ();
use Data::Dumper;
use Time::Local;
use Test::More;
use PVE::CalendarEvent;
+# Time tests should run in a controlled setting
+$ENV{TZ} = 'UTC';
+POSIX::tzset();
+
my $alldays = [0,1,2,3,4,5,6];
my $tests = [
[
@@ -183,6 +188,7 @@ foreach my $test (@$tests) {
my $timespec;
eval { $timespec = PVE::CalendarEvent::parse_calendar_event($t); };
my $err = $@;
+ delete $timespec->{utc};
if ($expect->{error}) {
chomp $err if $err;
@@ -197,11 +203,36 @@ foreach my $test (@$tests) {
foreach my $nt (@$nextsync) {
my ($last, $expect_next) = @$nt;
-
my $msg = "next event '$t' $last => ${expect_next}";
- my $next = PVE::CalendarEvent::compute_next_event($timespec, $last, 1);
+ $timespec->{utc} = 1;
+ my $next = PVE::CalendarEvent::compute_next_event($timespec, $last);
is($next, $expect_next, $msg);
}
};
+sub tztest {
+ my ($calspec, $last) = @_;
+ my $spec = PVE::CalendarEvent::parse_calendar_event($calspec);
+ return PVE::CalendarEvent::compute_next_event($spec, $last);
+}
+
+# Test loop termination at CEST/CET switch (cannot happen here in UTC)
+is(tztest('mon..fri', timelocal(0, 0, 0, 28, 9, 2018)),
+ timelocal(0, 0, 0, 29, 9, 2018));
+is(tztest('mon..fri UTC', timelocal(0, 0, 0, 28, 9, 2018)),
+ timelocal(0, 0, 0, 29, 9, 2018));
+
+# Now in the affected time zone
+$ENV{TZ} = ':Europe/Vienna';
+POSIX::tzset();
+is(tztest('mon..fri', timelocal(0, 0, 0, 28, 9, 2018)),
+ timelocal(0, 0, 0, 29, 9, 2018));
+# Specifically requesting UTC in the calendar spec means the resulting output
+# time as seen locally (timelocal() as opposed to timegm()) is shifted by 1
+# hour.
+is(tztest('mon..fri UTC', timelocal(0, 0, 0, 28, 9, 2018)),
+ timelocal(0, 0, 1, 29, 9, 2018));
+$ENV{TZ} = 'UTC';
+POSIX::tzset();
+
done_testing();
--
2.11.0
More information about the pve-devel
mailing list