AT_BANNER([ovs-xapi-sync]) AT_SETUP([ovs-xapi-sync]) AT_SKIP_IF([test $HAVE_PYTHON = no]) # Mock up the XenAPI. cp "$top_srcdir/tests/MockXenAPI.py" XenAPI.py PYTHONPATH=`pwd`:$PYTHONPATH export PYTHONPATH OVS_PKGDATADIR=`pwd`; export OVS_PKGDATADIR cp "$top_srcdir/vswitchd/vswitch.ovsschema" . cp "$top_srcdir/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync" \ ovs-xapi-sync trap 'kill `cat pid ovs-xapi-sync.pid`' 0 mkdir var var/run touch var/run/xapi_init_complete.cookie ovs_vsctl () { ovs-vsctl --timeout=5 --no-wait -vreconnect:ANY:emer --db=unix:socket "$@" } # Start ovsdb-server. OVS_VSCTL_SETUP # Start ovs-xapi-sync. AT_CHECK([$PYTHON ./ovs-xapi-sync "--pidfile=`pwd`/ovs-xapi-sync.pid" \ "--root-prefix=`pwd`" unix:socket >log 2>&1 &]) AT_CAPTURE_FILE([log]) # Add bridges and check ovs-xapi-sync's work. AT_CHECK([ovs_vsctl -- add-br xenbr0 -- add-br xenbr1]) OVS_WAIT_UNTIL([test "X`ovs_vsctl get bridge xenbr0 fail-mode`" != "X[[]]"]) AT_CHECK([ovs_vsctl \ -- get bridge xenbr0 fail-mode other-config external-ids \ -- get bridge xenbr1 fail-mode other-config external-ids], [0], [[secure {} {bridge-id="custom bridge ID"} secure {disable-in-band="true"} {} ]]) # Add vif and check daemon's work. AT_CHECK([ovs_vsctl \ -- add-port xenbr0 vif1.0 \ -- set Interface vif1.0 'external-ids={attached-mac="00:11:22:33:44:55", xs-network-uuid="9b66c68b-a74e-4d34-89a5-20a8ab352d1e", xs-vif-uuid="6ab1b260-398e-49ba-827b-c7696108964c", xs-vm-uuid="fcb8a3f6-dc04-41d2-8b8a-55afd2b755b8"'}]) OVS_WAIT_UNTIL([ovs_vsctl get interface vif1.0 external-ids:iface-id >/dev/null 2>&1]) AT_CHECK([ovs_vsctl get interface vif1.0 external-ids], [0], [{attached-mac="00:11:22:33:44:55", iface-id="custom iface ID", iface-status=active, vm-id="custom vm ID", xs-network-uuid="9b66c68b-a74e-4d34-89a5-20a8ab352d1e", xs-vif-uuid="6ab1b260-398e-49ba-827b-c7696108964c", xs-vm-uuid="fcb8a3f6-dc04-41d2-8b8a-55afd2b755b8"} ]) # Add corresponding tap and check daemon's work. AT_CHECK([ovs_vsctl add-port xenbr0 tap1.0]) OVS_WAIT_UNTIL([ovs_vsctl get interface tap1.0 external-ids:iface-id >/dev/null 2>&1]) AT_CHECK([ovs_vsctl \ -- get interface vif1.0 external-ids \ -- get interface tap1.0 external-ids], [0], [{attached-mac="00:11:22:33:44:55", iface-id="custom iface ID", iface-status=inactive, vm-id="custom vm ID", xs-network-uuid="9b66c68b-a74e-4d34-89a5-20a8ab352d1e", xs-vif-uuid="6ab1b260-398e-49ba-827b-c7696108964c", xs-vm-uuid="fcb8a3f6-dc04-41d2-8b8a-55afd2b755b8"} {attached-mac="00:11:22:33:44:55", iface-id="custom iface ID", iface-status=active, vm-id="custom vm ID", xs-network-uuid="9b66c68b-a74e-4d34-89a5-20a8ab352d1e", xs-vif-uuid="6ab1b260-398e-49ba-827b-c7696108964c", xs-vm-uuid="fcb8a3f6-dc04-41d2-8b8a-55afd2b755b8"} ]) # Remove corresponding tap and check daemon's work. AT_CHECK([ovs_vsctl del-port tap1.0]) OVS_WAIT_UNTIL([test `ovs_vsctl get interface vif1.0 external-ids:iface-status` = active]) AT_CHECK([ovs_vsctl get interface vif1.0 external-ids], [0], [{attached-mac="00:11:22:33:44:55", iface-id="custom iface ID", iface-status=active, vm-id="custom vm ID", xs-network-uuid="9b66c68b-a74e-4d34-89a5-20a8ab352d1e", xs-vif-uuid="6ab1b260-398e-49ba-827b-c7696108964c", xs-vm-uuid="fcb8a3f6-dc04-41d2-8b8a-55afd2b755b8"} ]) AT_CLEANUP