Support userdata in NXT_PACKET_IN2.
[cascardo/ovs.git] / tests / cfm.at
index fdca4ac..0033f30 100644 (file)
@@ -28,23 +28,54 @@ MPID $2: extended
 ])
 
 m4_define([CFM_VSCTL_LIST_IFACE], [
-AT_CHECK([ovs-vsctl list interface $1 | sed -n '/$2/p'],[0],
+AT_CHECK([ovs-vsctl list interface $1 | sed -n '/$2 /p'],[0],
 [dnl
 $3
 ])
 ])
 
 m4_define([CFM_CHECK_DB], [
-CFM_VSCTL_LIST_IFACE([$1], [cfm_fault_status], [cfm_fault_status    : [[$2]]])
-CFM_VSCTL_LIST_IFACE([$1], [cfm_flap_count], [cfm_flap_count      : $3])
-CFM_VSCTL_LIST_IFACE([$1], [cfm_health], [cfm_health          : [[$4]]])
-CFM_VSCTL_LIST_IFACE([$1], [cfm_remote_mpids], [cfm_remote_mpids    : [[$5]]])
-CFM_VSCTL_LIST_IFACE([$1], [cfm_remote_opstate], [cfm_remote_opstate  : $6])
+CFM_VSCTL_LIST_IFACE([$1], [cfm_fault], [cfm_fault           : $2])
+CFM_VSCTL_LIST_IFACE([$1], [cfm_fault_status], [cfm_fault_status    : [[$3]]])
+CFM_VSCTL_LIST_IFACE([$1], [cfm_flap_count], [cfm_flap_count      : $4])
+CFM_VSCTL_LIST_IFACE([$1], [cfm_health], [cfm_health          : [[$5]]])
+CFM_VSCTL_LIST_IFACE([$1], [cfm_remote_mpids], [cfm_remote_mpids    : [[$6]]])
+CFM_VSCTL_LIST_IFACE([$1], [cfm_remote_opstate], [cfm_remote_opstate  : $7])
 ])
 
-# This test checks the update of cfm status to OVSDB at startup.
-# The cfm status should be updated to OVSDB within 3.5 * cfm_interval.
-AT_SETUP([cfm - check update ovsdb])
+# These two tests check the update of cfm status at different scenarios.
+
+# Test cfm status update at startup and removal.
+AT_SETUP([cfm - check update ovsdb 1])
+OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=gre \
+                    options:remote_ip=1.2.3.4 -- \
+                    set Interface p0 other_config:cfm_interval=300 other_config:cfm_extended=true])
+
+ovs-appctl time/stop
+
+AT_CHECK([ovs-vsctl set Interface p0 cfm_mpid=1])
+# at beginning, since the first fault check timeout is not reached
+# cfm_fault should be false.
+for i in `seq 0 4`; do
+    ovs-appctl time/warp 100
+    CFM_CHECK_DB([p0], [false], [], [0], [], [], [up])
+done
+
+# advance clock to pass the fault check timeout and check cfm
+# status update in OVSDB.
+ovs-appctl time/warp 1500 100
+CFM_CHECK_DB([p0], [true], [recv], [1], [], [], [up])
+
+# remove the cfm on p0 and status should be all empty.
+AT_CHECK([ovs-vsctl remove int p0 cfm_mpid 1])
+ovs-appctl time/warp 500 100
+CFM_CHECK_DB([p0], [[[]]], [], [[[]]], [], [], [[[]]])
+
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+# Test cfm status update in normal case.
+AT_SETUP([cfm - check update ovsdb 2])
 #Create 2 bridges connected by patch ports and enable cfm
 OVS_VSWITCHD_START([add-br br1 -- \
                     set bridge br1 datapath-type=dummy \
@@ -60,14 +91,19 @@ ovs-appctl time/stop
 
 AT_CHECK([ovs-vsctl set Interface p0 cfm_mpid=1])
 # check cfm status update in OVSDB.
-for i in `seq 0 14`; do ovs-appctl time/warp 100; done
-CFM_CHECK_DB([p0], [recv], [1], [], [], [up])
+ovs-appctl time/warp 1500 100
+CFM_CHECK_DB([p0], [true], [recv], [1], [], [], [up])
 
-# turn cfm on p1 off, should increment the cfm_flap_count on p0.
+# turn cfm on p1 on, cfm status of p0 and p1 should all go up.
 AT_CHECK([ovs-vsctl set interface p1 cfm_mpid=2])
-for i in `seq 0 14`; do ovs-appctl time/warp 100; done
-CFM_CHECK_DB([p0], [], [2], [], [2], [up])
-CFM_CHECK_DB([p1], [], [0], [], [1], [up])
+ovs-appctl time/warp 1500 100
+CFM_CHECK_DB([p0], [false], [], [2], [], [2], [up])
+CFM_CHECK_DB([p1], [false], [], [0], [], [1], [up])
+
+# turn cfm on p1 off, cfm status of p0 should go down again.
+AT_CHECK([ovs-vsctl remove int p1 cfm_mpid 2])
+ovs-appctl time/warp 1500 100
+CFM_CHECK_DB([p0], [true], [recv], [3], [], [], [up])
 
 OVS_VSWITCHD_STOP
 AT_CLEANUP
@@ -87,7 +123,7 @@ OVS_VSWITCHD_START([add-br br1 -- \
 
 ovs-appctl time/stop
 # wait for a while to stablize cfm.
-for i in `seq 0 100`; do ovs-appctl time/warp 100; done
+ovs-appctl time/warp 10100 100
 CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [300ms], [2], [up])
 CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [300ms], [1], [up])
 
@@ -130,7 +166,7 @@ OVS_VSWITCHD_START([add-br br1 -- \
 ovs-appctl time/stop
 # wait for a while to stablize cfm. (need a longer time, since in demand mode
 # the fault interval is (MAX(ccm_interval_ms, 500) * 3.5) ms)
-for i in `seq 0 200`; do ovs-appctl time/warp 100; done
+ovs-appctl time/warp 20100 100
 CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [300ms], [2], [up])
 CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [300ms], [1], [up])
 
@@ -158,7 +194,7 @@ CFM_CHECK_EXTENDED_FAULT([p0], [1], [recv], [0], [up], [up], [300ms])
 # now turn on the cfm on p1 again,
 AT_CHECK([ovs-vsctl set Interface p1 cfm_mpid=2])
 # cfm should be up for both p0 and p1
-for i in `seq 0 200`; do ovs-appctl time/warp 100; done
+ovs-appctl time/warp 20100 100
 CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [300ms], [2], [up])
 CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [300ms], [1], [up])
 
