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