1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #!/usr/bin/perl
- =pod
- Tests to verify that the provided modifications to timezone formats produce
- the correct results. The first set of tests verify the fixTzstr subroutine
- converts the quoted values to something that won't make FreeSWITCH default to
- UTC.
- The second set of tests confirms that those timezone changes actually produce
- the correct timestamps.
- Make sure FreeSWITCH already has already loaded the timezones.conf.xml that you
- want to test.
- To run tests:
- TIMEZONES_XML_PATH=path/to/timezones.conf.xml prove tests.pl
- =cut
- use strict;
- use warnings;
- use Test::More;
- use ESL;
- use XML::LibXML::Reader;
- require "./fix-tzstr.pl";
- use Env qw(TIMEZONES_XML_PATH);
- die "The TIMEZONES_XML_PATH environment variable must be set to test timezones." unless ( defined($TIMEZONES_XML_PATH) );
- ok( fixTzstr("<-02>2", "doesntmatterhere") eq "STD2" );
- ok( fixTzstr("EST5EDT,M3.2.0,M11.1.0", "US/Eastern") eq "EST5EDT,M3.2.0,M11.1.0" );
- ok( fixTzstr("<+11>-11", "GMT-11") eq "GMT-11" );
- ok( fixTzstr("<-02>2<-01>,M3.5.0/-1,M10.5.0/0", "America/Godthab") eq "STD2DST,M3.5.0/-1,M10.5.0/0" );
- my $test_count = 4;
- my $tz_fmt = "%Y-%m-%d %H:%M:%S";
- my $c = new ESL::ESLconnection("127.0.0.1", "8021", "ClueCon");
- $c->api("reloadxml")->getBody();
- my $epoch = $c->api("strepoch")->getBody();
- run_tests($epoch);
- run_tests("1699613236"); # testing DST, add more epochs as needed
- sub run_tests {
- my $epoch = shift;
- my $reader = XML::LibXML::Reader->new(location => $TIMEZONES_XML_PATH);
- while ($reader->read) {
- my $tag = $reader;
- if ( $tag->name eq "zone" && $tag->hasAttributes() ) {
- my $zn = $tag->getAttribute("name");
- my $cmd = `TZ='$zn' date +'$tz_fmt' --date='\@$epoch'`;
- my $sys_time = $cmd =~ s/\n//r;
- my $fs_time = $c->api("strftime_tz $zn $epoch|$tz_fmt")->getBody();
- ok ( $sys_time eq $fs_time, $zn ) or diag(
- " (sys) $sys_time\t(fs) $fs_time"
- );
- $test_count++;
- }
- }
- }
- done_testing($test_count);
|