Initial set of Fabric switch test cases
Change-Id: I86fd2b67d3b773aa496f5ef61f1e1fdf51fd9925
diff --git a/Fabric/Utilities/accton/group_test.py b/Fabric/Utilities/accton/group_test.py
new file mode 100755
index 0000000..67d6fda
--- /dev/null
+++ b/Fabric/Utilities/accton/group_test.py
@@ -0,0 +1,883 @@
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+"""
+Group table test
+Verify each group table can created correctly
+"""
+from oftest import config
+
+import logging
+import random
+
+from oftest import config
+import oftest
+import oftest.base_tests as base_tests
+import ofp
+
+from oftest.testutils import *
+from accton_util import *
+
+def getkey(type):
+ def byGroupId(stats_entry):
+ return stats_entry.group_id
+
+ def byGroupType(stats_entry):
+ return stats_entry.group_type
+
+
+ if type == "group_id":
+ return byGroupId
+ elif type == "group_type":
+ return byGroupType
+ else:
+ assert(0)
+ return byGroupId
+
+class L2InterfaceGroupOne(base_tests.SimpleDataPlane):
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ group_list1, msg1 = add_one_l2_interface_group(self.controller, config["port_map"].keys()[0], 1, False, False)
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[ofp.group_desc_stats_entry(
+ group_type=msg1.group_type,
+ group_id=msg1.group_id,
+ buckets=msg1.buckets)]
+
+ self.maxDiff=None
+
+ self.assertEquals(stats, verify_group_stats)
+
+class L2InterfaceGroup(base_tests.SimpleDataPlane):
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ group_list1, msg1 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 1, False, False)
+ group_list2, msg2 =add_l2_interface_grouop(self.controller, config["port_map"].keys(), 2, False, False)
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+
+ for msg in msg1:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets))
+
+ for msg in msg2:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets))
+
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+ #self.maxDiff=None
+ self.assertEquals(stats, verify_group_stats)
+
+class L2McastGroup(base_tests.SimpleDataPlane):
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ group_list1, msg1 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 1, False, False)
+ msg2=add_l2_mcast_group(self.controller, config["port_map"].keys(), 1, 1)
+
+ group_list1, msg3 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 2, False, False)
+ msg4=add_l2_mcast_group(self.controller, config["port_map"].keys(), 2, 2)
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ for msg in msg1:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg2.group_type,
+ group_id=msg2.group_id,
+ buckets=msg2.buckets)
+ )
+
+ for msg in msg3:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg4.group_type,
+ group_id=msg4.group_id,
+ buckets=msg4.buckets)
+ )
+
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+ self.maxDiff=None
+ self.assertEquals(stats, verify_group_stats)
+
+
+class L2FloodGroup(base_tests.SimpleDataPlane):
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ group_list1, msg1 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 1, False, False)
+ msg2=add_l2_flood_group(self.controller, config["port_map"].keys(), 1, 1)
+
+ group_list1, msg3 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 2, False, False)
+ msg4=add_l2_flood_group(self.controller, config["port_map"].keys(), 2, 2)
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ for msg in msg1:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg2.group_type,
+ group_id=msg2.group_id,
+ buckets=msg2.buckets)
+ )
+
+ for msg in msg3:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg4.group_type,
+ group_id=msg4.group_id,
+ buckets=msg4.buckets)
+ )
+
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+ self.maxDiff=None
+ self.assertEquals(stats, verify_group_stats)
+
+
+class L2RewriteGroup(base_tests.SimpleDataPlane):
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ group_list1, msg1 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 1, False, False)
+ msg2=add_l2_rewrite_group(self.controller, config["port_map"].keys()[0], 1, 1, [00,11,22,33,44,55], [00,22,22,22,22,22])
+
+ group_list1, msg3 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 2, False, False)
+ msg4=add_l2_rewrite_group(self.controller, config["port_map"].keys()[0], 2, 2, [00,11,22,33,44,55], [00,33,33,33,33,33])
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ for msg in msg1:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg2.group_type,
+ group_id=msg2.group_id,
+ buckets=msg2.buckets)
+ )
+
+ for msg in msg3:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg4.group_type,
+ group_id=msg4.group_id,
+ buckets=msg4.buckets)
+ )
+
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+
+ self.maxDiff=None
+ self.assertEquals(stats, verify_group_stats)
+
+
+class L3UnicastGroup(base_tests.SimpleDataPlane):
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ group_list1, msg1 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 1, False, False)
+ msg2=add_l3_unicast_group(self.controller, config["port_map"].keys()[0], 1, 1, [0x00,0x11,0x22,0x33,0x44,0x55], [00,0x22,0x22,0x22,0x22,0x22])
+
+ group_list1, msg3 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 2, False, False)
+ msg4=add_l3_unicast_group(self.controller, config["port_map"].keys()[0], 2, 2, [0x00,0x11,0x22,0x33,0x44,0x55], [00,0x33,0x33,0x33,0x33,0x33])
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ for msg in msg1:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg2.group_type,
+ group_id=msg2.group_id,
+ buckets=msg2.buckets)
+ )
+
+ for msg in msg3:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg4.group_type,
+ group_id=msg4.group_id,
+ buckets=msg4.buckets)
+ )
+
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+
+ self.maxDiff=None
+ self.assertEquals(stats, verify_group_stats)
+
+
+class L3ECMPGroup(base_tests.SimpleDataPlane):
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ group_list1, msg1 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 1, False, False)
+ msg2=add_l3_unicast_group(self.controller, config["port_map"].keys()[0], 1, 1, [0x00,0x11,0x22,0x33,0x44,0x55], [00,0x22,0x22,0x22,0x22,0x22])
+
+ group_list1, msg3 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 2, False, False)
+ msg4=add_l3_unicast_group(self.controller, config["port_map"].keys()[0], 2, 2, [0x00,0x11,0x22,0x33,0x44,0x55], [00,0x33,0x33,0x33,0x33,0x33])
+
+ group_ids=[msg2.group_id, msg4.group_id]
+
+ msg5=add_l3_ecmp_group(self.controller, 1, group_ids)
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ for msg in msg1:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg2.group_type,
+ group_id=msg2.group_id,
+ buckets=msg2.buckets)
+ )
+
+ for msg in msg3:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg4.group_type,
+ group_id=msg4.group_id,
+ buckets=msg4.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg5.group_type,
+ group_id=msg5.group_id,
+ buckets=msg5.buckets)
+ )
+
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+
+ self.maxDiff=None
+ self.assertEquals(stats, verify_group_stats)
+
+
+class L3InterfaceGroup(base_tests.SimpleDataPlane):
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ group_list1, msg1 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 1, False, False)
+ msg2=add_l3_interface_group(self.controller, config["port_map"].keys()[0], 1, 1, [0x00,0x11,0x22,0x33,0x44,0x55])
+ group_list1, msg3 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 2, False, False)
+ msg4=add_l3_interface_group(self.controller, config["port_map"].keys()[0], 2, 2, [0x00,0x11,0x22,0x33,0x44,0x66])
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ for msg in msg1:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg2.group_type,
+ group_id=msg2.group_id,
+ buckets=msg2.buckets)
+ )
+
+ for msg in msg3:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg4.group_type,
+ group_id=msg4.group_id,
+ buckets=msg4.buckets)
+ )
+
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+
+ self.maxDiff=None
+ self.assertEquals(stats, verify_group_stats)
+
+
+class L3McastGroup(base_tests.SimpleDataPlane):
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ # Vlan 3 forward to vlan 3 port 1 and 2
+ # Vlan 3 foward to vlan 1 port 1
+ # Vlan 3 foward to vlan 2 port 1
+ # Vlan 3 foward to vlan 2 port 2
+ group_list1_1, msg1 = add_l2_interface_grouop(self.controller, [config["port_map"].keys()[0]], 1, False, False)
+ msg2=add_l3_interface_group(self.controller, config["port_map"].keys()[0], 1, 1, [0x00,0x11,0x22,0x33,0x44,0x11])
+ group_list1_2, msg3 = add_l2_interface_grouop(self.controller, [config["port_map"].keys()[0]], 2, False, False)
+ msg4=add_l3_interface_group(self.controller, config["port_map"].keys()[0], 2, 2, [0x00,0x11,0x22,0x33,0x44,0x22])
+ group_list2_1, msg5 = add_l2_interface_grouop(self.controller, [config["port_map"].keys()[1]], 2, False, False)
+ msg6=add_l3_interface_group(self.controller, config["port_map"].keys()[1], 2, 3, [0x00,0x11,0x22,0x33,0x44,0x33])
+ group_list3, msg7 = add_l2_interface_grouop(self.controller, config["port_map"].keys(), 3, False, False)
+
+ group_actions=[msg2.group_id, msg4.group_id, msg6.group_id]
+ group_actions.extend(group_list3)
+
+ msg8=add_l3_mcast_group(self.controller, 3, 1, group_actions)
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ for msg in msg1:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg2.group_type,
+ group_id=msg2.group_id,
+ buckets=msg2.buckets)
+ )
+
+ for msg in msg3:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg4.group_type,
+ group_id=msg4.group_id,
+ buckets=msg4.buckets)
+ )
+ for msg in msg5:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg6.group_type,
+ group_id=msg6.group_id,
+ buckets=msg6.buckets)
+ )
+ for msg in msg7:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg8.group_type,
+ group_id=msg8.group_id,
+ buckets=msg8.buckets)
+ )
+
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+
+ self.maxDiff=None
+ self.assertEquals(stats, verify_group_stats)
+
+
+class mpls_intf_group(base_tests.SimpleDataPlane):
+ """
+ create mpls intf group
+ 1. ref l2_intf_group
+ 2. ref l2_flood_group
+ """
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ test_vid=1
+
+ #ref l2_intf_group
+ l2_intf_gid, l2_intf_msg = add_one_l2_interface_group(self.controller, config["port_map"].keys()[0], test_vid, False, False)
+ mpls_intf_gid, mpls_intf_msg=add_mpls_intf_group(self.controller, l2_intf_gid, [0x00,0x11,0x11,0x11,0x11,0x11], [0x00,0x22,0x22,0x22,0x22,0x22], vid=test_vid, index=1)
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=l2_intf_msg.group_type,
+ group_id=l2_intf_msg.group_id,
+ buckets=l2_intf_msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_intf_msg.group_type,
+ group_id=mpls_intf_msg.group_id,
+ buckets=mpls_intf_msg.buckets)
+ )
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+ self.assertEquals(stats, verify_group_stats)
+
+
+class mpls_l2_vpn_group(base_tests.SimpleDataPlane):
+ """
+ create mpls intf group
+ 1. ref l2_intf_group
+
+ """
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ test_vid=1
+ test_port=config["port_map"].keys()[0]
+ #ref l2_intf_group
+ l2_intf_gid, l2_intf_msg = add_one_l2_interface_group(self.controller, test_port, test_vid, False, False)
+ mpls_intf_gid, mpls_intf_msg=add_mpls_intf_group(self.controller, l2_intf_gid, [0x00,0x11,0x11,0x11,0x11,0x11], [0x00,0x22,0x22,0x22,0x22,0x22], vid=test_vid, index=1)
+ mpls_label_gid, mpls_label_msg=add_mpls_label_group(self.controller, subtype=OFDPA_MPLS_GROUP_SUBTYPE_L2_VPN_LABEL,
+ index=1,
+ ref_gid=mpls_intf_gid,
+ push_l2_header=True,
+ push_vlan=True,
+ push_mpls_header=True,
+ push_cw=False,
+ set_mpls_label=10,
+ set_bos=0,
+ set_tc=7,
+ set_tc_from_table=False,
+ cpy_tc_outward=False,
+ set_ttl=250,
+ cpy_ttl_outward=False,
+ oam_lm_tx_count=False,
+ set_pri_from_table=False
+ )
+
+ verify_group_stats=[]
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=l2_intf_msg.group_type,
+ group_id=l2_intf_msg.group_id,
+ buckets=l2_intf_msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_intf_msg.group_type,
+ group_id=mpls_intf_msg.group_id,
+ buckets=mpls_intf_msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_label_msg.group_type,
+ group_id=mpls_label_msg.group_id,
+ buckets=mpls_label_msg.buckets)
+ )
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats= get_stats(self, ofp.message.group_desc_stats_request())
+ stats=sorted(stats, key=getkey("group_id"))
+ #DumpGroup(stats, verify_group_stats)
+ #AssertGroup(self, stats, verify_group_stats)
+ self.assertEquals(stats, verify_group_stats)
+
+
+class mpls_tunnel_lable1_group(base_tests.SimpleDataPlane):
+ """
+ create mpls intf group
+ 1. ref l2_intf_group
+
+ """
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ test_vid=1
+ test_port=config["port_map"].keys()[0]
+ #ref l2_intf_group
+ l2_intf_gid, l2_intf_msg = add_one_l2_interface_group(self.controller, test_port, test_vid, False, False)
+ mpls_intf_gid, mpls_intf_msg=add_mpls_intf_group(self.controller, l2_intf_gid, [0x00,0x11,0x11,0x11,0x11,0x11], [0x00,0x22,0x22,0x22,0x22,0x22], vid=test_vid, index=1)
+ mpls_label_gid, mpls_label_msg=add_mpls_label_group(self.controller, subtype=OFDPA_MPLS_GROUP_SUBTYPE_TUNNEL_LABEL1,
+ index=1,
+ ref_gid=mpls_intf_gid,
+ push_l2_header=True,
+ push_vlan=True,
+ push_mpls_header=True,
+ push_cw=True,
+ set_mpls_label=10,
+ set_bos=0,
+ set_tc=7,
+ set_tc_from_table=False,
+ cpy_tc_outward=False,
+ set_ttl=250,
+ cpy_ttl_outward=False,
+ oam_lm_tx_count=False,
+ set_pri_from_table=False
+ )
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=l2_intf_msg.group_type,
+ group_id=l2_intf_msg.group_id,
+ buckets=l2_intf_msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_intf_msg.group_type,
+ group_id=mpls_intf_msg.group_id,
+ buckets=mpls_intf_msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_label_msg.group_type,
+ group_id=mpls_label_msg.group_id,
+ buckets=mpls_label_msg.buckets)
+ )
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+ self.assertEquals(stats, verify_group_stats)
+
+
+class mpls_tunnel_lable2_group(base_tests.SimpleDataPlane):
+ """
+ create mpls intf group
+ 1. ref l2_intf_group
+
+ """
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ test_vid=1
+ test_port=config["port_map"].keys()[0]
+ #ref l2_intf_group
+ l2_intf_gid, l2_intf_msg = add_one_l2_interface_group(self.controller, test_port, test_vid, False, False)
+ mpls_intf_gid, mpls_intf_msg=add_mpls_intf_group(self.controller, l2_intf_gid, [0x00,0x11,0x11,0x11,0x11,0x11], [0x00,0x22,0x22,0x22,0x22,0x22], vid=test_vid, index=1)
+ mpls_label_gid, mpls_label_msg=add_mpls_label_group(self.controller, subtype=OFDPA_MPLS_GROUP_SUBTYPE_TUNNEL_LABEL2,
+ index=1,
+ ref_gid=mpls_intf_gid,
+ push_l2_header=True,
+ push_vlan=True,
+ push_mpls_header=True,
+ push_cw=True,
+ set_mpls_label=10,
+ set_bos=0,
+ set_tc=7,
+ set_tc_from_table=False,
+ cpy_tc_outward=False,
+ set_ttl=250,
+ cpy_ttl_outward=False,
+ oam_lm_tx_count=False,
+ set_pri_from_table=False
+ )
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=l2_intf_msg.group_type,
+ group_id=l2_intf_msg.group_id,
+ buckets=l2_intf_msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_intf_msg.group_type,
+ group_id=mpls_intf_msg.group_id,
+ buckets=mpls_intf_msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_label_msg.group_type,
+ group_id=mpls_label_msg.group_id,
+ buckets=mpls_label_msg.buckets)
+ )
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+ self.assertEquals(stats, verify_group_stats)
+
+class mpls_swap_label_group(base_tests.SimpleDataPlane):
+ """
+ create mpls intf group
+ 1. ref l2_intf_group
+ """
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ test_vid=1
+ test_port=config["port_map"].keys()[0]
+ #ref l2_intf_group
+ l2_intf_gid, l2_intf_msg = add_one_l2_interface_group(self.controller, test_port, test_vid, False, False)
+ mpls_intf_gid, mpls_intf_msg=add_mpls_intf_group(self.controller, l2_intf_gid, [0x00,0x11,0x11,0x11,0x11,0x11], [0x00,0x22,0x22,0x22,0x22,0x22], vid=test_vid, index=1)
+ mpls_label_gid, mpls_label_msg=add_mpls_label_group(self.controller, subtype=OFDPA_MPLS_GROUP_SUBTYPE_SWAP_LABEL,
+ index=1,
+ ref_gid=mpls_intf_gid,
+ push_l2_header=True,
+ push_vlan=True,
+ push_mpls_header=True,
+ push_cw=True,
+ set_mpls_label=10,
+ set_bos=0,
+ set_tc=7,
+ set_tc_from_table=False,
+ cpy_tc_outward=False,
+ set_ttl=250,
+ cpy_ttl_outward=False,
+ oam_lm_tx_count=False,
+ set_pri_from_table=False
+ )
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=l2_intf_msg.group_type,
+ group_id=l2_intf_msg.group_id,
+ buckets=l2_intf_msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_intf_msg.group_type,
+ group_id=mpls_intf_msg.group_id,
+ buckets=mpls_intf_msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_label_msg.group_type,
+ group_id=mpls_label_msg.group_id,
+ buckets=mpls_label_msg.buckets)
+ )
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+ self.assertEquals(stats, verify_group_stats)
+
+
+class mpls_forwarding_group_fastfailover(base_tests.SimpleDataPlane):
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ test_vid=1
+ test_port=config["port_map"].keys()[0]
+ #ref l2_intf_group
+ l2_intf_gid, l2_intf_msg = add_one_l2_interface_group(self.controller, test_port, test_vid, False, False)
+ mpls_intf_gid, mpls_intf_msg=add_mpls_intf_group(self.controller, l2_intf_gid, [0x00,0x11,0x11,0x11,0x11,0x11], [0x00,0x22,0x22,0x22,0x22,0x22], vid=test_vid, index=1)
+ mpls_label_gid, mpls_label_msg=add_mpls_label_group(self.controller, subtype=OFDPA_MPLS_GROUP_SUBTYPE_SWAP_LABEL,
+ index=1,
+ ref_gid=mpls_intf_gid,
+ push_l2_header=True,
+ push_vlan=True,
+ push_mpls_header=True,
+ push_cw=True,
+ set_mpls_label=10,
+ set_bos=0,
+ set_tc=7,
+ set_tc_from_table=False,
+ cpy_tc_outward=False,
+ set_ttl=250,
+ cpy_ttl_outward=False,
+ oam_lm_tx_count=False,
+ set_pri_from_table=False
+ )
+ mpls_fwd_gid, mpls_fwd_msg=add_mpls_forwarding_group(self.controller,
+ subtype=OFDPA_MPLS_GROUP_SUBTYPE_FAST_FAILOVER_GROUP,
+ index=1,
+ ref_gids=[mpls_label_gid],
+ watch_port=test_port,
+ watch_group=ofp.OFPP_ANY,
+ push_vlan=None,
+ pop_vlan=None,
+ set_vid=None)
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=l2_intf_msg.group_type,
+ group_id=l2_intf_msg.group_id,
+ buckets=l2_intf_msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_intf_msg.group_type,
+ group_id=mpls_intf_msg.group_id,
+ buckets=mpls_intf_msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_label_msg.group_type,
+ group_id=mpls_label_msg.group_id,
+ buckets=mpls_label_msg.buckets)
+ )
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_fwd_msg.group_type,
+ group_id=mpls_fwd_msg.group_id,
+ buckets=mpls_fwd_msg.buckets)
+ )
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+ self.assertEquals(stats, verify_group_stats)
+
+
+class mpls_forwarding_group_ecmp(base_tests.SimpleDataPlane):
+ """chip not support to bind flow on trident2
+ """
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ test_vid=1
+ mpls_intf_msgs=[]
+ mpls_intf_gids=[]
+ l2_intf_msgs=[]
+ index=1
+ #ref l2_intf_group
+ for port in config["port_map"].keys():
+ l2_intf_gid, l2_intf_msg = add_one_l2_interface_group(self.controller, port, test_vid, False, False)
+ l2_intf_msgs.append(l2_intf_msg)
+ mpls_intf_gid, mpls_intf_msg=add_mpls_intf_group(self.controller, l2_intf_gid, [0x00,0x11,0x11,0x11,0x11,0x11], [0x00,0x22,0x22,0x22,0x22,0x22], vid=test_vid, index=index)
+ index=index+1
+ mpls_intf_msgs.append(mpls_intf_msg)
+ mpls_intf_gids.append(mpls_intf_gid)
+
+ mpls_fwd_gid, mpls_fwd_msg=add_mpls_forwarding_group(self.controller,
+ subtype=OFDPA_MPLS_GROUP_SUBTYPE_ECMP,
+ index=1,
+ ref_gids=mpls_intf_gids,
+ watch_port=None,
+ watch_group=None,
+ push_vlan=None,
+ pop_vlan=None,
+ set_vid=None)
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ for msg in l2_intf_msgs:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+
+ for msg in mpls_intf_msgs:
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=msg.group_type,
+ group_id=msg.group_id,
+ buckets=msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_fwd_msg.group_type,
+ group_id=mpls_fwd_msg.group_id,
+ buckets=mpls_fwd_msg.buckets)
+ )
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+ self.assertEquals(stats, verify_group_stats)
+
+
+class mpls_forwarding_group_l2tag(base_tests.SimpleDataPlane):
+ """chip not support
+ """
+ def runTest(self):
+ delete_all_flows(self.controller)
+ delete_all_groups(self.controller)
+
+ test_vid=1
+ test_port=config["port_map"].keys()[0]
+ index=1
+ #ref l2_intf_group
+ l2_intf_gid, l2_intf_msg = add_one_l2_interface_group(self.controller, test_port, test_vid, False, False)
+
+ mpls_fwd_gid, mpls_fwd_msg=add_mpls_forwarding_group(self.controller,
+ subtype=OFDPA_MPLS_GROUP_SUBTYPE_L2_TAG,
+ index=1,
+ ref_gids=l2_intf_gid,
+ watch_port=None,
+ watch_group=None,
+ push_vlan=None,
+ pop_vlan=None,
+ set_vid=1)
+
+ stats = get_stats(self, ofp.message.group_desc_stats_request())
+
+ verify_group_stats=[]
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=l2_intf_msg.group_type,
+ group_id=l2_intf_msg.group_id,
+ buckets=l2_intf_msg.buckets)
+ )
+
+ verify_group_stats.append(ofp.group_desc_stats_entry(
+ group_type=mpls_fwd_msg.group_type,
+ group_id=mpls_fwd_msg.group_id,
+ buckets=mpls_fwd_msg.buckets)
+ )
+ verify_group_stats=sorted(verify_group_stats, key=getkey("group_id"))
+ stats=sorted(stats, key=getkey("group_id"))
+
+ self.assertEquals(stats, verify_group_stats)
\ No newline at end of file