aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/tools/test/bin/onos-mininet
blob: ef2c8ea5885bcec6450886f6ec38273aa0c00255 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/bin/bash
# -----------------------------------------------------------------------------
# Starts or interacts with mininet in a remote screen session.
# -----------------------------------------------------------------------------

[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults

export MAX_WAIT=60

cmd="$1" && shift
log="screenlog.0"
remote="$ONOS_USER@$OCN"
mininet="ssh -t -t $remote screen -L -S mininet"

case $cmd in
send)
    $mininet -X "stuff \"$@\\n\"" 2>/dev/null
    ;;

sendAndExpect)
    cmd=""
    for a in $*; do shift; if [ "$a" = "--expect" ]; then break; fi; cmd="$cmd $a"; done
    $mininet -X "stuff \"$cmd\\n\"" 2>/dev/null
    onos-mininet expect "$@"
    ;;

wait)
    ssh $remote "
        let count=0
        sleep 1 && while test ! -f $log; do if test \$count -ge $MAX_WAIT; then exit 1; fi; sleep 1; let count=count+1; done
        while ! (tail -n1 $log | egrep -q '^mininet>'); do if [ \$count -ge $MAX_WAIT ]; then exit 1; fi; sleep 1; done
        sleep ${1-:1}
    "
    ;;

expect)
    aux=/tmp/mininet.$$.log
    ssh $remote "
        sleep 1
        if [ ! -f $log ]; then exit 1; fi;
        let count=0
        while ! (tail -n1 $log | egrep -q '^mininet>'); do if test \$count -ge $MAX_WAIT; then exit 1; fi; sleep 1; let count=count+1; done
        tac $log | awk '{ print \$0; } /^mininet>/ { if (on) { exit 0; } on=1; }' | tac > $aux
        cat $aux
        set -x
        egrep \"$@\" $aux
    "
    ;;

attach)
    $mininet -x
    ;;

start)
    ssh $remote "rm -f $log; echo logfile flush 1 > ~/.screenrc"
    (
    $mininet "$@"
    scp $remote:$log /tmp/mininet.log
    ssh $remote rm -f $log
    ) &
    ;;

stop)
    $mininet -X "stuff \"^C\\n\"" 2>/dev/null && \
        $mininet -X "stuff \"^C\\n\"" 2>/dev/null && \
        $mininet -X "stuff \"exit\\n\"" 2>/dev/null
    ;;
esac