1 # Copyright (c) 2016-2017 Intel Corporation
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 from __future__ import absolute_import
20 from yardstick.benchmark.contexts import ovsdpdk
21 from yardstick.benchmark.contexts.ovsdpdk import Ovsdpdk
25 'vports_mac': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
26 'pci': ['0000:06:00.0', '0000:06:00.1'],
30 'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'},
31 'vports_mac': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
32 'pci': ['0000:06:00.0', '0000:06:00.1'],
35 CORRECT_FILE_PATH = "/etc/yardstick/nodes/pod_ovs.yaml"
36 WRONG_FILE_PATH = "/etc/yardstick/wrong.yaml"
37 SAMPLE_FILE = "ovs_sample_write_to_file.txt"
40 'auth_type': 'ssh_key',
44 'key_filename': '/root/.ssh/id_rsa',
45 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'],
46 'vpath': '/usr/local/',
49 'images': '/var/lib/libvirt/images/ubuntu1.img',
50 'flow': ['ovs-ofctl add-flow br0 in_port=1,action=output:3',
51 'ovs-ofctl add-flow br0 in_port=3,action=output:1',
52 'ovs-ofctl add-flow br0 in_port=4,action=output:2',
53 'ovs-ofctl add-flow br0 in_port=2,action=output:4'],
55 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}]
58 'auth_type': 'password',
60 'vports_mac': ['00:00:00:00:00:03', '00:00:00:00:00:04'],
64 'vpath': '/usr/local/',
65 'images': '/var/lib/libvirt/images/ubuntu1.img',
66 'flow': ['ovs-ofctl add-flow br0 in_port=1,action=output:3',
67 'ovs-ofctl add-flow br0 in_port=3,action=output:1',
68 'ovs-ofctl add-flow br0 in_port=4,action=output:2',
69 'ovs-ofctl add-flow br0 in_port=2,action=output:4'],
71 'password': 'password',
72 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}]
75 PCIS = ['0000:06:00.0', '0000:06:00.1']
78 class OvsdpdkTestCase(unittest.TestCase):
80 NODES_SAMPLE_SSH = "ovs_sample_ssh_key.yaml"
81 NODES_SAMPLE_PASSWORD = "ovs_sample_password.yaml"
84 self.test_context = ovsdpdk.Ovsdpdk()
86 def test_construct(self):
87 self.assertIsNone(self.test_context.name)
88 self.assertIsNone(self.test_context.file_path)
89 self.assertEqual(self.test_context.nodes, [])
90 self.assertEqual(self.test_context.ovs, [])
91 self.assertFalse(self.test_context.vm_deploy)
92 self.assertTrue(self.test_context.first_run)
93 self.assertEqual(self.test_context.user, "")
94 self.assertEqual(self.test_context.ssh_ip, "")
95 self.assertEqual(self.test_context.passwd, "")
96 self.assertEqual(self.test_context.ssh_port, "")
97 self.assertEqual(self.test_context.auth_type, "")
100 self.test_context.parse_pod_and_get_data = mock.Mock()
101 self.test_context.file_path = CORRECT_FILE_PATH
102 self.test_context.init()
103 self.assertIsNone(self.test_context.init())
105 def test_successful_init_with_ssh(self):
106 CORRECT_FILE_PATH = self._get_file_abspath(self.NODES_SAMPLE_SSH)
107 self.test_context.parse_pod_and_get_data(CORRECT_FILE_PATH)
109 def test_successful_init_with_password(self):
110 CORRECT_FILE_PATH = self._get_file_abspath(self.NODES_SAMPLE_PASSWORD)
111 self.test_context.parse_pod_and_get_data(CORRECT_FILE_PATH)
113 def test_unsuccessful_init(self):
116 lambda: self.test_context.parse_pod_and_get_data(WRONG_FILE_PATH))
118 def test_ssh_connection(self):
119 with mock.patch("yardstick.ssh.SSH") as ssh:
120 ssh_mock = mock.Mock(autospec=ssh.SSH)
122 mock.Mock(return_value=(0, {}, ""))
123 ssh.return_value = ssh_mock
125 @mock.patch('yardstick.network_services.utils.provision_tool', return_value="b")
126 def test_ssh_connection(self, mock_prov):
127 with mock.patch("yardstick.ssh.SSH") as ssh:
128 ssh_mock = mock.Mock(autospec=ssh.SSH)
130 mock.Mock(return_value=(1, "b", ""))
131 ssh.return_value = ssh_mock
132 mock_prov.provision_tool = mock.Mock()
133 ovs_obj = ovsdpdk.Ovsdpdk()
134 ovs_obj.connection = ssh_mock
135 ovs_obj.ovs = OVS_PASSWORD
136 self.assertIsNone(ovs_obj.ssh_remote_machine())
138 @mock.patch('yardstick.network_services.utils.provision_tool', return_value="b")
139 def test_ssh_connection_ssh_key(self, mock_prov):
140 with mock.patch("yardstick.ssh.SSH") as ssh:
141 ssh_mock = mock.Mock(autospec=ssh.SSH)
143 mock.Mock(return_value=(1, "b", ""))
144 ssh.return_value = ssh_mock
145 mock_prov.provision_tool = mock.Mock()
146 ovs_obj = ovsdpdk.Ovsdpdk()
147 ovs_obj.connection = ssh_mock
149 ovs_obj.key_filename = '/root/.ssh/id_rsa'
150 self.assertIsNone(ovs_obj.ssh_remote_machine())
152 def test_get_nic_details(self):
153 with mock.patch("yardstick.ssh.SSH") as ssh:
154 ssh_mock = mock.Mock(autospec=ssh.SSH)
156 mock.Mock(return_value=(0, "eth0 eth1", ""))
157 ssh.return_value = ssh_mock
158 ovs_obj = ovsdpdk.Ovsdpdk()
160 ovs_obj.connection = ssh_mock
161 self.assertIsNotNone(ovs_obj.get_nic_details())
163 def test_install_req_libs(self):
164 with mock.patch("yardstick.ssh.SSH") as ssh:
165 ssh_mock = mock.Mock(autospec=ssh.SSH)
167 mock.Mock(return_value=(0, {}, ""))
168 ssh.return_value = ssh_mock
169 ovs_obj = ovsdpdk.Ovsdpdk()
170 ovs_obj.first_run = True
171 ovs_obj.connection = ssh_mock
172 self.assertIsNone(ovs_obj.install_req_libs())
174 def test_setup_ovs(self):
175 with mock.patch("yardstick.ssh.SSH") as ssh:
176 ssh_mock = mock.Mock(autospec=ssh.SSH)
178 mock.Mock(return_value=(0, {}, ""))
179 ssh.return_value = ssh_mock
180 ovs_obj = ovsdpdk.Ovsdpdk()
181 ovs_obj.connection = ssh_mock
183 self.assertIsNone(ovs_obj.setup_ovs({"eth0 eth1"}))
185 def test_start_ovs_serverswitch(self):
186 with mock.patch("yardstick.ssh.SSH") as ssh:
187 ssh_mock = mock.Mock(autospec=ssh.SSH)
189 mock.Mock(return_value=(0, {}, ""))
190 ssh.return_value = ssh_mock
191 ovs_obj = ovsdpdk.Ovsdpdk()
192 ovs_obj.connection = ssh_mock
194 self.assertIsNone(ovs_obj.start_ovs_serverswitch())
196 def test_setup_ovs_bridge(self):
197 with mock.patch("yardstick.ssh.SSH") as ssh:
198 ssh_mock = mock.Mock(autospec=ssh.SSH)
200 mock.Mock(return_value=(0, {}, ""))
201 ssh.return_value = ssh_mock
202 ovs_obj = ovsdpdk.Ovsdpdk()
203 ovs_obj.connection = ssh_mock
205 self.assertIsNone(ovs_obj.setup_ovs_bridge())
207 def test_add_oflows(self):
208 with mock.patch("yardstick.ssh.SSH") as ssh:
209 ssh_mock = mock.Mock(autospec=ssh.SSH)
211 mock.Mock(return_value=(0, {}, ""))
212 ssh.return_value = ssh_mock
213 ovs_obj = ovsdpdk.Ovsdpdk()
214 ovs_obj.connection = ssh_mock
216 self.assertIsNone(ovs_obj.add_oflows())
218 def test_setup_ovs_context_vm_already_present(self):
219 with mock.patch("yardstick.ssh.SSH") as ssh:
220 ssh_mock = mock.Mock(autospec=ssh.SSH)
222 mock.Mock(return_value=(0, {}, ""))
223 ssh.return_value = ssh_mock
224 ovs_obj = ovsdpdk.Ovsdpdk()
225 ovs_obj.connection = ssh_mock
227 mock_ovs = mock.Mock()
228 ssh_mock.put = mock.Mock()
229 ovs_obj.check_output = mock.Mock(return_value=(0, "vm1"))
230 self.assertIsNone(ovs_obj.setup_ovs_context(
236 'yardstick.benchmark.contexts.ovsdpdk',
237 return_value="Domain vm1 created from /tmp/vm_ovs.xml")
238 def test_is_vm_created(self, NIC_INPUT):
239 with mock.patch("yardstick.ssh.SSH") as ssh:
240 ssh_mock = mock.Mock(autospec=ssh.SSH)
242 mock.Mock(return_value=(0, {}, ""))
244 mock.Mock(return_value=(0, {}, ""))
245 ssh.return_value = ssh_mock
246 mock_ovs = mock.Mock()
247 ret_create = mock.Mock()
248 pcis = NIC_DETAILS['pci']
249 driver = NIC_DETAILS['phy_driver']
250 self.assertIsNotNone(
251 mock_ovs.ovs_obj.setup_ovs_context(
256 def test_check_output(self):
257 with mock.patch("yardstick.ssh.SSH") as ssh:
259 ssh_mock = mock.Mock(autospec=ssh.SSH)
261 mock.Mock(return_value=(0, {}, ""))
262 ssh.return_value = ssh_mock
263 ovs_obj = ovsdpdk.Ovsdpdk()
264 ovs_obj.connection = ssh_mock
265 self.assertIsNotNone(ovs_obj.check_output(cmd, None))
267 def test_split_cpu_list_available(self):
268 with mock.patch("itertools.chain") as iter1:
270 print("{0}".format(iter1))
271 ovs_obj = ovsdpdk.Ovsdpdk()
272 self.assertIsNotNone(ovs_obj.split_cpu_list('0,5'))
274 def test_split_cpu_list_null(self):
275 with mock.patch("itertools.chain") as iter1:
277 print("{0}".format(iter1))
278 ovs_obj = ovsdpdk.Ovsdpdk()
279 self.assertEqual(ovs_obj.split_cpu_list([]), [])
281 def test_destroy_vm_successful(self):
282 with mock.patch("yardstick.ssh.SSH") as ssh:
283 ssh_mock = mock.Mock(autospec=ssh.SSH)
285 mock.Mock(return_value=(0, {}, ""))
286 ssh.return_value = ssh_mock
287 ovs_obj = ovsdpdk.Ovsdpdk()
288 ovs_obj.connection = ssh_mock
290 ovs_obj.check_output = mock.Mock(return_value=(0, "vm1"))
292 mock.Mock(return_value=(0, {}, ""))
294 mock.Mock(return_value=(0, {}, ""))
296 mock.Mock(return_value=(0, "0 i40e"))
298 mock.Mock(return_value=(0, "0 i40e"))
299 self.assertIsNone(ovs_obj.destroy_vm())
301 def test_destroy_vm_unsuccessful(self):
302 with mock.patch("yardstick.ssh.SSH") as ssh:
303 ssh_mock = mock.Mock(autospec=ssh.SSH)
305 mock.Mock(return_value=(0, {}, ""))
306 ssh.return_value = ssh_mock
307 ovs_obj = ovsdpdk.Ovsdpdk()
308 ovs_obj.connection = ssh_mock
310 ovs_obj.check_output = mock.Mock(return_value=(1, {}))
311 self.assertIsNone(ovs_obj.destroy_vm())
313 def test_read_from_file(self):
314 CORRECT_FILE_PATH = self._get_file_abspath(self.NODES_SAMPLE_PASSWORD)
315 ovs_obj = ovsdpdk.Ovsdpdk()
316 self.assertIsNotNone(ovs_obj.read_from_file(CORRECT_FILE_PATH))
318 def test_write_to_file(self):
319 ovs_obj = ovsdpdk.Ovsdpdk()
320 self.assertIsNone(ovs_obj.write_to_file(SAMPLE_FILE, "some content"))
322 def _get_file_abspath(self, filename):
323 curr_path = os.path.dirname(os.path.abspath(__file__))
324 file_path = os.path.join(curr_path, filename)
327 if __name__ == '__main__':