[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