X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=tests%2Fovn-controller-vtep.at;h=bc2f2dc8b66a7b99abda922141424df0075acd72;hb=6c6eedc5d6730835a0d9724e2e8cfe9cdf03b07d;hp=83badf955a29188eedc823c03f354d256d65c3e1;hpb=6132b241efd21160db57d9908ee630a215cce8ea;p=cascardo%2Fovs.git diff --git a/tests/ovn-controller-vtep.at b/tests/ovn-controller-vtep.at index 83badf955..bc2f2dc8b 100644 --- a/tests/ovn-controller-vtep.at +++ b/tests/ovn-controller-vtep.at @@ -13,6 +13,7 @@ AT_BANNER([ovn_controller_vtep]) # m4_define([OVN_CONTROLLER_VTEP_START], [ + AT_KEYWORDS([ovn]) # this will cause skip when 'make check' using Windows setup. AT_SKIP_IF([test $HAVE_PYTHON = no]) @@ -24,16 +25,16 @@ m4_define([OVN_CONTROLLER_VTEP_START], dnl Start ovsdb-server. AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --log-file --remote=punix:$OVS_RUNDIR/db.sock vswitchd.db vtep.db ovn-nb.db ovn-sb.db], [0], [], [stderr]) - ON_EXIT_UNQUOTED([kill `cat ovsdb-server.pid`]) + on_exit "kill `cat ovsdb-server.pid`" AT_CHECK([[sed < stderr ' /vlog|INFO|opened log file/d /ovsdb_server|INFO|ovsdb-server (Open vSwitch)/d']]) AT_CAPTURE_FILE([ovsdb-server.log]) dnl Start ovs-vswitchd. - AT_CHECK([ovs-vswitchd --enable-dummy --disable-system --detach --no-chdir --pidfile --log-file -vvconn -vofproto_dpif], [0], [], [stderr]) + AT_CHECK([ovs-vswitchd --enable-dummy=system --disable-system --detach --no-chdir --pidfile --log-file -vvconn -vofproto_dpif], [0], [], [stderr]) AT_CAPTURE_FILE([ovs-vswitchd.log]) - ON_EXIT_UNQUOTED([kill `cat ovs-vswitchd.pid`]) + on_exit "kill `cat ovs-vswitchd.pid`" AT_CHECK([[sed < stderr ' /ovs_numa|INFO|Discovered /d /vlog|INFO|opened log file/d @@ -49,7 +50,7 @@ m4_define([OVN_CONTROLLER_VTEP_START], dnl Start ovs-vtep. AT_CHECK([vtep-ctl add-ps br-vtep -- set Physical_Switch br-vtep tunnel_ips=1.2.3.4]) AT_CHECK([ovs-vtep --log-file=ovs-vtep.log --pidfile=ovs-vtep.pid --detach br-vtep \], [0], [], [stderr]) - ON_EXIT_UNQUOTED([kill `cat ovs-vtep.pid`]) + on_exit "kill `cat ovs-vtep.pid`" AT_CHECK([[sed < stderr ' /vlog|INFO|opened log file/d']]) # waits until ovs-vtep starts up. @@ -58,7 +59,7 @@ m4_define([OVN_CONTROLLER_VTEP_START], dnl Start ovn-northd. AT_CHECK([ovn-nbctl lswitch-add br-test]) AT_CHECK([ovn-northd --detach --pidfile --log-file --ovnnb-db=unix:$OVS_RUNDIR/db.sock --ovnsb-db=unix:$OVS_RUNDIR/db.sock], [0], [], [stderr]) - ON_EXIT_UNQUOTED([kill `cat ovn-northd.pid`]) + on_exit "kill `cat ovn-northd.pid`" AT_CHECK([[sed < stderr ' /vlog|INFO|opened log file/d']]) AT_CAPTURE_FILE([ovn-northd.log]) @@ -66,7 +67,7 @@ m4_define([OVN_CONTROLLER_VTEP_START], dnl Start ovn-controllger-vtep. AT_CHECK([ovn-controller-vtep --detach --pidfile --log-file --vtep-db=unix:$OVS_RUNDIR/db.sock --ovnsb-db=unix:$OVS_RUNDIR/db.sock], [0], [], [stderr]) AT_CAPTURE_FILE([ovn-controller-vtep.log]) - ON_EXIT_UNQUOTED([kill `cat ovn-controller-vtep.pid`]) + on_exit "kill `cat ovn-controller-vtep.pid`" AT_CHECK([[sed < stderr ' /vlog|INFO|opened log file/d /reconnect|INFO|/d']]) @@ -113,6 +114,7 @@ AT_SETUP([ovn-controller-vtep - test chassis]) OVN_CONTROLLER_VTEP_START # verifies the initial ovn-sb db configuration. +OVS_WAIT_UNTIL([test -n "`ovn-sbctl show | grep Chassis`"]) AT_CHECK([ovn-sbctl show], [0], [dnl Chassis br-vtep Encap vxlan @@ -275,3 +277,191 @@ ${chassis_uuid} OVN_CONTROLLER_VTEP_STOP([/has already been associated with logical datapath/d]) AT_CLEANUP + + +# Tests vtep module vtep logical switch tunnel key update. +AT_SETUP([ovn-controller-vtep - test vtep-lswitch]) +OVN_CONTROLLER_VTEP_START + +# creates the logical switch in vtep and adds the corresponding logical +# port to 'br-test'. +AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0]) +OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0]) +OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep -- br-vtep_lswitch0`"]) + +# retrieves the expected tunnel key. +datapath_uuid=$(ovn-sbctl --columns=datapath list Port_Binding br-vtep_lswitch0 | cut -d ':' -f2 | tr -d ' ') +tunnel_key=$(ovn-sbctl --columns=tunnel_key list Datapath_Binding ${datapath_uuid} | cut -d ':' -f2 | tr -d ' ') +OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=tunnel_key list Logical_Switch | grep 0`"]) +# checks the vtep logical switch tunnel key configuration. +AT_CHECK_UNQUOTED([vtep-ctl --columns=tunnel_key list Logical_Switch | cut -d ':' -f2 | tr -d ' '], [0], [dnl +${tunnel_key} +]) + +# creates a second physical switch in vtep database, and binds its p0 vlan-100 +# to the same logical switch 'lswitch0'. +AT_CHECK([vtep-ctl add-ps br-vtep-void -- add-port br-vtep-void p0 -- bind-ls br-vtep-void p0 100 lswitch0]) +OVS_WAIT_UNTIL([test -n "`ovn-sbctl --columns=name list Chassis | grep -- br-vtep-void`"]) +OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep-void_lswitch0], [br-vtep-void], [lswitch0]) +OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep -- br-vtep-void_lswitch0`"]) + +# checks the vtep logical switch tunnel key configuration. +AT_CHECK_UNQUOTED([vtep-ctl --columns=tunnel_key list Logical_Switch | cut -d ':' -f2 | tr -d ' '], [0], [dnl +${tunnel_key} +]) + +# now, deletes br-vtep-void. +AT_CHECK([vtep-ctl del-ps br-vtep-void]) +OVS_WAIT_UNTIL([test -z "`ovn-sbctl --columns=name list Chassis | grep -- br-vtep-void`"]) +# checks the vtep logical switch tunnel key configuration. +AT_CHECK_UNQUOTED([vtep-ctl --columns=tunnel_key list Logical_Switch | cut -d ':' -f2 | tr -d ' '], [0], [dnl +${tunnel_key} +]) + +# changes the ovn-nb logical port type so that it is no longer +# vtep port. +AT_CHECK([ovn-nbctl lport-set-type br-vtep_lswitch0 void]) +OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=tunnel_key list Logical_Switch | grep 1`"]) +# now should see the tunnel key reset. +AT_CHECK([vtep-ctl --columns=tunnel_key list Logical_Switch | cut -d ':' -f2 | tr -d ' '], [0], [dnl +0 +]) + +OVN_CONTROLLER_VTEP_STOP +AT_CLEANUP + + +# Tests vtep module 'Ucast_Macs_Remote's. +AT_SETUP([ovn-controller-vtep - test vtep-macs 1]) +OVN_CONTROLLER_VTEP_START + +# creates a simple logical network with the vtep device and a fake hv chassis +# 'ch0'. +AT_CHECK([ovn-nbctl lport-add br-test vif0]) +AT_CHECK([ovn-nbctl lport-set-addresses vif0 f0:ab:cd:ef:01:02]) +AT_CHECK([ovn-sbctl chassis-add ch0 vxlan 1.2.3.5]) +AT_CHECK([ovn-sbctl lport-bind vif0 ch0]) + +# creates the logical switch in vtep and adds the corresponding logical +# port to 'br-test'. +AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0]) +OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0]) +OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep br-vtep_lswitch0`"]) + +# adds another lswitch 'br-void' in ovn-nb database. +AT_CHECK([ovn-nbctl lswitch-add br-void]) +# adds fake hv chassis 'ch1'. +AT_CHECK([ovn-nbctl lport-add br-void vif1]) +AT_CHECK([ovn-nbctl lport-set-addresses vif1 f0:ab:cd:ef:01:02]) +AT_CHECK([ovn-sbctl chassis-add ch1 vxlan 1.2.3.6]) +AT_CHECK([ovn-sbctl lport-bind vif1 ch1]) +OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep vif1`"]) + +# checks Ucast_Macs_Remote creation. +OVS_WAIT_UNTIL([test -n "`vtep-ctl list Ucast_Macs_Remote | grep _uuid`"]) +AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' '], [0], [dnl +"f0:ab:cd:ef:01:02" +]) + +# checks physical locator creation. +OVS_WAIT_UNTIL([test -n "`vtep-ctl list Physical_Locator | grep _uuid`"]) +AT_CHECK([vtep-ctl --columns=dst_ip list Physical_Locator | cut -d ':' -f2 | tr -d ' ' | grep -v 1.2.3.4 | sed '/^$/d'], [0], [dnl +"1.2.3.5" +]) + +# checks tunnel creation by ovs-vtep. +OVS_WAIT_UNTIL([test -n "`ovs-vsctl list Interface bfd1.2.3.5`"]) +AT_CHECK([ovs-vsctl --columns=options list Interface bfd1.2.3.5 | cut -d ':' -f2 | tr -d ' '], [0], [dnl +{remote_ip="1.2.3.5"} +]) + +# adds another mac to lport. +AT_CHECK([ovn-nbctl lport-set-addresses vif0 f0:ab:cd:ef:01:02 f0:ab:cd:ef:01:03]) +OVS_WAIT_UNTIL([test -n "`vtep-ctl list Ucast_Macs_Remote | grep 03`"]) +AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' ' | sort], [0], [dnl + +"f0:ab:cd:ef:01:02" +"f0:ab:cd:ef:01:03" +]) + +# removes one mac to lport. +AT_CHECK([ovn-nbctl lport-set-addresses vif0 f0:ab:cd:ef:01:03]) +OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=MAC list Ucast_Macs_Remote | grep 02`"]) +AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' ' | sort], [0], [dnl +"f0:ab:cd:ef:01:03" +]) + +# migrates mac to lport vif1 on 'br-void'. +AT_CHECK([ovn-nbctl lport-set-addresses vif0]) +AT_CHECK([ovn-nbctl lport-set-addresses vif1 f0:ab:cd:ef:01:03]) +OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=MAC list Ucast_Macs_Remote | grep 03`"]) +AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' ' | sort], [0], [dnl +]) + +OVN_CONTROLLER_VTEP_STOP +AT_CLEANUP + + +# Tests vtep module 'Ucast_Macs_Remote's (corner cases). +AT_SETUP([ovn-controller-vtep - test vtep-macs 2]) +OVN_CONTROLLER_VTEP_START + +# creates a simple logical network with the vtep device and a fake hv chassis +# 'ch0'. +AT_CHECK([ovn-nbctl lport-add br-test vif0]) +AT_CHECK([ovn-nbctl lport-set-addresses vif0 f0:ab:cd:ef:01:02]) +AT_CHECK([ovn-sbctl chassis-add ch0 vxlan 1.2.3.5]) +AT_CHECK([ovn-sbctl lport-bind vif0 ch0]) + +# creates another vif in the same logical switch with duplicate mac. +AT_CHECK([ovn-nbctl lport-add br-test vif1]) +AT_CHECK([ovn-nbctl lport-set-addresses vif1 f0:ab:cd:ef:01:02]) +AT_CHECK([ovn-sbctl lport-bind vif1 ch0]) + +# creates the logical switch in vtep and adds the corresponding logical +# port to 'br-test'. +AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0]) +OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0]) +OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep br-vtep_lswitch0`"]) + +# checks Ucast_Macs_Remote creation. Should still only be one entry, since duplicate +# mac in the same logical switch is not allowed. +OVS_WAIT_UNTIL([test -n "`vtep-ctl list Ucast_Macs_Remote | grep _uuid`"]) +AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' '], [0], [dnl +"f0:ab:cd:ef:01:02" +]) +# confirms the warning log. +OVS_WAIT_UNTIL([test -n "`grep WARN ovn-controller-vtep.log`"]) +AT_CHECK([sed -n 's/^.*\(|WARN|.*\)$/\1/p' ovn-controller-vtep.log | sed 's/([[-_:0-9a-z]][[-_:0-9a-z]]*)/()/g' | uniq], [0], [dnl +|WARN|MAC address () has already been known to be on logical port () in the same logical datapath, so just ignore this logical port () +]) + +# deletes vif1. +AT_CHECK([ovn-nbctl lport-del vif1]) + +# adds another lswitch 'br-void' in ovn-nb database. +AT_CHECK([ovn-nbctl lswitch-add br-void]) +# adds fake hv chassis 'ch1' and vif1 with same mac address as vif0. +AT_CHECK([ovn-nbctl lport-add br-void vif1]) +AT_CHECK([ovn-nbctl lport-set-addresses vif1 f0:ab:cd:ef:01:02]) +AT_CHECK([ovn-sbctl chassis-add ch1 vxlan 1.2.3.6]) +AT_CHECK([ovn-sbctl lport-bind vif1 ch1]) +OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep vif1`"]) + +# creates another logical switch in vtep and adds the corresponding logical +# port to 'br-void'. +AT_CHECK([vtep-ctl add-ls lswitch1 -- bind-ls br-vtep p0 200 lswitch1]) +OVN_NB_ADD_VTEP_PORT([br-void], [br-void_lswitch1], [br-vtep], [lswitch1]) +OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep br-void_lswitch1`"]) + +# checks Ucast_Macs_Remote creation. Should see two entries since it is allowed +# to have duplicate macs in different logical switches. +OVS_WAIT_UNTIL([test `vtep-ctl --columns=MAC list Ucast_Macs_Remote | grep 02 | wc -l` -gt 1]) +AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' ' | sort], [0], [dnl + +"f0:ab:cd:ef:01:02" +"f0:ab:cd:ef:01:02" +]) + +OVN_CONTROLLER_VTEP_STOP([/has already been known to be on logical port/d]) +AT_CLEANUP