Merge ~smoser/cloud-init:bug/1636531-altcloud-test-used-blkid into cloud-init:master

Proposed by Scott Moser
Status: Merged
Merged at revision: 728b370b68ba8a879ce1653bdf9a572cf007e0d7
Proposed branch: ~smoser/cloud-init:bug/1636531-altcloud-test-used-blkid
Merge into: cloud-init:master
Diff against target: 341 lines (+59/-64)
1 file modified
tests/unittests/test_datasource/test_altcloud.py (+59/-64)
Reviewer Review Type Date Requested Status
Joshua Powers (community) Approve
Server Team CI bot continuous-integration Approve
cloud-init Commiters Pending
Review via email: mp+322386@code.launchpad.net

Commit message

tests: fix AltCloud tests to not rely on blkid

This just mocks out the AltCloud tests to not invoke blkid.
Our tests should not rely on system command returning any specific
value.

LP: #1636531

To post a comment you must log in.
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Joshua Powers (powersj) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/tests/unittests/test_datasource/test_altcloud.py b/tests/unittests/test_datasource/test_altcloud.py
2index b0ad86a..63a2b04 100644
3--- a/tests/unittests/test_datasource/test_altcloud.py
4+++ b/tests/unittests/test_datasource/test_altcloud.py
5@@ -10,6 +10,7 @@
6 This test file exercises the code in sources DataSourceAltCloud.py
7 '''
8
9+import mock
10 import os
11 import shutil
12 import tempfile
13@@ -18,10 +19,7 @@ from cloudinit import helpers
14 from cloudinit import util
15 from unittest import TestCase
16
17-# Get the cloudinit.sources.DataSourceAltCloud import items needed.
18-import cloudinit.sources.DataSourceAltCloud
19-from cloudinit.sources.DataSourceAltCloud import DataSourceAltCloud
20-from cloudinit.sources.DataSourceAltCloud import read_user_data_callback
21+import cloudinit.sources.DataSourceAltCloud as dsac
22
23 OS_UNAME_ORIG = getattr(os, 'uname')
24
25@@ -32,17 +30,17 @@ def _write_cloud_info_file(value):
26 with a cloud backend identifier ImageFactory when building
27 an image with ImageFactory.
28 '''
29- cifile = open(cloudinit.sources.DataSourceAltCloud.CLOUD_INFO_FILE, 'w')
30+ cifile = open(dsac.CLOUD_INFO_FILE, 'w')
31 cifile.write(value)
32 cifile.close()
33- os.chmod(cloudinit.sources.DataSourceAltCloud.CLOUD_INFO_FILE, 0o664)
34+ os.chmod(dsac.CLOUD_INFO_FILE, 0o664)
35
36
37 def _remove_cloud_info_file():
38 '''
39 Remove the test CLOUD_INFO_FILE
40 '''
41- os.remove(cloudinit.sources.DataSourceAltCloud.CLOUD_INFO_FILE)
42+ os.remove(dsac.CLOUD_INFO_FILE)
43
44
45 def _write_user_data_files(mount_dir, value):
46@@ -122,7 +120,7 @@ class TestGetCloudType(TestCase):
47 Forcing read_dmi_data return to match a RHEVm system: RHEV Hypervisor
48 '''
49 util.read_dmi_data = _dmi_data('RHEV')
50- dsrc = DataSourceAltCloud({}, None, self.paths)
51+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
52 self.assertEqual('RHEV', dsrc.get_cloud_type())
53
54 def test_vsphere(self):
55@@ -131,7 +129,7 @@ class TestGetCloudType(TestCase):
56 Forcing read_dmi_data return to match a vSphere system: RHEV Hypervisor
57 '''
58 util.read_dmi_data = _dmi_data('VMware Virtual Platform')
59- dsrc = DataSourceAltCloud({}, None, self.paths)
60+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
61 self.assertEqual('VSPHERE', dsrc.get_cloud_type())
62
63 def test_unknown(self):
64@@ -140,7 +138,7 @@ class TestGetCloudType(TestCase):
65 Forcing read_dmi_data return to match an unrecognized return.
66 '''
67 util.read_dmi_data = _dmi_data('Unrecognized Platform')
68- dsrc = DataSourceAltCloud({}, None, self.paths)
69+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
70 self.assertEqual('UNKNOWN', dsrc.get_cloud_type())
71
72
73@@ -154,8 +152,7 @@ class TestGetDataCloudInfoFile(TestCase):
74 self.paths = helpers.Paths({'cloud_dir': '/tmp'})
75 self.cloud_info_file = tempfile.mkstemp()[1]
76 self.dmi_data = util.read_dmi_data
77- cloudinit.sources.DataSourceAltCloud.CLOUD_INFO_FILE = \
78- self.cloud_info_file
79+ dsac.CLOUD_INFO_FILE = self.cloud_info_file
80
81 def tearDown(self):
82 # Reset
83@@ -167,14 +164,13 @@ class TestGetDataCloudInfoFile(TestCase):
84 pass
85
86 util.read_dmi_data = self.dmi_data
87- cloudinit.sources.DataSourceAltCloud.CLOUD_INFO_FILE = \
88- '/etc/sysconfig/cloud-info'
89+ dsac.CLOUD_INFO_FILE = '/etc/sysconfig/cloud-info'
90
91 def test_rhev(self):
92 '''Success Test module get_data() forcing RHEV.'''
93
94 _write_cloud_info_file('RHEV')
95- dsrc = DataSourceAltCloud({}, None, self.paths)
96+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
97 dsrc.user_data_rhevm = lambda: True
98 self.assertEqual(True, dsrc.get_data())
99
100@@ -182,7 +178,7 @@ class TestGetDataCloudInfoFile(TestCase):
101 '''Success Test module get_data() forcing VSPHERE.'''
102
103 _write_cloud_info_file('VSPHERE')
104- dsrc = DataSourceAltCloud({}, None, self.paths)
105+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
106 dsrc.user_data_vsphere = lambda: True
107 self.assertEqual(True, dsrc.get_data())
108
109@@ -190,7 +186,7 @@ class TestGetDataCloudInfoFile(TestCase):
110 '''Failure Test module get_data() forcing RHEV.'''
111
112 _write_cloud_info_file('RHEV')
113- dsrc = DataSourceAltCloud({}, None, self.paths)
114+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
115 dsrc.user_data_rhevm = lambda: False
116 self.assertEqual(False, dsrc.get_data())
117
118@@ -198,7 +194,7 @@ class TestGetDataCloudInfoFile(TestCase):
119 '''Failure Test module get_data() forcing VSPHERE.'''
120
121 _write_cloud_info_file('VSPHERE')
122- dsrc = DataSourceAltCloud({}, None, self.paths)
123+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
124 dsrc.user_data_vsphere = lambda: False
125 self.assertEqual(False, dsrc.get_data())
126
127@@ -206,7 +202,7 @@ class TestGetDataCloudInfoFile(TestCase):
128 '''Failure Test module get_data() forcing unrecognized.'''
129
130 _write_cloud_info_file('unrecognized')
131- dsrc = DataSourceAltCloud({}, None, self.paths)
132+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
133 self.assertEqual(False, dsrc.get_data())
134
135
136@@ -219,7 +215,7 @@ class TestGetDataNoCloudInfoFile(TestCase):
137 '''Set up.'''
138 self.paths = helpers.Paths({'cloud_dir': '/tmp'})
139 self.dmi_data = util.read_dmi_data
140- cloudinit.sources.DataSourceAltCloud.CLOUD_INFO_FILE = \
141+ dsac.CLOUD_INFO_FILE = \
142 'no such file'
143 # We have a different code path for arm to deal with LP1243287
144 # We have to switch arch to x86_64 to avoid test failure
145@@ -227,7 +223,7 @@ class TestGetDataNoCloudInfoFile(TestCase):
146
147 def tearDown(self):
148 # Reset
149- cloudinit.sources.DataSourceAltCloud.CLOUD_INFO_FILE = \
150+ dsac.CLOUD_INFO_FILE = \
151 '/etc/sysconfig/cloud-info'
152 util.read_dmi_data = self.dmi_data
153 # Return back to original arch
154@@ -237,7 +233,7 @@ class TestGetDataNoCloudInfoFile(TestCase):
155 '''Test No cloud info file module get_data() forcing RHEV.'''
156
157 util.read_dmi_data = _dmi_data('RHEV Hypervisor')
158- dsrc = DataSourceAltCloud({}, None, self.paths)
159+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
160 dsrc.user_data_rhevm = lambda: True
161 self.assertEqual(True, dsrc.get_data())
162
163@@ -245,7 +241,7 @@ class TestGetDataNoCloudInfoFile(TestCase):
164 '''Test No cloud info file module get_data() forcing VSPHERE.'''
165
166 util.read_dmi_data = _dmi_data('VMware Virtual Platform')
167- dsrc = DataSourceAltCloud({}, None, self.paths)
168+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
169 dsrc.user_data_vsphere = lambda: True
170 self.assertEqual(True, dsrc.get_data())
171
172@@ -253,7 +249,7 @@ class TestGetDataNoCloudInfoFile(TestCase):
173 '''Test No cloud info file module get_data() forcing unrecognized.'''
174
175 util.read_dmi_data = _dmi_data('Unrecognized Platform')
176- dsrc = DataSourceAltCloud({}, None, self.paths)
177+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
178 self.assertEqual(False, dsrc.get_data())
179
180
181@@ -261,11 +257,14 @@ class TestUserDataRhevm(TestCase):
182 '''
183 Test to exercise method: DataSourceAltCloud.user_data_rhevm()
184 '''
185+ cmd_pass = ['true']
186+ cmd_fail = ['false']
187+ cmd_not_found = ['bogus bad command']
188+
189 def setUp(self):
190 '''Set up.'''
191 self.paths = helpers.Paths({'cloud_dir': '/tmp'})
192 self.mount_dir = tempfile.mkdtemp()
193-
194 _write_user_data_files(self.mount_dir, 'test user data')
195
196 def tearDown(self):
197@@ -279,61 +278,44 @@ class TestUserDataRhevm(TestCase):
198 except OSError:
199 pass
200
201- cloudinit.sources.DataSourceAltCloud.CLOUD_INFO_FILE = \
202- '/etc/sysconfig/cloud-info'
203- cloudinit.sources.DataSourceAltCloud.CMD_PROBE_FLOPPY = \
204- ['/sbin/modprobe', 'floppy']
205- cloudinit.sources.DataSourceAltCloud.CMD_UDEVADM_SETTLE = \
206- ['/sbin/udevadm', 'settle', '--quiet', '--timeout=5']
207+ dsac.CLOUD_INFO_FILE = '/etc/sysconfig/cloud-info'
208+ dsac.CMD_PROBE_FLOPPY = ['/sbin/modprobe', 'floppy']
209+ dsac.CMD_UDEVADM_SETTLE = ['/sbin/udevadm', 'settle',
210+ '--quiet', '--timeout=5']
211
212 def test_mount_cb_fails(self):
213 '''Test user_data_rhevm() where mount_cb fails.'''
214
215- cloudinit.sources.DataSourceAltCloud.CMD_PROBE_FLOPPY = \
216- ['echo', 'modprobe floppy']
217-
218- dsrc = DataSourceAltCloud({}, None, self.paths)
219-
220+ dsac.CMD_PROBE_FLOPPY = self.cmd_pass
221+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
222 self.assertEqual(False, dsrc.user_data_rhevm())
223
224 def test_modprobe_fails(self):
225 '''Test user_data_rhevm() where modprobe fails.'''
226
227- cloudinit.sources.DataSourceAltCloud.CMD_PROBE_FLOPPY = \
228- ['ls', 'modprobe floppy']
229-
230- dsrc = DataSourceAltCloud({}, None, self.paths)
231-
232+ dsac.CMD_PROBE_FLOPPY = self.cmd_fail
233+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
234 self.assertEqual(False, dsrc.user_data_rhevm())
235
236 def test_no_modprobe_cmd(self):
237 '''Test user_data_rhevm() with no modprobe command.'''
238
239- cloudinit.sources.DataSourceAltCloud.CMD_PROBE_FLOPPY = \
240- ['bad command', 'modprobe floppy']
241-
242- dsrc = DataSourceAltCloud({}, None, self.paths)
243-
244+ dsac.CMD_PROBE_FLOPPY = self.cmd_not_found
245+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
246 self.assertEqual(False, dsrc.user_data_rhevm())
247
248 def test_udevadm_fails(self):
249 '''Test user_data_rhevm() where udevadm fails.'''
250
251- cloudinit.sources.DataSourceAltCloud.CMD_UDEVADM_SETTLE = \
252- ['ls', 'udevadm floppy']
253-
254- dsrc = DataSourceAltCloud({}, None, self.paths)
255-
256+ dsac.CMD_UDEVADM_SETTLE = self.cmd_fail
257+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
258 self.assertEqual(False, dsrc.user_data_rhevm())
259
260 def test_no_udevadm_cmd(self):
261 '''Test user_data_rhevm() with no udevadm command.'''
262
263- cloudinit.sources.DataSourceAltCloud.CMD_UDEVADM_SETTLE = \
264- ['bad command', 'udevadm floppy']
265-
266- dsrc = DataSourceAltCloud({}, None, self.paths)
267-
268+ dsac.CMD_UDEVADM_SETTLE = self.cmd_not_found
269+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
270 self.assertEqual(False, dsrc.user_data_rhevm())
271
272
273@@ -359,17 +341,30 @@ class TestUserDataVsphere(TestCase):
274 except OSError:
275 pass
276
277- cloudinit.sources.DataSourceAltCloud.CLOUD_INFO_FILE = \
278+ dsac.CLOUD_INFO_FILE = \
279 '/etc/sysconfig/cloud-info'
280
281- def test_user_data_vsphere(self):
282+ @mock.patch("cloudinit.sources.DataSourceAltCloud.util.find_devs_with")
283+ @mock.patch("cloudinit.sources.DataSourceAltCloud.util.mount_cb")
284+ def test_user_data_vsphere_no_cdrom(self, m_mount_cb, m_find_devs_with):
285 '''Test user_data_vsphere() where mount_cb fails.'''
286
287- cloudinit.sources.DataSourceAltCloud.MEDIA_DIR = self.mount_dir
288+ m_mount_cb.return_value = []
289+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
290+ self.assertEqual(False, dsrc.user_data_vsphere())
291+ self.assertEqual(0, m_mount_cb.call_count)
292
293- dsrc = DataSourceAltCloud({}, None, self.paths)
294+ @mock.patch("cloudinit.sources.DataSourceAltCloud.util.find_devs_with")
295+ @mock.patch("cloudinit.sources.DataSourceAltCloud.util.mount_cb")
296+ def test_user_data_vsphere_mcb_fail(self, m_mount_cb, m_find_devs_with):
297+ '''Test user_data_vsphere() where mount_cb fails.'''
298
299+ m_find_devs_with.return_value = ["/dev/mock/cdrom"]
300+ m_mount_cb.side_effect = util.MountFailedError("Unable To mount")
301+ dsrc = dsac.DataSourceAltCloud({}, None, self.paths)
302 self.assertEqual(False, dsrc.user_data_vsphere())
303+ self.assertEqual(1, m_find_devs_with.call_count)
304+ self.assertEqual(1, m_mount_cb.call_count)
305
306
307 class TestReadUserDataCallback(TestCase):
308@@ -398,7 +393,7 @@ class TestReadUserDataCallback(TestCase):
309 '''Test read_user_data_callback() with both files.'''
310
311 self.assertEqual('test user data',
312- read_user_data_callback(self.mount_dir))
313+ dsac.read_user_data_callback(self.mount_dir))
314
315 def test_callback_dc(self):
316 '''Test read_user_data_callback() with only DC file.'''
317@@ -408,7 +403,7 @@ class TestReadUserDataCallback(TestCase):
318 non_dc_file=True)
319
320 self.assertEqual('test user data',
321- read_user_data_callback(self.mount_dir))
322+ dsac.read_user_data_callback(self.mount_dir))
323
324 def test_callback_non_dc(self):
325 '''Test read_user_data_callback() with only non-DC file.'''
326@@ -418,13 +413,13 @@ class TestReadUserDataCallback(TestCase):
327 non_dc_file=False)
328
329 self.assertEqual('test user data',
330- read_user_data_callback(self.mount_dir))
331+ dsac.read_user_data_callback(self.mount_dir))
332
333 def test_callback_none(self):
334 '''Test read_user_data_callback() no files are found.'''
335
336 _remove_user_data_files(self.mount_dir)
337- self.assertEqual(None, read_user_data_callback(self.mount_dir))
338+ self.assertEqual(None, dsac.read_user_data_callback(self.mount_dir))
339
340
341 def force_arch(arch=None):

Subscribers

People subscribed via source and target branches