1 ##############################################################################
2 # Copyright (c) 2018 Tim Rozet (trozet@redhat.com) (Red Hat)
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 ##############################################################################
10 from libvirt import libvirtError
11 from mock import patch
12 from mock import MagicMock
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
22 DUMMY_SNAP_DIR = '/tmp/dummy_cache'
25 class TestSnapshotDeployment(unittest.TestCase):
28 """This method is run once for each class before any tests are run"""
31 def teardown_class(cls):
32 """This method is run once for each class _after_ all tests are run"""
35 """This method is run once before _each_ test method is executed"""
38 """This method is run once after _each_ test method is executed"""
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()
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',
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 = """
75 <path>/var/lib/libvirt/images</path>
79 node._configure_disk('dummy.qcow2')
80 mock_copy.assert_called()
81 self.assertEqual(node.disk_img, '/var/lib/libvirt/images/dummy.qcow2')
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 = """
102 self.assertRaises(exc.OvercloudNodeException,
103 node._configure_disk, 'dummy.qcow2')
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')
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:
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)
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:
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)
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,
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,
156 disk_img='dummy.qcow2')
157 self.assertIs(node.vm, domain)
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,
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,
172 disk_img='dummy.qcow2')
174 domain.create.assert_called()
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,
190 disk_img='dummy.qcow2')
191 self.assertRaises(exc.OvercloudNodeException, node.start)