@@ -192,19 +228,19 @@ OVS_VSWITCHD_START([add-br br1 -- \
 ovs-appctl time/stop
 
 # wait for a while to stablize cfm.
-for i in `seq 0 100`; do ovs-appctl time/warp 100; done
+ovs-appctl time/warp 10100 100
 CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [100ms], [2], [up])
 CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [100ms], [1], [up])
 
 # turn cfm on p1 off, should increment the cfm_flap_count on p0.
 AT_CHECK([ovs-vsctl remove interface p1 cfm_mpid 2])
-for i in `seq 0 10`; do ovs-appctl time/warp 100; done
+ovs-appctl time/warp 1100 100
 CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count      : 1])
 CFM_VSCTL_LIST_IFACE([p1], [cfm_flap_count], [cfm_flap_count      : [[]]])
 
 # turn cfm on p1 on again, should increment the cfm_flap_count on p0.
 AT_CHECK([ovs-vsctl set interface p1 cfm_mpid=2])
-for i in `seq 0 10`; do ovs-appctl time/warp 100; done
+ovs-appctl time/warp 1100 100
 CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count      : 2])
 
 OVS_VSWITCHD_STOP
@@ -223,7 +259,7 @@ OVS_VSWITCHD_START([add-br br1 -- \
 
 ovs-appctl time/stop
 # wait for a while to stablize cfm.
-for i in `seq 0 100`; do ovs-appctl time/warp 100; done
+ovs-appctl time/warp 10100 100
 CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [100ms], [2], [up])
 CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [100ms], [1], [up])
 AT_CHECK([ovs-appctl cfm/show p1 | grep 'fault_override'], [1], [ignore])
@@ -246,4 +282,4 @@ AT_CHECK([ovs-appctl cfm/show p1 | grep 'fault_override'], [1], [ignore])
 CFM_VSCTL_LIST_IFACE([p1], [cfm_fault_status], [cfm_fault_status    : [[]]])
 
 OVS_VSWITCHD_STOP
-AT_CLEANUP
\ No newline at end of file
+AT_CLEANUP