]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ovs-vswitchd.at
ovs-thread: Do not always end quiescent state in ovs_thread_create().
[mirror_ovs.git] / tests / ovs-vswitchd.at
CommitLineData
b7898031
BP
1AT_BANNER([ovs-vswitchd])
2
3dnl The OVS initscripts never make an empty database (one without even an
4dnl Open_vSwitch record) visible to ovs-vswitchd, but hand-rolled scripts
5dnl sometimes do. At one point, "ovs-vswitchd --detach" would never detach
6dnl and use 100% CPU if this happened, so this test checks for regression.
7AT_SETUP([ovs-vswitchd detaches correctly with empty db])
53eb8cb8 8on_exit 'kill `cat ovsdb-server.pid ovs-vswitchd.pid`'
b7898031
BP
9
10dnl Create database.
11touch .conf.db.~lock~
12AT_CHECK([ovsdb-tool create conf.db $abs_top_srcdir/vswitchd/vswitch.ovsschema])
13
14dnl Start ovsdb-server. *Don't* initialize database.
15AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --log-file --remote=punix:$OVS_RUNDIR/db.sock], [0], [ignore], [ignore])
16AT_CAPTURE_FILE([ovsdb-server.log])
17
18dnl Start ovs-vswitchd.
19AT_CHECK([ovs-vswitchd --detach --no-chdir --pidfile --enable-dummy --disable-system --log-file], [0], [], [stderr])
20AT_CAPTURE_FILE([ovs-vswitchd.log])
21
22dnl ovs-vswitchd detached OK or we wouldn't have made it this far. Success.
d9c8c57c
LR
23OVS_APP_EXIT_AND_WAIT([ovs-vswitchd])
24OVS_APP_EXIT_AND_WAIT([ovsdb-server])
b7898031 25AT_CLEANUP
12eb035b
AW
26
27
28dnl ----------------------------------------------------------------------
29m4_define([OVS_VSCTL_CHECK_RX_PKT], [
2bf0b4a3 30AT_CHECK([ovs-vsctl list int $1 | grep statistics | sed -n 's/^.*\(rx_packets=[[0-9]][[0-9]]*\).*$/\1/p'],[0],
12eb035b
AW
31[dnl
32rx_packets=$2
33])
34])
35
36AT_SETUP([ovs-vswitchd -- stats-update-interval])
37OVS_VSWITCHD_START([add-port br0 p1 -- set int p1 type=internal])
38ovs-appctl time/stop
39
76eb754a 40dnl at the beginning, the update of rx_packets should happen every 5 seconds.
bdba1947 41ovs-appctl time/warp 11000 1000
12eb035b
AW
42OVS_VSCTL_CHECK_RX_PKT([p1], [0])
43AT_CHECK([ovs-appctl netdev-dummy/receive p1 'eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
bdba1947 44ovs-appctl time/warp 11000 1000
12eb035b
AW
45OVS_VSCTL_CHECK_RX_PKT([p1], [1])
46
47dnl set the stats update interval to 100K ms, the following 'recv' should not be updated.
48AT_CHECK([ovs-vsctl set O . other_config:stats-update-interval=100000])
bdba1947 49ovs-appctl time/warp 51000 1000
12eb035b
AW
50for i in `seq 1 5`; do
51 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
52done
53
54OVS_VSCTL_CHECK_RX_PKT([p1], [1])
55dnl advance the clock by 100K ms, the previous 'recv' should be updated.
bdba1947 56ovs-appctl time/warp 100000 1000
12eb035b
AW
57OVS_VSCTL_CHECK_RX_PKT([p1], [6])
58
59dnl now remove the configuration. 'recv' one packet. there should be an update after 5000 ms.
60AT_CHECK([ovs-vsctl clear O . other_config])
61AT_CHECK([ovs-appctl netdev-dummy/receive p1 'eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
bdba1947 62ovs-appctl time/warp 11000 1000
12eb035b
AW
63OVS_VSCTL_CHECK_RX_PKT([p1], [7])
64
65OVS_VSWITCHD_STOP
76eb754a 66AT_CLEANUP
6bef3c7c
AW
67
68dnl ----------------------------------------------------------------------
69AT_SETUP([ovs-vswitchd -- start additional ovs-vswitchd process])
70OVS_VSWITCHD_START
71
72# start another ovs-vswitchd process.
1786535e 73ovs-vswitchd --log-file=fakelog --unixctl="`pwd`"/unixctl &
6bef3c7c
AW
74
75# sleep for a while
76sleep 5
77
78# stop the process.
d9c8c57c 79OVS_APP_EXIT_AND_WAIT([`pwd`/unixctl])
6bef3c7c
AW
80
81# check the fakelog, should only see one ERR for reporting
1786535e 82# the existing ovs-vswitchd process.
a07e26bf 83AT_CHECK([test `grep ERR fakelog | wc -l` -eq 1])
6bef3c7c 84
1786535e 85AT_CHECK([tail -n1 fakelog | sed -e 's/^.*ERR|//; s/pid [[0-9]]*//'], [0], [dnl
6bef3c7c
AW
86another ovs-vswitchd process is running, disabling this process () until it goes away
87])
88
89OVS_VSWITCHD_STOP
90AT_CLEANUP
e15df145
AW
91
92dnl ----------------------------------------------------------------------
93AT_SETUP([ovs-vswitchd -- switch over to another ovs-vswitchd process])
94OVS_VSWITCHD_START
95
96# start a new ovs-vswitchd process.
1786535e 97ovs-vswitchd --log-file=fakelog --enable-dummy --unixctl="`pwd`"/unixctl &
e15df145
AW
98
99# sleep for a while.
100sleep 5
101
102# kill the current active ovs-vswitchd process.
103kill `cat ovs-vswitchd.pid`
104
105sleep 5
106
107# check the creation of br0 on the new ovs-vswitchd process.
108AT_CHECK([grep "bridge br0" fakelog | sed -e 's/port [[0-9]]*$/port/;
109s/datapath ID [[a-z0-9]]*$/datapath ID/;s/^.*INFO|//'], [0], [dnl
110bridge br0: added interface br0 on port
111bridge br0: using datapath ID
112])
113
114# stop the process.
d9c8c57c 115OVS_APP_EXIT_AND_WAIT([`pwd`/unixctl])
e15df145
AW
116
117# check the fakelog, should not see WARN/ERR/EMER log other than the one
118# for reporting the existing ovs-vswitchd process and the one for killing
119# the process.
120AT_CHECK([sed -n "
121/|ERR|another ovs-vswitchd process is running/d
e15df145
AW
122/|WARN|/p
123/|ERR|/p
124/|EMER|/p" fakelog
125])
126
127# cleanup.
128kill `cat ovsdb-server.pid`
129AT_CLEANUP
5aca3322
AW
130
131dnl ----------------------------------------------------------------------
132AT_SETUP([ovs-vswitchd -- invalid database path])
133
134# start an ovs-vswitchd process with invalid db path.
135ovs-vswitchd unix:invalid.db.sock --log-file=fakelog --enable-dummy --unixctl="`pwd`"/unixctl &
136
137# sleep for a while.
138sleep 10
139
140# stop the process.
d9c8c57c 141OVS_APP_EXIT_AND_WAIT([`pwd`/unixctl])
5aca3322
AW
142
143# should not see this log (which indicates high cpu utilization).
144AT_CHECK([grep "wakeup due to" fakelog], [ignore])
145
146# check the fakelog, should not see any WARN/ERR/EMER log.
147AT_CHECK([sed -n "
148/|WARN|/p
149/|ERR|/p
150/|EMER|/p" fakelog
151])
152
153AT_CLEANUP
14dd55a3
AW
154
155dnl ----------------------------------------------------------------------
156AT_SETUP([ovs-vswitchd -- set service controller])
157AT_SKIP_IF([test "$IS_WIN32" = "yes"])
158OVS_VSWITCHD_START
159
160AT_CHECK([ovs-vsctl set-controller br0 punix:$(pwd)/br0.void])
161OVS_WAIT_UNTIL([test -e br0.void])
162
163AT_CHECK([ovs-vsctl set-controller br0 punix:$(pwd)/br0.void/../overwrite.file])
164OVS_WAIT_UNTIL([test -n "`grep ERR ovs-vswitchd.log | grep overwrite.file`"])
165
166OVS_VSWITCHD_STOP(["/Not adding Unix domain socket controller/d"])
167AT_CLEANUP
e47cb14c
AZ
168
169dnl ----------------------------------------------------------------------
170dnl OVSDB server before release version 2.5 does not support the monitor2
171dnl method. This test defeatures the OVSDB server to simulate an older
172dnl OVSDB server and make sure ovs-vswitchd can still work with it
45e1df53 173AT_SETUP([ovs-vswitchd -- Compatible with OVSDB server - w/o monitor2])
e47cb14c
AZ
174OVS_VSWITCHD_START
175
176dnl defeature OVSDB server -- no monitor2
177AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/disable-monitor2])
178
179sleep 1
180
181AT_CHECK([ovs-vsctl add-port br0 p0 -- set interface p0 type=internal])
182AT_CHECK([ovs-vsctl add-port br0 p1 -- set interface p1 type=internal])
183
184dnl ovs-vswitchd should still 'see' ovsdb change with the 'monitor' method
185AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0], [dnl
186 br0 65534/100: (dummy)
187 p0 1/1: (dummy)
188 p1 2/2: (dummy)
189])
190OVS_VSWITCHD_STOP
191AT_CLEANUP
e6448d2f
DDP
192
193dnl ----------------------------------------------------------------------
194AT_SETUP([ovs-vswitchd - do not create sockets with unsafe names])
195OVS_VSWITCHD_START
196
197# On Unix systems, test for sockets with "test -S".
198#
199# On Windows systems, we simulate a socket with a regular file that contains
200# a TCP port number, so use "test -f" there instead.
201if test $IS_WIN32 = yes; then
202 S=f
203else
204 S=S
205fi
206
207# Create a bridge with an ordinary name and make sure that the management
208# socket gets creatd.
209AT_CHECK([ovs-vsctl add-br a -- set bridge a datapath-type=dummy])
210AT_CHECK([test -$S a.mgmt])
211
212# Create a bridge with an unsafe name and make sure that the management
213# socket does not get created.
214mkdir b
215AT_CHECK([ovs-vsctl add-br b/c -- set bridge b/c datapath-type=dummy], [0],
216 [], [ovs-vsctl: Error detected while setting up 'b/c'. See ovs-vswitchd log for details.
217])
218AT_CHECK([test ! -e b/c.mgmt])
219
220OVS_VSWITCHD_STOP(['/ignoring bridge with invalid name/d'])
221AT_CLEANUP