5 from asfframework import VppAsfTestCase
9 return platform.machine() in ["x86_64", "AMD64", "amd64"]
12 def skipVariant(variant):
13 # TODO: We don't have cpu feature detection on FreeBSD yet, so always return
14 # that we don't have the requested variant.
15 if platform.uname().system == "FreeBSD":
18 with open("/proc/cpuinfo") as f:
21 exp = re.compile(r"(?:flags\s+:)(?:\s\w+)+(?:\s(" + variant + r"))(?:\s\w+)+")
22 match = exp.search(cpuinfo, re.DOTALL | re.MULTILINE)
24 return checkX86() and match is not None
27 class TestNodeVariant(VppAsfTestCase):
28 """Test Node Variants"""
31 def setUpConstants(cls, variant):
32 super(TestNodeVariant, cls).setUpConstants()
33 # find the position of node_variants in the cmdline args.
36 node_variants = cls.vpp_cmdline.index("node { ") + 1
37 cls.vpp_cmdline[node_variants] = (
38 "default { variant default } "
39 "ip4-rewrite { variant " + variant + " } "
44 super(TestNodeVariant, cls).setUpClass()
47 def tearDownClass(cls):
48 super(TestNodeVariant, cls).tearDownClass()
51 super(TestNodeVariant, self).setUp()
54 super(TestNodeVariant, self).tearDown()
56 def getActiveVariant(self, node):
57 node_desc = self.vapi.cli("show node " + node)
58 self.logger.info(node_desc)
61 r"\s+(\S+)\s+(\d+)\s+(:?yes)", node_desc, re.DOTALL | re.MULTILINE
64 return match.groups(0)
66 def checkVariant(self, variant):
67 """Test node variants defaults"""
69 variant_info = self.getActiveVariant("ip4-lookup")
70 self.assertEqual(variant_info[0], "default")
72 variant_info = self.getActiveVariant("ip4-rewrite")
73 self.assertEqual(variant_info[0], variant)
76 class TestICLVariant(TestNodeVariant):
77 """Test icl Node Variants"""
80 LINUX_VARIANT = "avx512_bitalg"
83 def setUpConstants(cls):
84 super(TestICLVariant, cls).setUpConstants(cls.VARIANT)
88 super(TestICLVariant, cls).setUpClass()
91 def tearDownClass(cls):
92 super(TestICLVariant, cls).tearDownClass()
95 skipVariant(LINUX_VARIANT), VARIANT + " not a supported variant, skip."
98 self.checkVariant(self.VARIANT)
101 class TestSKXVariant(TestNodeVariant):
102 """Test skx Node Variants"""
105 LINUX_VARIANT = "avx512f"
108 def setUpConstants(cls):
109 super(TestSKXVariant, cls).setUpConstants(cls.VARIANT)
113 super(TestSKXVariant, cls).setUpClass()
116 def tearDownClass(cls):
117 super(TestSKXVariant, cls).tearDownClass()
119 @unittest.skipUnless(
120 skipVariant(LINUX_VARIANT), VARIANT + " not a supported variant, skip."
123 self.checkVariant(self.VARIANT)
126 class TestHSWVariant(TestNodeVariant):
127 """Test avx2 Node Variants"""
130 LINUX_VARIANT = "avx2"
133 def setUpConstants(cls):
134 super(TestHSWVariant, cls).setUpConstants(cls.VARIANT)
138 super(TestHSWVariant, cls).setUpClass()
141 def tearDownClass(cls):
142 super(TestHSWVariant, cls).tearDownClass()
144 @unittest.skipUnless(
145 skipVariant(LINUX_VARIANT), VARIANT + " not a supported variant, skip."
148 self.checkVariant(self.VARIANT)