Adding new SRIOV Standalone Context
[yardstick.git] / tests / unit / benchmark / contexts / test_standalone.py
1 #!/usr/bin/env python
2
3 # Copyright (c) 2016-2017 Intel Corporation
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
18 # Unittest for yardstick.benchmark.contexts.standalone
19
20 from __future__ import absolute_import
21 import os
22 import unittest
23 import mock
24 from yardstick.benchmark.contexts import standalone
25 from yardstick.benchmark.contexts import sriov
26
27 MOCKS = {
28     'yardstick.benchmark.contexts': mock.MagicMock(),
29     'yardstick.benchmark.contexts.sriov': mock.MagicMock(),
30     'yardstick.benchmark.contexts.standalone': mock.MagicMock(),
31 }
32
33
34 class StandaloneContextTestCase(unittest.TestCase):
35
36     NODES_SAMPLE = "nodes_sample_new.yaml"
37     NODES_DUPLICATE_SAMPLE = "nodes_duplicate_sample_new.yaml"
38
39     def setUp(self):
40         self.test_context = standalone.StandaloneContext()
41
42     def test_construct(self):
43         self.assertIsNone(self.test_context.name)
44         self.assertIsNone(self.test_context.file_path)
45         self.assertEqual(self.test_context.nodes, [])
46         self.assertEqual(self.test_context.nfvi_node, [])
47
48     def test_unsuccessful_init(self):
49         attrs = {
50             'name': 'foo',
51             'file': self._get_file_abspath("error_file")
52         }
53         self.assertRaises(IOError, self.test_context.init, attrs)
54
55     def test_successful_init(self):
56         attrs = {
57             'name': 'sriov',
58             'file': self._get_file_abspath(self.NODES_SAMPLE)
59         }
60
61         self.test_context.nfvi_node = [{
62             'name': 'sriov',
63             'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
64             'ip': '10.123.123.122',
65             'role': 'Sriov',
66             'user': 'root',
67             'images': '/var/lib/libvirt/images/ubuntu1.img',
68             'phy_driver': 'i40e',
69             'password': 'password',
70             'phy_ports': ['0000:06:00.0', '0000:06:00.1']}]
71         self.test_context.get_nfvi_obj = mock.Mock()
72         self.test_context.init(attrs)
73         self.assertEqual(self.test_context.name, "sriov")
74         self.assertEqual(len(self.test_context.nodes), 3)
75         self.assertEqual(len(self.test_context.nfvi_node), 2)
76         self.assertEqual(self.test_context.nfvi_node[0]["name"], "sriov")
77
78     def test__get_server_with_dic_attr_name(self):
79         attrs = {
80             'name': 'foo',
81             'file': self._get_file_abspath(self.NODES_SAMPLE)
82         }
83         self.test_context.nfvi_node = [{
84             'name': 'sriov',
85             'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
86             'ip': '10.123.123.122',
87             'role': 'Sriov',
88             'user': 'root',
89             'images': '/var/lib/libvirt/images/ubuntu1.img',
90             'phy_driver': 'i40e',
91             'password': 'password',
92             'phy_ports': ['0000:06:00.0', '0000:06:00.1']}]
93         self.test_context.init(attrs)
94         attr_name = {'name': 'foo.bar'}
95         result = self.test_context._get_server(attr_name)
96         self.assertEqual(result, None)
97
98     def test__get_server_not_found(self):
99         attrs = {
100             'name': 'foo',
101             'file': self._get_file_abspath(self.NODES_SAMPLE)
102         }
103         self.test_context.nfvi_node = [{
104             'name': 'sriov',
105             'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
106             'ip': '10.123.123.122',
107             'role': 'Sriov',
108             'user': 'root',
109             'images': '/var/lib/libvirt/images/ubuntu1.img',
110             'phy_driver': 'i40e',
111             'password': 'password',
112             'phy_ports': ['0000:06:00.0', '0000:06:00.1']}]
113         self.test_context.init(attrs)
114         attr_name = 'bar.foo'
115         result = self.test_context._get_server(attr_name)
116         self.assertEqual(result, None)
117
118     def test__get_server_duplicate(self):
119         attrs = {
120             'name': 'foo',
121             'file': self._get_file_abspath(self.NODES_DUPLICATE_SAMPLE)
122         }
123         self.test_context.nfvi_node = [{
124             'name': 'sriov',
125             'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
126             'ip': '10.123.123.122',
127             'role': 'Sriov',
128             'user': 'root',
129             'images': '/var/lib/libvirt/images/ubuntu1.img',
130             'phy_driver': 'i40e',
131             'password': 'password',
132             'phy_ports': ['0000:06:00.0', '0000:06:00.1']}]
133         self.test_context.init(attrs)
134         attr_name = 'sriov.foo'
135         self.assertRaises(
136             ValueError,
137             self.test_context._get_server,
138             attr_name)
139
140     def test__get_server_found(self):
141         attrs = {
142             'name': 'sriov',
143             'file': self._get_file_abspath(self.NODES_SAMPLE)
144         }
145         self.test_context.nfvi_node = [{
146             'name': 'sriov',
147             'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
148             'ip': '10.123.123.122',
149             'role': 'Sriov',
150             'user': 'root',
151             'images': '/var/lib/libvirt/images/ubuntu1.img',
152             'phy_driver': 'i40e',
153             'password': 'password',
154             'phy_ports': ['0000:06:00.0', '0000:06:00.1']}]
155         self.test_context.init(attrs)
156         attr_name = 'sriov.sriov'
157         result = self.test_context._get_server(attr_name)
158         self.assertEqual(result['ip'], '10.123.123.122')
159         self.assertEqual(result['name'], 'sriov.sriov')
160         self.assertEqual(result['user'], 'root')
161
162     def test_deploy(self):
163         attrs = {
164             'name': 'foo',
165             'file': self._get_file_abspath(self.NODES_SAMPLE)
166         }
167
168         self.test_context.nfvi_node = [{
169             'name': 'sriov',
170             'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
171             'ip': '10.123.123.122',
172             'role': 'Sriov',
173             'user': 'root',
174             'images': '/var/lib/libvirt/images/ubuntu1.img',
175             'phy_driver': 'i40e',
176             'password': 'password',
177             'phy_ports': ['0000:06:00.0', '0000:06:00.1']}]
178         self.test_context.get_nfvi_obj = mock.MagicMock()
179         self.test_context.init(attrs)
180         self.test_context.nfvi_obj.ssh_remote_machine = mock.Mock()
181         self.test_context.nfvi_obj.first_run = True
182         self.test_context.nfvi_obj.get_nic_details = mock.Mock()
183         PORTS = ['0000:06:00.0', '0000:06:00.1']
184         NIC_DETAILS = {
185             'interface': {0: 'enp6s0f0', 1: 'enp6s0f1'},
186             'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
187             'pci': ['0000:06:00.0', '0000:06:00.1'],
188             'phy_driver': 'i40e'}
189         DRIVER = 'i40e'
190         result = self.test_context.nfvi_obj.setup_sriov_context(
191             PORTS,
192             NIC_DETAILS,
193             DRIVER)
194         print("{0}".format(result))
195         self.assertIsNone(self.test_context.deploy())
196
197     def test_undeploy(self):
198         attrs = {
199             'name': 'foo',
200             'file': self._get_file_abspath(self.NODES_SAMPLE)
201         }
202         self.test_context.nfvi_node = [{
203             'name': 'sriov',
204             'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
205             'ip': '10.123.123.122',
206             'role': 'Sriov',
207             'user': 'root',
208             'images': '/var/lib/libvirt/images/ubuntu1.img',
209             'phy_driver': 'i40e',
210             'password': 'password',
211             'phy_ports': ['0000:06:00.0', '0000:06:00.1']}]
212         self.test_context.get_nfvi_obj = mock.MagicMock()
213         self.test_context.init(attrs)
214         self.test_context.nfvi_obj.destroy_vm = mock.Mock()
215         self.assertIsNone(self.test_context.undeploy())
216
217     def test_get_nfvi_obj(self):
218         with mock.patch('yardstick.benchmark.contexts.sriov'):
219             attrs = {
220                 'name': 'sriov',
221                 'file': self._get_file_abspath(self.NODES_SAMPLE)
222             }
223             self.test_context.init(attrs)
224             self.test_context.nfvi_obj.file_path = self._get_file_abspath(
225                 self.NODES_SAMPLE)
226             self.test_context.nfvi_node = [{
227                 'name': 'sriov',
228                 'vf_macs': ['00:00:00:71:7d:25', '00:00:00:71:7d:26'],
229                 'ip': '10.123.123.122',
230                 'role': 'Sriov',
231                 'user': 'root',
232                 'images': '/var/lib/libvirt/images/ubuntu1.img',
233                 'phy_driver': 'i40e',
234                 'password': 'password',
235                 'phy_ports': ['0000:06:00.0', '0000:06:00.1']}]
236             self.test_context.get_nfvi_obj = mock.MagicMock()
237             self.test_context.init(attrs)
238             self.test_context.get_context_impl = mock.Mock(
239                 return_value=sriov.Sriov)
240             self.assertIsNotNone(self.test_context.get_nfvi_obj())
241
242     def test_get_context_impl_correct_obj(self):
243         with mock.patch.dict("sys.modules", MOCKS):
244             self.assertIsNotNone(self.test_context.get_context_impl('Sriov'))
245
246     def test_get_context_impl_wrong_obj(self):
247         with mock.patch.dict("sys.modules", MOCKS):
248             self.assertRaises(
249                 ValueError,
250                 lambda: self.test_context.get_context_impl('wrong_object'))
251
252     def _get_file_abspath(self, filename):
253         curr_path = os.path.dirname(os.path.abspath(__file__))
254         file_path = os.path.join(curr_path, filename)
255         return file_path
256
257     def test__get_network(self):
258         network1 = {
259             'name': 'net_1',
260             'vld_id': 'vld111',
261             'segmentation_id': 'seg54',
262             'network_type': 'type_a',
263             'physical_network': 'phys',
264         }
265         network2 = {
266             'name': 'net_2',
267             'vld_id': 'vld999',
268         }
269         self.test_context.networks = {
270             'a': network1,
271             'b': network2,
272         }
273
274         attr_name = None
275         self.assertIsNone(self.test_context._get_network(attr_name))
276
277         attr_name = {}
278         self.assertIsNone(self.test_context._get_network(attr_name))
279
280         attr_name = {'vld_id': 'vld777'}
281         self.assertIsNone(self.test_context._get_network(attr_name))
282
283         attr_name = 'vld777'
284         self.assertIsNone(self.test_context._get_network(attr_name))
285
286         attr_name = {'vld_id': 'vld999'}
287         expected = {
288             "name": 'net_2',
289             "vld_id": 'vld999',
290             "segmentation_id": None,
291             "network_type": None,
292             "physical_network": None,
293         }
294         result = self.test_context._get_network(attr_name)
295         self.assertDictEqual(result, expected)
296
297         attr_name = 'a'
298         expected = network1
299         result = self.test_context._get_network(attr_name)
300         self.assertDictEqual(result, expected)
301 if __name__ == '__main__':
302     unittest.main()