s4-selftest: support 'make testenv SCREEN=1'
authorAndrew Tridgell <tridge@samba.org>
Sat, 2 Oct 2010 21:23:43 +0000 (14:23 -0700)
committerAndrew Tridgell <tridge@samba.org>
Sun, 3 Oct 2010 04:11:53 +0000 (21:11 -0700)
this can be used to start a test envioronment in screen windows.

Use:

  make testenv SCREEN=1 SELFTEST_TESTENV=dc

to launch just one environment (in this case, "dc")

selftest/in_screen
selftest/selftest.pl
selftest/target/Samba4.pm
source4/selftest/wscript

index 0704ae53909f9767e660e1338e6bf088f72a5bf1..8a3cc5c601b43c60e5a4c12be76e5b73c61ceb05 100755 (executable)
@@ -6,6 +6,17 @@ SERVERNAME="$ENVNAME"
 [ -z "$SERVERNAME" ] && SERVERNAME="base"
 basedir=$TMPDIR
 
+[ -r $basedir/$SERVERNAME.pid ] && {
+    for i in $(seq 2 100); do
+       if [ ! -r "$basedir/${SERVERNAME}-$i.pid" ]; then
+           SERVERNAME="${SERVERNAME}-$i"
+           break
+       fi
+    done
+}
+
+rm -f $basedir/$SERVERNAME.*
+
 # set most of the environment vars we have in the screen session too
 _ENV=""
 vars=$(mktemp)
@@ -17,7 +28,7 @@ printenv |
 cat <<EOF > $basedir/$SERVERNAME.launch
  echo \$\$ > $basedir/$SERVERNAME.pid
  . $basedir/$SERVERNAME.vars
- echo "\$(date) starting $@" >> $basedir/$SERVERNAME.log
+ echo "\$(date) starting $SERVERNAME" >> $basedir/$SERVERNAME.log
  $@
  echo \$? > $basedir/$SERVERNAME.status
  read parent < $basedir/$SERVERNAME.parent.pid
@@ -26,17 +37,18 @@ EOF
 pid=$$
 
 cleanup() {
+    trap "exit 1" SIGINT SIGTERM SIGPIPE
     [ -r $basedir/$SERVERNAME.status ] && {
        read status < $basedir/$SERVERNAME.status
        echo "$(date) samba exited with status $status" >> $basedir/$SERVERNAME.log
        exit $status
     }
     read pid < $basedir/$SERVERNAME.pid
-    echo "$(date) Killing samba pid $pid" >> $basedir/$SERVERNAME.log
+    echo "$(date) Killing samba pid $pid from $$" >> $basedir/$SERVERNAME.log
     if [ "$pid" = "$$" ]; then
        exit 1
     fi
-    kill $pid 2>&1
+    kill -9 $pid 2>&1
     exit 1
 }
 
index d102d437796d3c027d19341913b53090dfcb895e..08ee52c55ed0f57d3cdfae90198cb722f3a96856 100755 (executable)
@@ -923,11 +923,12 @@ if ($opt_testenv) {
        die("Unable to setup environment $testenv_name") unless ($testenv_vars);
 
        $ENV{PIDDIR} = $testenv_vars->{PIDDIR};
+       $ENV{ENVNAME} = $testenv_name;
 
        my $envvarstr = exported_envvars_str($testenv_vars);
 
-       my $term = ($ENV{TERMINAL} or "xterm");
-       system("$term -e 'echo -e \"
+       my $term = ($ENV{TERMINAL} or "xterm -e");
+       system("$term 'echo -e \"
 Welcome to the Samba4 Test environment '$testenv_name'
 
 This matches the client environment used in make test
index 1e65c66384d16e36f81732ffbe715960555d085d..36023f21c75a21fca3dbc2c87969cad92c9ad2f8 100644 (file)
@@ -1286,10 +1286,12 @@ sub setup_env($$$)
                return $self->setup_rodc("$path/rodc", $self->{vars}->{dc});
        } elsif ($envname eq "all") {
                if (not defined($self->{vars}->{dc})) {
+                       $ENV{ENVNAME} = "dc";
                        $self->setup_dc("$path/dc");
                }
                my $ret = $self->setup_member("$path/member", $self->{vars}->{dc});
                if (not defined($self->{vars}->{rpc_proxy})) {
+                       $ENV{ENVNAME} = "rpc_proxy";
                        my $rpc_proxy_ret = $self->setup_rpc_proxy("$path/rpc_proxy", $self->{vars}->{dc});
                        
                        $ret->{RPC_PROXY_SERVER} = $rpc_proxy_ret->{SERVER};
@@ -1300,6 +1302,7 @@ sub setup_env($$$)
                        $ret->{RPC_PROXY_PASSWORD} = $rpc_proxy_ret->{PASSWORD};
                }
                if (not defined($self->{vars}->{fl2000dc})) {
+                       $ENV{ENVNAME} = "fl2000dc";
                        my $fl2000dc_ret = $self->setup_fl2000dc("$path/fl2000dc", $self->{vars}->{dc});
                        
                        $ret->{FL2000DC_SERVER} = $fl2000dc_ret->{SERVER};
@@ -1310,6 +1313,7 @@ sub setup_env($$$)
                        $ret->{FL2000DC_PASSWORD} = $fl2000dc_ret->{PASSWORD};
                }
                if (not defined($self->{vars}->{fl2003dc})) {
+                       $ENV{ENVNAME} = "fl2003dc";
                        my $fl2003dc_ret = $self->setup_fl2003dc("$path/fl2003dc", $self->{vars}->{dc});
 
                        $ret->{FL2003DC_SERVER} = $fl2003dc_ret->{SERVER};
@@ -1320,6 +1324,7 @@ sub setup_env($$$)
                        $ret->{FL2003DC_PASSWORD} = $fl2003dc_ret->{PASSWORD};
                }
                if (not defined($self->{vars}->{fl2008r2dc})) {
+                       $ENV{ENVNAME} = "fl2008r2dc";
                        my $fl2008r2dc_ret = $self->setup_fl2008r2dc("$path/fl2008r2dc", $self->{vars}->{dc});
 
                        $ret->{FL2008R2DC_SERVER} = $fl2008r2dc_ret->{SERVER};
index 4606c6681adc680da302c5ca46c95f03b5812d26..561baeb6e1174ee19831b1e6ea4e2c2c72a8708f 100644 (file)
@@ -90,6 +90,9 @@ def cmd_testonly(opt):
 
     env.FORMAT_TEST_OUTPUT = '${SUBUNIT_FORMATTER}'
 
+    # clean any previous temporary files
+    os.system("rm -rf %s/tmp" % env.SELFTEST_PREFIX);
+
     # put all command line options in the environment as TESTENV_*=*
     for o in dir(Options.options):
         if o[0:1] != '_':
@@ -128,6 +131,7 @@ def cmd_testonly(opt):
 
     if Options.options.SCREEN:
         server_wrapper = '../selftest/in_screen %s' % server_wrapper
+        os.environ['TERMINAL'] = '../selftest/in_screen'
     elif server_wrapper != '':
         server_wrapper = 'xterm -n server -l -e %s' % server_wrapper