5 from framework import VppTestCase
9 return platform.machine() in ["x86_64", "AMD64"]
12 def skipVariant(variant):
13 with open("/proc/cpuinfo") as f:
17 r'(?:flags\s+:)(?:\s\w+)+(?:\s(' + variant + r'))(?:\s\w+)+')
18 match = exp.search(cpuinfo, re.DOTALL | re.MULTILINE)
20 return checkX86() and match is not None
23 class TestNodeVariant(VppTestCase):
24 """ Test Node Variants """
27 def setUpConstants(cls, variant):
28 super(TestNodeVariant, cls).setUpConstants()
29 # find the position of node_variants in the cmdline args.
32 node_variants = cls.vpp_cmdline.index("node { ") + 1
33 cls.vpp_cmdline[node_variants] = ("default { variant default } "
34 "ip4-rewrite { 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)
55 match = re.search(r'\s+(\S+)\s+(\d+)\s+(:?yes)',
56 node_desc, re.DOTALL | re.MULTILINE)
58 return match.groups(0)
60 def checkVariant(self, variant):
61 """ Test node variants defaults """
63 variant_info = self.getActiveVariant("ip4-lookup")
64 self.assertEqual(variant_info[0], "default")
66 variant_info = self.getActiveVariant("ip4-rewrite")
67 self.assertEqual(variant_info[0], variant)
70 class TestICLVariant(TestNodeVariant):
71 """ Test icl Node Variants """
74 LINUX_VARIANT = "avx512_bitalg"
77 def setUpConstants(cls):
78 super(TestICLVariant, cls).setUpConstants(cls.VARIANT)
82 super(TestICLVariant, cls).setUpClass()
85 def tearDownClass(cls):
86 super(TestICLVariant, cls).tearDownClass()
88 @unittest.skipUnless(skipVariant(LINUX_VARIANT),
89 VARIANT + " not a supported variant, skip.")
91 self.checkVariant(self.VARIANT)
94 class TestSKXVariant(TestNodeVariant):
95 """ Test skx Node Variants """
98 LINUX_VARIANT = "avx512f"
101 def setUpConstants(cls):
102 super(TestSKXVariant, cls).setUpConstants(cls.VARIANT)
106 super(TestSKXVariant, cls).setUpClass()
109 def tearDownClass(cls):
110 super(TestSKXVariant, cls).tearDownClass()
112 @unittest.skipUnless(skipVariant(LINUX_VARIANT),
113 VARIANT + " not a supported variant, skip.")
115 self.checkVariant(self.VARIANT)
118 class TestHSWVariant(TestNodeVariant):
119 """ Test avx2 Node Variants """
122 LINUX_VARIANT = "avx2"
125 def setUpConstants(cls):
126 super(TestHSWVariant, cls).setUpConstants(cls.VARIANT)
130 super(TestHSWVariant, cls).setUpClass()
133 def tearDownClass(cls):
134 super(TestHSWVariant, cls).tearDownClass()
136 @unittest.skipUnless(skipVariant(LINUX_VARIANT),
137 VARIANT + " not a supported variant, skip.")
139 self.checkVariant(self.VARIANT)