summaryrefslogtreecommitdiffstats
path: root/term-utils/script.c
diff options
context:
space:
mode:
authorSami Kerola2015-05-24 19:14:58 +0200
committerSami Kerola2015-06-06 15:36:38 +0200
commit6a40c65f81d393667bb7059be7d89eaf5cc99791 (patch)
treee7456e1463cc79f8aff14a200e30bad2710cde8e /term-utils/script.c
parenttests: add script output buffering race check (diff)
downloadkernel-qcow2-util-linux-6a40c65f81d393667bb7059be7d89eaf5cc99791.tar.gz
kernel-qcow2-util-linux-6a40c65f81d393667bb7059be7d89eaf5cc99791.tar.xz
kernel-qcow2-util-linux-6a40c65f81d393667bb7059be7d89eaf5cc99791.zip
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>
Diffstat (limited to 'term-utils/script.c')
-rw-r--r--term-utils/script.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/term-utils/script.c b/term-utils/script.c
index e0083f246..dd3b4b592 100644
--- a/term-utils/script.c
+++ b/term-utils/script.c
@@ -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);
}