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 TestAVX512Variant(TestNodeVariant):
71 """ Test avx512 Node Variants """
74 LINUX_VARIANT = VARIANT + "f"
77 def setUpConstants(cls):
78 super(TestAVX512Variant, cls).setUpConstants(cls.VARIANT)
82 super(TestAVX512Variant, cls).setUpClass()
85 def tearDownClass(cls):
86 super(TestAVX512Variant, cls).tearDownClass()
88 @unittest.skipUnless(skipVariant(LINUX_VARIANT),
89 VARIANT + " not a supported variant, skip.")
90 def test_avx512(self):
91 self.checkVariant(self.VARIANT)
94 class TestAVX2Variant(TestNodeVariant):
95 """ Test avx2 Node Variants """
100 def setUpConstants(cls):
101 super(TestAVX2Variant, cls).setUpConstants(cls.VARIANT)
105 super(TestAVX2Variant, cls).setUpClass()
108 def tearDownClass(cls):
109 super(TestAVX2Variant, cls).tearDownClass()
111 @unittest.skipUnless(skipVariant(VARIANT),
112 VARIANT + " not a supported variant, skip.")
114 self.checkVariant(self.VARIANT)