refactor verify_portstats and move to testutils
diff --git a/src/python/oftest/testutils.py b/src/python/oftest/testutils.py
index 0edcfb2..58d2ffb 100644
--- a/src/python/oftest/testutils.py
+++ b/src/python/oftest/testutils.py
@@ -1163,6 +1163,13 @@
out_port=out_port)
return get_stats(test, req)
+def get_port_stats(test, port_no):
+ """
+ Retrieve a list of port stats entries.
+ """
+ req = of10.message.port_stats_request(port_no=port_no)
+ return get_stats(test, req)
+
def verify_flow_stats(test, match, table_id=0xff,
out_port=of10.cstruct.OFPP_NONE,
initial=[],
@@ -1201,5 +1208,53 @@
if bytes != None:
test.assertEquals(byte_diff, bytes, "Flow byte counter not updated properly (expected increase of %d, got increase of %d)" % (bytes, byte_diff))
+def verify_port_stats(test, port,
+ initial=[],
+ tx_pkts=None, rx_pkts=None,
+ tx_bytes=None, rx_bytes=None):
+ """
+ Verify that port stats changed as expected.
+
+ Optionally takes an 'initial' list of stats entries, as returned by
+ get_port_stats(). If 'initial' is not given the counters are assumed to
+ begin at 0.
+ """
+ def accumulate(stats):
+ tx_pkts_acc = rx_pkts_acc = tx_bytes_acc = rx_bytes_acc = 0
+ for stat in stats:
+ tx_pkts_acc += stat.tx_packets
+ rx_pkts_acc += stat.rx_packets
+ tx_bytes_acc += stat.tx_bytes
+ rx_bytes_acc += stat.rx_bytes
+ return (tx_pkts_acc, rx_pkts_acc, tx_bytes_acc, rx_bytes_acc)
+
+ tx_pkts_before, rx_pkts_before, \
+ tx_bytes_before, rx_bytes_before = accumulate(initial)
+
+ # Wait 10s for counters to update
+ for i in range(0, 100):
+ stats = get_port_stats(test, port)
+ tx_pkts_after, rx_pkts_after, \
+ tx_bytes_after, rx_bytes_after = accumulate(stats)
+ tx_pkts_diff = tx_pkts_after - tx_pkts_before
+ rx_pkts_diff = rx_pkts_after - rx_pkts_before
+ tx_bytes_diff = tx_bytes_after - tx_bytes_before
+ rx_bytes_diff = rx_bytes_after - rx_bytes_before
+ if (tx_pkts == None or tx_pkts == tx_pkts_diff) and \
+ (rx_pkts == None or rx_pkts == rx_pkts_diff) and \
+ (tx_bytes == None or tx_bytes == tx_bytes_diff) and \
+ (rx_bytes == None or rx_bytes == rx_bytes_diff):
+ break
+ time.sleep(0.1)
+
+ if (tx_pkts != None):
+ test.assertEqual(tx_pkts,tx_pkts_diff,"Port TX packet counter is not updated correctly (expected increase of %d, got increase of %d)" % (tx_pkts, tx_pkts_diff))
+ if (rx_pkts != None):
+ test.assertEqual(rx_pkts,rx_pkts_diff,"Port RX packet counter is not updated correctly (expected increase of %d, got increase of %d)" % (rx_pkts, rx_pkts_diff))
+ if (tx_bytes != None):
+ test.assertEqual(tx_bytes,tx_bytes_diff,"Port TX byte counter is not updated correctly (expected increase of %d, got increase of %d)" % (tx_bytes, tx_bytes_diff))
+ if (rx_bytes != None):
+ test.assertEqual(rx_bytes,rx_bytes_diff,"Port RX byte counter is not updated correctly (expected increase of %d, got increase of %d)" % (rx_bytes, rx_bytes_diff))
+
__all__ = list(set(locals()) - _import_blacklist)