5 from framework import VppTestCase
9 return platform.machine() in ["x86_64", "AMD64"]
12 def skipVariant(variant):
13 with open("/proc/cpuinfo") as f:
16 exp = re.compile(r"(?:flags\s+:)(?:\s\w+)+(?:\s(" + variant + r"))(?:\s\w+)+")
17 match = exp.search(cpuinfo, re.DOTALL | re.MULTILINE)
19 return checkX86() and match is not None
22 class TestNodeVariant(VppTestCase):
23 """Test Node Variants"""
26 def setUpConstants(cls, variant):
27 super(TestNodeVariant, cls).setUpConstants()
28 # find the position of node_variants in the cmdline args.
31 node_variants = cls.vpp_cmdline.index("node { ") + 1
32 cls.vpp_cmdline[node_variants] = (
33 "default { variant default } "
34 "ip4-rewrite { variant " + variant + " } "
39 super(TestNodeVariant, cls).setUpClass()
42 def tearDownClass(cls):
43 super(TestNodeVariant, cls).tearDownClass()
46 super(TestNodeVariant, self).setUp()
49 super(TestNodeVariant, self).tearDown()
51 def getActiveVariant(self, node):
52 node_desc = self.vapi.cli("show node " + node)
53 self.logger.info(node_desc)
56 r"\s+(\S+)\s+(\d+)\s+(:?yes)", node_desc, re.DOTALL | re.MULTILINE
59 return match.groups(0)
61 def checkVariant(self, variant):
62 """Test node variants defaults"""
64 variant_info = self.getActiveVariant("ip4-lookup")
65 self.assertEqual(variant_info[0], "default")
67 variant_info = self.getActiveVariant("ip4-rewrite")
68 self.assertEqual(variant_info[0], variant)
71 class TestICLVariant(TestNodeVariant):
72 """Test icl Node Variants"""
75 LINUX_VARIANT = "avx512_bitalg"
78 def setUpConstants(cls):
79 super(TestICLVariant, cls).setUpConstants(cls.VARIANT)
83 super(TestICLVariant, cls).setUpClass()
86 def tearDownClass(cls):
87 super(TestICLVariant, cls).tearDownClass()
90 skipVariant(LINUX_VARIANT), VARIANT + " not a supported variant, skip."
93 self.checkVariant(self.VARIANT)
96 class TestSKXVariant(TestNodeVariant):
97 """Test skx Node Variants"""
100 LINUX_VARIANT = "avx512f"
103 def setUpConstants(cls):
104 super(TestSKXVariant, cls).setUpConstants(cls.VARIANT)
108 super(TestSKXVariant, cls).setUpClass()
111 def tearDownClass(cls):
112 super(TestSKXVariant, cls).tearDownClass()
114 @unittest.skipUnless(
115 skipVariant(LINUX_VARIANT), VARIANT + " not a supported variant, skip."
118 self.checkVariant(self.VARIANT)
121 class TestHSWVariant(TestNodeVariant):
122 """Test avx2 Node Variants"""
125 LINUX_VARIANT = "avx2"
128 def setUpConstants(cls):
129 super(TestHSWVariant, cls).setUpConstants(cls.VARIANT)
133 super(TestHSWVariant, cls).setUpClass()
136 def tearDownClass(cls):
137 super(TestHSWVariant, cls).tearDownClass()
139 @unittest.skipUnless(
140 skipVariant(LINUX_VARIANT), VARIANT + " not a supported variant, skip."
143 self.checkVariant(self.VARIANT)