summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/README6
-rw-r--r--test/confs/270016
-rwxr-xr-xtest/runtest55
-rw-r--r--test/scripts/2700-redis/270012
-rw-r--r--test/scripts/2700-redis/REQUIRES2
-rw-r--r--test/stdout/27003
6 files changed, 94 insertions, 0 deletions
diff --git a/test/README b/test/README
index cdc240df0..d986a47cb 100644
--- a/test/README
+++ b/test/README
@@ -840,6 +840,12 @@ terminated by four asterisks. Even if no data is required for the particular
usage, the asterisks must be given.
+ background
+
+This command takes one script line and runs it in the background,
+in parallel with following commands. For external daemons, eg. redis-server.
+
+
catwrite <file name> [nxm[=start-of-line-text]]*
This command operates like the "write" command, which is described below,
diff --git a/test/confs/2700 b/test/confs/2700
new file mode 100644
index 000000000..bb001681d
--- /dev/null
+++ b/test/confs/2700
@@ -0,0 +1,16 @@
+# Exim test configuration 2700
+
+exim_path = EXIM_PATH
+host_lookup_order = bydns
+primary_hostname = myhost.test.ex
+spool_directory = DIR/spool
+log_file_path = DIR/spool/log/SERVER%slog
+gecos_pattern = ""
+gecos_name = CALLER_NAME
+tls_advertise_hosts =
+
+# ----- Main settings -----
+
+redis_servers = 127.0.0.1//
+
+# End
diff --git a/test/runtest b/test/runtest
index d62da04c0..97a32cb7f 100755
--- a/test/runtest
+++ b/test/runtest
@@ -2210,6 +2210,45 @@ elsif (/^([A-Z_]+=\S+\s+)?(\d+)?\s*(sudo(?:\s+-u\s+(\w+))?\s+)?exim(_\S+)?\s+(.*
}
}
+# The "background" command is run but not waited-for, like exim -DSERVER=server.
+# One script line is read and fork-exec'd. The PID is stored for a later
+# killdaemon.
+
+elsif (/^background$/)
+ {
+ my $line;
+# $pidfile = "$parm_cwd/aux-var/server-daemon.pid";
+
+ $_ = <SCRIPT>; $lineno++;
+ chomp;
+ $line = $_;
+ if ($debug) { printf ">> daemon: $line >>test-stdout 2>>test-stderr\n"; }
+
+ my $pid = fork();
+ if (not defined $pid) { die "** fork failed: $!\n" }
+ if (not $pid) {
+ print "[$$]>> ${line}\n" if ($debug);
+ close(STDIN);
+ open(STDIN, "<", "test-stdout");
+ close(STDOUT);
+ open(STDOUT, ">>", "test-stdout");
+ close(STDERR);
+ open(STDERR, ">>", "test-stderr-server");
+ exec "exec ${line}";
+ exit(1);
+ }
+
+# open(my $fh, ">", $pidfile) ||
+# tests_exit(-1, "Failed to open $pidfile: $!");
+# printf($fh, "%d\n", $pid);
+# close($fh);
+
+ while (<SCRIPT>) { $lineno++; last if /^\*{4}\s*$/; } # Ignore any input
+ select(undef, undef, undef, 0.3); # Let the daemon get going
+ return (3, { exim_pid => $pid }); # Don't wait
+ }
+
+
# Unknown command
@@ -2811,6 +2850,22 @@ if (defined $parm_support{'Content_Scanning'})
##################################################
+# Check for redis #
+##################################################
+if (defined $parm_support{'Experimental_Redis'})
+ {
+ if (system("redis-server -v 2>/dev/null >/dev/null") == 0)
+ {
+ print "The redis-server command works\n";
+ $parm_running{'redis'} = ' ';
+ }
+ else
+ {
+ print "The redis-server command failed: assume Redis not installed\n";
+ }
+ }
+
+##################################################
# Test for the basic requirements #
##################################################
diff --git a/test/scripts/2700-redis/2700 b/test/scripts/2700-redis/2700
new file mode 100644
index 000000000..c0e84dae9
--- /dev/null
+++ b/test/scripts/2700-redis/2700
@@ -0,0 +1,12 @@
+# Redis lookups and quoting
+#
+background
+redis-server
+****
+exim -be -d-all+expand+lookup
+${lookup redis{set keyname ${quote_redis:objvalue plus}}}
+${lookup redis{get keyname}}
+****
+#
+killdaemon
+no_stderr_check
diff --git a/test/scripts/2700-redis/REQUIRES b/test/scripts/2700-redis/REQUIRES
new file mode 100644
index 000000000..9c48ef88e
--- /dev/null
+++ b/test/scripts/2700-redis/REQUIRES
@@ -0,0 +1,2 @@
+support Experimental_Redis
+running redis
diff --git a/test/stdout/2700 b/test/stdout/2700
new file mode 100644
index 000000000..ada3ea157
--- /dev/null
+++ b/test/stdout/2700
@@ -0,0 +1,3 @@
+> OK
+> objvalue plus
+>