diff options
author | Alex Wang <alexw@nicira.com> | 2015-07-03 22:55:24 -0700 |
---|---|---|
committer | Alex Wang <alexw@nicira.com> | 2015-08-16 17:08:37 -0700 |
commit | 6228d33fee706314ea1e3e1d3a76eada5ad5a3d1 (patch) | |
tree | bd2fe57b28646f40c0c17a98e1f86f4bd308c0ac /tests/ovn-controller-vtep.at | |
parent | dc4b6ffb2ed6c76130d70d8594cad776eed993db (diff) | |
download | openvswitch-6228d33fee706314ea1e3e1d3a76eada5ad5a3d1.tar.gz |
ovn-controller-vtep: Add binding module.
This commit adds the binding module to ovn-controller-vtep. The
module will scan through the Port_Binding table in ovnsb. If there is
a port binding entry for a logical switch on the vtep gateway chassis's
"vtep_logical_switches", sets the port binding's chassis column to the
vtep gateway chassis.
Signed-off-by: Alex Wang <alexw@nicira.com>
Acked-by: Russell Bryant <rbryant@redhat.com>
Diffstat (limited to 'tests/ovn-controller-vtep.at')
-rw-r--r-- | tests/ovn-controller-vtep.at | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/tests/ovn-controller-vtep.at b/tests/ovn-controller-vtep.at index 12d0134a8..8338385e6 100644 --- a/tests/ovn-controller-vtep.at +++ b/tests/ovn-controller-vtep.at @@ -84,7 +84,19 @@ m4_define([OVN_CONTROLLER_VTEP_STOP], AT_CHECK([ovs-appctl -t ovn-controller-vtep exit]) AT_CHECK([ovs-appctl -t ovs-vswitchd exit])]) +# Adds logical port for a vtep gateway chassis in ovn-nb database. +# +# $1: logical switch name in ovn-nb database +# $2: logical port name +# $3: physical vtep gateway name +# $4: logical switch name on vtep gateway chassis +m4_define([OVN_NB_ADD_VTEP_PORT], [ +AT_CHECK([ovn-nbctl lport-add $1 $2]) +AT_CHECK([ovn-nbctl lport-set-type $2 vtep]) +AT_CHECK([ovn-nbctl lport-set-options $2 vtep-physical-switch=$3 vtep-logical-switch=$4]) +]) +############################################## # tests chassis related updates. AT_SETUP([ovn-controller-vtep - test chassis]) @@ -154,3 +166,106 @@ AT_CHECK([ovn-sbctl --columns=vtep_logical_switches list Chassis | cut -d ':' -f OVN_CONTROLLER_VTEP_STOP(["/Chassis for VTEP physical switch (br-vtep) disappears/d"]) AT_CLEANUP + + +# Tests binding updates. +AT_SETUP([ovn-controller-vtep - test binding 1]) +OVN_CONTROLLER_VTEP_START + +# adds logical switch 'lswitch0' and vlan_bindings. +AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0 -- bind-ls br-vtep p1 300 lswitch0]) +# adds lport in ovn-nb database, and sets the type and options. +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`"]) +# should see one binding, associated to chassis of 'br-vtep'. +chassis_uuid=$(ovn-sbctl --columns=_uuid list Chassis br-vtep | cut -d ':' -f2 | tr -d ' ') +AT_CHECK_UNQUOTED([ovn-sbctl --columns=chassis list Port_Binding br-vtep_lswitch0 | cut -d ':' -f2 | tr -d ' '], [0], [dnl +${chassis_uuid} +]) + +# adds another logical switch 'lswitch1' and vlan_bindings. +AT_CHECK([vtep-ctl add-ls lswitch1 -- bind-ls br-vtep p0 200 lswitch1]) +# adds lport in ovn-nb database for lswitch1. +OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch1], [br-vtep], [lswitch1]) +OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep -- br-vtep_lswitch1`"]) +# This is allowed, but not recommended, to have two vlan_bindings (to different vtep logical switches) +# from one vtep gateway physical port in one ovn-nb logical swithch. +AT_CHECK_UNQUOTED([ovn-sbctl --columns=chassis list Port_Binding | cut -d ':' -f2 | tr -d ' ' | sort -d], [0], [dnl + +${chassis_uuid} +${chassis_uuid} +]) + +# adds another lport in ovn-nb database for lswitch0. +OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0_dup], [br-vtep], [lswitch0]) +OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep -- br-vtep_lswitch0_dup`"]) +# it is not allowed to have more than one ovn-nb logical port for the same +# vtep logical switch on a vtep gateway chassis, so should still see only +# two port_binding entries bound. +AT_CHECK_UNQUOTED([ovn-sbctl --columns=chassis list Port_Binding | cut -d ':' -f2 | tr -d ' ' | sort -d], [0], [dnl + + +[[]] +${chassis_uuid} +${chassis_uuid} +]) +# confirms the warning 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|logical switch (), on vtep gateway chassis () has already been associated with logical port (), ignore logical port () +]) + +# deletes physical ports from vtep. +AT_CHECK([ovs-vsctl del-port p0 -- del-port p1]) +AT_CHECK([vtep-ctl del-port br-vtep p0 -- del-port br-vtep p1]) +OVS_WAIT_UNTIL([test -z "`ovn-sbctl list Chassis | grep -- br-vtep_lswitch`"]) +# should see empty chassis column in both binding entries. +AT_CHECK_UNQUOTED([ovn-sbctl --columns=chassis list Port_Binding | cut -d ':' -f2 | tr -d ' ' | sort], [0], [dnl + + +[[]] +[[]] +[[]] +]) + +OVN_CONTROLLER_VTEP_STOP(["/has already been associated with logical port/d"]) +AT_CLEANUP + + +# Tests corner case: Binding the vtep logical switch from two different +# datapath. +AT_SETUP([ovn-controller-vtep - test binding 2]) +OVN_CONTROLLER_VTEP_START + +# adds logical switch 'lswitch0' and vlan_bindings. +AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0]) +# adds lport in ovn-nb database, and sets the type and options. +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 another vtep pswitch 'br-vtep-void' in vtep database. +AT_CHECK([vtep-ctl add-ps br-vtep-void -- add-port br-vtep-void p0-void -- bind-ls br-vtep-void p0-void 100 lswitch0]) +# adds a conflicting logical port (both br-vtep_lswitch0 and br-vtep-void_lswitch0 +# are bound to the same logical switch, but they are on different datapath). +OVN_NB_ADD_VTEP_PORT([br-void], [br-vtep-void_lswitch0], [br-vtep-void], [lswitch0]) +OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep br-vtep-void_lswitch0`"]) +OVS_WAIT_UNTIL([test -n "`grep WARN ovn-controller-vtep.log`"]) +# confirms the warning log. +AT_CHECK([sed -n 's/^.*\(|WARN|.*\)$/\1/p' ovn-controller-vtep.log | sed 's/([[-_0-9a-z]][[-_0-9a-z]]*)/()/g;s/(with tunnel key [[0-9]][[0-9]]*)/()/g' | uniq], [0], [dnl +|WARN|logical switch (), on vtep gateway chassis () has already been associated with logical datapath (), ignore logical port () which belongs to logical datapath () +]) + +# then deletes 'br-void' and 'br-vtep-void', should see 'br-vtep_lswitch0' +# bound correctly. +AT_CHECK([ovn-nbctl lswitch-del br-void]) +# adds another vtep pswitch 'br-vtep-void' in vtep database. +AT_CHECK([vtep-ctl del-ps br-vtep-void]) +OVS_WAIT_UNTIL([test -z "`ovn-sbctl list Port_Binding | grep br-vtep-void_lswitch0`"]) +chassis_uuid=$(ovn-sbctl --columns=_uuid list Chassis br-vtep | cut -d ':' -f2 | tr -d ' ') +AT_CHECK_UNQUOTED([ovn-sbctl --columns=chassis list Port_Binding br-vtep_lswitch0 | cut -d ':' -f2 | tr -d ' '], [0], [dnl +${chassis_uuid} +]) + +OVN_CONTROLLER_VTEP_STOP(["/has already been associated with logical datapath/d"]) +AT_CLEANUP |