Goofed last minute change about action comparison for modifies, modify does not change timeouts -- fixed
diff --git a/tests/flow_query.py b/tests/flow_query.py
index 8d29213..37f9adc 100644
--- a/tests/flow_query.py
+++ b/tests/flow_query.py
@@ -53,6 +53,11 @@
pa_port_map = config["port_map"]
pa_config = config
+ # TBD - Doesn't seem to take effect at the right time...
+ if test_param_get(pa_config, "dut", "") == "ovs":
+ # Disable this test by default, since the flow capacity reported by OVS is bogus.
+ test_prio["Flow_Add_6"] = -1
+
def flip_coin():
return random.randint(1, 100) <= 50
@@ -338,23 +343,25 @@
return False
if self.hard_timeout != x.hard_timeout:
return False
- # Compare actions lists as unordered, since Argon may re-order action lists.
- # This is in apparent violation of the spec.
- # TBD - Verify, or create option in test to check ordered/unordered
- aa = copy.deepcopy(x.actions.actions)
- for a in self.actions.actions:
- i = 0
- while i < len(aa):
- if a == aa[i]:
- break
- i = i + 1
- if i < len(aa):
- aa.pop(i)
- else:
- return False
- return aa == []
+ if test_param_get(pa_config, "dut", "") == "argon":
+ # Compare actions lists as unordered, since Argon may re-order action lists.
+ # This is in apparent violation of the spec.
+ aa = copy.deepcopy(x.actions.actions)
+ for a in self.actions.actions:
+ i = 0
+ while i < len(aa):
+ if a == aa[i]:
+ break
+ i = i + 1
+ if i < len(aa):
+ aa.pop(i)
+ else:
+ return False
+ return aa == []
+ else:
+ return self.actions == x.actions
- def flow_key_str(self):
+ def key_str(self):
result = "priority=%d" % self.priority
# TBD - Would be nice if ofp_match.show() was better behaved
# (no newlines), and more intuitive (things in hex where approprate), etc.
@@ -407,7 +414,8 @@
return (self.key_equal(x) and self.non_key_equal(x))
def __str__(self):
- result = self.flow_key_str()
+ result = self.key_str()
+ result = result + (", cookie=%d" % self.cookie)
result = result + (", idle_timeout=%d" % self.idle_timeout)
result = result + (", hard_timeout=%d" % self.hard_timeout)
for a in self.actions.actions:
@@ -460,10 +468,12 @@
act.vlan_vid = fi.rand_vlan()
self.actions.add(act)
elif a == ofp.OFPAT_SET_VLAN_PCP:
- # TBD - Temporaily removed, broken in Indigo
- #act = action.action_set_vlan_pcp()
- #act.vlan_pcp = random.randint(0, (1 << 3) - 1)
- pass
+ if test_param_get(pa_config, "dut", "") == "indigo":
+ # Temporaily removed, broken in Indigo
+ pass
+ else:
+ act = action.action_set_vlan_pcp()
+ act.vlan_pcp = random.randint(0, (1 << 3) - 1)
elif a == ofp.OFPAT_STRIP_VLAN:
act = action.action_strip_vlan()
self.actions.add(act)
@@ -609,22 +619,22 @@
else:
self.match.wildcards = wildcard_set(self.match.wildcards, ofp.OFPFW_NW_TOS, 1)
-# <TBD>
-# Due to a bug in OVS, don't specify nw_proto on it's own.
-# OVS will allow specifying a value for nw_proto, even if dl_type is not
-# specified as IP.
-# REMOVE FOR ARGON TESTING, AND BE SURE ABOUT INDENTATION
-# </TBD>
-# if wildcard_get(valid_wildcards, ofp.OFPFW_NW_PROTO) == 0 \
-# or exact \
-# or flip_coin():
-# self.match.nw_proto = fi.rand_ip_proto()
-# # Specifying an IP protocol requires that Ethertype is IP
-# if flip_coin():
-# self.match.dl_type = 0x0800
-# self.match.wildcards = wildcard_set(self.match.wildcards, ofp.OFPFW_DL_TYPE, 0)
-# else:
- self.match.wildcards = wildcard_set(self.match.wildcards, ofp.OFPFW_NW_PROTO, 1)
+ if test_param_get(pa_config, "dut", "") == "ovs":
+ # Due to a bug in OVS, don't specify nw_proto on it's own.
+ # OVS will allow specifying a value for nw_proto, even if dl_type is not
+ # specified as IP.
+ self.match.wildcards = wildcard_set(self.match.wildcards, ofp.OFPFW_NW_PROTO, 1)
+ else:
+ if wildcard_get(valid_wildcards, ofp.OFPFW_NW_PROTO) == 0 \
+ or exact \
+ or flip_coin():
+ self.match.nw_proto = fi.rand_ip_proto()
+ # Specifying an IP protocol requires that Ethertype is IP
+ if flip_coin():
+ self.match.dl_type = 0x0800
+ self.match.wildcards = wildcard_set(self.match.wildcards, ofp.OFPFW_DL_TYPE, 0)
+ else:
+ self.match.wildcards = wildcard_set(self.match.wildcards, ofp.OFPFW_NW_PROTO, 1)
if wildcard_get(valid_wildcards, ofp.OFPFW_TP_SRC) == 0 \
or exact\
@@ -818,13 +828,13 @@
self.clear()
def find(self, f):
- return self.dict.get(f.flow_key_str(), None)
+ return self.dict.get(f.key_str(), None)
def insert(self, f):
- self.dict[f.flow_key_str()] = f
+ self.dict[f.key_str()] = f
def delete(self, f):
- del self.dict[f.flow_key_str()]
+ del self.dict[f.key_str()]
def values(self):
return self.dict.values()
@@ -1172,9 +1182,6 @@
pa_logger.debug("Flow_Add_5_1 TEST PASSED")
-# Disable this test by default, since the flow capacity reported by OVS is bogus.
-test_prio["Flow_Add_6"] = -1
-
class Flow_Add_6(basic.SimpleProtocol):
"""
Test FLOW_ADD_6 from draft top-half test plan
@@ -1200,6 +1207,7 @@
self.assertTrue(sw.features_get(), "Get switch features failed")
self.assertTrue(sw.tbl_stats_get(), "Get table stats failed")
+ num_flows = 0
for ts in sw.tbl_stats.stats:
num_flows = num_flows + ts.max_entries
@@ -1674,9 +1682,8 @@
for fc in ft.values():
if mfc.overlaps(fc, True):
- fc.idle_timeout = mfc.idle_timeout
- fc.hard_timeout = mfc.hard_timeout
- fc.actions = mfc.actions
+ fc.cookie = mfc.cookie
+ fc.actions = mfc.actions
# Verify flow table