1 ##############################################################################
2 # Copyright (c) 2015 Ericsson AB and others.
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
10 # Unittest for yardstick.common.utils
12 from __future__ import absolute_import
17 from copy import deepcopy
18 from itertools import product, chain
21 from six.moves import configparser
24 from yardstick.common import utils
25 from yardstick.common import constants
28 class IterSubclassesTestCase(unittest.TestCase):
29 # Disclaimer: this class is a modified copy from
30 # rally/tests/unit/common/plugin/test_discover.py
31 # Copyright 2015: Mirantis Inc.
33 def test_itersubclasses(self):
46 self.assertEqual([B, C, D], list(utils.itersubclasses(A)))
49 class ImportModulesFromPackageTestCase(unittest.TestCase):
51 @mock.patch('yardstick.common.utils.os.walk')
52 def test_import_modules_from_package_no_mod(self, mock_walk):
53 yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__))
54 mock_walk.return_value = ([
55 (os.path.join(yardstick_root, 'foo'), ['bar'], ['__init__.py']),
56 (os.path.join(yardstick_root, 'foo', 'bar'), [], ['baz.txt', 'qux.rst'])
59 utils.import_modules_from_package('foo.bar')
61 @mock.patch('yardstick.common.utils.os.walk')
62 @mock.patch('yardstick.common.utils.importutils')
63 def test_import_modules_from_package(self, mock_importutils, mock_walk):
65 yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__))
66 mock_walk.return_value = ([
67 (os.path.join(yardstick_root, 'foo', os.pardir, 'bar'), [], ['baz.py'])
70 utils.import_modules_from_package('foo.bar')
71 mock_importutils.import_module.assert_called_with('bar.baz')
74 class GetParaFromYaml(unittest.TestCase):
76 @mock.patch('yardstick.common.utils.os.environ.get')
77 def test_get_param_para_not_found(self, get_env):
78 file_path = 'config_sample.yaml'
79 get_env.return_value = self._get_file_abspath(file_path)
82 self.assertTrue(constants.get_param(args, default), default)
84 @mock.patch('yardstick.common.utils.os.environ.get')
85 def test_get_param_para_exists(self, get_env):
86 file_path = 'config_sample.yaml'
87 get_env.return_value = self._get_file_abspath(file_path)
89 para = '/home/opnfv/repos/releng'
90 self.assertEqual(para, constants.get_param(args))
92 def _get_file_abspath(self, filename):
93 curr_path = os.path.dirname(os.path.abspath(__file__))
94 file_path = os.path.join(curr_path, filename)
98 class CommonUtilTestCase(unittest.TestCase):
119 def test__dict_key_flatten(self):
120 line = 'mpstat.loadavg1=0.29,rtt=1.03,mpstat.loadavg0=1.09,' \
121 'mpstat.cpu0.%idle=99.00,mpstat.cpu0.%sys=0.00'
122 # need to sort for assert to work
123 line = ",".join(sorted(line.split(',')))
124 flattened_data = utils.flatten_dict_key(
125 self.data['benchmark']['data'])
127 ("=".join(item) for item in sorted(flattened_data.items())))
128 self.assertEqual(result, line)
131 class TestMacAddressToHex(unittest.TestCase):
133 def test_mac_address_to_hex_list(self):
134 self.assertEqual(utils.mac_address_to_hex_list("ea:3e:e1:9a:99:e8"),
135 ['0xea', '0x3e', '0xe1', '0x9a', '0x99', '0xe8'])
138 class TranslateToStrTestCase(unittest.TestCase):
140 def test_translate_to_str_unicode(self):
142 output_str = utils.translate_to_str(input_str)
145 self.assertEqual(result, output_str)
147 def test_translate_to_str_dict_list_unicode(self):
149 u'hello': {u'hello': [u'world']}
151 output_str = utils.translate_to_str(input_str)
154 'hello': {'hello': ['world']}
156 self.assertEqual(result, output_str)
158 def test_translate_to_str_non_string(self):
159 input_value = object()
160 result = utils.translate_to_str(input_value)
161 self.assertIs(input_value, result)
164 class TestParseCpuInfo(unittest.TestCase):
166 def test_single_socket_no_hyperthread(self):
169 vendor_id : GenuineIntel
172 model name : Intel Core Processor (Haswell, no TSX)
187 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat
192 address sizes : 46 bits physical, 48 bits virtual
196 vendor_id : GenuineIntel
199 model name : Intel Core Processor (Haswell, no TSX)
214 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat
219 address sizes : 46 bits physical, 48 bits virtual
223 vendor_id : GenuineIntel
226 model name : Intel Core Processor (Haswell, no TSX)
241 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat
246 address sizes : 46 bits physical, 48 bits virtual
250 socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo)
251 assert sorted(socket_map.keys()) == [0]
252 assert sorted(socket_map[0].keys()) == [2, 3, 4]
254 def test_single_socket_hyperthread(self):
257 vendor_id : GenuineIntel
260 model name : Intel(R) Xeon(R) CPU E3-1275 v3 @ 3.50GHz
275 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts
280 address sizes : 39 bits physical, 48 bits virtual
284 vendor_id : GenuineIntel
287 model name : Intel(R) Xeon(R) CPU E3-1275 v3 @ 3.50GHz
302 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts
307 address sizes : 39 bits physical, 48 bits virtual
311 vendor_id : GenuineIntel
314 model name : Intel(R) Xeon(R) CPU E3-1275 v3 @ 3.50GHz
329 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts
334 address sizes : 39 bits physical, 48 bits virtual
338 socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo)
339 assert sorted(socket_map.keys()) == [0]
340 assert sorted(socket_map[0].keys()) == [1, 2, 3]
341 assert sorted(socket_map[0][1]) == [5]
342 assert sorted(socket_map[0][2]) == [6]
343 assert sorted(socket_map[0][3]) == [7]
345 def test_dual_socket_hyperthread(self):
348 vendor_id : GenuineIntel
351 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
353 microcode : 0xb00001f
355 cache size : 56320 KB
366 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
371 address sizes : 46 bits physical, 48 bits virtual
375 vendor_id : GenuineIntel
378 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
380 microcode : 0xb00001f
382 cache size : 56320 KB
393 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
398 address sizes : 46 bits physical, 48 bits virtual
402 vendor_id : GenuineIntel
405 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
407 microcode : 0xb00001f
409 cache size : 56320 KB
420 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
425 address sizes : 46 bits physical, 48 bits virtual
429 vendor_id : GenuineIntel
432 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
434 microcode : 0xb00001f
436 cache size : 56320 KB
447 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
452 address sizes : 46 bits physical, 48 bits virtual
456 vendor_id : GenuineIntel
459 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
461 microcode : 0xb00001f
463 cache size : 56320 KB
474 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
479 address sizes : 46 bits physical, 48 bits virtual
483 vendor_id : GenuineIntel
486 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
488 microcode : 0xb00001f
490 cache size : 56320 KB
501 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
506 address sizes : 46 bits physical, 48 bits virtual
510 vendor_id : GenuineIntel
513 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
515 microcode : 0xb00001f
517 cache size : 56320 KB
528 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
533 address sizes : 46 bits physical, 48 bits virtual
537 socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo)
538 assert sorted(socket_map.keys()) == [0, 1]
539 assert sorted(socket_map[0].keys()) == [0, 1, 2]
540 assert sorted(socket_map[1].keys()) == [26, 27, 28]
541 assert sorted(socket_map[0][0]) == [44]
542 assert sorted(socket_map[0][1]) == [1]
543 assert sorted(socket_map[0][2]) == [2]
544 assert sorted(socket_map[1][26]) == [85]
545 assert sorted(socket_map[1][27]) == [86]
546 assert sorted(socket_map[1][28]) == [43, 87]
548 def test_dual_socket_no_hyperthread(self):
551 vendor_id : GenuineIntel
554 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
556 microcode : 0xb00001f
558 cache size : 56320 KB
569 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
574 address sizes : 46 bits physical, 48 bits virtual
578 vendor_id : GenuineIntel
581 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
583 microcode : 0xb00001f
585 cache size : 56320 KB
596 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
601 address sizes : 46 bits physical, 48 bits virtual
605 vendor_id : GenuineIntel
608 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
610 microcode : 0xb00001f
612 cache size : 56320 KB
623 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
628 address sizes : 46 bits physical, 48 bits virtual
632 vendor_id : GenuineIntel
635 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
637 microcode : 0xb00001f
639 cache size : 56320 KB
650 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
655 address sizes : 46 bits physical, 48 bits virtual
659 vendor_id : GenuineIntel
662 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
664 microcode : 0xb00001f
666 cache size : 56320 KB
677 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
682 address sizes : 46 bits physical, 48 bits virtual
686 vendor_id : GenuineIntel
689 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
691 microcode : 0xb00001f
693 cache size : 56320 KB
704 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
709 address sizes : 46 bits physical, 48 bits virtual
713 vendor_id : GenuineIntel
716 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
718 microcode : 0xb00001f
720 cache size : 56320 KB
731 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
736 address sizes : 46 bits physical, 48 bits virtual
740 socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo)
741 processors = socket_map.processors()
742 assert processors == [1, 2, 43, 44, 85, 86, 87]
743 cores = socket_map.cores()
744 assert cores == [0, 1, 2, 26, 27, 28]
745 sockets = socket_map.sockets()
746 assert sockets == [0, 1]
749 class ChangeObjToDictTestCase(unittest.TestCase):
751 def test_change_obj_to_dict(self):
754 self.name = 'yardstick'
757 obj_r = utils.change_obj_to_dict(obj)
758 obj_s = {'name': 'yardstick'}
759 self.assertEqual(obj_r, obj_s)
762 class SetDictValueTestCase(unittest.TestCase):
764 def test_set_dict_value(self):
768 output_dic = utils.set_dict_value(input_dic, 'welcome.to', 'yardstick')
769 self.assertEqual(output_dic.get('welcome', {}).get('to'), 'yardstick')
772 class RemoveFileTestCase(unittest.TestCase):
774 def test_remove_file(self):
776 utils.remove_file('notexistfile.txt')
777 except Exception as e:
778 self.assertTrue(isinstance(e, OSError))
781 class TestUtils(unittest.TestCase):
783 @mock.patch('yardstick.common.utils.jsonify')
784 def test_result_handler(self, mock_jsonify):
785 mock_jsonify.return_value = 432
787 self.assertEqual(utils.result_handler('x', 234), 432)
788 mock_jsonify.assert_called_once_with({'status': 'x', 'result': 234})
790 @mock.patch('random.randint')
791 @mock.patch('socket.socket')
792 def test_get_free_port(self, mock_socket, mock_randint):
793 mock_randint.return_value = 7777
794 s = mock_socket('x', 'y')
795 s.connect_ex.side_effect = iter([0, 1])
796 result = utils.get_free_port('10.20.30.40')
797 self.assertEqual(result, 7777)
798 self.assertEqual(s.connect_ex.call_count, 2)
800 @mock.patch('subprocess.check_output')
801 def test_execute_command(self, mock_check_output):
802 expected = ['hello world', '1234']
803 mock_check_output.return_value = os.linesep.join(expected)
804 result = utils.execute_command('my_command arg1 arg2')
805 self.assertEqual(result, expected)
807 @mock.patch('subprocess.Popen')
808 def test_source_env(self, mock_popen):
809 base_env = deepcopy(os.environ)
810 mock_process = mock_popen()
812 'garbage line before',
814 'garbage line after',
816 mock_process.communicate.return_value = os.linesep.join(output_list), '', 0
817 expected = {'NEW_ENV_VALUE': '234'}
818 result = utils.source_env('my_file')
819 self.assertDictEqual(result, expected)
821 os.environ.update(base_env)
823 @mock.patch('yardstick.common.utils.configparser.ConfigParser')
824 def test_parse_ini_file(self, mock_config_parser_type):
826 'default1': 'value1',
827 'default2': 'value2',
838 mock_config_parser = mock_config_parser_type()
839 mock_config_parser.read.return_value = True
840 mock_config_parser.sections.return_value = ['s1', 's2']
841 mock_config_parser.items.side_effect = iter([
852 result = utils.parse_ini_file('my_path')
853 self.assertDictEqual(result, expected)
855 @mock.patch('yardstick.common.utils.configparser.ConfigParser')
856 def test_parse_ini_file_missing_section_header(self, mock_config_parser_type):
857 mock_config_parser = mock_config_parser_type()
858 mock_config_parser.read.side_effect = \
859 configparser.MissingSectionHeaderError(mock.Mock(), 321, mock.Mock())
861 with self.assertRaises(configparser.MissingSectionHeaderError):
862 utils.parse_ini_file('my_path')
864 @mock.patch('yardstick.common.utils.configparser.ConfigParser')
865 def test_parse_ini_file_no_file(self, mock_config_parser_type):
866 mock_config_parser = mock_config_parser_type()
867 mock_config_parser.read.return_value = False
868 with self.assertRaises(RuntimeError):
869 utils.parse_ini_file('my_path')
871 @mock.patch('yardstick.common.utils.configparser.ConfigParser')
872 def test_parse_ini_file_no_default_section_header(self, mock_config_parser_type):
882 mock_config_parser = mock_config_parser_type()
883 mock_config_parser.read.return_value = True
884 mock_config_parser.sections.return_value = ['s1', 's2']
885 mock_config_parser.items.side_effect = iter([
886 configparser.NoSectionError(mock.Mock()),
896 result = utils.parse_ini_file('my_path')
897 self.assertDictEqual(result, expected)
899 def test_join_non_strings(self):
900 self.assertEqual(utils.join_non_strings(':'), '')
901 self.assertEqual(utils.join_non_strings(':', 'a'), 'a')
902 self.assertEqual(utils.join_non_strings(':', 'a', 2, 'c'), 'a:2:c')
903 self.assertEqual(utils.join_non_strings(':', ['a', 2, 'c']), 'a:2:c')
904 self.assertEqual(utils.join_non_strings(':', 'abc'), 'abc')
906 def test_validate_non_string_sequence(self):
907 self.assertEqual(utils.validate_non_string_sequence([1, 2, 3]), [1, 2, 3])
908 self.assertIsNone(utils.validate_non_string_sequence('123'))
909 self.assertIsNone(utils.validate_non_string_sequence(1))
911 self.assertEqual(utils.validate_non_string_sequence(1, 2), 2)
912 self.assertEqual(utils.validate_non_string_sequence(1, default=2), 2)
914 with self.assertRaises(RuntimeError):
915 utils.validate_non_string_sequence(1, raise_exc=RuntimeError)
917 def test_error_class(self):
918 with self.assertRaises(RuntimeError):
921 error_instance = utils.ErrorClass(test='')
922 with self.assertRaises(AttributeError):
923 error_instance.get_name()
926 class TestUtilsIpAddrMethods(unittest.TestCase):
928 GOOD_IP_V4_ADDRESS_STR_LIST = [
938 GOOD_IP_V4_MASK_STR_LIST = [
947 GOOD_IP_V6_ADDRESS_STR_LIST = [
949 u'fe80::250:56ff:fe89:91ff',
950 u'123:4567:89ab:cdef:123:4567:89ab:cdef',
953 GOOD_IP_V6_MASK_STR_LIST = [
962 INVALID_IP_ADDRESS_STR_LIST = [
966 u'123:4567:89ab:cdef:123:4567:89ab:cdef/129',
969 def test_safe_ip_address(self):
970 addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
971 for addr in addr_list:
973 expected = ipaddress.ip_address(addr)
974 self.assertEqual(utils.safe_ip_address(addr), expected, addr)
976 def test_safe_ip_address_v6_ip(self):
977 addr_list = self.GOOD_IP_V6_ADDRESS_STR_LIST
978 for addr in addr_list:
980 expected = ipaddress.ip_address(addr)
981 self.assertEqual(utils.safe_ip_address(addr), expected, addr)
983 @mock.patch("yardstick.common.utils.logging")
984 def test_safe_ip_address_negative(self, mock_logging):
985 for value in self.INVALID_IP_ADDRESS_STR_LIST:
986 self.assertIsNone(utils.safe_ip_address(value), value)
988 addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
989 mask_list = self.GOOD_IP_V4_MASK_STR_LIST
990 for addr_mask_pair in product(addr_list, mask_list):
991 value = ''.join(addr_mask_pair)
992 self.assertIsNone(utils.safe_ip_address(value), value)
994 addr_list = self.GOOD_IP_V6_ADDRESS_STR_LIST
995 mask_list = self.GOOD_IP_V6_MASK_STR_LIST
996 for addr_mask_pair in product(addr_list, mask_list):
997 value = ''.join(addr_mask_pair)
998 self.assertIsNone(utils.safe_ip_address(value), value)
1000 def test_get_ip_version(self):
1001 addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
1002 for addr in addr_list:
1004 self.assertEqual(utils.get_ip_version(addr), 4, addr)
1006 def test_get_ip_version_v6_ip(self):
1007 addr_list = self.GOOD_IP_V6_ADDRESS_STR_LIST
1008 for addr in addr_list:
1010 self.assertEqual(utils.get_ip_version(addr), 6, addr)
1012 @mock.patch("yardstick.common.utils.logging")
1013 def test_get_ip_version_negative(self, mock_logging):
1014 for value in self.INVALID_IP_ADDRESS_STR_LIST:
1015 self.assertIsNone(utils.get_ip_version(value), value)
1017 addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
1018 mask_list = self.GOOD_IP_V4_MASK_STR_LIST
1019 for addr_mask_pair in product(addr_list, mask_list):
1020 value = ''.join(addr_mask_pair)
1021 self.assertIsNone(utils.get_ip_version(value), value)
1023 addr_list = self.GOOD_IP_V6_ADDRESS_STR_LIST
1024 mask_list = self.GOOD_IP_V6_MASK_STR_LIST
1025 for addr_mask_pair in product(addr_list, mask_list):
1026 value = ''.join(addr_mask_pair)
1027 self.assertIsNone(utils.get_ip_version(value), value)
1029 def test_ip_to_hex(self):
1030 self.assertEqual(utils.ip_to_hex('0.0.0.0'), '00000000')
1031 self.assertEqual(utils.ip_to_hex('10.20.30.40'), '0a141e28')
1032 self.assertEqual(utils.ip_to_hex('127.0.0.1'), '7f000001')
1033 self.assertEqual(utils.ip_to_hex('172.31.90.100'), 'ac1f5a64')
1034 self.assertEqual(utils.ip_to_hex('192.168.254.253'), 'c0a8fefd')
1035 self.assertEqual(utils.ip_to_hex('255.255.255.255'), 'ffffffff')
1037 def test_ip_to_hex_v6_ip(self):
1038 for value in self.GOOD_IP_V6_ADDRESS_STR_LIST:
1039 self.assertEqual(utils.ip_to_hex(value), value)
1041 @mock.patch("yardstick.common.utils.logging")
1042 def test_ip_to_hex_negative(self, mock_logging):
1043 addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
1044 mask_list = self.GOOD_IP_V4_MASK_STR_LIST
1045 value_iter = (''.join(pair) for pair in product(addr_list, mask_list))
1046 for value in chain(value_iter, self.INVALID_IP_ADDRESS_STR_LIST):
1047 self.assertEqual(utils.ip_to_hex(value), value)
1053 if __name__ == '__main__':