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