unixctl-py.at: Run tests for Python 2 and 3.
[cascardo/ovs.git] / tests / unixctl-py.at
1 AT_BANNER([unixctl])
2
3 m4_define([APPCTL], [ovs-appctl --timeout 20])
4 m4_define([PYAPPCTL], [$PYTHON $srcdir/appctl.py --timeout 20])
5 m4_define([PYAPPCTL_PYN], [$1 $srcdir/appctl.py --timeout 20])
6
7 m4_define([UNIXCTL_EXIT_PYN],
8   [AT_SETUP([unixctl ovs-vswitchd exit - $1])
9    AT_SKIP_IF([test $2 = no])
10    AT_KEYWORDS([python unixctl])
11    OVS_VSWITCHD_START
12
13    AT_CHECK([PYAPPCTL_PYN([$3]) -t ovs-vswitchd exit], [0], [])
14    OVS_WAIT_WHILE([test -s ovs-vswitchd.pid])
15
16    AT_CHECK([PYAPPCTL_PYN([$3]) -t ovsdb-server exit], [0], [])
17    OVS_WAIT_WHILE([test -s ovsdb-server.pid])
18    AT_CLEANUP])
19
20 UNIXCTL_EXIT_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
21 UNIXCTL_EXIT_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])
22
23 m4_define([UNIXCTL_LIST_COMMANDS_PYN],
24   [AT_SETUP([unixctl ovs-vswitchd list-commands - $1])
25    AT_SKIP_IF([test $2 = no])
26    OVS_VSWITCHD_START
27
28    AT_CHECK([APPCTL list-commands], [0], [stdout])
29    AT_CHECK([head -1 stdout], [0], [dnl
30 The available commands are:
31 ])
32    mv stdout expout
33    AT_CHECK([PYAPPCTL_PYN([$3]) list-commands], [0], [expout])
34
35    OVS_VSWITCHD_STOP
36    AT_CLEANUP])
37
38 UNIXCTL_LIST_COMMANDS_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
39 UNIXCTL_LIST_COMMANDS_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])
40
41 m4_define([UNIXCTL_ARGS_PYN],
42   [AT_SETUP([unixctl ovs-vswitchd arguments - $1])
43    AT_SKIP_IF([test $2 = no])
44    OVS_VSWITCHD_START
45
46    AT_CHECK([APPCTL bond/hash], [2], [], [stderr])
47    AT_CHECK([head -1 stderr], [0], [dnl
48 "bond/hash" command requires at least 1 arguments
49 ])
50    sed 's/ovs-appctl/appctl.py/' stderr > experr
51    AT_CHECK([PYAPPCTL_PYN([$3]) bond/hash], [2], [], [experr])
52
53    AT_CHECK([APPCTL bond/hash mac], [2], [], [stderr])
54    AT_CHECK([head -1 stderr], [0], [dnl
55 invalid mac
56 ])
57    sed 's/ovs-appctl/appctl.py/' stderr > experr
58    AT_CHECK([PYAPPCTL_PYN([$3]) bond/hash mac], [2], [], [experr])
59
60    AT_CHECK([APPCTL bond/hash mac vlan], [2], [], [stderr])
61    AT_CHECK([head -1 stderr], [0], [dnl
62 invalid vlan
63 ])
64    sed 's/ovs-appctl/appctl.py/' stderr > experr
65    AT_CHECK([PYAPPCTL_PYN([$3]) bond/hash mac vlan], [2], [], [experr])
66
67    AT_CHECK([APPCTL bond/hash mac vlan basis], [2], [], [stderr])
68    AT_CHECK([head -1 stderr], [0], [dnl
69 invalid vlan
70 ])
71    sed 's/ovs-appctl/appctl.py/' stderr > experr
72    AT_CHECK([PYAPPCTL_PYN([$3]) bond/hash vlan basis], [2], [], [experr])
73
74    AT_CHECK([APPCTL bond/hash mac vlan basis extra], [2], [], [stderr])
75    AT_CHECK([head -1 stderr], [0], [dnl
76 "bond/hash" command takes at most 3 arguments
77 ])
78    sed 's/ovs-appctl/appctl.py/' stderr > experr
79    AT_CHECK([PYAPPCTL_PYN([$3]) bond/hash mac vlan basis extra], [2], [], [experr])
80
81    OVS_VSWITCHD_STOP
82    AT_CLEANUP])
83
84 UNIXCTL_ARGS_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
85 UNIXCTL_ARGS_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])
86
87 m4_define([UNIXCTL_BAD_TARGET_PYN],
88   [AT_SETUP([unixctl bad target - $1])
89    AT_SKIP_IF([test $2 = no])
90
91    AT_CHECK([PYAPPCTL_PYN([$3]) -t bogus doit], [1], [], [stderr])
92    AT_CHECK_UNQUOTED([tail -1 stderr], [0], [dnl
93 appctl.py: cannot read pidfile "`pwd`/bogus.pid" (No such file or directory)
94 ])
95
96    AT_CHECK([PYAPPCTL_PYN([$3]) -t /bogus/path.pid doit], [1], [], [stderr])
97    AT_CHECK([tail -1 stderr], [0], [dnl
98 appctl.py: cannot connect to "/bogus/path.pid" (No such file or directory)
99 ])
100
101    AT_CLEANUP])
102
103 UNIXCTL_BAD_TARGET_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
104 UNIXCTL_BAD_TARGET_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])
105
106 m4_define([UNIXCTL_SERVER_PYN],
107   [AT_SETUP([unixctl server - $1])
108    AT_SKIP_IF([test $2 = no])
109    on_exit 'kill `cat test-unixctl.py.pid`'
110    AT_CAPTURE_FILE([`pwd`/test-unixctl.py.log])
111    AT_CHECK([$3 $srcdir/test-unixctl.py --log-file --pidfile --detach])
112
113    AT_CHECK([APPCTL -t test-unixctl.py help], [0], [stdout])
114    AT_CHECK([cat stdout], [0], [dnl
115 The available commands are:
116   block
117   echo                    [[arg ...]]
118   echo_error              [[arg ...]]
119   exit
120   help
121   log                     [[arg ...]]
122   version
123   vlog/close
124   vlog/list
125   vlog/reopen
126   vlog/set                spec
127 ])
128    mv stdout expout
129    AT_CHECK([PYAPPCTL_PYN([$3]) -t test-unixctl.py help], [0], [expout])
130
131    AT_CHECK([ovs-vsctl --version | sed 's/ovs-vsctl/test-unixctl.py/' | head -1 > expout])
132    AT_CHECK([APPCTL -t test-unixctl.py version], [0], [expout])
133    AT_CHECK([PYAPPCTL_PYN([$3]) -t test-unixctl.py version], [0], [expout])
134
135    AT_CHECK([APPCTL -t test-unixctl.py echo robot ninja], [0], [stdout])
136    AT_CHECK([cat stdout | sed -e "s/u'/'/g"], [0], [dnl
137 [['robot', 'ninja']]
138 ])
139    mv stdout expout
140    AT_CHECK([PYAPPCTL_PYN([$3]) -t test-unixctl.py echo robot ninja], [0], [expout])
141
142    AT_CHECK([APPCTL -t test-unixctl.py echo_error robot ninja], [2], [], [stderr])
143    AT_CHECK([cat stderr | sed -e "s/u'/'/g"], [0], [dnl
144 [['robot', 'ninja']]
145 ovs-appctl: test-unixctl.py: server returned an error
146 ])
147    sed 's/ovs-appctl/appctl.py/' stderr > experr
148    AT_CHECK([PYAPPCTL_PYN([$3]) -t test-unixctl.py echo_error robot ninja], [2], [], [experr])
149
150    AT_CHECK([APPCTL -t test-unixctl.py echo], [2], [], [stderr])
151    AT_CHECK([cat stderr], [0], [dnl
152 "echo" command requires at least 1 arguments
153 ovs-appctl: test-unixctl.py: server returned an error
154 ])
155    sed 's/ovs-appctl/appctl.py/' stderr > experr
156    AT_CHECK([PYAPPCTL_PYN([$3]) -t test-unixctl.py echo], [2], [], [experr])
157
158    AT_CHECK([APPCTL -t test-unixctl.py echo robot ninja pirates], [2], [], [stderr])
159    AT_CHECK([cat stderr], [0], [dnl
160 "echo" command takes at most 2 arguments
161 ovs-appctl: test-unixctl.py: server returned an error
162 ])
163    sed 's/ovs-appctl/appctl.py/' stderr > experr
164    AT_CHECK([PYAPPCTL_PYN([$3]) -t test-unixctl.py echo robot ninja pirates], [2], [], [experr])
165
166    AT_CHECK([APPCTL -t test-unixctl.py bogus], [2], [], [stderr])
167    AT_CHECK([cat stderr], [0], [dnl
168 "bogus" is not a valid command
169 ovs-appctl: test-unixctl.py: server returned an error
170 ])
171    sed 's/ovs-appctl/appctl.py/' stderr > experr
172    AT_CHECK([PYAPPCTL_PYN([$3]) -t test-unixctl.py bogus], [2], [], [experr])
173
174    AT_CHECK([APPCTL -t test-unixctl.py exit])
175    AT_CLEANUP])
176
177 UNIXCTL_SERVER_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
178 UNIXCTL_SERVER_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])
179
180 m4_define([UNIXCTL_SERVER_ERRORS_PYN],
181   [AT_SETUP([unixctl server errors - $1])
182    AT_SKIP_IF([test $2 = no])
183    AT_CHECK($3 $srcdir/test-unixctl.py --unixctl "`pwd`"/bogus/path, [1], [], [ignore])
184    AT_CLEANUP])
185
186 UNIXCTL_SERVER_ERRORS_PYN([Python2], [$HAVE_PYTHON], [$PYTHON])
187 UNIXCTL_SERVER_ERRORS_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3])