Merge "Fix IxLoad traffic generator issue around running the traffic."
[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 @mock.patch('yardstick.benchmark.scenarios.networking.vsperf_dpdk.ssh')
31 @mock.patch("yardstick.benchmark.scenarios.networking.vsperf_dpdk.open",
32             mock.mock_open())
33 class VsperfDPDKTestCase(unittest.TestCase):
34
35     def setUp(self):
36         self.ctx = {
37             "host": {
38                 "ip": "10.229.47.137",
39                 "user": "ubuntu",
40                 "password": "ubuntu",
41             },
42         }
43         self.args = {
44             'task_id': "1234-5678",
45             'options': {
46                 'testname': 'pvp_tput',
47                 'traffic_type': 'rfc2544_throughput',
48                 'frame_size': '64',
49                 'test_params': 'TRAFFICGEN_DURATION=30;',
50                 'trafficgen_port1': 'ens4',
51                 'trafficgen_port2': 'ens5',
52                 'conf_file': 'vsperf-yardstick.conf',
53                 'setup_script': 'setup_yardstick.sh',
54                 'moongen_helper_file': '~/moongen.py',
55                 'moongen_host_ip': '10.5.201.151',
56                 'moongen_port1_mac': '8c:dc:d4:ae:7c:5c',
57                 'moongen_port2_mac': '8c:dc:d4:ae:7c:5d',
58                 'trafficgen_port1_nw': 'test2',
59                 'trafficgen_port2_nw': 'test3',
60             },
61             'sla': {
62                 'metrics': 'throughput_rx_fps',
63                 'throughput_rx_fps': 500000,
64                 'action': 'monitor',
65             }
66         }
67
68     def test_vsperf_dpdk_setup(self, mock_ssh, mock_subprocess):
69         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
70
71         # setup() specific mocks
72         mock_subprocess.call().execute.return_value = None
73
74         p.setup()
75         self.assertIsNotNone(p.client)
76         self.assertEqual(p.setup_done, True)
77
78     def test_vsperf_dpdk_teardown(self, mock_ssh, mock_subprocess):
79         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
80
81         # setup() specific mocks
82         mock_subprocess.call().execute.return_value = None
83
84         p.setup()
85         self.assertIsNotNone(p.client)
86         self.assertEqual(p.setup_done, True)
87
88         p.teardown()
89         self.assertEqual(p.setup_done, False)
90
91     def test_vsperf_dpdk_is_dpdk_setup_no(self, mock_ssh, mock_subprocess):
92         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
93
94         # setup() specific mocks
95         mock_subprocess.call().execute.return_value = None
96
97         p.setup()
98         self.assertIsNotNone(p.client)
99         self.assertEqual(p.setup_done, True)
100
101         # is_dpdk_setup() specific mocks
102         mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
103
104         result = p._is_dpdk_setup()
105         self.assertEqual(result, False)
106
107     def test_vsperf_dpdk_is_dpdk_setup_yes(self, mock_ssh, mock_subprocess):
108         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
109
110         # setup() specific mocks
111         mock_subprocess.call().execute.return_value = None
112
113         p.setup()
114         self.assertIsNotNone(p.client)
115         self.assertEqual(p.setup_done, True)
116
117         # is_dpdk_setup() specific mocks
118         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
119
120         result = p._is_dpdk_setup()
121         self.assertEqual(result, True)
122
123     def test_vsperf_dpdk_dpdk_setup_first(self, mock_ssh, mock_subprocess):
124         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
125
126         # setup() specific mocks
127         mock_subprocess.call().execute.return_value = None
128
129         p.setup()
130         self.assertIsNotNone(p.client)
131         self.assertEqual(p.setup_done, True)
132
133         # is_dpdk_setup() specific mocks
134         mock_ssh.SSH.from_node().execute.return_value = (0, 'dummy', '')
135
136         p.dpdk_setup()
137         self.assertEqual(p._is_dpdk_setup(), False)
138         self.assertEqual(p.dpdk_setup_done, True)
139
140     def test_vsperf_dpdk_dpdk_setup_next(self, mock_ssh, mock_subprocess):
141         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
142
143         # setup() specific mocks
144         mock_subprocess.call().execute.return_value = None
145
146         p.setup()
147         self.assertIsNotNone(p.client)
148         self.assertEqual(p.setup_done, True)
149
150         # dpdk_setup() specific mocks
151         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
152
153         p.dpdk_setup()
154         self.assertEqual(p._is_dpdk_setup(), True)
155         self.assertEqual(p.dpdk_setup_done, True)
156
157     def test_vsperf_dpdk_dpdk_setup_fail(self, mock_ssh, mock_subprocess):
158         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
159
160         # setup() specific mocks
161         mock_subprocess.call().execute.return_value = None
162
163         p.setup()
164         self.assertIsNotNone(p.client)
165         self.assertEqual(p.setup_done, True)
166
167         # dpdk_setup() specific mocks
168         mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
169
170         self.assertRaises(RuntimeError, p.dpdk_setup)
171
172     def test_vsperf_dpdk_run_ok(self, mock_ssh, mock_subprocess):
173         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
174
175         # setup() specific mocks
176         mock_subprocess.call().execute.return_value = None
177
178         p.setup()
179         self.assertIsNotNone(p.client)
180         self.assertEqual(p.setup_done, True)
181
182         # run() specific mocks
183         mock_subprocess.call().execute.return_value = None
184         mock_subprocess.call().execute.return_value = None
185         mock_ssh.SSH.from_node().execute.return_value = (
186             0, 'throughput_rx_fps\r\n14797660.000\r\n', '')
187
188         result = {}
189         p.run(result)
190
191         self.assertEqual(result['throughput_rx_fps'], '14797660.000')
192
193     def test_vsperf_dpdk_run_falied_vsperf_execution(self, mock_ssh,
194                                                 mock_subprocess):
195         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
196
197         # setup() specific mocks
198         mock_subprocess.call().execute.return_value = None
199
200         p.setup()
201         self.assertIsNotNone(p.client)
202         self.assertEqual(p.setup_done, True)
203
204         # run() specific mocks
205         mock_subprocess.call().execute.return_value = None
206         mock_subprocess.call().execute.return_value = None
207         mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
208
209         result = {}
210         self.assertRaises(RuntimeError, p.run, result)
211
212     def test_vsperf_dpdk_run_falied_csv_report(self, mock_ssh, mock_subprocess):
213         p = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
214
215         # setup() specific mocks
216         mock_subprocess.call().execute.return_value = None
217
218         p.setup()
219         self.assertIsNotNone(p.client)
220         self.assertEqual(p.setup_done, True)
221
222         # run() specific mocks
223         mock_subprocess.call().execute.return_value = None
224         mock_subprocess.call().execute.return_value = None
225         mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
226         mock_ssh.SSH.from_node().execute.return_value = (1, '', '')
227
228         result = {}
229         self.assertRaises(RuntimeError, p.run, result)
230
231 def main():
232     unittest.main()
233
234
235 if __name__ == '__main__':
236     main()