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
14 from copy import deepcopy
17 from itertools import product, chain
21 from six.moves import configparser
25 from yardstick.common import utils
26 from yardstick.common import constants
29 class IterSubclassesTestCase(unittest.TestCase):
30 # Disclaimer: this class is a modified copy from
31 # rally/tests/unit/common/plugin/test_discover.py
32 # Copyright 2015: Mirantis Inc.
34 def test_itersubclasses(self):
47 self.assertEqual([B, C, D], list(utils.itersubclasses(A)))
50 class ImportModulesFromPackageTestCase(unittest.TestCase):
52 @mock.patch('yardstick.common.utils.os.walk')
53 def test_import_modules_from_package_no_mod(self, mock_walk):
54 yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__))
55 mock_walk.return_value = ([
56 (os.path.join(yardstick_root, 'foo'), ['bar'], ['__init__.py']),
57 (os.path.join(yardstick_root, 'foo', 'bar'), [], ['baz.txt', 'qux.rst'])
60 utils.import_modules_from_package('foo.bar')
62 @mock.patch('yardstick.common.utils.os.walk')
63 @mock.patch('yardstick.common.utils.importutils')
64 def test_import_modules_from_package(self, mock_importutils, mock_walk):
66 yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__))
67 mock_walk.return_value = ([
68 (os.path.join(yardstick_root, 'foo', os.pardir, 'bar'), [], ['baz.py'])
71 utils.import_modules_from_package('foo.bar')
72 mock_importutils.import_module.assert_called_with('bar.baz')
75 class GetParaFromYaml(unittest.TestCase):
77 @mock.patch('yardstick.common.utils.os.environ.get')
78 def test_get_param_para_not_found(self, get_env):
79 file_path = 'config_sample.yaml'
80 get_env.return_value = self._get_file_abspath(file_path)
83 self.assertTrue(constants.get_param(args, default), default)
85 @mock.patch('yardstick.common.utils.os.environ.get')
86 def test_get_param_para_exists(self, get_env):
87 file_path = 'config_sample.yaml'
88 get_env.return_value = self._get_file_abspath(file_path)
90 para = '/home/opnfv/repos/releng'
91 self.assertEqual(para, constants.get_param(args))
93 def _get_file_abspath(self, filename):
94 curr_path = os.path.dirname(os.path.abspath(__file__))
95 file_path = os.path.join(curr_path, filename)
99 class CommonUtilTestCase(unittest.TestCase):
120 def test__dict_key_flatten(self):
121 line = 'mpstat.loadavg1=0.29,rtt=1.03,mpstat.loadavg0=1.09,' \
122 'mpstat.cpu0.%idle=99.00,mpstat.cpu0.%sys=0.00'
123 # need to sort for assert to work
124 line = ",".join(sorted(line.split(',')))
125 flattened_data = utils.flatten_dict_key(
126 self.data['benchmark']['data'])
128 ("=".join(item) for item in sorted(flattened_data.items())))
129 self.assertEqual(result, line)
132 class TestMacAddressToHex(unittest.TestCase):
134 def test_mac_address_to_hex_list(self):
135 self.assertEqual(utils.mac_address_to_hex_list("ea:3e:e1:9a:99:e8"),
136 ['0xea', '0x3e', '0xe1', '0x9a', '0x99', '0xe8'])
139 class TranslateToStrTestCase(unittest.TestCase):
141 def test_translate_to_str_unicode(self):
143 output_str = utils.translate_to_str(input_str)
146 self.assertEqual(result, output_str)
148 def test_translate_to_str_dict_list_unicode(self):
150 u'hello': {u'hello': [u'world']}
152 output_str = utils.translate_to_str(input_str)
155 'hello': {'hello': ['world']}
157 self.assertEqual(result, output_str)
159 def test_translate_to_str_non_string(self):
160 input_value = object()
161 result = utils.translate_to_str(input_value)
162 self.assertIs(input_value, result)
165 class TestParseCpuInfo(unittest.TestCase):
167 def test_single_socket_no_hyperthread(self):
170 vendor_id : GenuineIntel
173 model name : Intel Core Processor (Haswell, no TSX)
188 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
193 address sizes : 46 bits physical, 48 bits virtual
197 vendor_id : GenuineIntel
200 model name : Intel Core Processor (Haswell, no TSX)
215 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
220 address sizes : 46 bits physical, 48 bits virtual
224 vendor_id : GenuineIntel
227 model name : Intel Core Processor (Haswell, no TSX)
242 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
247 address sizes : 46 bits physical, 48 bits virtual
251 socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo)
252 assert sorted(socket_map.keys()) == [0]
253 assert sorted(socket_map[0].keys()) == [2, 3, 4]
255 def test_single_socket_hyperthread(self):
258 vendor_id : GenuineIntel
261 model name : Intel(R) Xeon(R) CPU E3-1275 v3 @ 3.50GHz
276 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
281 address sizes : 39 bits physical, 48 bits virtual
285 vendor_id : GenuineIntel
288 model name : Intel(R) Xeon(R) CPU E3-1275 v3 @ 3.50GHz
303 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
308 address sizes : 39 bits physical, 48 bits virtual
312 vendor_id : GenuineIntel
315 model name : Intel(R) Xeon(R) CPU E3-1275 v3 @ 3.50GHz
330 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
335 address sizes : 39 bits physical, 48 bits virtual
339 socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo)
340 assert sorted(socket_map.keys()) == [0]
341 assert sorted(socket_map[0].keys()) == [1, 2, 3]
342 assert sorted(socket_map[0][1]) == [5]
343 assert sorted(socket_map[0][2]) == [6]
344 assert sorted(socket_map[0][3]) == [7]
346 def test_dual_socket_hyperthread(self):
349 vendor_id : GenuineIntel
352 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
354 microcode : 0xb00001f
356 cache size : 56320 KB
367 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
372 address sizes : 46 bits physical, 48 bits virtual
376 vendor_id : GenuineIntel
379 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
381 microcode : 0xb00001f
383 cache size : 56320 KB
394 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
399 address sizes : 46 bits physical, 48 bits virtual
403 vendor_id : GenuineIntel
406 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
408 microcode : 0xb00001f
410 cache size : 56320 KB
421 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
426 address sizes : 46 bits physical, 48 bits virtual
430 vendor_id : GenuineIntel
433 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
435 microcode : 0xb00001f
437 cache size : 56320 KB
448 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
453 address sizes : 46 bits physical, 48 bits virtual
457 vendor_id : GenuineIntel
460 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
462 microcode : 0xb00001f
464 cache size : 56320 KB
475 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
480 address sizes : 46 bits physical, 48 bits virtual
484 vendor_id : GenuineIntel
487 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
489 microcode : 0xb00001f
491 cache size : 56320 KB
502 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
507 address sizes : 46 bits physical, 48 bits virtual
511 vendor_id : GenuineIntel
514 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
516 microcode : 0xb00001f
518 cache size : 56320 KB
529 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
534 address sizes : 46 bits physical, 48 bits virtual
538 socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo)
539 assert sorted(socket_map.keys()) == [0, 1]
540 assert sorted(socket_map[0].keys()) == [0, 1, 2]
541 assert sorted(socket_map[1].keys()) == [26, 27, 28]
542 assert sorted(socket_map[0][0]) == [44]
543 assert sorted(socket_map[0][1]) == [1]
544 assert sorted(socket_map[0][2]) == [2]
545 assert sorted(socket_map[1][26]) == [85]
546 assert sorted(socket_map[1][27]) == [86]
547 assert sorted(socket_map[1][28]) == [43, 87]
549 def test_dual_socket_no_hyperthread(self):
552 vendor_id : GenuineIntel
555 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
557 microcode : 0xb00001f
559 cache size : 56320 KB
570 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
575 address sizes : 46 bits physical, 48 bits virtual
579 vendor_id : GenuineIntel
582 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
584 microcode : 0xb00001f
586 cache size : 56320 KB
597 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
602 address sizes : 46 bits physical, 48 bits virtual
606 vendor_id : GenuineIntel
609 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
611 microcode : 0xb00001f
613 cache size : 56320 KB
624 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
629 address sizes : 46 bits physical, 48 bits virtual
633 vendor_id : GenuineIntel
636 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
638 microcode : 0xb00001f
640 cache size : 56320 KB
651 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
656 address sizes : 46 bits physical, 48 bits virtual
660 vendor_id : GenuineIntel
663 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
665 microcode : 0xb00001f
667 cache size : 56320 KB
678 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
683 address sizes : 46 bits physical, 48 bits virtual
687 vendor_id : GenuineIntel
690 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
692 microcode : 0xb00001f
694 cache size : 56320 KB
705 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
710 address sizes : 46 bits physical, 48 bits virtual
714 vendor_id : GenuineIntel
717 model name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
719 microcode : 0xb00001f
721 cache size : 56320 KB
732 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
737 address sizes : 46 bits physical, 48 bits virtual
741 socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo)
742 processors = socket_map.processors()
743 assert processors == [1, 2, 43, 44, 85, 86, 87]
744 cores = socket_map.cores()
745 assert cores == [0, 1, 2, 26, 27, 28]
746 sockets = socket_map.sockets()
747 assert sockets == [0, 1]
750 class ChangeObjToDictTestCase(unittest.TestCase):
752 def test_change_obj_to_dict(self):
755 self.name = 'yardstick'
758 obj_r = utils.change_obj_to_dict(obj)
759 obj_s = {'name': 'yardstick'}
760 self.assertEqual(obj_r, obj_s)
763 class SetDictValueTestCase(unittest.TestCase):
765 def test_set_dict_value(self):
769 output_dic = utils.set_dict_value(input_dic, 'welcome.to', 'yardstick')
770 self.assertEqual(output_dic.get('welcome', {}).get('to'), 'yardstick')
773 class RemoveFileTestCase(unittest.TestCase):
775 def test_remove_file(self):
777 utils.remove_file('notexistfile.txt')
778 except Exception as e: # pylint: disable=broad-except
779 # NOTE(ralonsoh): to narrow the scope of this exception.
780 self.assertTrue(isinstance(e, OSError))
783 class TestUtils(unittest.TestCase):
785 @mock.patch('yardstick.common.utils.os.makedirs')
786 def test_makedirs(self, *_):
787 self.assertIsNone(utils.makedirs('a/b/c/d'))
789 @mock.patch('yardstick.common.utils.os.makedirs')
790 def test_makedirs_exists(self, mock_os_makedirs):
791 mock_os_makedirs.side_effect = OSError(errno.EEXIST, 'exists')
792 self.assertIsNone(utils.makedirs('a/b/c/d'))
794 @mock.patch('yardstick.common.utils.os.makedirs')
795 def test_makedirs_busy(self, mock_os_makedirs):
796 mock_os_makedirs.side_effect = OSError(errno.EBUSY, 'busy')
797 with self.assertRaises(OSError):
798 utils.makedirs('a/b/c/d')
800 @mock.patch('yardstick.common.utils.jsonify')
801 def test_result_handler(self, mock_jsonify):
802 mock_jsonify.return_value = 432
804 self.assertEqual(utils.result_handler('x', 234), 432)
805 mock_jsonify.assert_called_once_with({'status': 'x', 'result': 234})
807 @mock.patch('random.randint')
808 @mock.patch('socket.socket')
809 def test_get_free_port(self, mock_socket, mock_randint):
810 mock_randint.return_value = 7777
811 s = mock_socket('x', 'y')
812 s.connect_ex.side_effect = iter([0, 1])
813 result = utils.get_free_port('10.20.30.40')
814 self.assertEqual(result, 7777)
815 self.assertEqual(s.connect_ex.call_count, 2)
817 @mock.patch('subprocess.check_output')
818 def test_execute_command(self, mock_check_output):
819 expected = ['hello world', '1234']
820 mock_check_output.return_value = os.linesep.join(expected)
821 result = utils.execute_command('my_command arg1 arg2')
822 self.assertEqual(result, expected)
824 @mock.patch('subprocess.Popen')
825 def test_source_env(self, mock_popen):
826 base_env = deepcopy(os.environ)
827 mock_process = mock_popen()
829 'garbage line before',
831 'garbage line after',
833 mock_process.communicate.return_value = os.linesep.join(output_list), '', 0
834 expected = {'NEW_ENV_VALUE': '234'}
835 result = utils.source_env('my_file')
836 self.assertDictEqual(result, expected)
838 os.environ.update(base_env)
840 @mock.patch('yardstick.common.utils.configparser.ConfigParser')
841 def test_parse_ini_file(self, mock_config_parser_type):
843 'default1': 'value1',
844 'default2': 'value2',
855 mock_config_parser = mock_config_parser_type()
856 mock_config_parser.read.return_value = True
857 mock_config_parser.sections.return_value = ['s1', 's2']
858 mock_config_parser.items.side_effect = iter([
869 result = utils.parse_ini_file('my_path')
870 self.assertDictEqual(result, expected)
872 @mock.patch('yardstick.common.utils.configparser.ConfigParser')
873 def test_parse_ini_file_missing_section_header(self, mock_config_parser_type):
874 mock_config_parser = mock_config_parser_type()
875 mock_config_parser.read.side_effect = \
876 configparser.MissingSectionHeaderError(mock.Mock(), 321, mock.Mock())
878 with self.assertRaises(configparser.MissingSectionHeaderError):
879 utils.parse_ini_file('my_path')
881 @mock.patch('yardstick.common.utils.configparser.ConfigParser')
882 def test_parse_ini_file_no_file(self, mock_config_parser_type):
883 mock_config_parser = mock_config_parser_type()
884 mock_config_parser.read.return_value = False
885 with self.assertRaises(RuntimeError):
886 utils.parse_ini_file('my_path')
888 @mock.patch('yardstick.common.utils.configparser.ConfigParser')
889 def test_parse_ini_file_no_default_section_header(self, mock_config_parser_type):
899 mock_config_parser = mock_config_parser_type()
900 mock_config_parser.read.return_value = True
901 mock_config_parser.sections.return_value = ['s1', 's2']
902 mock_config_parser.items.side_effect = iter([
903 configparser.NoSectionError(mock.Mock()),
913 result = utils.parse_ini_file('my_path')
914 self.assertDictEqual(result, expected)
916 def test_join_non_strings(self):
917 self.assertEqual(utils.join_non_strings(':'), '')
918 self.assertEqual(utils.join_non_strings(':', 'a'), 'a')
919 self.assertEqual(utils.join_non_strings(':', 'a', 2, 'c'), 'a:2:c')
920 self.assertEqual(utils.join_non_strings(':', ['a', 2, 'c']), 'a:2:c')
921 self.assertEqual(utils.join_non_strings(':', 'abc'), 'abc')
923 def test_validate_non_string_sequence(self):
924 self.assertEqual(utils.validate_non_string_sequence([1, 2, 3]), [1, 2, 3])
925 self.assertIsNone(utils.validate_non_string_sequence('123'))
926 self.assertIsNone(utils.validate_non_string_sequence(1))
928 self.assertEqual(utils.validate_non_string_sequence(1, 2), 2)
929 self.assertEqual(utils.validate_non_string_sequence(1, default=2), 2)
931 with self.assertRaises(RuntimeError):
932 utils.validate_non_string_sequence(1, raise_exc=RuntimeError)
934 def test_error_class(self):
935 with self.assertRaises(RuntimeError):
938 error_instance = utils.ErrorClass(test='')
939 with self.assertRaises(AttributeError):
940 error_instance.get_name()
943 class TestUtilsIpAddrMethods(unittest.TestCase):
945 GOOD_IP_V4_ADDRESS_STR_LIST = [
955 GOOD_IP_V4_MASK_STR_LIST = [
964 GOOD_IP_V6_ADDRESS_STR_LIST = [
966 u'fe80::250:56ff:fe89:91ff',
967 u'123:4567:89ab:cdef:123:4567:89ab:cdef',
970 GOOD_IP_V6_MASK_STR_LIST = [
979 INVALID_IP_ADDRESS_STR_LIST = [
983 u'123:4567:89ab:cdef:123:4567:89ab:cdef/129',
986 def test_safe_ip_address(self):
987 addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
988 for addr in addr_list:
990 expected = ipaddress.ip_address(addr)
991 self.assertEqual(utils.safe_ip_address(addr), expected, addr)
993 def test_safe_ip_address_v6_ip(self):
994 addr_list = self.GOOD_IP_V6_ADDRESS_STR_LIST
995 for addr in addr_list:
997 expected = ipaddress.ip_address(addr)
998 self.assertEqual(utils.safe_ip_address(addr), expected, addr)
1000 @mock.patch("yardstick.common.utils.logging")
1001 def test_safe_ip_address_negative(self, *args):
1002 # NOTE(ralonsoh): check the calls to mocked functions.
1003 for value in self.INVALID_IP_ADDRESS_STR_LIST:
1004 self.assertIsNone(utils.safe_ip_address(value), value)
1006 addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
1007 mask_list = self.GOOD_IP_V4_MASK_STR_LIST
1008 for addr_mask_pair in product(addr_list, mask_list):
1009 value = ''.join(addr_mask_pair)
1010 self.assertIsNone(utils.safe_ip_address(value), value)
1012 addr_list = self.GOOD_IP_V6_ADDRESS_STR_LIST
1013 mask_list = self.GOOD_IP_V6_MASK_STR_LIST
1014 for addr_mask_pair in product(addr_list, mask_list):
1015 value = ''.join(addr_mask_pair)
1016 self.assertIsNone(utils.safe_ip_address(value), value)
1018 def test_get_ip_version(self):
1019 addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
1020 for addr in addr_list:
1022 self.assertEqual(utils.get_ip_version(addr), 4, addr)
1024 def test_get_ip_version_v6_ip(self):
1025 addr_list = self.GOOD_IP_V6_ADDRESS_STR_LIST
1026 for addr in addr_list:
1028 self.assertEqual(utils.get_ip_version(addr), 6, addr)
1030 @mock.patch("yardstick.common.utils.logging")
1031 def test_get_ip_version_negative(self, *args):
1032 # NOTE(ralonsoh): check the calls to mocked functions.
1033 for value in self.INVALID_IP_ADDRESS_STR_LIST:
1034 self.assertIsNone(utils.get_ip_version(value), value)
1036 addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
1037 mask_list = self.GOOD_IP_V4_MASK_STR_LIST
1038 for addr_mask_pair in product(addr_list, mask_list):
1039 value = ''.join(addr_mask_pair)
1040 self.assertIsNone(utils.get_ip_version(value), value)
1042 addr_list = self.GOOD_IP_V6_ADDRESS_STR_LIST
1043 mask_list = self.GOOD_IP_V6_MASK_STR_LIST
1044 for addr_mask_pair in product(addr_list, mask_list):
1045 value = ''.join(addr_mask_pair)
1046 self.assertIsNone(utils.get_ip_version(value), value)
1048 def test_ip_to_hex(self):
1049 self.assertEqual(utils.ip_to_hex('0.0.0.0'), '00000000')
1050 self.assertEqual(utils.ip_to_hex('10.20.30.40'), '0a141e28')
1051 self.assertEqual(utils.ip_to_hex('127.0.0.1'), '7f000001')
1052 self.assertEqual(utils.ip_to_hex('172.31.90.100'), 'ac1f5a64')
1053 self.assertEqual(utils.ip_to_hex('192.168.254.253'), 'c0a8fefd')
1054 self.assertEqual(utils.ip_to_hex('255.255.255.255'), 'ffffffff')
1056 def test_ip_to_hex_v6_ip(self):
1057 for value in self.GOOD_IP_V6_ADDRESS_STR_LIST:
1058 self.assertEqual(utils.ip_to_hex(value), value)
1060 @mock.patch("yardstick.common.utils.logging")
1061 def test_ip_to_hex_negative(self, *args):
1062 # NOTE(ralonsoh): check the calls to mocked functions.
1063 addr_list = self.GOOD_IP_V4_ADDRESS_STR_LIST
1064 mask_list = self.GOOD_IP_V4_MASK_STR_LIST
1065 value_iter = (''.join(pair) for pair in product(addr_list, mask_list))
1066 for value in chain(value_iter, self.INVALID_IP_ADDRESS_STR_LIST):
1067 self.assertEqual(utils.ip_to_hex(value), value)
1070 class SafeDecodeUtf8TestCase(unittest.TestCase):
1072 @unittest.skipIf(six.PY2,
1073 'This test should only be launched with Python 3.x')
1074 def test_safe_decode_utf8(self):
1075 _bytes = b'this is a byte array'
1076 out = utils.safe_decode_utf8(_bytes)
1077 self.assertIs(type(out), str)
1078 self.assertEqual('this is a byte array', out)
1084 if __name__ == '__main__':