Remove main() and __main__ from tests.
[yardstick.git] / yardstick / tests / unit / benchmark / scenarios / networking / test_netutilization.py
1 ##############################################################################
2 # Copyright (c) 2016 Huawei Technologies Co.,Ltd and other.
3 #
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 ##############################################################################
9
10 # Unittest for
11 # yardstick.benchmark.scenarios.networking.netutilization.NetUtilization
12
13 from __future__ import absolute_import
14 import mock
15 import unittest
16 import os
17
18 from yardstick.benchmark.scenarios.networking import netutilization
19
20
21 @mock.patch('yardstick.benchmark.scenarios.networking.netutilization.ssh')
22 class NetUtilizationTestCase(unittest.TestCase):
23
24     def setUp(self):
25         self.ctx = {
26             'host': {
27                 'ip': '172.16.0.137',
28                 'user': 'cirros',
29                 'key_filename': "mykey.key"
30             }
31         }
32
33         self.result = {}
34
35     def test_setup_success(self, mock_ssh):
36         options = {
37             "interval": 1,
38             "count": 1
39         }
40         args = {'options': options}
41
42         n = netutilization.NetUtilization(args, self.ctx)
43         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
44
45         n.setup()
46         self.assertIsNotNone(n.client)
47         self.assertTrue(n.setup_done)
48
49     def test_execute_command_success(self, mock_ssh):
50         options = {
51             "interval": 1,
52             "count": 1
53         }
54         args = {'options': options}
55
56         n = netutilization.NetUtilization(args, self.ctx)
57         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
58         n.setup()
59
60         expected_result = 'abcdefg'
61         mock_ssh.SSH.from_node().execute.return_value = (0, expected_result, '')
62         result = n._execute_command("foo")
63         self.assertEqual(result, expected_result)
64
65     def test_execute_command_failed(self, mock_ssh):
66         options = {
67             "interval": 1,
68             "count": 1
69         }
70         args = {'options': options}
71
72         n = netutilization.NetUtilization(args, self.ctx)
73         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
74         n.setup()
75
76         mock_ssh.SSH.from_node().execute.return_value = (127, '', 'abcdefg')
77         self.assertRaises(RuntimeError, n._execute_command,
78                           "failed")
79
80     def test_get_network_utilization_success(self, mock_ssh):
81         options = {
82             "interval": 1,
83             "count": 1
84         }
85         args = {'options': options}
86
87         n = netutilization.NetUtilization(args, self.ctx)
88         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
89         n.setup()
90
91         mpstat_output = self._read_file("netutilization_sample_output1.txt")
92         mock_ssh.SSH.from_node().execute.return_value = (0, mpstat_output, '')
93         result = n._get_network_utilization()
94
95         expected_result = \
96             {"network_utilization_maximun": {
97                 "lo": {"rxcmp/s": "0.00",
98                        "%ifutil": "0.00",
99                        "txcmp/s": "0.00",
100                        "txkB/s": "0.00",
101                        "rxkB/s": "0.00",
102                        "rxpck/s": "0.00",
103                        "txpck/s": "0.00",
104                        "rxmcst/s": "0.00"},
105                 "eth0": {"rxcmp/s": "0.00",
106                          "%ifutil": "0.00",
107                          "txcmp/s": "0.00",
108                          "txkB/s": "0.00",
109                          "rxkB/s": "0.00",
110                          "rxpck/s": "0.00",
111                          "txpck/s": "0.00",
112                          "rxmcst/s": "0.00"}},
113              "network_utilization_average": {
114                 "lo": {"rxcmp/s": "0.00",
115                        "%ifutil": "0.00",
116                        "txcmp/s": "0.00",
117                        "txkB/s": "0.00",
118                        "rxkB/s": "0.00",
119                        "rxpck/s": "0.00",
120                        "txpck/s": "0.00",
121                        "rxmcst/s": "0.00"},
122                 "eth0": {"rxcmp/s": "0.00",
123                          "%ifutil": "0.00",
124                          "txcmp/s": "0.00",
125                          "txkB/s": "0.00",
126                          "rxkB/s": "0.00",
127                          "rxpck/s": "0.00",
128                          "txpck/s": "0.00",
129                          "rxmcst/s": "0.00"}},
130              "network_utilization_minimum": {
131                 "lo": {"rxcmp/s": "0.00",
132                        "%ifutil": "0.00",
133                        "txcmp/s": "0.00",
134                        "txkB/s": "0.00",
135                        "rxkB/s": "0.00",
136                        "rxpck/s": "0.00",
137                        "txpck/s": "0.00",
138                        "rxmcst/s": "0.00"},
139                 "eth0": {"rxcmp/s": "0.00",
140                          "%ifutil": "0.00",
141                          "txcmp/s": "0.00",
142                          "txkB/s": "0.00",
143                          "rxkB/s": "0.00",
144                          "rxpck/s": "0.00",
145                          "txpck/s": "0.00",
146                          "rxmcst/s": "0.00"}}}
147
148         self.assertDictEqual(result, expected_result)
149
150     def test_get_network_utilization_2_success(self, mock_ssh):
151         options = {
152             "interval": 1,
153             "count": 2
154         }
155         args = {'options': options}
156
157         n = netutilization.NetUtilization(args, self.ctx)
158         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
159         n.setup()
160
161         mpstat_output = self._read_file("netutilization_sample_output2.txt")
162         mock_ssh.SSH.from_node().execute.return_value = (0, mpstat_output, '')
163         result = n._get_network_utilization()
164
165         expected_result = \
166             {"network_utilization_maximun": {
167                 "lo": {"rxcmp/s": "0.00",
168                        "%ifutil": "0.00",
169                        "txcmp/s": "0.00",
170                        "txkB/s": "0.00",
171                        "rxkB/s": "0.00",
172                        "rxpck/s": "0.00",
173                        "txpck/s": "0.00",
174                        "rxmcst/s": "0.00"},
175                 "eth0": {"rxcmp/s": "0.00",
176                          "%ifutil": "0.00",
177                          "txcmp/s": "0.00",
178                          "txkB/s": "0.00",
179                          "rxkB/s": "0.00",
180                          "rxpck/s": "0.00",
181                          "txpck/s": "0.00",
182                          "rxmcst/s": "0.00"}},
183              "network_utilization_average": {
184                 "lo": {"rxcmp/s": "0.00",
185                        "%ifutil": "0.00",
186                        "txcmp/s": "0.00",
187                        "txkB/s": "0.00",
188                        "rxkB/s": "0.00",
189                        "rxpck/s": "0.00",
190                        "txpck/s": "0.00",
191                        "rxmcst/s": "0.00"},
192                 "eth0": {"rxcmp/s": "0.00",
193                          "%ifutil": "0.00",
194                          "txcmp/s": "0.00",
195                          "txkB/s": "0.00",
196                          "rxkB/s": "0.00",
197                          "rxpck/s": "0.00",
198                          "txpck/s": "0.00",
199                          "rxmcst/s": "0.00"}},
200              "network_utilization_minimum": {
201                 "lo": {"rxcmp/s": "0.00",
202                        "%ifutil": "0.00",
203                        "txcmp/s": "0.00",
204                        "txkB/s": "0.00",
205                        "rxkB/s": "0.00",
206                        "rxpck/s": "0.00",
207                        "txpck/s": "0.00",
208                        "rxmcst/s": "0.00"},
209                 "eth0": {"rxcmp/s": "0.00",
210                          "%ifutil": "0.00",
211                          "txcmp/s": "0.00",
212                          "txkB/s": "0.00",
213                          "rxkB/s": "0.00",
214                          "rxpck/s": "0.00",
215                          "txpck/s": "0.00",
216                          "rxmcst/s": "0.00"}}}
217
218         self.assertDictEqual(result, expected_result)
219
220     def _read_file(self, filename):
221         curr_path = os.path.dirname(os.path.abspath(__file__))
222         output = os.path.join(curr_path, filename)
223         with open(output) as f:
224             sample_output = f.read()
225         return sample_output