Revert "Updates scenario files for hunter branch"
[apex.git] / apex / tests / test_apex_overcloud_node.py
1 ##############################################################################
2 # Copyright (c) 2018 Tim Rozet (trozet@redhat.com) (Red Hat)
3 #
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9
10 from libvirt import libvirtError
11 from mock import patch
12 from mock import MagicMock
13 import os
14 import unittest
15 import urllib.request
16
17 from apex.common import exceptions as exc
18 from apex.overcloud.node import OvercloudNode
19 from apex.settings.deploy_settings import DeploySettings
20 from apex.tests.constants import TEST_DUMMY_CONFIG
21
22 DUMMY_SNAP_DIR = '/tmp/dummy_cache'
23
24
25 class TestSnapshotDeployment(unittest.TestCase):
26     @classmethod
27     def setup_class(cls):
28         """This method is run once for each class before any tests are run"""
29
30     @classmethod
31     def teardown_class(cls):
32         """This method is run once for each class _after_ all tests are run"""
33
34     def setup(self):
35         """This method is run once before _each_ test method is executed"""
36
37     def teardown(self):
38         """This method is run once after _each_ test method is executed"""
39
40     @patch('apex.overcloud.node.OvercloudNode.create')
41     @patch('apex.overcloud.node.os.path.isfile')
42     @patch('apex.overcloud.node.libvirt.open')
43     def test_init(self, mock_libvirt_open, mock_is_file, mock_node_create):
44         mock_is_file.return_value = True
45         OvercloudNode(role='controller', ip='123.123.123.123',
46                       ovs_ctrlrs=None, ovs_mgrs=None,
47                       name='dummy-controller-0', node_xml='dummynode.xml',
48                       disk_img='dummy.qcow2')
49         mock_node_create.assert_called()
50
51     @patch('apex.overcloud.node.OvercloudNode.create')
52     @patch('apex.overcloud.node.libvirt.open')
53     def test_init_invalid_files(self, mock_libvirt_open, mock_node_create):
54         self.assertRaises(exc.OvercloudNodeException,
55                           OvercloudNode, 'controller', '123.123.123',
56                           None, None, 'dummy-controller-0', 'dummynode.xml',
57                           'dummy.qcow2')
58
59     @patch('apex.overcloud.node.shutil.copyfile')
60     @patch('apex.overcloud.node.OvercloudNode.create')
61     @patch('apex.overcloud.node.os.path.isfile')
62     @patch('apex.overcloud.node.libvirt.open')
63     def test_configure_disk(self, mock_libvirt_open, mock_is_file,
64                             mock_node_create, mock_copy):
65         mock_is_file.return_value = True
66         node = OvercloudNode(role='controller', ip='123.123.123.123',
67                              ovs_ctrlrs=None, ovs_mgrs=None,
68                              name='dummy-controller-0',
69                              node_xml='dummynode.xml',
70                              disk_img='dummy.qcow2')
71         conn = mock_libvirt_open.return_value
72         conn.storagePoolLookupByName.return_value.XMLDesc.return_value = """
73         <pool type='dir'>
74           <target>
75             <path>/var/lib/libvirt/images</path>
76           </target>
77         </pool>
78         """
79         node._configure_disk('dummy.qcow2')
80         mock_copy.assert_called()
81         self.assertEqual(node.disk_img, '/var/lib/libvirt/images/dummy.qcow2')
82
83     @patch('apex.overcloud.node.shutil.copyfile')
84     @patch('apex.overcloud.node.OvercloudNode.create')
85     @patch('apex.overcloud.node.os.path.isfile')
86     @patch('apex.overcloud.node.libvirt.open')
87     def test_configure_disk_bad_path(self, mock_libvirt_open, mock_is_file,
88                                      mock_node_create, mock_copy):
89         mock_is_file.return_value = True
90         node = OvercloudNode(role='controller', ip='123.123.123.123',
91                              ovs_ctrlrs=None, ovs_mgrs=None,
92                              name='dummy-controller-0',
93                              node_xml='dummynode.xml',
94                              disk_img='dummy.qcow2')
95         conn = mock_libvirt_open.return_value
96         conn.storagePoolLookupByName.return_value.XMLDesc.return_value = """
97         <pool type='dir'>
98           <target>
99           </target>
100         </pool>
101         """
102         self.assertRaises(exc.OvercloudNodeException,
103                           node._configure_disk, 'dummy.qcow2')
104
105     @patch('apex.overcloud.node.shutil.copyfile')
106     @patch('apex.overcloud.node.OvercloudNode.create')
107     @patch('apex.overcloud.node.os.path.isfile')
108     @patch('apex.overcloud.node.libvirt.open')
109     def test_configure_disk_no_pool(self, mock_libvirt_open, mock_is_file,
110                                     mock_node_create, mock_copy):
111         mock_is_file.return_value = True
112         node = OvercloudNode(role='controller', ip='123.123.123.123',
113                              ovs_ctrlrs=None, ovs_mgrs=None,
114                              name='dummy-controller-0',
115                              node_xml='dummynode.xml',
116                              disk_img='dummy.qcow2')
117         conn = mock_libvirt_open.return_value
118         conn.storagePoolLookupByName.return_value = None
119         self.assertRaises(exc.OvercloudNodeException,
120                           node._configure_disk, 'dummy.qcow2')
121
122     @patch('apex.overcloud.node.distro.linux_distribution')
123     def test_update_xml(self, mock_linux_distro):
124         mock_linux_distro.return_value = ['Fedora']
125         xml_file = os.path.join(TEST_DUMMY_CONFIG, 'baremetal0.xml')
126         with open(xml_file, 'r') as fh:
127             xml = fh.read()
128         new_xml = OvercloudNode._update_xml(
129             xml=xml, disk_path='/dummy/disk/path/blah.qcow2')
130         self.assertIn('/dummy/disk/path/blah.qcow2', new_xml)
131         self.assertIn('/usr/bin/qemu-kvm', new_xml)
132
133     @patch('apex.overcloud.node.distro.linux_distribution')
134     def test_update_xml_no_disk(self, mock_linux_distro):
135         mock_linux_distro.return_value = ['Fedora']
136         xml_file = os.path.join(TEST_DUMMY_CONFIG, 'baremetal0.xml')
137         with open(xml_file, 'r') as fh:
138             xml = fh.read()
139         new_xml = OvercloudNode._update_xml(xml=xml)
140         self.assertIn('/home/images/baremetal0.qcow2', new_xml)
141         self.assertIn('/usr/bin/qemu-kvm', new_xml)
142
143     @patch('apex.overcloud.node.OvercloudNode._update_xml')
144     @patch('apex.overcloud.node.OvercloudNode._configure_disk')
145     @patch('apex.overcloud.node.libvirt.open')
146     @patch('apex.overcloud.node.os.path.isfile')
147     def test_create(self, mock_isfile, mock_libvirt_conn, mock_configure_disk,
148                     mock_update_xml):
149         mock_isfile.return_value = True
150         domain = mock_libvirt_conn.return_value.defineXML.return_value
151         node = OvercloudNode(role='controller', ip='123.123.123.123',
152                              ovs_ctrlrs=None, ovs_mgrs=None,
153                              name='dummy-controller-0',
154                              node_xml=os.path.join(TEST_DUMMY_CONFIG,
155                                                    'baremetal0.xml'),
156                              disk_img='dummy.qcow2')
157         self.assertIs(node.vm, domain)
158
159     @patch('apex.overcloud.node.OvercloudNode._update_xml')
160     @patch('apex.overcloud.node.OvercloudNode._configure_disk')
161     @patch('apex.overcloud.node.libvirt.open')
162     @patch('apex.overcloud.node.os.path.isfile')
163     def test_start(self, mock_isfile, mock_libvirt_conn, mock_configure_disk,
164                    mock_update_xml):
165         mock_isfile.return_value = True
166         domain = mock_libvirt_conn.return_value.defineXML.return_value
167         node = OvercloudNode(role='controller', ip='123.123.123.123',
168                              ovs_ctrlrs=None, ovs_mgrs=None,
169                              name='dummy-controller-0',
170                              node_xml=os.path.join(TEST_DUMMY_CONFIG,
171                                                    'baremetal0.xml'),
172                              disk_img='dummy.qcow2')
173         node.start()
174         domain.create.assert_called()
175
176     @patch('apex.overcloud.node.OvercloudNode._update_xml')
177     @patch('apex.overcloud.node.OvercloudNode._configure_disk')
178     @patch('apex.overcloud.node.libvirt.open')
179     @patch('apex.overcloud.node.os.path.isfile')
180     def test_start_fail(self, mock_isfile, mock_libvirt_conn,
181                         mock_configure_disk, mock_update_xml):
182         mock_isfile.return_value = True
183         domain = mock_libvirt_conn.return_value.defineXML.return_value
184         domain.create.side_effect = libvirtError('blah')
185         node = OvercloudNode(role='controller', ip='123.123.123.123',
186                              ovs_ctrlrs=None, ovs_mgrs=None,
187                              name='dummy-controller-0',
188                              node_xml=os.path.join(TEST_DUMMY_CONFIG,
189                                                    'baremetal0.xml'),
190                              disk_img='dummy.qcow2')
191         self.assertRaises(exc.OvercloudNodeException, node.start)