Cron.pm: wip
git-svn-id: https://svn.fhem.de/fhem/trunk@27882 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -22,11 +22,11 @@ my $test = [
|
|||||||
# [q(RULE4 logic '$cron_text'), '* * * * 1,&2', 0, 0, qr(^$)],
|
# [q(RULE4 logic '$cron_text'), '* * * * 1,&2', 0, 0, qr(^$)],
|
||||||
# [q(validate date '$cron_text'), '* * 30 2 *', 0, 0, qr(^$)],
|
# [q(validate date '$cron_text'), '* * 30 2 *', 0, 0, qr(^$)],
|
||||||
|
|
||||||
# # positive tests for minute
|
# positive tests for minute
|
||||||
[q(accept '$cron_text'), '* * * * *', qr(^$), 20230101000000, 20230101000100],
|
[q(handle '$cron_text'), '1 * * * *', qr(^$), sub {my @r = (20230101000000); for my $h (0..23) {for my $m (1) {push @r, sprintf('20230101%02d%02d00', $h, $m)}}; @r}->()],
|
||||||
[q(accept '$cron_text'), '1 * * * *', qr(^$), 20230101000000, 20230101000100],
|
[q(handle '$cron_text'), '1-5 * * * *', qr(^$), sub {my @r = (20230101000000); for my $h (0..23) {for my $m (1..5) {push @r, sprintf('20230101%02d%02d00', $h, $m)}}; @r}->()],
|
||||||
# [q(accept '$cron_text'), '1-5 * * * *', 0, 0, qr(^$)],
|
[q(handle '$cron_text'), '1-5/1 * * * *', qr(^$), sub {my @r = (20230101000000); for my $h (0..23) {for my $m (1..5) {push @r, sprintf('20230101%02d%02d00', $h, $m)}}; @r}->()],
|
||||||
# [q(accept '$cron_text'), '1-5/1 * * * *', 0, 0, qr(^$)],
|
[q(handle '$cron_text'), '1-5/2 * * * *', qr(^$), sub {my @r = (20230101000000); for my $h (0..23) {for my $m (1,3,5) {push @r, sprintf('20230101%02d%02d00', $h, $m)}}; @r}->()],
|
||||||
# [q(accept '$cron_text'), '*/1 * * * *', 0, 0, qr(^$)],
|
# [q(accept '$cron_text'), '*/1 * * * *', 0, 0, qr(^$)],
|
||||||
# # positive tests for minute / value range
|
# # positive tests for minute / value range
|
||||||
# [q(accept '$cron_text'), '0 * * * *', 0, join (',', ((20200101120000 .. 20200101120059 ), (20200101120100 .. 20200101120159 ))), qr(^$)],
|
# [q(accept '$cron_text'), '0 * * * *', 0, join (',', ((20200101120000 .. 20200101120059 ), (20200101120100 .. 20200101120159 ))), qr(^$)],
|
||||||
@@ -51,27 +51,33 @@ my $test = [
|
|||||||
# [q(must throw an error '$cron_text'), '0-59/60 * * * *', 0, 0, qr(^syntax error in minute item:)],
|
# [q(must throw an error '$cron_text'), '0-59/60 * * * *', 0, 0, qr(^syntax error in minute item:)],
|
||||||
# [q(must throw an error '$cron_text'), '20~10 * * * *', 0, 0, qr(^syntax error in minute item:)],
|
# [q(must throw an error '$cron_text'), '20~10 * * * *', 0, 0, qr(^syntax error in minute item:)],
|
||||||
# # negative tests for minute / value range
|
# # negative tests for minute / value range
|
||||||
|
|
||||||
|
# time series
|
||||||
|
[q(Timeseries '$cron_text'), '0 12 3,4,5 2 0,2,3,4', qr(^$), 20230102150000, 20230201120000, 20230202120000, 20230203120000, 20230204120000],
|
||||||
|
[q(Feb-29 & Sunday '$cron_text'), '0 12 29 2 &7', qr(^$), 20230102150000, 20320229120000],
|
||||||
];
|
];
|
||||||
|
|
||||||
# print join ",", (20200101120000 .. 20200101120010 ), (20200101120100 .. 20200101120110 );
|
# print join ",", (20200101120000 .. 20200101120010 ), (20200101120100 .. 20200101120110 );
|
||||||
# print "\n";
|
# print "\n";
|
||||||
|
|
||||||
# my $cron_lib_loadable = eval{use FHEM::Scheduler::Cron;1;};
|
my $cron_lib_loadable = eval{use FHEM::Scheduler::Cron;1;};
|
||||||
# ok($cron_lib_loadable, "FHEM::Scheduler::Cron loaded");
|
ok($cron_lib_loadable, "FHEM::Scheduler::Cron loaded");
|
||||||
|
|
||||||
foreach my $test (@$test) {
|
foreach my $t (@$test) {
|
||||||
my ($desc, $cron_text, $err_expected, @series) = @$test;
|
my ($desc, $cron_text, $err_expected, @series) = @$t;
|
||||||
my ($cron_obj, $err) = FHEM::Scheduler::Cron->new($cron_text);
|
my ($cron_obj, $err) = FHEM::Scheduler::Cron->new($cron_text);
|
||||||
my $ok = 1;
|
my $ok = 1;
|
||||||
|
my $count = 0;
|
||||||
|
|
||||||
for my $iter (0 .. $#series -1) {
|
for my $iter (0 .. $#series -1) {
|
||||||
# next unless ($series[$iter]);
|
# next unless ($series[$iter]);
|
||||||
my $got = $cron_obj->next($series[$iter]);
|
my $got = $cron_obj->next($series[$iter]);
|
||||||
|
$count++;
|
||||||
$ok = 0 if ($got ne $series[$iter +1]);
|
$ok = 0 if ($got ne $series[$iter +1]);
|
||||||
say sprintf('%s -> expected: %s, got: %s', ($got ne $series[$iter +1])?'not ok':'ok', $series[$iter +1], $got) if $ENV{EXTENDED_DEBUG};
|
say sprintf('%s -> expected: %s, got: %s', ($got ne $series[$iter +1])?'not ok':'ok', $series[$iter +1], $got) if $ENV{EXTENDED_DEBUG};
|
||||||
}
|
}
|
||||||
$ok &&= ($err // '' =~ /$err_expected/);
|
$ok &&= ($err // '' =~ /$err_expected/);
|
||||||
ok($ok, sprintf('%s %s', eval qq{"$desc"} , $err?"(got '$err')":''));
|
ok($ok, sprintf('%s %s', eval qq{"$desc"} , $err?"(got '$err')":"(# of passes: $count)"));
|
||||||
};
|
};
|
||||||
|
|
||||||
done_testing;
|
done_testing;
|
||||||
|
|||||||
@@ -13,22 +13,25 @@ $ENV{EXTENDED_DEBUG} = 1;
|
|||||||
|
|
||||||
my $test = [
|
my $test = [
|
||||||
#[q(Timeseries '$cron_text'), '0 12 3,4,5 2 0,2,3,4', qr(^$), 20230102150000, 20230201120000, 20230202120000, 20230203120000, 20230204120000],
|
#[q(Timeseries '$cron_text'), '0 12 3,4,5 2 0,2,3,4', qr(^$), 20230102150000, 20230201120000, 20230202120000, 20230203120000, 20230204120000],
|
||||||
[q(Timeseries '$cron_text'), '0 12 29 2 &7', qr(^$), 20230102150000, 20320229120000],
|
#[q(Feb-29 & Sunday '$cron_text'), '0 12 29 2 &7', qr(^$), 20230102150000, 20320229120000, sub {20600229120000}->()],
|
||||||
|
[q(accept '$cron_text'), '1-5 * * * *', qr(^$), sub {my @r = (20230101000000); for my $h (0..23) {for my $m (1..5) {push @r, sprintf('20230101%02d%02d00', $h, $m)}}; @r}->()],
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach my $test (@$test) {
|
foreach my $t (@$test) {
|
||||||
my ($desc, $cron_text, $err_expected, @series) = @$test;
|
my ($desc, $cron_text, $err_expected, @series) = @$t;
|
||||||
my ($cron_obj, $err) = FHEM::Scheduler::Cron->new($cron_text);
|
my ($cron_obj, $err) = FHEM::Scheduler::Cron->new($cron_text);
|
||||||
my $ok = 1;
|
my $ok = 1;
|
||||||
|
my $count = 0;
|
||||||
|
|
||||||
for my $iter (0 .. $#series -1) {
|
for my $iter (0 .. $#series -1) {
|
||||||
# next unless ($series[$iter]);
|
# next unless ($series[$iter]);
|
||||||
my $got = $cron_obj->next($series[$iter]);
|
my $got = $cron_obj->next($series[$iter]);
|
||||||
|
$count++;
|
||||||
$ok = 0 if ($got ne $series[$iter +1]);
|
$ok = 0 if ($got ne $series[$iter +1]);
|
||||||
say sprintf('%s -> expected: %s, got: %s', ($got ne $series[$iter +1])?'not ok':'ok', $series[$iter +1], $got) if $ENV{EXTENDED_DEBUG};
|
say sprintf('%s -> expected: %s, got: %s', ($got ne $series[$iter +1])?'not ok':'ok', $series[$iter +1], $got) if $ENV{EXTENDED_DEBUG};
|
||||||
}
|
}
|
||||||
$ok &&= ($err // '' =~ /$err_expected/);
|
$ok &&= ($err // '' =~ /$err_expected/);
|
||||||
ok($ok, sprintf('%s %s', eval qq{"$desc"} , $err?"(got '$err')":''));
|
ok($ok, sprintf('%s %s', eval qq{"$desc"} , $err?"(got '$err')":"(# of passes: $count)"));
|
||||||
};
|
};
|
||||||
|
|
||||||
done_testing;
|
done_testing;
|
||||||
|
|||||||
Reference in New Issue
Block a user