Fixed document for Grafana Port usage
[yardstick.git] / tests / unit / benchmark / scenarios / networking / test_vsperf_dpdk.py
1 #!/usr/bin/env python
2
3 # Copyright 2017 Nokia
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 #   http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17 # Unittest for yardstick.benchmark.scenarios.networking.vsperf.VsperfDPDK
18
19 from __future__ import absolute_import
20 try:
21     from unittest import mock
22 except ImportError:
23     import mock
24 import unittest
25
26 from yardstick.benchmark.scenarios.networking import vsperf_dpdk
27
28
29 @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.subprocess')
30 class VsperfDPDKTestCase(unittest.TestCase):
31
32     def setUp(self):
33         self.ctx = {
34             "host": {
35                 "ip": "10.229.47.137",
36                 "user": "ubuntu",
37                 "password": "ubuntu",
38             },
39         }
40         self.args = {
41             'task_id': "1234-5678",
42             'options': {
43                 'testname': 'pvp_tput',
44                 'traffic_type': 'rfc2544_throughput',
45                 'frame_size': '64',
46                 'test_params': 'TRAFFICGEN_DURATION=30;',
47                 'trafficgen_port1': 'ens4',
48                 'trafficgen_port2': 'ens5',
49                 'conf_file': 'vsperf-yardstick.conf',
50                 'setup_script': 'setup_yardstick.sh',
51                 'moongen_helper_file': '~/moongen.py',
52                 'moongen_host_ip': '10.5.201.151',
53                 'moongen_port1_mac': '8c:dc:d4:ae:7c:5c',
54                 'moongen_port2_mac': '8c:dc:d4:ae:7c:5d',
55                 'trafficgen_port1_nw': 'test2',
56                 'trafficgen_port2_nw': 'test3',
57             },
58             'sla': {
59                 'metrics': 'throughput_rx_fps',
60                 'throughput_rx_fps': 500000,
61                 'action': 'monitor',
62             }
63         }
64
65         self._mock_ssh = mock.patch(
66             'yardstick.benchmark.scenarios.networking.vsperf_dpdk.ssh')
67         self.mock_ssh = self._mock_ssh.start()
68
69         self.addCleanup(self._cleanup)
70
71     def _cleanup(self):
72         self._mock_ssh.stop()
73
74     def test_vsperf_dpdk_setup(self, mock_subprocess):
75         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
76
77         # setup() specific mocks
78         mock_subprocess.call().execute.return_value = None
79
80         p.setup()
81         self.assertIsNotNone(p.client)
82         self.assertTrue(p.setup_done)
83
84     def test_vsperf_dpdk_teardown(self, mock_subprocess):
85         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
86
87         # setup() specific mocks
88         mock_subprocess.call().execute.return_value = None
89
90         p.setup()
91         self.assertIsNotNone(p.client)
92         self.assertTrue(p.setup_done)
93
94         p.teardown()
95         self.assertFalse(p.setup_done)
96
97     def test_vsperf_dpdk_is_dpdk_setup_no(self, mock_subprocess):
98         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
99
100         # setup() specific mocks
101         mock_subprocess.call().execute.return_value = None
102
103         p.setup()
104         self.assertIsNotNone(p.client)
105         self.assertTrue(p.setup_done)
106
107         # is_dpdk_setup() specific mocks
108         self.mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
109
110         result = p._is_dpdk_setup()
111         self.assertFalse(result)
112
113     def test_vsperf_dpdk_is_dpdk_setup_yes(self, mock_subprocess):
114         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
115
116         # setup() specific mocks
117         mock_subprocess.call().execute.return_value = None
118
119         p.setup()
120         self.assertIsNotNone(p.client)
121         self.assertTrue(p.setup_done)
122
123         # is_dpdk_setup() specific mocks
124         self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
125
126         result = p._is_dpdk_setup()
127         self.assertTrue(result)
128
129     @mock.patch('time.sleep')
130     def test_vsperf_dpdk_dpdk_setup_first(self, _, mock_subprocess):
131         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
132
133         # setup() specific mocks
134         mock_subprocess.call().execute.return_value = None
135
136         p.setup()
137         self.assertIsNotNone(p.client)
138         self.assertTrue(p.setup_done)
139
140         # is_dpdk_setup() specific mocks
141         self.mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
142
143         p.dpdk_setup()
144         self.assertFalse(p._is_dpdk_setup())
145         self.assertTrue(p.dpdk_setup_done)
146
147     @mock.patch('time.sleep')
148     def test_vsperf_dpdk_dpdk_setup_next(self, _, mock_subprocess):
149         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
150
151         # setup() specific mocks
152         self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
153         mock_subprocess.call().execute.return_value = None
154
155         p.setup()
156         self.assertIsNotNone(p.client)
157         self.assertTrue(p.setup_done)
158
159         p.dpdk_setup()
160         self.assertTrue(p._is_dpdk_setup())
161         self.assertTrue(p.dpdk_setup_done)
162
163     @mock.patch('time.sleep')
164     def test_vsperf_dpdk_dpdk_setup_fail(self, _, mock_subprocess):
165         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
166
167         # setup() specific mocks
168         self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
169         mock_subprocess.call().execute.return_value = None
170
171         p.setup()
172         self.assertIsNotNone(p.client)
173         self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
174         self.assertTrue(p.setup_done)
175
176         self.assertRaises(RuntimeError, p.dpdk_setup)
177
178     @mock.patch('time.sleep')
179     def test_vsperf_dpdk_run_ok(self, _, mock_subprocess):
180         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
181
182         # setup() specific mocks
183         self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
184         mock_subprocess.call().execute.return_value = None
185
186         p.setup()
187         self.assertIsNotNone(p.client)
188         self.assertTrue(p.setup_done)
189
190         # run() specific mocks
191         mock_subprocess.call().execute.return_value = None
192         self.mock_ssh.SSH.from_node().execute.return_value = (
193             0, 'throughput_rx_fps\r\n14797660.000\r\n', '')
194
195         result = {}
196         p.run(result)
197
198         self.assertEqual(result['throughput_rx_fps'], '14797660.000')
199
200     def test_vsperf_dpdk_run_falied_vsperf_execution(self, mock_subprocess):
201         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
202
203         # setup() specific mocks
204         self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
205         mock_subprocess.call().execute.return_value = None
206
207         p.setup()
208         self.assertIsNotNone(p.client)
209         self.assertTrue(p.setup_done)
210
211         # run() specific mocks
212         mock_subprocess.call().execute.return_value = None
213         mock_subprocess.call().execute.return_value = None
214         self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
215
216         result = {}
217         self.assertRaises(RuntimeError, p.run, result)
218
219     def test_vsperf_dpdk_run_falied_csv_report(self, mock_subprocess):
220         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
221
222         # setup() specific mocks
223         self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
224         mock_subprocess.call().execute.return_value = None
225
226         p.setup()
227         self.assertIsNotNone(p.client)
228         self.assertTrue(p.setup_done)
229
230         # run() specific mocks
231         mock_subprocess.call().execute.return_value = None
232         mock_subprocess.call().execute.return_value = None
233         self.mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
234         self.mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
235
236         result = {}
237         self.assertRaises(RuntimeError, p.run, result)
238
239 def main():
240     unittest.main()
241
242
243 if __name__ == '__main__':
244     main()