2021-02-01 15:06:51 +08:00
|
|
|
#! /usr/bin/perl -w
|
|
|
|
# Test all the possible combination of options
|
|
|
|
|
2022-03-19 21:13:23 +08:00
|
|
|
# Copyright (c) 2005-2022 imacat.
|
2021-02-06 19:37:28 +08:00
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
# You may obtain a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
# limitations under the License.
|
2021-02-01 15:06:51 +08:00
|
|
|
|
|
|
|
# This file is combined from 01-plain.t, 02-gzip.t and 03-bzip2.t.
|
|
|
|
|
|
|
|
use 5.005;
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
use diagnostics;
|
|
|
|
use Test;
|
|
|
|
|
2022-03-19 21:13:23 +08:00
|
|
|
BEGIN { plan tests => 1788 }
|
2021-02-01 15:06:51 +08:00
|
|
|
|
|
|
|
use File::Basename qw(basename);
|
|
|
|
use File::Path qw(mkpath rmtree);
|
|
|
|
use File::Spec::Functions qw(catdir catfile updir devnull);
|
|
|
|
use FindBin;
|
|
|
|
use lib $FindBin::Bin;
|
|
|
|
use _helper;
|
2021-02-06 19:37:28 +08:00
|
|
|
our ($WORKDIR, $tno, $reslog);
|
2021-02-01 15:06:51 +08:00
|
|
|
|
|
|
|
$WORKDIR = catdir($FindBin::Bin, "logs");
|
|
|
|
$tno = 0;
|
|
|
|
$reslog = catfile($FindBin::Bin, updir, "blib", "script", "reslog");
|
|
|
|
|
|
|
|
# Test each source log file type
|
2021-02-06 19:37:28 +08:00
|
|
|
foreach my $st (@SOURCE_TYPES) {
|
2021-02-01 15:06:51 +08:00
|
|
|
# Test each source file content type
|
2021-02-06 19:37:28 +08:00
|
|
|
foreach my $sct (@CONTENT_TYPES) {
|
|
|
|
# Test each keep mode
|
|
|
|
foreach my $keep (@KEEP_MODES) {
|
|
|
|
# Test each override mode
|
|
|
|
foreach my $override (@OVERRIDE_MODES) {
|
2021-02-01 15:06:51 +08:00
|
|
|
# Test each existing file content type
|
|
|
|
my @ecnttypes;
|
2021-02-06 19:37:28 +08:00
|
|
|
if (!$$override{"exists"}) {
|
2021-02-01 15:06:51 +08:00
|
|
|
# Existing file content type is meaningless
|
|
|
|
# if there is no existing file.
|
|
|
|
@ecnttypes = (1);
|
|
|
|
} else {
|
2021-02-06 19:37:28 +08:00
|
|
|
# make_resolved_log_file() does not make a difference than
|
|
|
|
# make_log_file() as an existing file.
|
|
|
|
@ecnttypes = grep $$_{"title"} ne "resolved log file",
|
|
|
|
@CONTENT_TYPES;
|
2021-02-01 15:06:51 +08:00
|
|
|
}
|
|
|
|
foreach my $ect (@ecnttypes) {
|
|
|
|
# Test each suffix type
|
2021-02-06 19:37:28 +08:00
|
|
|
foreach my $suffix (@SUFFICES) {
|
2021-02-01 15:06:51 +08:00
|
|
|
# Test each trim-suffix type
|
2021-02-06 19:37:28 +08:00
|
|
|
foreach my $trim_suffix (@TRIM_SUFFIX) {
|
2021-02-01 15:06:51 +08:00
|
|
|
$_ = eval {
|
|
|
|
return if $$st{"skip"};
|
2021-02-06 19:37:28 +08:00
|
|
|
my ($title, $cmd, $ret_no, $out, $err, $logfile);
|
2021-02-01 15:06:51 +08:00
|
|
|
my ($fr, $frb, @fle, $fle, $flr, %cef, %crf, %tef, %trf);
|
2021-02-06 19:37:28 +08:00
|
|
|
my ($fs, $fo, $cs, $csr, $co, $suf, $trim_suf);
|
2021-02-01 15:06:51 +08:00
|
|
|
rmtree $WORKDIR;
|
|
|
|
mkpath $WORKDIR;
|
|
|
|
$title = join ", ", $$st{"title"}, $$sct{"title"},
|
2021-02-06 19:37:28 +08:00
|
|
|
$$keep{"title"}, $$override{"title"},
|
|
|
|
$$suffix{"title"}, $$trim_suffix{"title"};
|
|
|
|
$logfile = random_word;
|
|
|
|
$suf = defined $$suffix{"suf"}? $$suffix{"suf"}: "." . random_word;
|
|
|
|
if (defined $$trim_suffix{"suf"}) {
|
|
|
|
$trim_suf = $$trim_suffix{"suf"};
|
2021-02-01 15:06:51 +08:00
|
|
|
} else {
|
2021-02-06 19:37:28 +08:00
|
|
|
do { $trim_suf = "." . random_word; } until $trim_suf ne $suf;
|
2021-02-01 15:06:51 +08:00
|
|
|
}
|
2021-02-06 19:37:28 +08:00
|
|
|
$fs = catfile($WORKDIR, "$logfile$trim_suf" . $$st{"suf"});
|
2021-02-01 15:06:51 +08:00
|
|
|
($cs, $csr) = &{$$sct{"sub"}}($fs);
|
2021-02-06 19:37:28 +08:00
|
|
|
if ($$override{"exists"}) {
|
2021-02-01 15:06:51 +08:00
|
|
|
$fo = catfile($WORKDIR, "$logfile$suf" . $$st{"suf"});
|
|
|
|
$co = (&{$$ect{"sub"}}($fo))[0];
|
|
|
|
}
|
|
|
|
@fle = qw();
|
2021-02-06 19:37:28 +08:00
|
|
|
push @fle, basename($fs) if !($$override{"ok"} && $$keep{"del"});
|
|
|
|
if ($$override{"ok"}) {
|
2021-02-01 15:06:51 +08:00
|
|
|
push @fle, "$logfile$suf" . $$st{"suf"};
|
|
|
|
} else {
|
2021-02-06 19:37:28 +08:00
|
|
|
push @fle, basename($fo) if !$$keep{"del"} || $$override{"exists"};
|
2021-02-01 15:06:51 +08:00
|
|
|
}
|
2021-02-06 19:37:28 +08:00
|
|
|
preserve_source $WORKDIR;
|
|
|
|
@_ = ($reslog, qw(-d -d -d -n 1), @{$$keep{"opts"}},
|
|
|
|
@{$$override{"opts"}}, &{$$suffix{"opts"}}($suf),
|
|
|
|
&{$$trim_suffix{"opts"}}($trim_suf), $fs);
|
2021-02-01 15:06:51 +08:00
|
|
|
$cmd = join " ", @_;
|
2021-02-06 19:37:28 +08:00
|
|
|
($ret_no, $out, $err) = run_cmd "", @_;
|
|
|
|
($fle, $flr) = (join(" ", sort @fle), list_files $WORKDIR);
|
2021-02-01 15:06:51 +08:00
|
|
|
%cef = qw(); # Expected content by file
|
|
|
|
%tef = qw(); # Expected file type by file
|
|
|
|
%crf = qw(); # Resulted content by file
|
|
|
|
%trf = qw(); # Resulted file type by file
|
2021-02-06 19:37:28 +08:00
|
|
|
if (!($$override{"ok"} && $$keep{"del"})) {
|
2021-02-01 15:06:51 +08:00
|
|
|
$fr = $fs;
|
|
|
|
$frb = basename($fr);
|
2021-02-06 19:37:28 +08:00
|
|
|
$cef{$frb} = $$keep{"keep"} || !$$override{"ok"}? $cs: "";
|
2021-02-01 15:06:51 +08:00
|
|
|
$tef{$frb} = $$st{"type"};
|
2021-02-06 19:37:28 +08:00
|
|
|
($crf{$frb}, $trf{$frb}) = (read_file $fr, file_type $fr);
|
2021-02-01 15:06:51 +08:00
|
|
|
}
|
2021-02-06 19:37:28 +08:00
|
|
|
if ($$override{"ok"} || $$override{"exists"}) {
|
2021-02-01 15:06:51 +08:00
|
|
|
$frb = "$logfile$suf" . $$st{"suf"};
|
|
|
|
$fr = catfile($WORKDIR, $frb);
|
2021-02-06 19:37:28 +08:00
|
|
|
$cef{$frb} = &{$$override{"ce"}}($co, $csr);
|
2021-02-01 15:06:51 +08:00
|
|
|
$tef{$frb} = $$st{"type"};
|
2021-02-06 19:37:28 +08:00
|
|
|
($crf{$frb}, $trf{$frb}) = (read_file $fr, file_type $fr);
|
2021-02-01 15:06:51 +08:00
|
|
|
}
|
|
|
|
die "$title\n$cmd\n$out$err"
|
2021-02-06 19:37:28 +08:00
|
|
|
unless $$override{"ok"}? $ret_no == 0: $ret_no != 0;
|
2021-02-01 15:06:51 +08:00
|
|
|
die "$title\n$cmd\nresult files incorrect.\nGot: $flr\nExpected: $fle\nOutput:\n$out$err"
|
|
|
|
unless $flr eq $fle;
|
|
|
|
foreach $fr (@fle) {
|
|
|
|
die "$title\n$cmd\n$fr: result type incorrect.\nGot: $trf{$fr}\nExpected: $tef{$fr}\nOutput:\n$out$err"
|
2021-02-06 19:37:28 +08:00
|
|
|
unless has_no_file || $trf{$fr} eq $tef{$fr}
|
2021-02-01 15:06:51 +08:00
|
|
|
|| ($tef{$fr} eq TYPE_BZIP2 && -z catfile($WORKDIR, $fr));
|
|
|
|
die "$title\n$cmd\n$fr: result incorrect.\nGot:\n$crf{$fr}\nExpected:\n$cef{$fr}\nOutput:\n$out$err"
|
|
|
|
unless $crf{$fr} eq $cef{$fr};
|
|
|
|
}
|
|
|
|
1;
|
|
|
|
};
|
|
|
|
skip($$st{"skip"}, $_, 1, $@);
|
2021-02-06 19:37:28 +08:00
|
|
|
clean_up $_ || $$st{"skip"}, $WORKDIR, ++$tno;
|
2021-02-01 15:06:51 +08:00
|
|
|
die unless $_ || $$st{"skip"};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-02-06 19:37:28 +08:00
|
|
|
|
2021-02-01 15:06:51 +08:00
|
|
|
# 37: From file to STDOUT
|
|
|
|
$_ = eval {
|
|
|
|
return if $$st{"skip"};
|
2021-02-06 19:37:28 +08:00
|
|
|
my ($title, $cmd, $ret_no, $out, $err, $logfile, $result);
|
2021-02-01 15:06:51 +08:00
|
|
|
my ($fr, $frb, @fle, $fle, $flr, %cef, %crf, %tef, %trf);
|
2021-02-06 19:37:28 +08:00
|
|
|
my ($fs, $cs, $csr);
|
2021-02-01 15:06:51 +08:00
|
|
|
rmtree $WORKDIR;
|
|
|
|
mkpath $WORKDIR;
|
|
|
|
$title = join ", ", "From file to STDOUT", $$sct{"title"},
|
2021-02-06 19:37:28 +08:00
|
|
|
$$st{"title"}, $$keep{"title"};
|
|
|
|
$logfile = random_word;
|
|
|
|
do { $result = random_word; } until $result ne $logfile;
|
2021-02-01 15:06:51 +08:00
|
|
|
$fs = catfile($WORKDIR, "$logfile" . $$st{"suf"});
|
|
|
|
($cs, $csr) = &{$$sct{"sub"}}($fs);
|
|
|
|
@fle = qw();
|
2021-02-06 19:37:28 +08:00
|
|
|
push @fle, basename($fs) if !$$keep{"cdel"};
|
2021-02-01 15:06:51 +08:00
|
|
|
push @fle, $result . $$st{"suf"};
|
2021-02-06 19:37:28 +08:00
|
|
|
preserve_source $WORKDIR;
|
|
|
|
@_ = ($reslog, qw(-d -d -d -n 1 -c), @{$$keep{"opts"}}, $fs);
|
2021-02-01 15:06:51 +08:00
|
|
|
$cmd = join " ", @_;
|
2021-02-06 19:37:28 +08:00
|
|
|
($ret_no, $out, $err) = run_cmd "", @_;
|
|
|
|
write_raw_file(catfile($WORKDIR, $result . $$st{"suf"}), $out);
|
|
|
|
($fle, $flr) = (join(" ", sort @fle), list_files $WORKDIR);
|
2021-02-01 15:06:51 +08:00
|
|
|
%cef = qw(); # Expected content by file
|
|
|
|
%tef = qw(); # Expected file type by file
|
|
|
|
%crf = qw(); # Resulted content by file
|
|
|
|
%trf = qw(); # Resulted file type by file
|
2021-02-06 19:37:28 +08:00
|
|
|
if (!$$keep{"cdel"}) {
|
2021-02-01 15:06:51 +08:00
|
|
|
$fr = $fs;
|
|
|
|
$frb = basename($fr);
|
2021-02-06 19:37:28 +08:00
|
|
|
$cef{$frb} = $$keep{"ckeep"}? $cs: "";
|
2021-02-01 15:06:51 +08:00
|
|
|
$tef{$frb} = $$st{"type"};
|
2021-02-06 19:37:28 +08:00
|
|
|
($crf{$frb}, $trf{$frb}) = (read_file $fr, file_type $fr);
|
2021-02-01 15:06:51 +08:00
|
|
|
}
|
|
|
|
$frb = $result . $$st{"suf"};
|
|
|
|
$fr = catfile($WORKDIR, $frb);
|
|
|
|
($cef{$frb}, $tef{$frb}) = ($csr, $$st{"type"});
|
2021-02-06 19:37:28 +08:00
|
|
|
($crf{$frb}, $trf{$frb}) = (read_file $fr, file_type $fr);
|
|
|
|
die "$title\n$cmd\n$out$err" unless $ret_no == 0;
|
2021-02-01 15:06:51 +08:00
|
|
|
die "$title\n$cmd\nresult files incorrect.\nGot: $flr\nExpected: $fle\nOutput:\n$out$err"
|
|
|
|
unless $flr eq $fle;
|
|
|
|
foreach $fr (@fle) {
|
|
|
|
die "$title\n$cmd\n$fr: result type incorrect.\nGot: $trf{$fr}\nExpected: $tef{$fr}\nOutput:\n$out$err"
|
2021-02-06 19:37:28 +08:00
|
|
|
unless has_no_file || $trf{$fr} eq $tef{$fr}
|
2021-02-01 15:06:51 +08:00
|
|
|
|| ($tef{$fr} eq TYPE_BZIP2 && -z catfile($WORKDIR, $fr));
|
|
|
|
die "$title\n$cmd\n$fr: result incorrect.\nGot:\n$crf{$fr}\nExpected:\n$cef{$fr}\nOutput:\n$out$err"
|
|
|
|
unless $crf{$fr} eq $cef{$fr};
|
|
|
|
}
|
|
|
|
1;
|
|
|
|
};
|
|
|
|
skip($$st{"skip"}, $_, 1, $@);
|
2021-02-06 19:37:28 +08:00
|
|
|
clean_up $_ || $$st{"skip"}, $WORKDIR, ++$tno;
|
2021-02-01 15:06:51 +08:00
|
|
|
die unless $_ || $$st{"skip"};
|
|
|
|
}
|
2021-02-06 19:37:28 +08:00
|
|
|
|
2022-03-19 21:13:23 +08:00
|
|
|
# 149: From STDIN to STDOUT
|
2021-02-01 15:06:51 +08:00
|
|
|
$_ = eval {
|
|
|
|
return if $$st{"skip"};
|
2021-02-06 19:37:28 +08:00
|
|
|
my ($title, $cmd, $ret_no, $out, $err, $logfile, $result);
|
2021-02-01 15:06:51 +08:00
|
|
|
my ($fr, $frb, @fle, $fle, $flr, %cef, %crf, %tef, %trf);
|
2021-02-06 19:37:28 +08:00
|
|
|
my ($fs, $cs, $csr);
|
2021-02-01 15:06:51 +08:00
|
|
|
rmtree $WORKDIR;
|
|
|
|
mkpath $WORKDIR;
|
|
|
|
$title = join ", ", "From STDIN to STDOUT", $$sct{"title"},
|
|
|
|
$$st{"title"};
|
2021-02-06 19:37:28 +08:00
|
|
|
$logfile = random_word;
|
|
|
|
do { $result = random_word; } until $result ne $logfile;
|
2021-02-01 15:06:51 +08:00
|
|
|
$fs = catfile($WORKDIR, "$logfile" . $$st{"suf"});
|
|
|
|
($cs, $csr) = &{$$sct{"sub"}}($fs);
|
|
|
|
@fle = qw();
|
|
|
|
push @fle, basename($fs);
|
|
|
|
push @fle, $result . $$st{"suf"};
|
2021-02-06 19:37:28 +08:00
|
|
|
preserve_source $WORKDIR;
|
2021-02-01 15:06:51 +08:00
|
|
|
@_ = ($reslog, qw(-d -d -d -n 1));
|
|
|
|
$cmd = join(" ", @_) . " < $fs";
|
2021-02-06 19:37:28 +08:00
|
|
|
($ret_no, $out, $err) = run_cmd read_raw_file $fs, @_;
|
|
|
|
write_raw_file(catfile($WORKDIR, $result . $$st{"suf"}), $out);
|
|
|
|
($fle, $flr) = (join(" ", sort @fle), list_files $WORKDIR);
|
2021-02-01 15:06:51 +08:00
|
|
|
%cef = qw(); # Expected content by file
|
|
|
|
%tef = qw(); # Expected file type by file
|
|
|
|
%crf = qw(); # Resulted content by file
|
|
|
|
%trf = qw(); # Resulted file type by file
|
|
|
|
$fr = $fs;
|
|
|
|
$frb = basename($fr);
|
|
|
|
$cef{$frb} = $cs;
|
|
|
|
$tef{$frb} = $$st{"type"};
|
2021-02-06 19:37:28 +08:00
|
|
|
($crf{$frb}, $trf{$frb}) = (read_file $fr, file_type $fr);
|
2021-02-01 15:06:51 +08:00
|
|
|
$frb = $result . $$st{"suf"};
|
|
|
|
$fr = catfile($WORKDIR, $frb);
|
|
|
|
($cef{$frb}, $tef{$frb}) = ($csr, $$st{"type"});
|
2021-02-06 19:37:28 +08:00
|
|
|
($crf{$frb}, $trf{$frb}) = (read_file $fr, file_type $fr);
|
|
|
|
die "$title\n$cmd\n$out$err" unless $ret_no == 0;
|
2021-02-01 15:06:51 +08:00
|
|
|
die "$title\n$cmd\nresult files incorrect.\nGot: $flr\nExpected: $fle\nOutput:\n$out$err"
|
|
|
|
unless $flr eq $fle;
|
|
|
|
foreach $fr (@fle) {
|
|
|
|
die "$title\n$cmd\n$fr: result type incorrect.\nGot: $trf{$fr}\nExpected: $tef{$fr}\nOutput:\n$out$err"
|
2021-02-06 19:37:28 +08:00
|
|
|
unless has_no_file || $trf{$fr} eq $tef{$fr}
|
2021-02-01 15:06:51 +08:00
|
|
|
|| ($tef{$fr} eq TYPE_BZIP2 && -z catfile($WORKDIR, $fr));
|
|
|
|
die "$title\n$cmd\n$fr: result incorrect.\nGot:\n$crf{$fr}\nExpected:\n$cef{$fr}\nOutput:\n$out$err"
|
|
|
|
unless $crf{$fr} eq $cef{$fr};
|
|
|
|
}
|
|
|
|
1;
|
|
|
|
};
|
|
|
|
skip($$st{"skip"}, $_, 1, $@);
|
2021-02-06 19:37:28 +08:00
|
|
|
clean_up $_ || $$st{"skip"}, $WORKDIR, ++$tno;
|
2021-02-01 15:06:51 +08:00
|
|
|
die unless $_ || $$st{"skip"};
|
|
|
|
}
|
|
|
|
}
|