aboutsummaryrefslogtreecommitdiffstats
path: root/yardstick/tests/unit/network_services/helpers/test_cpu.py
blob: 871fbf8c96ab3f983f77c2d52031e3afc416c17b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Copyright (c) 2016-2017 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

from __future__ import division
import unittest
import mock
import subprocess

from yardstick.network_services.helpers.cpu import \
    CpuSysCores


class TestCpuSysCores(unittest.TestCase):

    def setUp(self):
        self._mock_ssh = mock.patch("yardstick.ssh.SSH")
        self.mock_ssh = self._mock_ssh.start()

        self.addCleanup(self._cleanup)

    def _cleanup(self):
        self._mock_ssh.stop()

    def test___init__(self):
        self.mock_ssh.execute.return_value = 1, "", ""
        self.mock_ssh.put.return_value = 1, "", ""
        cpu_topo = CpuSysCores(self.mock_ssh)
        self.assertIsNotNone(cpu_topo.connection)

    def test__get_core_details(self):
        with mock.patch("yardstick.ssh.SSH") as ssh:
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(1, "", ""))
            ssh_mock.put = \
                mock.Mock(return_value=(1, "", ""))
            cpu_topo = CpuSysCores(ssh_mock)
            subprocess.check_output = mock.Mock(return_value=0)
            lines = ["cpu:1", "topo:2", ""]
            self.assertEqual([{'topo': '2', 'cpu': '1'}],
                             cpu_topo._get_core_details(lines))

    def test_get_core_socket(self):
        with mock.patch("yardstick.ssh.SSH") as ssh:
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(1, "cpu:1\ntest:2\n \n", ""))
            ssh_mock.put = \
                mock.Mock(return_value=(1, "", ""))
            cpu_topo = CpuSysCores(ssh_mock)
            subprocess.check_output = mock.Mock(return_value=0)
            cpu_topo._get_core_details = \
                mock.Mock(side_effect=[[{'Core(s) per socket': '2', 'Thread(s) per core': '1'}],
                                       [{'physical id': '2', 'processor': '1'}]])
            self.assertEqual({'thread_per_core': '1', '2': ['1'],
                              'cores_per_socket': '2'},
                             cpu_topo.get_core_socket())

    def test_validate_cpu_cfg(self):
        with mock.patch("yardstick.ssh.SSH") as ssh:
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(1, "cpu:1\ntest:2\n \n", ""))
            ssh_mock.put = \
                mock.Mock(return_value=(1, "", ""))
            cpu_topo = CpuSysCores(ssh_mock)
            subprocess.check_output = mock.Mock(return_value=0)
            cpu_topo._get_core_details = \
                mock.Mock(side_effect=[[{'Core(s) per socket': '2', 'Thread(s) per core': '1'}],
                                       [{'physical id': '2', 'processor': '1'}]])
            cpu_topo.core_map = \
                {'thread_per_core': '1', '2': ['1'], 'cores_per_socket': '2'}
            self.assertEqual(-1, cpu_topo.validate_cpu_cfg())

    def test_validate_cpu_cfg_2t(self):
        with mock.patch("yardstick.ssh.SSH") as ssh:
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(1, "cpu:1\ntest:2\n \n", ""))
            ssh_mock.put = \
                mock.Mock(return_value=(1, "", ""))
            cpu_topo = CpuSysCores(ssh_mock)
            subprocess.check_output = mock.Mock(return_value=0)
            cpu_topo._get_core_details = \
                mock.Mock(side_effect=[[{'Core(s) per socket': '2', 'Thread(s) per core': '1'}],
                                       [{'physical id': '2', 'processor': '1'}]])
            cpu_topo.core_map = \
                {'thread_per_core': 1, '2': ['1'], 'cores_per_socket': '2'}
            vnf_cfg = {'lb_config': 'SW', 'lb_count': 1, 'worker_config':
                       '1C/2T', 'worker_threads': 1}
            self.assertEqual(-1, cpu_topo.validate_cpu_cfg(vnf_cfg))

    def test_validate_cpu_cfg_fail(self):
        with mock.patch("yardstick.ssh.SSH") as ssh:
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(1, "cpu:1\ntest:2\n \n", ""))
            ssh_mock.put = \
                mock.Mock(return_value=(1, "", ""))
            cpu_topo = CpuSysCores(ssh_mock)
            subprocess.check_output = mock.Mock(return_value=0)
            cpu_topo._get_core_details = \
                mock.Mock(side_effect=[[{'Core(s) per socket': '2', 'Thread(s) per core': '1'}],
                                       [{'physical id': '2', 'processor': '1'}]])
            cpu_topo.core_map = \
                {'thread_per_core': 1, '2': [1], 'cores_per_socket': 2}
            vnf_cfg = {'lb_config': 'SW', 'lb_count': 1, 'worker_config':
                       '1C/1T', 'worker_threads': 1}
            self.assertEqual(-1, cpu_topo.validate_cpu_cfg(vnf_cfg))