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