Testsuite: add testcase for Redis. Bug 1755
authorJeremy Harris <jgh146exb@wizmail.org>
Sat, 12 Dec 2015 00:31:01 +0000 (00:31 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Sat, 12 Dec 2015 01:10:32 +0000 (01:10 +0000)
test/README
test/confs/2700 [new file with mode: 0644]
test/runtest
test/scripts/2700-redis/2700 [new file with mode: 0644]
test/scripts/2700-redis/REQUIRES [new file with mode: 0644]
test/stdout/2700 [new file with mode: 0644]

index cdc240df0d2e0f1e81d9eb47ba6d8603d839e0e5..d986a47cbdeaebc60861e953ca62bed94b8dcae5 100644 (file)
@@ -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 (file)
index 0000000..bb00168
--- /dev/null
@@ -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
index d62da04c063913f8ddf0491a597dcd0a1e54adb1..97a32cb7ff4f2fb37fd9df3b073ee96d0460dc96 100755 (executable)
@@ -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
 
@@ -2810,6 +2849,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 (file)
index 0000000..c0e84da
--- /dev/null
@@ -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 (file)
index 0000000..9c48ef8
--- /dev/null
@@ -0,0 +1,2 @@
+support Experimental_Redis
+running redis
diff --git a/test/stdout/2700 b/test/stdout/2700
new file mode 100644 (file)
index 0000000..ada3ea1
--- /dev/null
@@ -0,0 +1,3 @@
+> OK
+> objvalue plus
+>