edited
diff --git a/tests/FuncUtils.py b/tests/FuncUtils.py
index 388c86c..d37e6ef 100644
--- a/tests/FuncUtils.py
+++ b/tests/FuncUtils.py
@@ -19,7 +19,7 @@
#################### Functions for various types of flow_mod ##########################################################################################
-def exact_match(self,of_ports,priority=0):
+def exact_match(self,of_ports,priority=None):
# Generate ExactMatch flow .
#Create a simple tcp packet and generate exact flow match from it.
@@ -34,7 +34,7 @@
msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
- if priority != 0 :
+ if priority != None :
msg.priority = priority
act = action.action_output()
@@ -47,7 +47,7 @@
return (pkt_exactflow,match)
-def exact_match_with_prio(self,of_ports,priority=0):
+def exact_match_with_prio(self,of_ports,priority=None):
# Generate ExactMatch with action output to port 2
#Create a simple tcp packet and generate exact flow match from it.
@@ -62,7 +62,7 @@
msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
- if priority != 0 :
+ if priority != None :
msg.priority = priority
act = action.action_output()
@@ -76,7 +76,7 @@
return (pkt_exactflow,match)
-def match_all_except_source_address(self,of_ports,priority=0):
+def match_all_except_source_address(self,of_ports,priority=None):
# Generate Match_All_Except_Source_Address flow
#Create a simple tcp packet and generate match all except src address flow.
@@ -91,7 +91,7 @@
msg1.command = ofp.OFPFC_ADD
msg1.buffer_id = 0xffffffff
msg1.match = match1
- if priority != 0 :
+ if priority != None :
msg1.priority = priority
act1 = action.action_output()
@@ -104,7 +104,7 @@
return (pkt_wildcardsrc,match1)
-def match_wthernet_src_address(self,of_ports,priority=0):
+def match_wthernet_src_address(self,of_ports,priority=None):
#Generate Match_Ethernet_SrC_Address flow
#Create a simple tcp packet and generate match on ethernet src address flow
@@ -119,7 +119,7 @@
msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
- if priority != 0 :
+ if priority != None :
msg.priority = priority
act = action.action_output()
@@ -132,7 +132,7 @@
return (pkt_MatchSrc,match)
-def match_ethernet_dst_address(self,of_ports,priority=0):
+def match_ethernet_dst_address(self,of_ports,priority=None):
#Generate Match_Ethernet_Dst_Address flow
#Create a simple tcp packet and generate match on ethernet dst address flow
@@ -146,7 +146,7 @@
msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
- if priority != 0 :
+ if priority != None :
msg.priority = priority
act = action.action_output()
@@ -159,7 +159,7 @@
return (pkt_matchdst,match)
-def wildcard_all(self,of_ports,priority=0):
+def wildcard_all(self,of_ports,priority=None):
# Generate a Wildcard_All Flow
#Create a simple tcp packet and generate wildcard all flow match from it.
@@ -177,7 +177,7 @@
act2 = action.action_output()
act2.port = of_ports[1]
self.assertTrue(msg2.actions.add(act2), "could not add action")
- if priority != 0 :
+ if priority != None :
msg2.priority = priority
rv = self.controller.message_send(msg2)
@@ -186,7 +186,7 @@
return (pkt_wildcard,match2)
-def wildcard_all_except_ingress(self,of_ports,priority=0):
+def wildcard_all_except_ingress(self,of_ports,priority=None):
# Generate Wildcard_All_Except_Ingress_port flow
@@ -211,7 +211,7 @@
act3.port = of_ports[1]
self.assertTrue(msg3.actions.add(act3), "could not add action")
- if priority != 0 :
+ if priority != None :
msg3.priority = priority
rv = self.controller.message_send(msg3)
@@ -220,7 +220,7 @@
return (pkt_matchingress,match3)
-def wildcard_all_except_ingress1(self,of_ports,priority=0):
+def wildcard_all_except_ingress1(self,of_ports,priority=None):
# Generate Wildcard_All_Except_Ingress_port flow with action output to port egress_port 2
@@ -244,7 +244,7 @@
act3 = action.action_output()
act3.port = of_ports[2]
self.assertTrue(msg3.actions.add(act3), "could not add action")
- if priority != 0 :
+ if priority != None :
msg3.priority = priority
rv = self.controller.message_send(msg3)
@@ -256,7 +256,7 @@
-def match_vlan_id(self,of_ports,priority=0):
+def match_vlan_id(self,of_ports,priority=None):
#Generate Match_Vlan_Id
#Create a simple tcp packet and generate match on ethernet dst address flow
@@ -270,7 +270,7 @@
msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
- if priority != 0 :
+ if priority != None :
msg.priority = priority
act = action.action_output()
@@ -283,7 +283,7 @@
return (pkt_matchvlanid,match)
-def match_vlan_pcp(self,of_ports,priority=0):
+def match_vlan_pcp(self,of_ports,priority=None):
#Generate Match_Vlan_Id
#Create a simple tcp packet and generate match on ethernet dst address flow
@@ -297,7 +297,7 @@
msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
- if priority != 0 :
+ if priority != None :
msg.priority = priority
act = action.action_output()
@@ -311,7 +311,7 @@
return (pkt_matchvlanpcp,match)
-def match_mul_l2(self,of_ports,priority=0):
+def match_mul_l2(self,of_ports,priority=None):
#Generate Match_Mul_L2 flow
#Create a simple eth packet and generate match on ethernet protocol flow
@@ -325,7 +325,7 @@
msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
- if priority != 0 :
+ if priority != None :
msg.priority = priority
act = action.action_output()
@@ -339,7 +339,7 @@
return (pkt_mulL2,match)
-def match_mul_L4(self,of_ports,priority=0):
+def match_mul_L4(self,of_ports,priority=None):
#Generate Match_Mul_L4 flow
#Create a simple tcp packet and generate match on tcp protocol flow
@@ -352,7 +352,7 @@
msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
- if priority != 0 :
+ if priority != None :
msg.priority = priority
act = action.action_output()
@@ -365,7 +365,7 @@
return (pkt_mulL4,match)
-def match_ip_tos(self,of_ports,priority=0):
+def match_ip_tos(self,of_ports,priority=None):
#Generate a Match on IP Type of service flow
#Create a simple tcp packet and generate match on Type of service
@@ -379,7 +379,7 @@
msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
- if priority != 0 :
+ if priority != None :
msg.priority = priority
act = action.action_output()
act.port = of_ports[1]
@@ -391,7 +391,7 @@
return (pkt_iptos,match)
-def match_tcp_src(self,of_ports,priority=0):
+def match_tcp_src(self,of_ports,priority=None):
#Generate Match_Tcp_Src
#Create a simple tcp packet and generate match on tcp source port flow
@@ -405,7 +405,7 @@
msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
- if priority != 0 :
+ if priority != None :
msg.priority = priority
act = action.action_output()
@@ -418,7 +418,7 @@
return (pkt_matchtSrc,match)
-def match_tcp_dst(self,of_ports,priority=0):
+def match_tcp_dst(self,of_ports,priority=None):
#Generate Match_Tcp_Dst
#Create a simple tcp packet and generate match on tcp destination port flow
@@ -432,7 +432,7 @@
msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
- if priority != 0 :
+ if priority != None :
msg.priority = priority
act = action.action_output()
act.port = of_ports[1]
@@ -448,7 +448,7 @@
-def match_ethernet_type(self,of_ports,priority=0):
+def match_ethernet_type(self,of_ports,priority=None):
#Generate a Match_Ethernet_Type flow
#Create a simple tcp packet and generate match on ethernet type flow
@@ -462,7 +462,7 @@
msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
- if priority != 0 :
+ if priority != None :
msg.priority = priority
act = action.action_output()
@@ -477,7 +477,7 @@
-def strict_modify_flow_action(self,egress_port,match,priority=0):
+def strict_modify_flow_action(self,egress_port,match,priority=None):
# Strict Modify the flow Action
#Create a flow_mod message , command MODIFY_STRICT
@@ -490,7 +490,7 @@
act5.port = egress_port
self.assertTrue(msg5.actions.add(act5), "could not add action")
- if priority != 0 :
+ if priority != None :
msg5.priority = priority
# Send the flow with action A'
@@ -498,7 +498,7 @@
self.assertTrue(rv != -1, "Error installing flow mod")
self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
-def modify_flow_action(self,of_ports,match,priority=0):
+def modify_flow_action(self,of_ports,match,priority=None):
# Modify the flow action
#Create a flow_mod message , command MODIFY
@@ -513,7 +513,7 @@
act8.port = of_ports[2]
self.assertTrue(msg8.actions.add(act8), "could not add action")
- if priority != 0 :
+ if priority != None :
msg8.priority = priority
# Send the flow with action A'
@@ -633,17 +633,10 @@
-def verify_tablestats(self,expect_lookup=0,expect_match=0,expect_active=0):
+def verify_tablestats(self,expect_lookup=None,expect_match=None,expect_active=None):
stat_req = message.table_stats_request()
-
- all_packets_lookedup = 0
- all_packets_matched = 0
- all_entries_active = 0
- lookedup = 0
- matched = 0
- active = 0
-
+
for i in range(0,60):
logging.info("Sending stats request")
@@ -652,56 +645,43 @@
timeout=5)
self.assertTrue(response is not None,"No response to stats request")
+ lookedup = 0
+ matched = 0
+ active = 0
+
for item in response.stats:
+
lookedup += item.lookup_count
matched += item.matched_count
active += item.active_count
logging.info("Packets Looked up " + str(lookedup) + " packets")
- if expect_lookup != 0 :
- if lookedup == expect_lookup:
- all_packets_lookedup = 1
-
logging.info("Packets matched " + str(matched) + "packets")
- if expect_match != 0 :
- if matched == expect_match:
- all_packets_matched = 1
-
logging.info("Active flow entries" + str(active) + "flows")
- if active != 0 :
- if active == expect_active:
- all_entries_active = 1
-
- if all_packets_lookedup == 1 and expect_lookup!= 0 :
- break
- if all_packets_matched== 1 and expect_match !=0 :
- break
- if all_entries_active ==1 and expect_active != 0 :
- break
+ if expect_lookup != None and expect_lookup != lookedup:continue
+ if expect_match != None and expect_match != matched:continue
+ if expect_active != None and expect_active != active:continue
+ break
+
sleep(1)
- if expect_lookup != 0 :
- self.assertTrue(all_packets_matched, "lookup counter is not incremented properly")
- if expect_match != 0 :
- self.assertTrue(all_packets_matched, "matched counter is not incremented properly")
- if expect_active != 0 :
- self.assertTrue(all_entries_active, "active counter is not incremented properly")
+ if expect_lookup != None :
+ self.assertEqual(expect_lookup,item.lookup_count,"lookup counter is not incremented properly")
+ if expect_match != None :
+ self.assertEqual(expect_match,item.matched_count, "matched counter is not incremented properly")
+ if expect_active != None :
+ self.assertEqual(expect_active,item.active_count,"active counter is not incremented properly")
-def verify_flowstats(self,match,byte_count=0,packet_count=0):
+def verify_flowstats(self,match,byte_count=None,packet_count=None):
# Verify flow counters : byte_count and packet_count
stat_req = message.flow_stats_request()
stat_req.match = match
stat_req.table_id = 0xff
stat_req.out_port = ofp.OFPP_NONE
-
- all_packets_rx = 0
- all_bytes_rx = 0
- packet_counter = 0
- byte_counter = 0
-
+
for i in range(0,60):
logging.info("Sending stats request")
# TODO: move REPLY_MORE handling to controller.transact?
@@ -709,44 +689,35 @@
timeout=5)
self.assertTrue(response is not None,"No response to stats request")
+ packet_counter = 0
+ byte_counter = 0
+
for item in response.stats:
packet_counter += item.packet_count
byte_counter += item.byte_count
logging.info("Recieved" + str(item.packet_count) + " packets")
- if packet_count != 0 :
- if packet_count == packet_counter:
- all_packets_rx = 1
-
+
logging.info("Received " + str(item.byte_count) + "bytes")
- if byte_count != 0 :
- if byte_counter == byte_count:
- all_bytes_rx = 1
+
+ if packet_count != None and packet_count != packet_counter: continue
+ if byte_count != None and byte_count != byte_counter: continue
+ break
- if all_packets_rx == 1 and packet_count != 0 :
- break
- if all_bytes_rx == 1 and byte_count !=0 :
- break
sleep(1)
+
+ if packet_count != None :
+ self.assertEqual(packet_count,item.packet_count,"packet_count counter is not incremented correctly")
- if packet_count != 0 :
- self.assertTrue(all_packets_rx,"packet_count counter is not incremented correctly")
-
- if byte_count != 0 :
- self.assertTrue(all_bytes_rx,"byte_count counter is not incremented correctly")
+ if byte_count != None :
+ self.assertEqual(byte_count,item.byte_count,"byte_count counter is not incremented correctly")
-def verify_portstats(self, port,tx_packets=0,rx_packets=0,rx_byte=0,tx_byte=0):
+def verify_portstats(self, port,tx_packets=None,rx_packets=None,rx_byte=None,tx_byte=None):
stat_req = message.port_stats_request()
stat_req.port_no = port
- all_packets_received = 0
- all_packets_sent = 0
- all_bytes_recieved = 0
- all_bytes_sent = 0
- sentp = recvp = 0
- sentb = recvb = 0
for i in range(0,60):
logging.info("Sending stats request")
@@ -756,57 +727,82 @@
"No response to stats request")
self.assertTrue(len(response.stats) == 1,
"Did not receive port stats reply")
+
+ sentp = recvp = 0
+ sentb = recvb = 0
+
for item in response.stats:
sentp += item.tx_packets
recvp += item.rx_packets
- sentb += item.tx_bytes
recvb += item.rx_bytes
+ sentb += item.tx_bytes
+
logging.info("Sent " + str(sentp) + " packets")
- if tx_packets != 0:
- if item.tx_packets == tx_packets:
- all_packets_sent = 1
-
logging.info("Received " + str(recvp) + " packets")
- if rx_packets !=0 :
- if item.rx_packets == rx_packets:
- all_packets_received = 1
-
logging.info("Received " + str(recvb) + "bytes")
- if rx_byte !=0 :
- if item.rx_bytes == rx_byte:
- all_bytes_received = 1
-
logging.info("Sent" + str(sentb) + "bytes")
- if tx_byte !=0 :
- if item.tx_bytes == tx_byte:
- all_bytes_sent = 1
-
- if rx_packets !=0 and all_packets_received == 1:
- break
- if tx_packets !=0 and all_packets_sent == 1:
- break
- if rx_byte !=0 and all_bytes_received == 1:
- break
- if tx_byte !=0 and all_bytes_sent == 1:
- break
+
+ if tx_packets != None and tx_packets != sentp: continue
+ if rx_packets != None and rx_packets != recvp: continue
+ if rx_byte != None and rx_byte != recvb: continue
+ if tx_byte != None and tx_byte != sentb: continue
+
+ break
sleep(1)
- if (rx_packets !=0):
- self.assertTrue(all_packets_received == 1 ,"rx_packets counter is not incremented correctly")
- if (tx_packets !=0):
- self.assertTrue(all_packets_sent == 1,"tx_packets counter is not incremented correctly")
- if (rx_byte !=0):
- self.assertTrue(all_bytes_received == 1 ,"rx_bytes counter is not incremented correctly")
- if (tx_byte !=0):
- self.assertTrue(all_bytes_sent == 1,"tx_bytes counter is not incremented correctly")
+ if (tx_packets != None):
+ self.assertEqual(tx_packets,item.tx_packets,"rx_packets counter is not incremented correctly")
+ if (rx_packets != None):
+ self.assertEqual(rx_packets,item.rx_packets,"tx_packets counter is not incremented correctly")
+ if (rx_byte != None):
+ self.assertEqual(rx_byte,item.rx_bytes,"rx_bytes counter is not incremented correctly")
+ if (tx_byte != None):
+ self.assertEqual(tx_byte,item.tx_bytes,"tx_bytes counter is not incremented correctly")
+def verify_queuestats(self,port_num,queue_id,expect_packet=None,expect_byte=None):
+
+ # Verify queue counters : tx_packets and tx_bytes
+
+ request = message.queue_stats_request()
+ request.port_no = port_num
+ request.queue_id = queue_id
+
+ for i in range(0,60):
+
+ logging.info("Sending stats request")
+
+ (queue_stats, p) = self.controller.transact(request)
+ self.assertNotEqual(queue_stats, None, "Queue stats request failed")
+ packet_counter = 0
+ byte_counter = 0
+
+ for item in queue_stats.stats[0]:
+ packet_counter += item.tx_packets
+ byte_counter += item.tx_bytes
+
+ logging.info("Transmitted" + str(packet_counter) + " packets")
+ logging.info("Transmitted" + str(byte_counter) + "bytes")
+
+ if expect_packet != None and packet_counter != expect_packet: continue
+ if expect_byte != None and byte_counter != expect_byte: continue
+ break
+
+ sleep(1)
+
+ if expect_packet != None :
+ self.assertEqual(packet_counter,expect_packet,"tx_packets counter is not incremented correctly")
+
+ if expect_byte != None :
+ self.assertEqual(byte_counter,expect_byte,"tx_bytes counter is not incremented correctly")
+
+
############################## Various delete commands #############################################################################################
-def strict_delete(self,match,priority=0):
+def strict_delete(self,match,priority=None):
# Issue Strict Delete
#Create flow_mod message, command DELETE_STRICT
@@ -816,7 +812,7 @@
msg4.buffer_id = 0xffffffff
msg4.match = match
- if priority != 0 :
+ if priority != None :
msg4.priority = priority
rv = self.controller.message_send(msg4)
self.assertTrue(rv!= -1, "Error installing flow mod")
@@ -824,7 +820,7 @@
-def nonstrict_delete(self,match,priority=0):
+def nonstrict_delete(self,match,priority=None):
# Issue Non_Strict Delete
#Create flow_mod message, command DELETE
@@ -834,7 +830,7 @@
msg6.buffer_id = 0xffffffff
msg6.match = match
- if priority != 0 :
+ if priority != None :
msg6.priority = priority
rv = self.controller.message_send(msg6)
diff --git a/tests/counters.py b/tests/counters.py
index 0a01419..e543f59 100644
--- a/tests/counters.py
+++ b/tests/counters.py
@@ -200,10 +200,9 @@
rv = delete_all_flows(self.controller)
self.assertEqual(rv, 0, "Failed to delete all flows")
-
logging.info("Insert any flow matching on in_port=ingress_port, action output to egress_port T ")
logging.info("Send N Packets matching the flow on ingress_port P ")
- logging.info("Send Port_Stats Request for Port P , verify transmitted packets counters are incrementing in accordance")
+ logging.info("Send Port_Stats Request for Port T , verify transmitted packets counters are incrementing in accordance")
#Insert a flow with match on all ingress port
(pkt,match) = wildcard_all_except_ingress(self,of_ports)
@@ -277,9 +276,9 @@
rv = delete_all_flows(self.controller)
self.assertEqual(rv, 0, "Failed to delete all flows")
- logging.info("Insert any flow matching on in_port=ingress_port,action = output to egress_port")
+ logging.info("Insert any flow matching on in_port=ingress_port,action = output to egress_port T")
logging.info("Send N Packets matching the flow on ingress_port P ")
- logging.info("Send Port_Stats Request for Port P , verify trasmitted bytes counters are incrementing in accordance")
+ logging.info("Send Port_Stats Request for Port T , verify trasmitted bytes counters are incrementing in accordance")
#Insert a flow with match on all ingress port
(pkt, match ) = wildcard_all_except_ingress(self,of_ports)
@@ -314,7 +313,7 @@
rv = delete_all_flows(self.controller)
self.assertEqual(rv, 0, "Failed to delete all flows")
- logging.info("Insert any flow matching on in_port=ingress_port,action = output to egress_port")
+ logging.info("Insert any flow matching on in_port=ingress_port,action = output to egress_port T ")
logging.info("Send Table_Stats, verify active_count counter is incremented in accordance")
#Insert a flow with match on all ingress port
@@ -402,16 +401,9 @@
#Send packet on the ingress_port and verify its received on egress_port
send_packet(self,pkt,ingress_port,egress_port)
- # FIXME: instead of sleeping, keep requesting queue stats until
- # the expected queue counter increases or some large timeout is
- # reached
- time.sleep(2)
+ expected_packets = qs_before.stats[0].tx_packets+1
- # Get Queue Stats for selected egress queue after packets have been sent
- (qs_after,p) = get_queuestats(self,egress_port,egress_queue_id)
-
- #Verify transmitted packets counter is incremented in accordance
- self.assertEqual(qs_after.stats[0].tx_packets,qs_before.stats[0].tx_packets + 1,"tx_packet count incorrect")
+ verify_queuestats(self,egress_port,egress_queue_id,expect_packet=expected_packets)
class TxBytPerQueue(base_tests.SimpleDataPlane):
@@ -449,19 +441,11 @@
#Send packet on the ingress_port and verify its received on egress_port
send_packet(self,pkt,ingress_port,egress_port)
- # FIXME: instead of sleeping, keep requesting queue stats until
- # the expected queue counter increases or some large timeout is
- # reached
- time.sleep(2)
+ expected_bytes = qs_before.stats[0].tx_bytes+len(str(pkt))
- # Get Queue Stats for selected egress queue after packets have been sent
- (qs_after,p) = get_queuestats(self,egress_port,egress_queue_id)
-
- #Verify transmitted packets counter is incremented in accordance
- self.assertEqual(qs_after.stats[0].tx_bytes,qs_before.stats[0].tx_bytes + 1,"tx_bytes count incorrect")
+ verify_queuestats(self,egress_port,egress_queue_id,expect_packet=expected_bytes)
-
-
+
class RxDrops(base_tests.SimpleDataPlane):
"""Verify that rx_dropped counters in the Port_Stats reply increments in accordance with the packets dropped by RX"""