define priorities as a property on the test class
This is just cleaner than keeping a global dictionary.
diff --git a/oft b/oft
index d7aeb48..8262457 100755
--- a/oft
+++ b/oft
@@ -32,10 +32,10 @@
port_map : Map of dataplane OpenFlow port to OS interface names
</pre>
-Each test may be assigned a priority by setting test_prio["TestName"] in
-the respective module. For now, the only use of this is to avoid
+Each test may be assigned a priority by setting the "priority" property
+in the class definition. For now, the only use of this is to avoid
automatic inclusion of tests into the default list. This is done by
-setting the test_prio value less than 0. Eventually we may add ordering
+setting the priority value less than 0. Eventually we may add ordering
of test execution by test priority.
To add a test to the system, either: edit an existing test case file (like
@@ -426,22 +426,19 @@
return " " * spaces
return " "
-def test_prio_get(mod, test):
+def test_prio_get(test):
"""
Return the priority of a test
If test is in "skip list" from profile, return the skip value
- If set in the test_prio variable for the module, return
+ If the priority property is set in the class, return
that value. Otherwise return 100 (default)
"""
- if test in profile_mod.skip_test_list:
- logging.info("Skipping test %s due to profile" % test)
+ if test.__name__ in profile_mod.skip_test_list:
+ logging.info("Skipping test %s due to profile" % test.__name__)
return TEST_PRIO_SKIP
- if 'test_prio' in dir(mod):
- if test in mod.test_prio.keys():
- return mod.test_prio[test]
- return TEST_PRIO_DEFAULT
+ return getattr(test, "priority", TEST_PRIO_DEFAULT)
#
# Main script
@@ -478,7 +475,7 @@
desc = desc.split('\n')[0]
except:
desc = "No description"
- if test_prio_get(mod, testname) < 0:
+ if test_prio_get(test) < 0:
start_str = " * " + testname + ":"
else:
start_str = " " + testname + ":"
@@ -500,7 +497,7 @@
if config["list_test_names"]:
for (modname, (mod, tests)) in test_modules.items():
for (testname, test) in tests.items():
- if test_prio_get(mod, testname) >= 0:
+ if test_prio_get(test) >= 0:
print "%s.%s" % (modname, testname)
sys.exit(0)
@@ -510,7 +507,7 @@
for (modname, (mod, tests)) in test_modules.items():
for (testname, test) in tests.items():
- if test_prio_get(mod, testname) >= 0:
+ if test_prio_get(test) >= 0:
logging.info("Adding test " + modname + "." + testname)
suite.addTest(test())
@@ -557,7 +554,7 @@
if os.getuid() != 0 and not config["allow_user"]:
print "ERROR: Super-user privileges required. Please re-run with " \
"sudo or as root."
- exit(1)
+ sys.exit(1)
if config["random_seed"] is not None:
logging.info("Random seed: %d" % config["random_seed"])
diff --git a/tests/basic.py b/tests/basic.py
index 65f875a..a96adc8 100644
--- a/tests/basic.py
+++ b/tests/basic.py
@@ -38,8 +38,6 @@
#@var basic_config Local copy of global configuration data
basic_config = None
-test_prio = {}
-
TEST_VID_DEFAULT = 2
def test_set_init(config):
@@ -60,6 +58,8 @@
Root class for setting up the controller
"""
+ priority = 1
+
def setUp(self):
self.config = basic_config
logging.info("** START TEST CASE " + str(self))
@@ -127,8 +127,6 @@
logging.error("** FAILED ASSERTION: " + msg)
unittest.TestCase.assertTrue(self, cond, msg)
-test_prio["SimpleProtocol"] = 1
-
class SimpleDataPlane(SimpleProtocol):
"""
Root class that sets up the controller and dataplane
@@ -166,6 +164,8 @@
Root class that sets up only the dataplane
"""
+ priority = -1
+
def setUp(self):
self.clean_shutdown = True
self.config = basic_config
@@ -184,8 +184,6 @@
# self.dataplane.show()
# Would like an assert that checks the data plane
-test_prio["DataPlaneOnly"] = -1
-
class Echo(SimpleProtocol):
"""
Test echo response with no data
@@ -277,6 +275,9 @@
Send a packet to each dataplane port and verify that a packet
in message is received from the controller for each
"""
+
+ priority = -1
+
def runTest(self):
rc = delete_all_flows(self.controller)
self.assertEqual(rc, 0, "Failed to delete all flows")
@@ -302,9 +303,6 @@
'Packet in message received on port ' +
str(of_port))
-test_prio["PacketInDefaultDrop"] = -1
-
-
class PacketInBroadcastCheck(SimpleDataPlane):
"""
Check if bcast pkts leak when no flows are present
@@ -313,6 +311,9 @@
Send in a broadcast pkt
Look for the packet on other dataplane ports.
"""
+
+ priority = -1
+
def runTest(self):
# Need at least two ports
self.assertTrue(len(basic_port_map) > 1, "Too few ports for test")
@@ -332,8 +333,6 @@
self.assertTrue(pkt_in is None,
'BCast packet received on port ' + str(of_port))
-test_prio["PacketInBroadcastCheck"] = -1
-
class PacketOut(SimpleDataPlane):
"""
Test packet out function
@@ -437,6 +436,9 @@
Simply verify stats get transaction
"""
+
+ priority = -1
+
def runTest(self):
logging.info("Running StatsGet")
logging.info("Inserting trial flow")
@@ -454,8 +456,6 @@
"Did not get response for flow stats")
logging.debug(response.show())
-test_prio["FlowStatsGet"] = -1
-
class TableStatsGet(SimpleProtocol):
"""
Get table stats
diff --git a/tests/bsn_ipmask.py b/tests/bsn_ipmask.py
index 6a4d389..c3688ba 100644
--- a/tests/bsn_ipmask.py
+++ b/tests/bsn_ipmask.py
@@ -17,10 +17,6 @@
#@var im_config Local copy of global configuration data
im_config = None
-# For test priority
-#@var test_prio Set test priority for local tests
-test_prio = {}
-
def test_set_init(config):
basic.test_set_init(config)
@@ -58,6 +54,9 @@
"""
Exercise BSN vendor extension for configuring IP source/dest match mask
"""
+
+ priority = -1
+
def bsn_set_ip_mask(self, index, mask):
"""
Use the BSN_SET_IP_MASK vendor command to change the IP mask for the
@@ -190,6 +189,3 @@
msg(ip3)
self.dataplane.send(ports[0], str(pkt3))
receive_pkt_verify(self, [ports[2]], pkt3, ports[0])
-
-# Don't run by default
-test_prio["BSNConfigIPMask"] = -1
diff --git a/tests/caps.py b/tests/caps.py
index 823d55c..449fce6 100644
--- a/tests/caps.py
+++ b/tests/caps.py
@@ -23,9 +23,6 @@
#@var caps_config Local copy of global configuration data
caps_config = None
-# For test priority
-test_prio = {}
-
def test_set_init(config):
"""
Set up function for caps test classes
@@ -130,12 +127,13 @@
the parameter "caps_table_idx" in the configuration array,
you can control which table to check.
"""
+
+ priority = -1
+
def runTest(self):
logging.info("Running " + str(self))
flow_caps_common(self)
-test_prio["FillTableExact"] = -1
-
class FillTableWC(basic.SimpleProtocol):
"""
Fill the flow table with wildcard matches
@@ -155,8 +153,9 @@
you can control which table to check.
"""
+
+ priority = -1
+
def runTest(self):
logging.info("Running " + str(self))
flow_caps_common(self, is_exact=False)
-
-test_prio["FillTableWC"] = -1
diff --git a/tests/cxn.py b/tests/cxn.py
index 87f31c9..7127a91 100644
--- a/tests/cxn.py
+++ b/tests/cxn.py
@@ -24,8 +24,6 @@
#@var cxn_config Local copy of global configuration data
cxn_config = None
-test_prio = {}
-
def test_set_init(config):
"""
Set up function for connection test classes
@@ -44,6 +42,8 @@
Base handshake case to set up controller, but do not send hello.
"""
+ priority = -1
+
def controllerSetup(self, host, port):
self.controller = controller.Controller(host=host,port=port)
@@ -103,8 +103,6 @@
logging.error("** FAILED ASSERTION: " + msg)
unittest.TestCase.assertTrue(self, cond, msg)
-test_prio["BaseHandshake"] = -1
-
class HandshakeNoHello(BaseHandshake):
"""
TCP connect to switch, but do not sent hello,
@@ -155,6 +153,9 @@
Complete handshake and respond to echo request, but otherwise do nothing.
Good for manual testing.
"""
+
+ priority = -1
+
def runTest(self):
self.controllerSetup(cxn_config["controller_host"],
cxn_config["controller_port"])
@@ -180,5 +181,3 @@
self.assertTrue(not self.controller.active,
"Expected controller disconnect, but still active")
-test_prio["HandshakeAndKeepalive"] = -1
-
diff --git a/tests/flow_query.py b/tests/flow_query.py
index 9931c89..cd607dd 100644
--- a/tests/flow_query.py
+++ b/tests/flow_query.py
@@ -83,9 +83,6 @@
#@var fq_config Local copy of global configuration data
fq_config = None
-# For test priority
-test_prio = {}
-
def test_set_init(config):
"""
@@ -1691,7 +1688,6 @@
# Disabled.
# Should be DUT dependent.
-test_prio["Flow_Add_5_1"] = -1
class Flow_Add_5_1(basic.SimpleProtocol):
"""
@@ -1700,6 +1696,8 @@
INPUTS
None
"""
+
+ priority = -1
def runTest(self):
logging.info("Flow_Add_5_1 TEST BEGIN")
@@ -1808,7 +1806,6 @@
# Disabled because of bogus capacity reported by OVS.
# Should be DUT dependent.
-test_prio["Flow_Add_6"] = -1
class Flow_Add_6(basic.SimpleProtocol):
"""
@@ -1818,6 +1815,8 @@
num_flows - Number of flows to generate
"""
+ priority = -1
+
def runTest(self):
logging.info("Flow_Add_6 TEST BEGIN")
diff --git a/tests/load.py b/tests/load.py
index dadb42f..fa993dc 100644
--- a/tests/load.py
+++ b/tests/load.py
@@ -39,10 +39,6 @@
#@var load_config Local copy of global configuration data
load_config = None
-# For test priority
-#@var test_prio Set test priority for local tests
-test_prio = {}
-
def test_set_init(config):
"""
@@ -70,6 +66,9 @@
The test succeeds if the barrier response is received. Otherwise
the test fails.
"""
+
+ priority = -1
+
def runTest(self):
# Set up flow to send from port 1 to port 2 and copy to CPU
# Test parameter gives LB port base (assumes consecutive)
@@ -124,6 +123,3 @@
logging.debug("Deleting all flows from switch")
rc = delete_all_flows(self.controller)
self.assertEqual(rc, 0, "Failed to delete all flows")
-
-# Do not run by default; still mysterious disconnects often
-test_prio["LoadBarrier"] = -1
diff --git a/tests/pktact.py b/tests/pktact.py
index ef7505e..d22690c 100644
--- a/tests/pktact.py
+++ b/tests/pktact.py
@@ -38,10 +38,6 @@
#@var pa_config Local copy of global configuration data
pa_config = None
-# For test priority
-#@var test_prio Set test priority for local tests
-test_prio = {}
-
WILDCARD_VALUES = [ofp.OFPFW_IN_PORT,
ofp.OFPFW_DL_VLAN | ofp.OFPFW_DL_VLAN_PCP,
ofp.OFPFW_DL_SRC,
@@ -972,6 +968,8 @@
ExactMatchTagged with many VLANS
"""
+ priority = -1
+
def runTest(self):
for vid in range(2,100,10):
flow_match_test(self, pa_port_map, dl_vlan=vid, max_test=5)
@@ -979,10 +977,6 @@
flow_match_test(self, pa_port_map, dl_vlan=vid, max_test=5)
flow_match_test(self, pa_port_map, dl_vlan=4094, max_test=5)
-# Don't run by default
-test_prio["ExactMatchTaggedMany"] = -1
-
-
class SingleWildcardMatchPriority(BaseMatchCase):
"""
SingleWildcardMatchPriority
@@ -1303,6 +1297,9 @@
"""
Just send a packet thru the switch
"""
+
+ priority = -1
+
def runTest(self):
pkt = simple_tcp_packet()
of_ports = pa_port_map.keys()
@@ -1316,6 +1313,9 @@
"""
Just send a packet thru the switch
"""
+
+ priority = -1
+
def runTest(self):
vid = test_param_get(self.config, 'vid', default=TEST_VID_DEFAULT)
pkt = simple_tcp_packet(dl_vlan_enable=True, dl_vlan=vid)
@@ -1326,9 +1326,6 @@
logging.debug("Data: " + str(pkt).encode('hex'))
self.dataplane.send(ing_port, str(pkt))
-test_prio["PacketOnly"] = -1
-test_prio["PacketOnlyTagged"] = -1
-
class ModifyVID(BaseMatchCase):
"""
Modify the VLAN ID in the VLAN tag of a tagged packet
@@ -1813,6 +1810,8 @@
The cases come from the list above
"""
+ priority = -1
+
def runTest(self):
count = test_param_get(self.config, 'iter_count', default=10)
tests_done = 0
@@ -1842,9 +1841,6 @@
logging.info(" active: %d. lookups: %d. matched %d." %
(stats["active"], stats["lookups"], stats["matched"]))
-# Don't run by default
-test_prio["IterCases"] = -1
-
#@todo Need to implement tagged versions of the above tests
#
#@todo Implement a test case that strips tag 2, adds tag 3
@@ -1874,7 +1870,7 @@
If only VID 5 distinguishes pkt, this will fail on some platforms
"""
-test_prio["MixedVLAN"] = -1
+ priority = -1
class MatchEach(basic.SimpleDataPlane):
"""
diff --git a/tests/serial_failover.py b/tests/serial_failover.py
index aebbbd2..97df2f8 100644
--- a/tests/serial_failover.py
+++ b/tests/serial_failover.py
@@ -24,8 +24,6 @@
#@var serial_failover_config Local copy of global configuration data
serial_failover_config = None
-test_prio = {}
-
def test_set_init(config):
"""
Set up function for serial failover test classes
@@ -51,6 +49,8 @@
--test-params="param1=val1;param2=val2"
"""
+ priority = -1
+
# populated by buildControllerList()
controller_list = []
controller_idx = 0
@@ -193,14 +193,10 @@
logging.error("** FAILED ASSERTION: " + msg)
unittest.TestCase.assertTrue(self, cond, msg)
-test_prio["SerialFailover"] = -1
-
class SerialFailoverNoEcho(SerialFailover):
+ priority = -1
def runTest(self):
for i in range(0,self.test_iterations):
self.doFailover('no_echo')
-
-test_prio["SerialFailoverNoEcho"] = -1
-