librpc/idl Add some query [getset]info quota related structures
[vlendec/samba-autobuild/.git] / selftest / in_screen
1 #!/usr/bin/env bash
2
3 export TMPDIR="$SELFTEST_TMPDIR"
4
5 SERVERNAME="$ENVNAME"
6 [ -z "$SERVERNAME" ] && SERVERNAME="base"
7 basedir=$TMPDIR
8 osname=$(uname)
9 if [ "$osname" = "Linux" ]; then
10         vars=$(mktemp)
11 else
12         vars=$(mktemp -t tmpsmb)
13         function seq() {
14                 dpt=$1
15                 end=$2
16                 while [ $dpt -le $end ]; do
17                         echo "$dpt"
18                         dpt=$(( $dpt + 1))
19                 done
20         }
21 fi
22
23 [ -r $basedir/$SERVERNAME.pid ] && {
24     for i in $(seq 2 100); do
25         if [ ! -r "$basedir/${SERVERNAME}-$i.pid" ]; then
26             SERVERNAME="${SERVERNAME}-$i"
27             break
28         fi
29     done
30 }
31
32 rm -f $basedir/$SERVERNAME.*
33
34 # set most of the environment vars we have in the screen session too
35 _ENV=""
36 printenv |
37   egrep -v '^TERMCAP|^WINDOW|^SHELL|^STY|^SHLVL|^SAMBA_VALGRIND|\$' |
38   egrep '^[A-Z]' |
39   sed "s/\(^[^=]*=\)\(.*\)/export \1'\2'/g" > $basedir/$SERVERNAME.vars
40
41 cat <<EOF > $basedir/$SERVERNAME.launch
42 cd $PWD
43  echo \$\$ > $basedir/$SERVERNAME.pid
44  . $basedir/$SERVERNAME.vars
45  echo "\$(date) starting $SERVERNAME" >> $basedir/$SERVERNAME.log
46  $@
47  echo \$? > $basedir/$SERVERNAME.status
48  read parent < $basedir/$SERVERNAME.parent.pid
49  kill \$parent
50 EOF
51 pid=$$
52
53 cleanup() {
54     trap "exit 1" SIGINT SIGTERM SIGPIPE
55     [ -r $basedir/$SERVERNAME.status ] && {
56         read status < $basedir/$SERVERNAME.status
57         echo "$(date) samba exited with status $status" >> $basedir/$SERVERNAME.log
58         exit $status
59     }
60     read pid < $basedir/$SERVERNAME.pid
61     echo "$(date) Killing samba pid $pid from $$" >> $basedir/$SERVERNAME.log
62     if [ "$pid" = "$$" ]; then
63         exit 1
64     fi
65     kill -9 $pid 2>&1
66     exit 1
67 }
68
69 rm -f $basedir/$SERVERNAME.status $basedir/$SERVERNAME.log
70 echo $$ > $basedir/$SERVERNAME.parent.pid
71 trap cleanup SIGINT SIGTERM SIGPIPE
72
73 if [[ "$TMUX" ]]; then
74     TMUX_CMD=tmux
75     if [[ $TMUX = *tmate* ]]; then
76         TMUX_CMD=tmate
77     fi
78
79     $TMUX_CMD new-window -n test:$SERVERNAME "bash $basedir/$SERVERNAME.launch"
80
81     # tmux seems to lag a bit for new sessions. Don't create them too
82     # quickly one after another
83     sleep .1
84 else
85     screen -r -X screen -t test:$SERVERNAME bash $basedir/$SERVERNAME.launch
86 fi
87 echo "$(date) waiting in $$" >> $basedir/$SERVERNAME.log
88 read stdin_var
89 echo "$(date) EOF on stdin" >> $basedir/$SERVERNAME.log
90 read pid < $basedir/$SERVERNAME.pid
91 echo "$(date) killing $pid" >> $basedir/$SERVERNAME.log
92 kill $pid 2> /dev/null
93 echo "$(date) exiting" >> $basedir/$SERVERNAME.log
94 exit 0