tests: check script options work as expected

Options --flush and --timing remain unchecked, as I do not have an idea
how to check them reliably.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
Sami Kerola 2015-05-24 18:14:58 +01:00
parent d9f50441e1
commit 6a40c65f81
9 changed files with 127 additions and 2 deletions

View File

@ -9,6 +9,11 @@ endif
if HAVE_UTEMPTER
script_LDADD += -lutempter
endif
check_PROGRAMS += test_script
test_script_SOURCES = $(script_SOURCES)
test_script_LDADD = $(script_LDADD)
test_script_CFLAGS = -DTEST_SCRIPT $(logger_CFLAGS)
endif # BUILD_SCRIPT
if BUILD_SCRIPTREPLAY

View File

@ -123,6 +123,23 @@ sigset_t block_mask, unblock_mask;
int die;
int resized;
/*
* For tests we want to be able to control time output
*/
#ifdef TEST_SCRIPT
static inline time_t script_time(time_t *t)
{
const char *str = getenv("SCRIPT_TEST_SECOND_SINCE_EPOCH");
time_t sec;
if (str && sscanf(str, "%ld", &sec) == 1)
return sec;
return time(t);
}
#else /* !TEST_SCRIPT */
# define script_time(x) time(x)
#endif
static void
die_if_link(char *fn) {
struct stat s;
@ -446,7 +463,7 @@ dooutput(void) {
timingfd = fdopen(STDERR_FILENO, "w");
if (!qflg) {
time_t tvec = time((time_t *)NULL);
time_t tvec = script_time((time_t *)NULL);
my_strftime(obuf, sizeof obuf, "%c\n", localtime(&tvec));
fprintf(fscript, _("Script started on %s"), obuf);
}
@ -588,7 +605,7 @@ done(void) {
if (fscript) {
if (!qflg) {
char buf[BUFSIZ];
tvec = time((time_t *)NULL);
tvec = script_time((time_t *)NULL);
my_strftime(buf, sizeof buf, "%c\n", localtime(&tvec));
fprintf(fscript, _("\nScript done on %s"), buf);
}

View File

@ -25,6 +25,7 @@ TS_HELPER_MD5="$top_builddir/test_md5"
TS_HELPER_MORE=${TS_HELPER_MORE-"$top_builddir/test_more"}
TS_HELPER_PARTITIONS="$top_builddir/sample-partitions"
TS_HELPER_PATHS="$top_builddir/test_pathnames"
TS_HELPER_SCRIPT="$top_builddir/test_script"
TS_HELPER_SIGRECEIVE="$top_builddir/test_sigreceive"
TS_HELPER_STRUTILS="$top_builddir/test_strutils"
TS_HELPER_SYSINFO="$top_builddir/test_sysinfo"

View File

View File

@ -0,0 +1,8 @@
Script started on Sun May 24 17:43:18 2015
append1
Script done on Sun May 24 17:43:18 2015
Script started on Sun May 24 17:43:18 2015
append2
Script done on Sun May 24 17:43:18 2015

View File

@ -0,0 +1,14 @@
test_script: output file `typescript' is a link
Use --force if you really want to use it.
Program not started.
1
Script started on Sun May 24 17:43:18 2015
with force
Script done on Sun May 24 17:43:18 2015
0
Script started on Sun May 24 17:43:18 2015
not typescript
Script done on Sun May 24 17:43:18 2015
0

View File

@ -0,0 +1,4 @@
Script started on Sun May 24 17:43:18 2015
quiet1
Script started on Sun May 24 17:43:18 2015
quiet2

View File

@ -0,0 +1,16 @@
Script started on Sun May 24 17:43:18 2015
Script done on Sun May 24 17:43:18 2015
0
Script started on Sun May 24 17:43:18 2015
Script done on Sun May 24 17:43:18 2015
0
Script started on Sun May 24 17:43:18 2015
Script done on Sun May 24 17:43:18 2015
42
Script started on Sun May 24 17:43:18 2015
Script done on Sun May 24 17:43:18 2015
127

60
tests/ts/script/options Executable file
View File

@ -0,0 +1,60 @@
#!/bin/bash
# This file is part of util-linux.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
TS_TOPDIR="${0%/*}/../.."
TS_DESC="options"
. $TS_TOPDIR/functions.sh
ts_init "$*"
export SCRIPT_TEST_SECOND_SINCE_EPOCH=1432489398
export TZ="GMT"
ts_check_test_command "$TS_HELPER_SCRIPT"
ts_init_subtest "append"
$TS_HELPER_SCRIPT --command "echo append1" $TS_OUTPUT </dev/null >/dev/null 2>&1
$TS_HELPER_SCRIPT --append -c "echo append2" $TS_OUTPUT </dev/null >/dev/null 2>&1
ts_finalize_subtest
ts_init_subtest "force"
ln -s $TS_OUTPUT typescript
$TS_HELPER_SCRIPT --command "echo no force" </dev/null >/dev/null 2>> $TS_OUTPUT
echo $? >> $TS_OUTPUT
$TS_HELPER_SCRIPT -a --force --command "echo with force" </dev/null >/dev/null
echo $? >> $TS_OUTPUT
rm -f typescript
ln -s $TS_OUTPUT tpircsepyt
$TS_HELPER_SCRIPT -a --command "echo not typescript" tpircsepyt </dev/null >/dev/null
echo $? >> $TS_OUTPUT
rm -f tpircsepyt
ts_finalize_subtest
ts_init_subtest "quiet"
$TS_HELPER_SCRIPT --quiet --command "echo quiet1" $TS_OUTPUT </dev/null >/dev/null 2>&1
$TS_HELPER_SCRIPT -a -q --command "echo quiet2" $TS_OUTPUT </dev/null >/dev/null 2>&1
ts_finalize_subtest
ts_init_subtest "return"
$TS_HELPER_SCRIPT --command "exit 1" $TS_OUTPUT </dev/null >/dev/null 2>&1
echo $? >> $TS_OUTPUT
$TS_HELPER_SCRIPT -a --command "exit 0" $TS_OUTPUT </dev/null >/dev/null 2>&1
echo $? >> $TS_OUTPUT
$TS_HELPER_SCRIPT -e --append -c "exit 42" $TS_OUTPUT </dev/null >/dev/null 2>&1
echo $? >> $TS_OUTPUT
$TS_HELPER_SCRIPT --return --append -c "exit 127" $TS_OUTPUT </dev/null >/dev/null 2>&1
echo $? >> $TS_OUTPUT
ts_finalize_subtest
ts_finalize