Merge ~oddbloke/curtin/+git/curtin:ubuntu/devel into curtin:ubuntu/devel
- Git
- lp:~oddbloke/curtin/+git/curtin
- ubuntu/devel
- Merge into ubuntu/devel
Proposed by
Dan Watkins
Status: | Merged | ||||
---|---|---|---|---|---|
Merged at revision: | 7892b282fc4d81aed1037dcdadcae388a8efbdc0 | ||||
Proposed branch: | ~oddbloke/curtin/+git/curtin:ubuntu/devel | ||||
Merge into: | curtin:ubuntu/devel | ||||
Diff against target: |
2413 lines (+739/-486) 62 files modified
curtin/__init__.py (+1/-1) curtin/block/__init__.py (+35/-2) curtin/block/clear_holders.py (+21/-2) curtin/block/multipath.py (+111/-0) curtin/commands/curthooks.py (+14/-0) curtin/config.py (+1/-1) debian/changelog (+19/-0) doc/topics/config.rst (+50/-0) examples/tests/basic_scsi.yaml (+1/-1) examples/tests/no-grub-file.yaml (+9/-0) helpers/common (+13/-12) pylintrc (+10/-0) tests/unittests/helpers.py (+5/-0) tests/unittests/test_apt_custom_sources_list.py (+4/-3) tests/unittests/test_block.py (+33/-3) tests/unittests/test_block_mdadm.py (+3/-7) tests/unittests/test_block_multipath.py (+149/-0) tests/vmtests/__init__.py (+5/-4) tests/vmtests/releases.py (+7/-0) tests/vmtests/test_apt_config_cmd.py (+6/-2) tests/vmtests/test_apt_source.py (+2/-2) tests/vmtests/test_basic.py (+12/-13) tests/vmtests/test_basic_dasd.py (+6/-0) tests/vmtests/test_bcache_basic.py (+4/-8) tests/vmtests/test_bcache_bug1718699.py (+4/-0) tests/vmtests/test_bcache_ceph.py (+4/-8) tests/vmtests/test_bcache_partitions.py (+4/-0) tests/vmtests/test_fs_battery.py (+4/-10) tests/vmtests/test_install_umount.py (+1/-1) tests/vmtests/test_iscsi.py (+4/-4) tests/vmtests/test_journald_reporter.py (+4/-0) tests/vmtests/test_lvm.py (+4/-8) tests/vmtests/test_lvm_iscsi.py (+4/-4) tests/vmtests/test_lvm_raid.py (+4/-0) tests/vmtests/test_lvm_root.py (+1/-17) tests/vmtests/test_mdadm_bcache.py (+34/-68) tests/vmtests/test_mdadm_iscsi.py (+4/-4) tests/vmtests/test_multipath.py (+6/-9) tests/vmtests/test_network.py (+4/-23) tests/vmtests/test_network_alias.py (+4/-23) tests/vmtests/test_network_bonding.py (+4/-20) tests/vmtests/test_network_bridging.py (+4/-0) tests/vmtests/test_network_enisource.py (+0/-9) tests/vmtests/test_network_ipv6.py (+4/-19) tests/vmtests/test_network_ipv6_enisource.py (+0/-9) tests/vmtests/test_network_ipv6_static.py (+4/-27) tests/vmtests/test_network_ipv6_vlan.py (+4/-9) tests/vmtests/test_network_mtu.py (+8/-32) tests/vmtests/test_network_static.py (+4/-27) tests/vmtests/test_network_static_routes.py (+5/-26) tests/vmtests/test_network_vlan.py (+4/-8) tests/vmtests/test_nvme.py (+9/-9) tests/vmtests/test_old_apt_features.py (+3/-2) tests/vmtests/test_pollinate_useragent.py (+4/-4) tests/vmtests/test_raid5_bcache.py (+4/-21) tests/vmtests/test_simple.py (+40/-4) tests/vmtests/test_uefi_basic.py (+7/-16) tests/vmtests/test_vmtests.py (+1/-1) tests/vmtests/test_zfsroot.py (+8/-0) tools/vmtest-system-setup (+1/-0) tools/xkvm (+9/-2) tox.ini (+1/-1) |
||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Server Team CI bot | continuous-integration | Approve | |
curtin developers | Pending | ||
Review via email: mp+367779@code.launchpad.net |
Commit message
Upstream snapshot of curtin for release into eoan
Description of the change
To post a comment you must log in.
Revision history for this message
Server Team CI bot (server-team-bot) wrote : | # |
review:
Needs Fixing
(continuous-integration)
Revision history for this message
Server Team CI bot (server-team-bot) wrote : | # |
PASSED: Continuous integration, rev:7892b282fc4
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
Click here to trigger a rebuild:
https:/
review:
Approve
(continuous-integration)
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/curtin/__init__.py b/curtin/__init__.py | |||
2 | index d52e1c4..076c135 100644 | |||
3 | --- a/curtin/__init__.py | |||
4 | +++ b/curtin/__init__.py | |||
5 | @@ -32,6 +32,6 @@ FEATURES = [ | |||
6 | 32 | 'HAS_VERSION_MODULE', | 32 | 'HAS_VERSION_MODULE', |
7 | 33 | ] | 33 | ] |
8 | 34 | 34 | ||
10 | 35 | __version__ = "18.2" | 35 | __version__ = "19.1" |
11 | 36 | 36 | ||
12 | 37 | # vi: ts=4 expandtab syntax=python | 37 | # vi: ts=4 expandtab syntax=python |
13 | diff --git a/curtin/block/__init__.py b/curtin/block/__init__.py | |||
14 | index 71882d4..f858b37 100644 | |||
15 | --- a/curtin/block/__init__.py | |||
16 | +++ b/curtin/block/__init__.py | |||
17 | @@ -10,8 +10,9 @@ import tempfile | |||
18 | 10 | 10 | ||
19 | 11 | from curtin import util | 11 | from curtin import util |
20 | 12 | from curtin.block import lvm | 12 | from curtin.block import lvm |
21 | 13 | from curtin.block import multipath | ||
22 | 13 | from curtin.log import LOG | 14 | from curtin.log import LOG |
24 | 14 | from curtin.udev import udevadm_settle | 15 | from curtin.udev import udevadm_settle, udevadm_info |
25 | 15 | 16 | ||
26 | 16 | 17 | ||
27 | 17 | def get_dev_name_entry(devname): | 18 | def get_dev_name_entry(devname): |
28 | @@ -103,7 +104,15 @@ def partition_kname(disk_kname, partition_number): | |||
29 | 103 | """ | 104 | """ |
30 | 104 | Add number to disk_kname prepending a 'p' if needed | 105 | Add number to disk_kname prepending a 'p' if needed |
31 | 105 | """ | 106 | """ |
33 | 106 | for dev_type in ['bcache', 'nvme', 'mmcblk', 'cciss', 'mpath', 'dm', 'md']: | 107 | if disk_kname.startswith('dm-'): |
34 | 108 | # device-mapper devices may create a new dm device for the partition, | ||
35 | 109 | # e.g. multipath disk is at dm-2, new partition could be dm-11, but | ||
36 | 110 | # linux will create a -partX symlink against the disk by-id name. | ||
37 | 111 | devpath = '/dev/' + disk_kname | ||
38 | 112 | disk_link = get_device_mapper_links(devpath, first=True) | ||
39 | 113 | return '%s-part%s' % (disk_link, partition_number) | ||
40 | 114 | |||
41 | 115 | for dev_type in ['bcache', 'nvme', 'mmcblk', 'cciss', 'mpath', 'md']: | ||
42 | 107 | if disk_kname.startswith(dev_type): | 116 | if disk_kname.startswith(dev_type): |
43 | 108 | partition_number = "p%s" % partition_number | 117 | partition_number = "p%s" % partition_number |
44 | 109 | break | 118 | break |
45 | @@ -686,6 +695,21 @@ def disk_to_byid_path(kname): | |||
46 | 686 | return mapping.get(dev_path(kname)) | 695 | return mapping.get(dev_path(kname)) |
47 | 687 | 696 | ||
48 | 688 | 697 | ||
49 | 698 | def get_device_mapper_links(devpath, first=False): | ||
50 | 699 | """ Return the best devlink to device at devpath. """ | ||
51 | 700 | info = udevadm_info(devpath) | ||
52 | 701 | if 'DEVLINKS' not in info: | ||
53 | 702 | raise ValueError('Device %s does not have device symlinks' % devpath) | ||
54 | 703 | devlinks = [devlink for devlink in sorted(info['DEVLINKS']) if devlink] | ||
55 | 704 | if not devlinks: | ||
56 | 705 | raise ValueError('Unexpected DEVLINKS list contained empty values') | ||
57 | 706 | |||
58 | 707 | if first: | ||
59 | 708 | return devlinks[0] | ||
60 | 709 | |||
61 | 710 | return devlinks | ||
62 | 711 | |||
63 | 712 | |||
64 | 689 | def lookup_disk(serial): | 713 | def lookup_disk(serial): |
65 | 690 | """ | 714 | """ |
66 | 691 | Search for a disk by its serial number using /dev/disk/by-id/ | 715 | Search for a disk by its serial number using /dev/disk/by-id/ |
67 | @@ -705,7 +729,16 @@ def lookup_disk(serial): | |||
68 | 705 | # will be the partitions on the disk. Then use os.path.realpath to | 729 | # will be the partitions on the disk. Then use os.path.realpath to |
69 | 706 | # determine the path to the block device in /dev/ | 730 | # determine the path to the block device in /dev/ |
70 | 707 | disks.sort(key=lambda x: len(x)) | 731 | disks.sort(key=lambda x: len(x)) |
71 | 732 | LOG.debug('lookup_disks found: %s', disks) | ||
72 | 708 | path = os.path.realpath("/dev/disk/by-id/%s" % disks[0]) | 733 | path = os.path.realpath("/dev/disk/by-id/%s" % disks[0]) |
73 | 734 | LOG.debug('lookup_disks realpath(%s)=%s', disks[0], path) | ||
74 | 735 | if multipath.is_mpath_device(path): | ||
75 | 736 | LOG.debug('Detected multipath device, finding a members') | ||
76 | 737 | info = udevadm_info(path) | ||
77 | 738 | mpath_members = sorted(multipath.find_mpath_members(info['DM_NAME'])) | ||
78 | 739 | LOG.debug('mpath members: %s', mpath_members) | ||
79 | 740 | if len(mpath_members): | ||
80 | 741 | path = mpath_members[0] | ||
81 | 709 | 742 | ||
82 | 710 | if not os.path.exists(path): | 743 | if not os.path.exists(path): |
83 | 711 | raise ValueError("path '%s' to block device for disk with serial '%s' \ | 744 | raise ValueError("path '%s' to block device for disk with serial '%s' \ |
84 | diff --git a/curtin/block/clear_holders.py b/curtin/block/clear_holders.py | |||
85 | index fb7fba4..4a099cd 100644 | |||
86 | --- a/curtin/block/clear_holders.py | |||
87 | +++ b/curtin/block/clear_holders.py | |||
88 | @@ -15,6 +15,7 @@ from curtin.swap import is_swap_device | |||
89 | 15 | from curtin.block import bcache | 15 | from curtin.block import bcache |
90 | 16 | from curtin.block import lvm | 16 | from curtin.block import lvm |
91 | 17 | from curtin.block import mdadm | 17 | from curtin.block import mdadm |
92 | 18 | from curtin.block import multipath | ||
93 | 18 | from curtin.block import zfs | 19 | from curtin.block import zfs |
94 | 19 | from curtin.log import LOG | 20 | from curtin.log import LOG |
95 | 20 | 21 | ||
96 | @@ -294,6 +295,17 @@ def wipe_superblock(device): | |||
97 | 294 | device, attempt + 1, len(retries), wait) | 295 | device, attempt + 1, len(retries), wait) |
98 | 295 | time.sleep(wait) | 296 | time.sleep(wait) |
99 | 296 | 297 | ||
100 | 298 | # multipath partitions are separate block devices (disks) | ||
101 | 299 | if multipath.is_mpath_partition(blockdev): | ||
102 | 300 | multipath.remove_partition(blockdev) | ||
103 | 301 | # multipath devices must be hidden to utilize a single member (path) | ||
104 | 302 | elif multipath.is_mpath_device(blockdev): | ||
105 | 303 | mp_id = multipath.find_mpath_id(blockdev) | ||
106 | 304 | if mp_id: | ||
107 | 305 | multipath.remove_map(mp_id) | ||
108 | 306 | else: | ||
109 | 307 | raise RuntimeError('Failed to find multipath id for %s' % blockdev) | ||
110 | 308 | |||
111 | 297 | 309 | ||
112 | 298 | def _wipe_superblock(blockdev, exclusive=True, strict=True): | 310 | def _wipe_superblock(blockdev, exclusive=True, strict=True): |
113 | 299 | """ No checks, just call wipe_volume """ | 311 | """ No checks, just call wipe_volume """ |
114 | @@ -359,8 +371,15 @@ def identify_partition(device): | |||
115 | 359 | """ | 371 | """ |
116 | 360 | determine if specified device is a partition | 372 | determine if specified device is a partition |
117 | 361 | """ | 373 | """ |
120 | 362 | path = os.path.join(block.sys_block_path(device), 'partition') | 374 | blockdev = block.sys_block_path(device) |
121 | 363 | return os.path.exists(path) | 375 | path = os.path.join(blockdev, 'partition') |
122 | 376 | if os.path.exists(path): | ||
123 | 377 | return True | ||
124 | 378 | |||
125 | 379 | if multipath.is_mpath_partition(blockdev): | ||
126 | 380 | return True | ||
127 | 381 | |||
128 | 382 | return False | ||
129 | 364 | 383 | ||
130 | 365 | 384 | ||
131 | 366 | def shutdown_swap(path): | 385 | def shutdown_swap(path): |
132 | diff --git a/curtin/block/multipath.py b/curtin/block/multipath.py | |||
133 | 367 | new file mode 100644 | 386 | new file mode 100644 |
134 | index 0000000..d1e8441 | |||
135 | --- /dev/null | |||
136 | +++ b/curtin/block/multipath.py | |||
137 | @@ -0,0 +1,111 @@ | |||
138 | 1 | import os | ||
139 | 2 | |||
140 | 3 | from curtin.log import LOG | ||
141 | 4 | from curtin import util | ||
142 | 5 | from curtin import udev | ||
143 | 6 | |||
144 | 7 | SHOW_PATHS_FMT = ("device='%d' serial='%z' multipath='%m' host_wwpn='%N' " | ||
145 | 8 | "target_wwnn='%n' host_wwpn='%R' target_wwpn='%r' " | ||
146 | 9 | "host_adapter='%a'") | ||
147 | 10 | SHOW_MAPS_FMT = "name=%n multipath='%w' sysfs='%d' paths='%N'" | ||
148 | 11 | |||
149 | 12 | |||
150 | 13 | def _extract_mpath_data(cmd, show_verb): | ||
151 | 14 | data, _err = util.subp(cmd, capture=True) | ||
152 | 15 | result = [] | ||
153 | 16 | for line in data.splitlines(): | ||
154 | 17 | mp_dict = util.load_shell_content(line, add_empty=True) | ||
155 | 18 | LOG.debug('Extracted multipath %s fields: %s', show_verb, mp_dict) | ||
156 | 19 | if mp_dict: | ||
157 | 20 | result.append(mp_dict) | ||
158 | 21 | |||
159 | 22 | return result | ||
160 | 23 | |||
161 | 24 | |||
162 | 25 | def show_paths(): | ||
163 | 26 | cmd = ['multipathd', 'show', 'paths', 'raw', 'format', SHOW_PATHS_FMT] | ||
164 | 27 | return _extract_mpath_data(cmd, 'paths') | ||
165 | 28 | |||
166 | 29 | |||
167 | 30 | def show_maps(): | ||
168 | 31 | cmd = ['multipathd', 'show', 'maps', 'raw', 'format', SHOW_MAPS_FMT] | ||
169 | 32 | return _extract_mpath_data(cmd, 'maps') | ||
170 | 33 | |||
171 | 34 | |||
172 | 35 | def is_mpath_device(devpath): | ||
173 | 36 | info = udev.udevadm_info(devpath) | ||
174 | 37 | if info.get('DM_UUID', '').startswith('mpath-'): | ||
175 | 38 | return True | ||
176 | 39 | |||
177 | 40 | return False | ||
178 | 41 | |||
179 | 42 | |||
180 | 43 | def is_mpath_member(devpath): | ||
181 | 44 | try: | ||
182 | 45 | util.subp(['multipath', '-c', devpath], capture=True) | ||
183 | 46 | return True | ||
184 | 47 | except util.ProcessExecutionError: | ||
185 | 48 | return False | ||
186 | 49 | |||
187 | 50 | |||
188 | 51 | def is_mpath_partition(devpath): | ||
189 | 52 | if devpath.startswith('/dev/dm-'): | ||
190 | 53 | if 'DM_PART' in udev.udevadm_info(devpath): | ||
191 | 54 | LOG.debug("%s is multipath device partition", devpath) | ||
192 | 55 | return True | ||
193 | 56 | |||
194 | 57 | return False | ||
195 | 58 | |||
196 | 59 | |||
197 | 60 | def mpath_partition_to_mpath_id(devpath): | ||
198 | 61 | info = udev.udevadm_info(devpath) | ||
199 | 62 | if 'DM_MPATH' in info: | ||
200 | 63 | return info['DM_MPATH'] | ||
201 | 64 | |||
202 | 65 | return None | ||
203 | 66 | |||
204 | 67 | |||
205 | 68 | def remove_partition(devpath, retries=10): | ||
206 | 69 | LOG.debug('multipath: removing multipath partition: %s', devpath) | ||
207 | 70 | for _ in range(0, retries): | ||
208 | 71 | util.subp(['dmsetup', 'remove', devpath], rcs=[0, 1]) | ||
209 | 72 | udev.udevadm_settle() | ||
210 | 73 | if not os.path.exists(devpath): | ||
211 | 74 | return | ||
212 | 75 | |||
213 | 76 | util.wait_for_removal(devpath) | ||
214 | 77 | |||
215 | 78 | |||
216 | 79 | def remove_map(map_id, retries=10): | ||
217 | 80 | LOG.debug('multipath: removing multipath map: %s', map_id) | ||
218 | 81 | devpath = '/dev/mapper/%s' % map_id | ||
219 | 82 | for _ in range(0, retries): | ||
220 | 83 | util.subp(['multipath', '-f', map_id], rcs=[0, 1]) | ||
221 | 84 | udev.udevadm_settle() | ||
222 | 85 | if not os.path.exists(devpath): | ||
223 | 86 | return | ||
224 | 87 | |||
225 | 88 | util.wait_for_removal(devpath) | ||
226 | 89 | |||
227 | 90 | |||
228 | 91 | def find_mpath_members(multipath_id, paths=None): | ||
229 | 92 | if not paths: | ||
230 | 93 | paths = show_paths() | ||
231 | 94 | |||
232 | 95 | members = ['/dev/' + path['device'] | ||
233 | 96 | for path in paths if path['multipath'] == multipath_id] | ||
234 | 97 | return members | ||
235 | 98 | |||
236 | 99 | |||
237 | 100 | def find_mpath_id(devpath, maps=None): | ||
238 | 101 | if not maps: | ||
239 | 102 | maps = show_maps() | ||
240 | 103 | |||
241 | 104 | for mpmap in maps: | ||
242 | 105 | if '/dev/' + mpmap['sysfs'] == devpath: | ||
243 | 106 | name = mpmap.get('name') | ||
244 | 107 | if name: | ||
245 | 108 | return name | ||
246 | 109 | return mpmap['multipath'] | ||
247 | 110 | |||
248 | 111 | return None | ||
249 | diff --git a/curtin/commands/curthooks.py b/curtin/commands/curthooks.py | |||
250 | index b6326fb..c4eed5b 100644 | |||
251 | --- a/curtin/commands/curthooks.py | |||
252 | +++ b/curtin/commands/curthooks.py | |||
253 | @@ -484,6 +484,20 @@ def setup_grub(cfg, target, osfamily=DISTROS.debian): | |||
254 | 484 | else: | 484 | else: |
255 | 485 | env['REPLACE_GRUB_LINUX_DEFAULT'] = "1" | 485 | env['REPLACE_GRUB_LINUX_DEFAULT'] = "1" |
256 | 486 | 486 | ||
257 | 487 | probe_os = grubcfg.get('probe_additional_os', False) | ||
258 | 488 | if probe_os not in (False, True): | ||
259 | 489 | raise ValueError("Unexpected value %s for 'probe_additional_os'. " | ||
260 | 490 | "Value must be boolean" % probe_os) | ||
261 | 491 | env['DISABLE_OS_PROBER'] = "0" if probe_os else "1" | ||
262 | 492 | |||
263 | 493 | # if terminal is present in config, but unset, then don't | ||
264 | 494 | grub_terminal = grubcfg.get('terminal', 'console') | ||
265 | 495 | if not isinstance(grub_terminal, str): | ||
266 | 496 | raise ValueError("Unexpected value %s for 'terminal'. " | ||
267 | 497 | "Value must be a string" % grub_terminal) | ||
268 | 498 | if not grub_terminal.lower() == "unmodified": | ||
269 | 499 | env['GRUB_TERMINAL'] = grub_terminal | ||
270 | 500 | |||
271 | 487 | if instdevs: | 501 | if instdevs: |
272 | 488 | instdevs = [block.get_dev_name_entry(i)[1] for i in instdevs] | 502 | instdevs = [block.get_dev_name_entry(i)[1] for i in instdevs] |
273 | 489 | else: | 503 | else: |
274 | diff --git a/curtin/config.py b/curtin/config.py | |||
275 | index 9649b10..2106b23 100644 | |||
276 | --- a/curtin/config.py | |||
277 | +++ b/curtin/config.py | |||
278 | @@ -76,7 +76,7 @@ def cmdarg2cfg(cmdarg, delim="/"): | |||
279 | 76 | 76 | ||
280 | 77 | 77 | ||
281 | 78 | def load_config_archive(content): | 78 | def load_config_archive(content): |
283 | 79 | archive = yaml.load(content) | 79 | archive = yaml.safe_load(content) |
284 | 80 | config = {} | 80 | config = {} |
285 | 81 | for part in archive: | 81 | for part in archive: |
286 | 82 | if isinstance(part, (str,)): | 82 | if isinstance(part, (str,)): |
287 | diff --git a/debian/changelog b/debian/changelog | |||
288 | index 4ac90f4..ec06324 100644 | |||
289 | --- a/debian/changelog | |||
290 | +++ b/debian/changelog | |||
291 | @@ -1,3 +1,22 @@ | |||
292 | 1 | curtin (19.1-0ubuntu1) eoan; urgency=medium | ||
293 | 2 | |||
294 | 3 | * New upstream release. | ||
295 | 4 | - release 19.1 | ||
296 | 5 | - vmtest: add missing skip_by_date on Eoan test_network_mtu | ||
297 | 6 | - vmtest: remove skip_by_date on Disco Allindata test | ||
298 | 7 | - block: support multipath devices in lookup and partition_kname | ||
299 | 8 | (LP: #1813228) | ||
300 | 9 | - grub: add grub config to control os_prober,terminal settings in target | ||
301 | 10 | - vmtest: add eoan tests [Paride Legovini] | ||
302 | 11 | - vmtest: add dependency on python3-jsonschema [Paride Legovini] | ||
303 | 12 | - Pylint compatibility with Python 3.7 [Paride Legovini] (LP: #1828229) | ||
304 | 13 | - vmtest: disable disco multipath test | ||
305 | 14 | - vmtests: bump network mtu tests out a bit | ||
306 | 15 | - Fix up yaml.load warnings | ||
307 | 16 | - vmtest: disable trusty, it's dead jim | ||
308 | 17 | |||
309 | 18 | -- Daniel Watkins <oddbloke@ubuntu.com> Wed, 22 May 2019 10:26:52 -0400 | ||
310 | 19 | |||
311 | 1 | curtin (18.2-26-gd8e45d79-0ubuntu1) eoan; urgency=medium | 20 | curtin (18.2-26-gd8e45d79-0ubuntu1) eoan; urgency=medium |
312 | 2 | 21 | ||
313 | 3 | * New upstream snapshot. | 22 | * New upstream snapshot. |
314 | diff --git a/doc/topics/config.rst b/doc/topics/config.rst | |||
315 | index bad8fc2..b7cca43 100644 | |||
316 | --- a/doc/topics/config.rst | |||
317 | +++ b/doc/topics/config.rst | |||
318 | @@ -207,6 +207,27 @@ update the NVRAM settings to preserve the system configuration. | |||
319 | 207 | Users may want to force NVRAM to be updated such that the next boot | 207 | Users may want to force NVRAM to be updated such that the next boot |
320 | 208 | of the system will boot from the installed device. | 208 | of the system will boot from the installed device. |
321 | 209 | 209 | ||
322 | 210 | **probe_additional_os**: *<boolean: default False>* | ||
323 | 211 | |||
324 | 212 | This setting controls grub's os-prober functionality and Curtin will | ||
325 | 213 | disable this feature by default to prevent grub from searching for other | ||
326 | 214 | operating systems and adding them to the grub menu. | ||
327 | 215 | |||
328 | 216 | When False, curtin writes "GRUB_DISABLE_OS_PROBER=true" to target system in | ||
329 | 217 | /etc/default/grub.d/50-curtin-settings.cfg. If True, curtin won't modify the | ||
330 | 218 | grub configuration value in the target system. | ||
331 | 219 | |||
332 | 220 | **terminal**: *<['unmodified', 'console', ...]>* | ||
333 | 221 | |||
334 | 222 | Configure target system grub option GRUB_TERMINAL ``terminal`` value | ||
335 | 223 | which is written to /etc/default/grub.d/50-curtin-settings.cfg. Curtin | ||
336 | 224 | does not attempt to validate this string, grub2 has many values that | ||
337 | 225 | it accepts and the list is platform dependent. If ``terminal`` is | ||
338 | 226 | not provided, Curtin will set the value to 'console'. If the ``terminal`` | ||
339 | 227 | value is 'unmodified' then Curtin will not set any value at all and will | ||
340 | 228 | use Grub defaults. | ||
341 | 229 | |||
342 | 230 | |||
343 | 210 | **Example**:: | 231 | **Example**:: |
344 | 211 | 232 | ||
345 | 212 | grub: | 233 | grub: |
346 | @@ -214,6 +235,35 @@ of the system will boot from the installed device. | |||
347 | 214 | - /dev/sda1 | 235 | - /dev/sda1 |
348 | 215 | replace_linux_default: False | 236 | replace_linux_default: False |
349 | 216 | update_nvram: True | 237 | update_nvram: True |
350 | 238 | terminal: serial | ||
351 | 239 | |||
352 | 240 | **Default terminal value, GRUB_TERMINAL=console**:: | ||
353 | 241 | |||
354 | 242 | grub: | ||
355 | 243 | install_devices: | ||
356 | 244 | - /dev/sda1 | ||
357 | 245 | |||
358 | 246 | **Don't set GRUB_TERMINAL in target**:: | ||
359 | 247 | |||
360 | 248 | grub: | ||
361 | 249 | install_devices: | ||
362 | 250 | - /dev/sda1 | ||
363 | 251 | terminal: unmodified | ||
364 | 252 | |||
365 | 253 | **Allow grub to probe for additional OSes**:: | ||
366 | 254 | |||
367 | 255 | grub: | ||
368 | 256 | install_devices: | ||
369 | 257 | - /dev/sda1 | ||
370 | 258 | probe_additional_os: True | ||
371 | 259 | |||
372 | 260 | **Avoid writting any settings to etc/default/grub.d/50-curtin-settings.cfg**:: | ||
373 | 261 | |||
374 | 262 | grub: | ||
375 | 263 | install_devices: | ||
376 | 264 | - /dev/sda1 | ||
377 | 265 | probe_additional_os: True | ||
378 | 266 | terminal: unmodified | ||
379 | 217 | 267 | ||
380 | 218 | 268 | ||
381 | 219 | http_proxy | 269 | http_proxy |
382 | diff --git a/examples/tests/basic_scsi.yaml b/examples/tests/basic_scsi.yaml | |||
383 | index aa62137..51f5236 100644 | |||
384 | --- a/examples/tests/basic_scsi.yaml | |||
385 | +++ b/examples/tests/basic_scsi.yaml | |||
386 | @@ -49,7 +49,7 @@ storage: | |||
387 | 49 | device: sda2_home | 49 | device: sda2_home |
388 | 50 | - id: sparedisk_id | 50 | - id: sparedisk_id |
389 | 51 | type: disk | 51 | type: disk |
391 | 52 | wwn: '0x080258d13ea95ae5' | 52 | wwn: '0x2222222222222222' |
392 | 53 | name: sparedisk | 53 | name: sparedisk |
393 | 54 | wipe: superblock | 54 | wipe: superblock |
394 | 55 | - id: sparedisk_fat_fmt_id | 55 | - id: sparedisk_fat_fmt_id |
395 | diff --git a/examples/tests/no-grub-file.yaml b/examples/tests/no-grub-file.yaml | |||
396 | 56 | new file mode 100644 | 56 | new file mode 100644 |
397 | index 0000000..d5ba698 | |||
398 | --- /dev/null | |||
399 | +++ b/examples/tests/no-grub-file.yaml | |||
400 | @@ -0,0 +1,9 @@ | |||
401 | 1 | # This pushes curtin through a automatic installation | ||
402 | 2 | # where no storage configuration is necessary. | ||
403 | 3 | placeholder_simple_install: unused | ||
404 | 4 | |||
405 | 5 | # configure curtin so it does not emit a grub config file | ||
406 | 6 | # in etc/default/grub/grub.d | ||
407 | 7 | grub: | ||
408 | 8 | probe_additional_os: true | ||
409 | 9 | terminal: unmodified | ||
410 | diff --git a/helpers/common b/helpers/common | |||
411 | index 34f0870..5928150 100644 | |||
412 | --- a/helpers/common | |||
413 | +++ b/helpers/common | |||
414 | @@ -779,13 +779,6 @@ install_grub() { | |||
415 | 779 | esac | 779 | esac |
416 | 780 | debug 1 "carryover command line params '$newargs'" | 780 | debug 1 "carryover command line params '$newargs'" |
417 | 781 | 781 | ||
418 | 782 | case $os_family in | ||
419 | 783 | debian) | ||
420 | 784 | : > "$mp/$mygrub_cfg" || | ||
421 | 785 | { error "Failed to write '$mygrub_cfg'"; return 1; } | ||
422 | 786 | ;; | ||
423 | 787 | esac | ||
424 | 788 | |||
425 | 789 | if [ "${REPLACE_GRUB_LINUX_DEFAULT:-1}" != "0" ]; then | 782 | if [ "${REPLACE_GRUB_LINUX_DEFAULT:-1}" != "0" ]; then |
426 | 790 | apply_grub_cmdline_linux_default "$mp" "$newargs" || { | 783 | apply_grub_cmdline_linux_default "$mp" "$newargs" || { |
427 | 791 | error "Failed to apply grub cmdline." | 784 | error "Failed to apply grub cmdline." |
428 | @@ -793,11 +786,19 @@ install_grub() { | |||
429 | 793 | } | 786 | } |
430 | 794 | fi | 787 | fi |
431 | 795 | 788 | ||
437 | 796 | { | 789 | if [ "${DISABLE_OS_PROBER:-1}" == "1" ]; then |
438 | 797 | echo "# Curtin disable grub os prober that might find other OS installs." | 790 | { |
439 | 798 | echo "GRUB_DISABLE_OS_PROBER=true" | 791 | echo "# Curtin disable grub os prober that might find other OS installs." |
440 | 799 | echo "GRUB_TERMINAL=console" | 792 | echo "GRUB_DISABLE_OS_PROBER=true" |
441 | 800 | } >> "$mp/$mygrub_cfg" | 793 | } >> "$mp/$mygrub_cfg" |
442 | 794 | fi | ||
443 | 795 | |||
444 | 796 | if [ -n "${GRUB_TERMINAL}" ]; then | ||
445 | 797 | { | ||
446 | 798 | echo "# Curtin configured GRUB_TERMINAL value" | ||
447 | 799 | echo "GRUB_TERMINAL=${GRUB_TERMINAL}" | ||
448 | 800 | } >> "$mp/$mygrub_cfg" | ||
449 | 801 | fi | ||
450 | 801 | 802 | ||
451 | 802 | local short="" bd="" grubdev grubdevs_new="" | 803 | local short="" bd="" grubdev grubdevs_new="" |
452 | 803 | grubdevs_new=() | 804 | grubdevs_new=() |
453 | diff --git a/pylintrc b/pylintrc | |||
454 | 804 | new file mode 100644 | 805 | new file mode 100644 |
455 | index 0000000..d027f48 | |||
456 | --- /dev/null | |||
457 | +++ b/pylintrc | |||
458 | @@ -0,0 +1,10 @@ | |||
459 | 1 | [MASTER] | ||
460 | 2 | # Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the | ||
461 | 3 | # number of processors available to use. | ||
462 | 4 | jobs=0 | ||
463 | 5 | |||
464 | 6 | [TYPECHECK] | ||
465 | 7 | # List of members which are set dynamically and missed by pylint inference | ||
466 | 8 | # system, and so shouldn't trigger E1101 when accessed. Python regular | ||
467 | 9 | # expressions are accepted. | ||
468 | 10 | generated-members=DISTROS.* | ||
469 | diff --git a/tests/unittests/helpers.py b/tests/unittests/helpers.py | |||
470 | index 0869f1c..9514745 100644 | |||
471 | --- a/tests/unittests/helpers.py | |||
472 | +++ b/tests/unittests/helpers.py | |||
473 | @@ -121,4 +121,9 @@ def populate_dir(path, files): | |||
474 | 121 | 121 | ||
475 | 122 | return ret | 122 | return ret |
476 | 123 | 123 | ||
477 | 124 | |||
478 | 125 | def raise_pexec_error(*args, **kwargs): | ||
479 | 126 | raise util.ProcessExecutionError() | ||
480 | 127 | |||
481 | 128 | |||
482 | 124 | # vi: ts=4 expandtab syntax=python | 129 | # vi: ts=4 expandtab syntax=python |
483 | diff --git a/tests/unittests/test_apt_custom_sources_list.py b/tests/unittests/test_apt_custom_sources_list.py | |||
484 | index d77c750..fb6eb0c 100644 | |||
485 | --- a/tests/unittests/test_apt_custom_sources_list.py | |||
486 | +++ b/tests/unittests/test_apt_custom_sources_list.py | |||
487 | @@ -5,16 +5,17 @@ Test templating of custom sources list | |||
488 | 5 | """ | 5 | """ |
489 | 6 | import logging | 6 | import logging |
490 | 7 | import os | 7 | import os |
491 | 8 | import yaml | ||
492 | 8 | 9 | ||
493 | 9 | import mock | 10 | import mock |
494 | 10 | from mock import call | 11 | from mock import call |
495 | 11 | import textwrap | 12 | import textwrap |
496 | 12 | import yaml | ||
497 | 13 | 13 | ||
498 | 14 | from curtin import distro | 14 | from curtin import distro |
499 | 15 | from curtin import paths | 15 | from curtin import paths |
500 | 16 | from curtin import util | 16 | from curtin import util |
501 | 17 | from curtin.commands import apt_config | 17 | from curtin.commands import apt_config |
502 | 18 | from curtin.config import load_config | ||
503 | 18 | from .helpers import CiTestCase | 19 | from .helpers import CiTestCase |
504 | 19 | 20 | ||
505 | 20 | LOG = logging.getLogger(__name__) | 21 | LOG = logging.getLogger(__name__) |
506 | @@ -233,7 +234,7 @@ class TestApplyPreserveSourcesList(CiTestCase): | |||
507 | 233 | m_get_pkg_ver.assert_has_calls( | 234 | m_get_pkg_ver.assert_has_calls( |
508 | 234 | [mock.call('cloud-init', target=self.tmp)]) | 235 | [mock.call('cloud-init', target=self.tmp)]) |
509 | 235 | self.assertEqual( | 236 | self.assertEqual( |
511 | 236 | yaml.load(util.load_file(self.tmp_cfg)), | 237 | load_config(self.tmp_cfg), |
512 | 237 | {'apt_preserve_sources_list': True}) | 238 | {'apt_preserve_sources_list': True}) |
513 | 238 | 239 | ||
514 | 239 | @mock.patch("curtin.commands.apt_config.distro.get_package_version") | 240 | @mock.patch("curtin.commands.apt_config.distro.get_package_version") |
515 | @@ -253,7 +254,7 @@ class TestApplyPreserveSourcesList(CiTestCase): | |||
516 | 253 | m_get_pkg_ver.assert_has_calls( | 254 | m_get_pkg_ver.assert_has_calls( |
517 | 254 | [mock.call('cloud-init', target=self.tmp)]) | 255 | [mock.call('cloud-init', target=self.tmp)]) |
518 | 255 | self.assertEqual( | 256 | self.assertEqual( |
520 | 256 | yaml.load(util.load_file(self.tmp_cfg)), | 257 | load_config(self.tmp_cfg), |
521 | 257 | {'apt': {'preserve_sources_list': True}}) | 258 | {'apt': {'preserve_sources_list': True}}) |
522 | 258 | 259 | ||
523 | 259 | # vi: ts=4 expandtab syntax=python | 260 | # vi: ts=4 expandtab syntax=python |
524 | diff --git a/tests/unittests/test_block.py b/tests/unittests/test_block.py | |||
525 | index e932392..c7ebdcc 100644 | |||
526 | --- a/tests/unittests/test_block.py | |||
527 | +++ b/tests/unittests/test_block.py | |||
528 | @@ -73,16 +73,18 @@ class TestBlock(CiTestCase): | |||
529 | 73 | res = block.get_blockdev_sector_size('/dev/vda2') | 73 | res = block.get_blockdev_sector_size('/dev/vda2') |
530 | 74 | self.assertEqual(res, (4096, 4096)) | 74 | self.assertEqual(res, (4096, 4096)) |
531 | 75 | 75 | ||
532 | 76 | @mock.patch("curtin.block.multipath") | ||
533 | 76 | @mock.patch("curtin.block.os.path.realpath") | 77 | @mock.patch("curtin.block.os.path.realpath") |
534 | 77 | @mock.patch("curtin.block.os.path.exists") | 78 | @mock.patch("curtin.block.os.path.exists") |
535 | 78 | @mock.patch("curtin.block.os.listdir") | 79 | @mock.patch("curtin.block.os.listdir") |
536 | 79 | def test_lookup_disk(self, mock_os_listdir, mock_os_path_exists, | 80 | def test_lookup_disk(self, mock_os_listdir, mock_os_path_exists, |
538 | 80 | mock_os_path_realpath): | 81 | mock_os_path_realpath, mock_mpath): |
539 | 81 | serial = "SERIAL123" | 82 | serial = "SERIAL123" |
540 | 82 | mock_os_listdir.return_value = ["sda_%s-part1" % serial, | 83 | mock_os_listdir.return_value = ["sda_%s-part1" % serial, |
541 | 83 | "sda_%s" % serial, "other"] | 84 | "sda_%s" % serial, "other"] |
542 | 84 | mock_os_path_exists.return_value = True | 85 | mock_os_path_exists.return_value = True |
543 | 85 | mock_os_path_realpath.return_value = "/dev/sda" | 86 | mock_os_path_realpath.return_value = "/dev/sda" |
544 | 87 | mock_mpath.is_mpath_device.return_value = False | ||
545 | 86 | 88 | ||
546 | 87 | path = block.lookup_disk(serial) | 89 | path = block.lookup_disk(serial) |
547 | 88 | 90 | ||
548 | @@ -101,6 +103,30 @@ class TestBlock(CiTestCase): | |||
549 | 101 | mock_os_listdir.return_value = ["other"] | 103 | mock_os_listdir.return_value = ["other"] |
550 | 102 | block.lookup_disk(serial) | 104 | block.lookup_disk(serial) |
551 | 103 | 105 | ||
552 | 106 | @mock.patch('curtin.block.udevadm_info') | ||
553 | 107 | def test_get_device_mapper_links_returns_first_non_none(self, m_info): | ||
554 | 108 | """ get_device_mapper_links returns first by sort entry in DEVLINKS.""" | ||
555 | 109 | devlinks = [self.random_string(), self.random_string()] | ||
556 | 110 | m_info.return_value = {'DEVLINKS': devlinks} | ||
557 | 111 | devpath = self.random_string() | ||
558 | 112 | self.assertEqual(sorted(devlinks)[0], | ||
559 | 113 | block.get_device_mapper_links(devpath, first=True)) | ||
560 | 114 | |||
561 | 115 | @mock.patch('curtin.block.udevadm_info') | ||
562 | 116 | def test_get_device_mapper_links_raises_valueerror_no_links(self, m_info): | ||
563 | 117 | """ get_device_mapper_links raises ValueError if info has no links.""" | ||
564 | 118 | m_info.return_value = {self.random_string(): self.random_string()} | ||
565 | 119 | with self.assertRaises(ValueError): | ||
566 | 120 | block.get_device_mapper_links(self.random_string()) | ||
567 | 121 | |||
568 | 122 | @mock.patch('curtin.block.udevadm_info') | ||
569 | 123 | def test_get_device_mapper_links_raises_error_no_link_vals(self, m_info): | ||
570 | 124 | """ get_device_mapper_links raises ValueError if all links are none""" | ||
571 | 125 | devlinks = ['', ''] | ||
572 | 126 | m_info.return_value = {'DEVLINKS': devlinks} | ||
573 | 127 | with self.assertRaises(ValueError): | ||
574 | 128 | block.get_device_mapper_links(self.random_string()) | ||
575 | 129 | |||
576 | 104 | @mock.patch("curtin.block.get_dev_disk_byid") | 130 | @mock.patch("curtin.block.get_dev_disk_byid") |
577 | 105 | def test_disk_to_byid_path(self, mock_byid): | 131 | def test_disk_to_byid_path(self, mock_byid): |
578 | 106 | """ disk_to_byid path returns a /dev/disk/by-id path """ | 132 | """ disk_to_byid path returns a /dev/disk/by-id path """ |
579 | @@ -387,13 +413,17 @@ class TestWipeVolume(CiTestCase): | |||
580 | 387 | 413 | ||
581 | 388 | class TestBlockKnames(CiTestCase): | 414 | class TestBlockKnames(CiTestCase): |
582 | 389 | """Tests for some of the kname functions in block""" | 415 | """Tests for some of the kname functions in block""" |
584 | 390 | def test_determine_partition_kname(self): | 416 | |
585 | 417 | @mock.patch('curtin.block.get_device_mapper_links') | ||
586 | 418 | def test_determine_partition_kname(self, m_mlink): | ||
587 | 419 | dm0_link = '/dev/disk/by-id/dm-name-XXXX2406' | ||
588 | 420 | m_mlink.return_value = dm0_link | ||
589 | 391 | part_knames = [(('sda', 1), 'sda1'), | 421 | part_knames = [(('sda', 1), 'sda1'), |
590 | 392 | (('vda', 1), 'vda1'), | 422 | (('vda', 1), 'vda1'), |
591 | 393 | (('nvme0n1', 1), 'nvme0n1p1'), | 423 | (('nvme0n1', 1), 'nvme0n1p1'), |
592 | 394 | (('mmcblk0', 1), 'mmcblk0p1'), | 424 | (('mmcblk0', 1), 'mmcblk0p1'), |
593 | 395 | (('cciss!c0d0', 1), 'cciss!c0d0p1'), | 425 | (('cciss!c0d0', 1), 'cciss!c0d0p1'), |
595 | 396 | (('dm-0', 1), 'dm-0p1'), | 426 | (('dm-0', 1), dm0_link + '-part1'), |
596 | 397 | (('md0', 1), 'md0p1'), | 427 | (('md0', 1), 'md0p1'), |
597 | 398 | (('mpath1', 2), 'mpath1p2')] | 428 | (('mpath1', 2), 'mpath1p2')] |
598 | 399 | for ((disk_kname, part_number), part_kname) in part_knames: | 429 | for ((disk_kname, part_number), part_kname) in part_knames: |
599 | diff --git a/tests/unittests/test_block_mdadm.py b/tests/unittests/test_block_mdadm.py | |||
600 | index 72610aa..f9164b4 100644 | |||
601 | --- a/tests/unittests/test_block_mdadm.py | |||
602 | +++ b/tests/unittests/test_block_mdadm.py | |||
603 | @@ -4,15 +4,11 @@ from mock import call, patch | |||
604 | 4 | from curtin.block import dev_short | 4 | from curtin.block import dev_short |
605 | 5 | from curtin.block import mdadm | 5 | from curtin.block import mdadm |
606 | 6 | from curtin import util | 6 | from curtin import util |
608 | 7 | from .helpers import CiTestCase | 7 | from .helpers import CiTestCase, raise_pexec_error |
609 | 8 | import os | 8 | import os |
610 | 9 | import textwrap | 9 | import textwrap |
611 | 10 | 10 | ||
612 | 11 | 11 | ||
613 | 12 | def _raise_pexec_error(*args, **kwargs): | ||
614 | 13 | raise util.ProcessExecutionError() | ||
615 | 14 | |||
616 | 15 | |||
617 | 16 | class TestBlockMdadmAssemble(CiTestCase): | 12 | class TestBlockMdadmAssemble(CiTestCase): |
618 | 17 | 13 | ||
619 | 18 | def setUp(self): | 14 | def setUp(self): |
620 | @@ -76,7 +72,7 @@ class TestBlockMdadmAssemble(CiTestCase): | |||
621 | 76 | 72 | ||
622 | 77 | def test_mdadm_assemble_exec_error(self): | 73 | def test_mdadm_assemble_exec_error(self): |
623 | 78 | self.mock_util.ProcessExecutionError = util.ProcessExecutionError | 74 | self.mock_util.ProcessExecutionError = util.ProcessExecutionError |
625 | 79 | self.mock_util.subp.side_effect = _raise_pexec_error | 75 | self.mock_util.subp.side_effect = raise_pexec_error |
626 | 80 | with self.assertRaises(util.ProcessExecutionError): | 76 | with self.assertRaises(util.ProcessExecutionError): |
627 | 81 | mdadm.mdadm_assemble(scan=True, ignore_errors=False) | 77 | mdadm.mdadm_assemble(scan=True, ignore_errors=False) |
628 | 82 | self.mock_util.subp.assert_called_with( | 78 | self.mock_util.subp.assert_called_with( |
629 | @@ -306,7 +302,7 @@ class TestBlockMdadmExamine(CiTestCase): | |||
630 | 306 | 302 | ||
631 | 307 | def test_mdadm_examine_no_raid(self): | 303 | def test_mdadm_examine_no_raid(self): |
632 | 308 | self.mock_util.ProcessExecutionError = util.ProcessExecutionError | 304 | self.mock_util.ProcessExecutionError = util.ProcessExecutionError |
634 | 309 | self.mock_util.subp.side_effect = _raise_pexec_error | 305 | self.mock_util.subp.side_effect = raise_pexec_error |
635 | 310 | 306 | ||
636 | 311 | device = "/dev/sda" | 307 | device = "/dev/sda" |
637 | 312 | data = mdadm.mdadm_examine(device, export=False) | 308 | data = mdadm.mdadm_examine(device, export=False) |
638 | diff --git a/tests/unittests/test_block_multipath.py b/tests/unittests/test_block_multipath.py | |||
639 | 313 | new file mode 100644 | 309 | new file mode 100644 |
640 | index 0000000..0964349 | |||
641 | --- /dev/null | |||
642 | +++ b/tests/unittests/test_block_multipath.py | |||
643 | @@ -0,0 +1,149 @@ | |||
644 | 1 | import mock | ||
645 | 2 | |||
646 | 3 | from curtin.block import multipath | ||
647 | 4 | from .helpers import CiTestCase, raise_pexec_error | ||
648 | 5 | |||
649 | 6 | |||
650 | 7 | class TestMultipath(CiTestCase): | ||
651 | 8 | |||
652 | 9 | def setUp(self): | ||
653 | 10 | super(TestMultipath, self).setUp() | ||
654 | 11 | self.add_patch('curtin.block.multipath.util.subp', 'm_subp') | ||
655 | 12 | self.add_patch('curtin.block.multipath.udev', 'm_udev') | ||
656 | 13 | |||
657 | 14 | self.m_subp.return_value = ("", "") | ||
658 | 15 | |||
659 | 16 | def test_show_paths(self): | ||
660 | 17 | self.m_subp.return_value = ("foo=bar wark=2", "") | ||
661 | 18 | expected = ['multipathd', 'show', 'paths', 'raw', 'format', | ||
662 | 19 | multipath.SHOW_PATHS_FMT] | ||
663 | 20 | self.assertEqual([{'foo': 'bar', 'wark': '2'}], | ||
664 | 21 | multipath.show_paths()) | ||
665 | 22 | self.m_subp.assert_called_with(expected, capture=True) | ||
666 | 23 | |||
667 | 24 | def test_show_maps(self): | ||
668 | 25 | self.m_subp.return_value = ("foo=bar wark=2", "") | ||
669 | 26 | expected = ['multipathd', 'show', 'maps', 'raw', 'format', | ||
670 | 27 | multipath.SHOW_MAPS_FMT] | ||
671 | 28 | self.assertEqual([{'foo': 'bar', 'wark': '2'}], | ||
672 | 29 | multipath.show_maps()) | ||
673 | 30 | self.m_subp.assert_called_with(expected, capture=True) | ||
674 | 31 | |||
675 | 32 | def test_is_mpath_device_true(self): | ||
676 | 33 | self.m_udev.udevadm_info.return_value = {'DM_UUID': 'mpath-mpatha-foo'} | ||
677 | 34 | self.assertTrue(multipath.is_mpath_device(self.random_string())) | ||
678 | 35 | |||
679 | 36 | def test_is_mpath_device_false(self): | ||
680 | 37 | self.m_udev.udevadm_info.return_value = {'DM_UUID': 'lvm-vg-foo-lv1'} | ||
681 | 38 | self.assertFalse(multipath.is_mpath_device(self.random_string())) | ||
682 | 39 | |||
683 | 40 | def test_is_mpath_member_true(self): | ||
684 | 41 | self.assertTrue(multipath.is_mpath_member(self.random_string())) | ||
685 | 42 | |||
686 | 43 | def test_is_mpath_member_false(self): | ||
687 | 44 | self.m_subp.side_effect = raise_pexec_error | ||
688 | 45 | self.assertFalse(multipath.is_mpath_member(self.random_string())) | ||
689 | 46 | |||
690 | 47 | def test_is_mpath_partition_true(self): | ||
691 | 48 | dm_device = "/dev/dm-" + self.random_string() | ||
692 | 49 | self.m_udev.udevadm_info.return_value = {'DM_PART': '1'} | ||
693 | 50 | self.assertTrue(multipath.is_mpath_partition(dm_device)) | ||
694 | 51 | |||
695 | 52 | def test_is_mpath_partition_false(self): | ||
696 | 53 | self.assertFalse(multipath.is_mpath_partition(self.random_string())) | ||
697 | 54 | |||
698 | 55 | def test_mpath_partition_to_mpath_id(self): | ||
699 | 56 | dev = self.random_string() | ||
700 | 57 | mpath_id = self.random_string() | ||
701 | 58 | self.m_udev.udevadm_info.return_value = {'DM_MPATH': mpath_id} | ||
702 | 59 | self.assertEqual(mpath_id, | ||
703 | 60 | multipath.mpath_partition_to_mpath_id(dev)) | ||
704 | 61 | |||
705 | 62 | def test_mpath_partition_to_mpath_id_none(self): | ||
706 | 63 | dev = self.random_string() | ||
707 | 64 | self.m_udev.udevadm_info.return_value = {} | ||
708 | 65 | self.assertEqual(None, | ||
709 | 66 | multipath.mpath_partition_to_mpath_id(dev)) | ||
710 | 67 | |||
711 | 68 | @mock.patch('curtin.block.multipath.os.path.exists') | ||
712 | 69 | @mock.patch('curtin.block.multipath.util.wait_for_removal') | ||
713 | 70 | def test_remove_partition(self, m_wait, m_exists): | ||
714 | 71 | devpath = self.random_string() | ||
715 | 72 | m_exists.side_effect = iter([True, True, False]) | ||
716 | 73 | multipath.remove_partition(devpath) | ||
717 | 74 | expected = mock.call(['dmsetup', 'remove', devpath], rcs=[0, 1]) | ||
718 | 75 | self.m_subp.assert_has_calls([expected] * 3) | ||
719 | 76 | m_wait.assert_not_called() | ||
720 | 77 | self.assertEqual(3, self.m_udev.udevadm_settle.call_count) | ||
721 | 78 | |||
722 | 79 | @mock.patch('curtin.block.multipath.os.path.exists') | ||
723 | 80 | @mock.patch('curtin.block.multipath.util.wait_for_removal') | ||
724 | 81 | def test_remove_partition_waits(self, m_wait, m_exists): | ||
725 | 82 | devpath = self.random_string() | ||
726 | 83 | m_exists.side_effect = iter([True, True, True]) | ||
727 | 84 | multipath.remove_partition(devpath, retries=3) | ||
728 | 85 | expected = mock.call(['dmsetup', 'remove', devpath], rcs=[0, 1]) | ||
729 | 86 | self.m_subp.assert_has_calls([expected] * 3) | ||
730 | 87 | self.assertEqual(3, self.m_udev.udevadm_settle.call_count) | ||
731 | 88 | self.assertEqual(1, m_wait.call_count) | ||
732 | 89 | |||
733 | 90 | @mock.patch('curtin.block.multipath.os.path.exists') | ||
734 | 91 | @mock.patch('curtin.block.multipath.util.wait_for_removal') | ||
735 | 92 | def test_remove_map(self, m_wait, m_exists): | ||
736 | 93 | map_id = self.random_string() | ||
737 | 94 | devpath = '/dev/mapper/%s' % map_id | ||
738 | 95 | m_exists.side_effect = iter([True, True, False]) | ||
739 | 96 | multipath.remove_map(devpath) | ||
740 | 97 | expected = mock.call(['multipath', '-f', devpath], rcs=[0, 1]) | ||
741 | 98 | self.m_subp.assert_has_calls([expected] * 3) | ||
742 | 99 | m_wait.assert_not_called() | ||
743 | 100 | self.assertEqual(3, self.m_udev.udevadm_settle.call_count) | ||
744 | 101 | |||
745 | 102 | @mock.patch('curtin.block.multipath.os.path.exists') | ||
746 | 103 | @mock.patch('curtin.block.multipath.util.wait_for_removal') | ||
747 | 104 | def test_remove_map_wait(self, m_wait, m_exists): | ||
748 | 105 | map_id = self.random_string() | ||
749 | 106 | devpath = '/dev/mapper/%s' % map_id | ||
750 | 107 | m_exists.side_effect = iter([True, True, True]) | ||
751 | 108 | multipath.remove_map(devpath, retries=3) | ||
752 | 109 | expected = mock.call(['multipath', '-f', devpath], rcs=[0, 1]) | ||
753 | 110 | self.m_subp.assert_has_calls([expected] * 3) | ||
754 | 111 | self.assertEqual(3, self.m_udev.udevadm_settle.call_count) | ||
755 | 112 | self.assertEqual(1, m_wait.call_count) | ||
756 | 113 | |||
757 | 114 | def test_find_mpath_members(self): | ||
758 | 115 | mp_id = 'mpatha' | ||
759 | 116 | paths = ['device=bar multipath=mpatha', | ||
760 | 117 | 'device=wark multipath=mpatha'] | ||
761 | 118 | self.m_subp.return_value = ("\n".join(paths), "") | ||
762 | 119 | self.assertEqual(sorted(['/dev/bar', '/dev/wark']), | ||
763 | 120 | sorted(multipath.find_mpath_members(mp_id))) | ||
764 | 121 | |||
765 | 122 | def test_find_mpath_members_empty(self): | ||
766 | 123 | mp_id = self.random_string() | ||
767 | 124 | paths = ['device=bar multipath=mpatha', | ||
768 | 125 | 'device=wark multipath=mpatha'] | ||
769 | 126 | self.m_subp.return_value = ("\n".join(paths), "") | ||
770 | 127 | self.assertEqual([], multipath.find_mpath_members(mp_id)) | ||
771 | 128 | |||
772 | 129 | def test_find_mpath_id(self): | ||
773 | 130 | mp_id = 'mpatha' | ||
774 | 131 | maps = ['sysfs=bar multipath=mpatha', | ||
775 | 132 | 'sysfs=wark multipath=mpatha'] | ||
776 | 133 | self.m_subp.return_value = ("\n".join(maps), "") | ||
777 | 134 | self.assertEqual(mp_id, multipath.find_mpath_id('/dev/bar')) | ||
778 | 135 | |||
779 | 136 | def test_find_mpath_id_name(self): | ||
780 | 137 | maps = ['sysfs=bar multipath=mpatha name=friendly', | ||
781 | 138 | 'sysfs=wark multipath=mpatha'] | ||
782 | 139 | self.m_subp.return_value = ("\n".join(maps), "") | ||
783 | 140 | self.assertEqual('friendly', multipath.find_mpath_id('/dev/bar')) | ||
784 | 141 | |||
785 | 142 | def test_find_mpath_id_none(self): | ||
786 | 143 | maps = ['sysfs=bar multipath=mpatha', | ||
787 | 144 | 'sysfs=wark multipath=mpatha'] | ||
788 | 145 | self.m_subp.return_value = ("\n".join(maps), "") | ||
789 | 146 | self.assertEqual(None, multipath.find_mpath_id('/dev/foo')) | ||
790 | 147 | |||
791 | 148 | |||
792 | 149 | # vi: ts=4 expandtab syntax=python | ||
793 | diff --git a/tests/vmtests/__init__.py b/tests/vmtests/__init__.py | |||
794 | index 5f4a17a..0cfcad3 100644 | |||
795 | --- a/tests/vmtests/__init__.py | |||
796 | +++ b/tests/vmtests/__init__.py | |||
797 | @@ -18,6 +18,7 @@ import yaml | |||
798 | 18 | import curtin.net as curtin_net | 18 | import curtin.net as curtin_net |
799 | 19 | import curtin.util as util | 19 | import curtin.util as util |
800 | 20 | from curtin.block import iscsi | 20 | from curtin.block import iscsi |
801 | 21 | from curtin.config import load_config | ||
802 | 21 | 22 | ||
803 | 22 | from .report_webhook_logger import CaptureReporting | 23 | from .report_webhook_logger import CaptureReporting |
804 | 23 | from curtin.commands.install import INSTALL_PASS_MSG | 24 | from curtin.commands.install import INSTALL_PASS_MSG |
805 | @@ -1612,7 +1613,7 @@ class VMBaseClass(TestCase): | |||
806 | 1612 | logger.debug('test_dname_rules: checking disks: %s', disk_to_check) | 1613 | logger.debug('test_dname_rules: checking disks: %s', disk_to_check) |
807 | 1613 | self.output_files_exist(["udev_rules.d"]) | 1614 | self.output_files_exist(["udev_rules.d"]) |
808 | 1614 | 1615 | ||
810 | 1615 | cfg = yaml.load(self.load_collect_file("root/curtin-install-cfg.yaml")) | 1616 | cfg = load_config(self.collect_path("root/curtin-install-cfg.yaml")) |
811 | 1616 | stgcfg = cfg.get("storage", {}).get("config", []) | 1617 | stgcfg = cfg.get("storage", {}).get("config", []) |
812 | 1617 | disks = [ent for ent in stgcfg if (ent.get('type') == 'disk' and | 1618 | disks = [ent for ent in stgcfg if (ent.get('type') == 'disk' and |
813 | 1618 | 'name' in ent)] | 1619 | 'name' in ent)] |
814 | @@ -1751,10 +1752,10 @@ class VMBaseClass(TestCase): | |||
815 | 1751 | @classmethod | 1752 | @classmethod |
816 | 1752 | def get_class_storage_config(cls): | 1753 | def get_class_storage_config(cls): |
817 | 1753 | sc = cls.load_conf_file() | 1754 | sc = cls.load_conf_file() |
819 | 1754 | return yaml.load(sc).get('storage', {}).get('config', {}) | 1755 | return yaml.safe_load(sc).get('storage', {}).get('config', {}) |
820 | 1755 | 1756 | ||
821 | 1756 | def get_storage_config(self): | 1757 | def get_storage_config(self): |
823 | 1757 | cfg = yaml.load(self.load_collect_file("root/curtin-install-cfg.yaml")) | 1758 | cfg = load_config(self.collect_path("root/curtin-install-cfg.yaml")) |
824 | 1758 | return cfg.get("storage", {}).get("config", []) | 1759 | return cfg.get("storage", {}).get("config", []) |
825 | 1759 | 1760 | ||
826 | 1760 | def has_storage_config(self): | 1761 | def has_storage_config(self): |
827 | @@ -1992,7 +1993,7 @@ def generate_user_data(collect_scripts=None, apt_proxy=None, | |||
828 | 1992 | capture=True) | 1993 | capture=True) |
829 | 1993 | # precises' cloud-init version has limited support for cloud-config-archive | 1994 | # precises' cloud-init version has limited support for cloud-config-archive |
830 | 1994 | # and expects cloud-config pieces to be appendable to a single file and | 1995 | # and expects cloud-config pieces to be appendable to a single file and |
832 | 1995 | # yaml.load()'able. Resolve this by using yaml.dump() when generating | 1996 | # yaml.safe_load()'able. Resolve this by using yaml.dump() when generating |
833 | 1996 | # a list of parts | 1997 | # a list of parts |
834 | 1997 | parts = [{'type': 'text/cloud-config', | 1998 | parts = [{'type': 'text/cloud-config', |
835 | 1998 | 'content': yaml.dump(base_cloudconfig, indent=1)}, | 1999 | 'content': yaml.dump(base_cloudconfig, indent=1)}, |
836 | diff --git a/tests/vmtests/releases.py b/tests/vmtests/releases.py | |||
837 | index accd999..1a92412 100644 | |||
838 | --- a/tests/vmtests/releases.py | |||
839 | +++ b/tests/vmtests/releases.py | |||
840 | @@ -121,6 +121,12 @@ class _DiscoBase(_UbuntuBase): | |||
841 | 121 | mem = "2048" | 121 | mem = "2048" |
842 | 122 | 122 | ||
843 | 123 | 123 | ||
844 | 124 | class _EoanBase(_UbuntuBase): | ||
845 | 125 | release = "eoan" | ||
846 | 126 | target_release = "eoan" | ||
847 | 127 | mem = "2048" | ||
848 | 128 | |||
849 | 129 | |||
850 | 124 | class _Releases(object): | 130 | class _Releases(object): |
851 | 125 | trusty = _TrustyBase | 131 | trusty = _TrustyBase |
852 | 126 | precise = _PreciseBase | 132 | precise = _PreciseBase |
853 | @@ -137,6 +143,7 @@ class _Releases(object): | |||
854 | 137 | bionic = _BionicBase | 143 | bionic = _BionicBase |
855 | 138 | cosmic = _CosmicBase | 144 | cosmic = _CosmicBase |
856 | 139 | disco = _DiscoBase | 145 | disco = _DiscoBase |
857 | 146 | eoan = _EoanBase | ||
858 | 140 | 147 | ||
859 | 141 | 148 | ||
860 | 142 | class _CentosReleases(object): | 149 | class _CentosReleases(object): |
861 | diff --git a/tests/vmtests/test_apt_config_cmd.py b/tests/vmtests/test_apt_config_cmd.py | |||
862 | index 1296240..13325e5 100644 | |||
863 | --- a/tests/vmtests/test_apt_config_cmd.py | |||
864 | +++ b/tests/vmtests/test_apt_config_cmd.py | |||
865 | @@ -5,10 +5,10 @@ | |||
866 | 5 | apt-config standalone command. | 5 | apt-config standalone command. |
867 | 6 | """ | 6 | """ |
868 | 7 | import textwrap | 7 | import textwrap |
869 | 8 | import yaml | ||
870 | 9 | 8 | ||
871 | 10 | from . import VMBaseClass | 9 | from . import VMBaseClass |
872 | 11 | from .releases import base_vm_classes as relbase | 10 | from .releases import base_vm_classes as relbase |
873 | 11 | from curtin.config import load_config | ||
874 | 12 | 12 | ||
875 | 13 | 13 | ||
876 | 14 | class TestAptConfigCMD(VMBaseClass): | 14 | class TestAptConfigCMD(VMBaseClass): |
877 | @@ -50,7 +50,7 @@ class TestAptConfigCMD(VMBaseClass): | |||
878 | 50 | # For earlier than xenial 'apt_preserve_sources_list' is expected | 50 | # For earlier than xenial 'apt_preserve_sources_list' is expected |
879 | 51 | self.assertEqual( | 51 | self.assertEqual( |
880 | 52 | {'apt': {'preserve_sources_list': True}}, | 52 | {'apt': {'preserve_sources_list': True}}, |
882 | 53 | yaml.load(self.load_collect_file("curtin-preserve-sources.cfg"))) | 53 | load_config(self.collect_path("curtin-preserve-sources.cfg"))) |
883 | 54 | 54 | ||
884 | 55 | 55 | ||
885 | 56 | class XenialTestAptConfigCMDCMD(relbase.xenial, TestAptConfigCMD): | 56 | class XenialTestAptConfigCMDCMD(relbase.xenial, TestAptConfigCMD): |
886 | @@ -71,4 +71,8 @@ class CosmicTestAptConfigCMDCMD(relbase.cosmic, TestAptConfigCMD): | |||
887 | 71 | class DiscoTestAptConfigCMDCMD(relbase.disco, TestAptConfigCMD): | 71 | class DiscoTestAptConfigCMDCMD(relbase.disco, TestAptConfigCMD): |
888 | 72 | __test__ = True | 72 | __test__ = True |
889 | 73 | 73 | ||
890 | 74 | |||
891 | 75 | class EoanTestAptConfigCMDCMD(relbase.eoan, TestAptConfigCMD): | ||
892 | 76 | __test__ = True | ||
893 | 77 | |||
894 | 74 | # vi: ts=4 expandtab syntax=python | 78 | # vi: ts=4 expandtab syntax=python |
895 | diff --git a/tests/vmtests/test_apt_source.py b/tests/vmtests/test_apt_source.py | |||
896 | index 2cd7267..a090ffa 100644 | |||
897 | --- a/tests/vmtests/test_apt_source.py | |||
898 | +++ b/tests/vmtests/test_apt_source.py | |||
899 | @@ -4,13 +4,13 @@ | |||
900 | 4 | Collection of tests for the apt configuration features | 4 | Collection of tests for the apt configuration features |
901 | 5 | """ | 5 | """ |
902 | 6 | import textwrap | 6 | import textwrap |
903 | 7 | import yaml | ||
904 | 8 | 7 | ||
905 | 9 | from . import VMBaseClass | 8 | from . import VMBaseClass |
906 | 10 | from .releases import base_vm_classes as relbase | 9 | from .releases import base_vm_classes as relbase |
907 | 11 | 10 | ||
908 | 12 | from unittest import SkipTest | 11 | from unittest import SkipTest |
909 | 13 | from curtin import util | 12 | from curtin import util |
910 | 13 | from curtin.config import load_config | ||
911 | 14 | 14 | ||
912 | 15 | 15 | ||
913 | 16 | class TestAptSrcAbs(VMBaseClass): | 16 | class TestAptSrcAbs(VMBaseClass): |
914 | @@ -67,7 +67,7 @@ class TestAptSrcAbs(VMBaseClass): | |||
915 | 67 | # For earlier than xenial 'apt_preserve_sources_list' is expected | 67 | # For earlier than xenial 'apt_preserve_sources_list' is expected |
916 | 68 | self.assertEqual( | 68 | self.assertEqual( |
917 | 69 | {'apt': {'preserve_sources_list': True}}, | 69 | {'apt': {'preserve_sources_list': True}}, |
919 | 70 | yaml.load(self.load_collect_file("curtin-preserve-sources.cfg"))) | 70 | load_config(self.collect_path("curtin-preserve-sources.cfg"))) |
920 | 71 | 71 | ||
921 | 72 | def test_source_files(self): | 72 | def test_source_files(self): |
922 | 73 | """test_source_files - Check generated .lists for correct content""" | 73 | """test_source_files - Check generated .lists for correct content""" |
923 | diff --git a/tests/vmtests/test_basic.py b/tests/vmtests/test_basic.py | |||
924 | index a4a3018..92971b3 100644 | |||
925 | --- a/tests/vmtests/test_basic.py | |||
926 | +++ b/tests/vmtests/test_basic.py | |||
927 | @@ -17,7 +17,7 @@ class TestBasicAbs(VMBaseClass): | |||
928 | 17 | nr_cpus = 2 | 17 | nr_cpus = 2 |
929 | 18 | dirty_disks = True | 18 | dirty_disks = True |
930 | 19 | conf_file = "examples/tests/basic.yaml" | 19 | conf_file = "examples/tests/basic.yaml" |
932 | 20 | extra_disks = ['128G', '128G', '4G', '4G'] | 20 | extra_disks = ['15G', '20G', '25G'] |
933 | 21 | disk_to_check = [('btrfs_volume', 0), | 21 | disk_to_check = [('btrfs_volume', 0), |
934 | 22 | ('main_disk_with_in---valid--dname', 0), | 22 | ('main_disk_with_in---valid--dname', 0), |
935 | 23 | ('main_disk_with_in---valid--dname', 1), | 23 | ('main_disk_with_in---valid--dname', 1), |
936 | @@ -81,9 +81,6 @@ class TestBasicAbs(VMBaseClass): | |||
937 | 81 | return kname | 81 | return kname |
938 | 82 | 82 | ||
939 | 83 | def _test_ptable(self, blkid_output, expected): | 83 | def _test_ptable(self, blkid_output, expected): |
940 | 84 | if self.target_release == "trusty": | ||
941 | 85 | raise SkipTest("No PTTYPE blkid output on trusty") | ||
942 | 86 | |||
943 | 87 | if not blkid_output: | 84 | if not blkid_output: |
944 | 88 | raise RuntimeError('_test_ptable requires blkid output file') | 85 | raise RuntimeError('_test_ptable requires blkid output file') |
945 | 89 | 86 | ||
946 | @@ -237,14 +234,6 @@ class Centos70XenialTestBasic(centos_relbase.centos70_xenial, | |||
947 | 237 | __test__ = True | 234 | __test__ = True |
948 | 238 | 235 | ||
949 | 239 | 236 | ||
950 | 240 | class TrustyTestBasic(relbase.trusty, TestBasicAbs): | ||
951 | 241 | __test__ = True | ||
952 | 242 | |||
953 | 243 | |||
954 | 244 | class TrustyHWEXTestBasic(relbase.trusty_hwe_x, TrustyTestBasic): | ||
955 | 245 | __test__ = True | ||
956 | 246 | |||
957 | 247 | |||
958 | 248 | class XenialGAi386TestBasic(relbase.xenial_ga, TestBasicAbs): | 237 | class XenialGAi386TestBasic(relbase.xenial_ga, TestBasicAbs): |
959 | 249 | __test__ = True | 238 | __test__ = True |
960 | 250 | arch = 'i386' | 239 | arch = 'i386' |
961 | @@ -274,10 +263,14 @@ class DiscoTestBasic(relbase.disco, TestBasicAbs): | |||
962 | 274 | __test__ = True | 263 | __test__ = True |
963 | 275 | 264 | ||
964 | 276 | 265 | ||
965 | 266 | class EoanTestBasic(relbase.eoan, TestBasicAbs): | ||
966 | 267 | __test__ = True | ||
967 | 268 | |||
968 | 269 | |||
969 | 277 | class TestBasicScsiAbs(TestBasicAbs): | 270 | class TestBasicScsiAbs(TestBasicAbs): |
970 | 278 | conf_file = "examples/tests/basic_scsi.yaml" | 271 | conf_file = "examples/tests/basic_scsi.yaml" |
971 | 279 | disk_driver = 'scsi-hd' | 272 | disk_driver = 'scsi-hd' |
973 | 280 | extra_disks = ['128G', '128G', '4G', '4G'] | 273 | extra_disks = ['15G', '20G', '25G'] |
974 | 281 | extra_collect_scripts = [textwrap.dedent(""" | 274 | extra_collect_scripts = [textwrap.dedent(""" |
975 | 282 | cd OUTPUT_COLLECT_D | 275 | cd OUTPUT_COLLECT_D |
976 | 283 | blkid -o export /dev/sda | cat >blkid_output_sda | 276 | blkid -o export /dev/sda | cat >blkid_output_sda |
977 | @@ -354,7 +347,13 @@ class CosmicTestScsiBasic(relbase.cosmic, TestBasicScsiAbs): | |||
978 | 354 | __test__ = True | 347 | __test__ = True |
979 | 355 | 348 | ||
980 | 356 | 349 | ||
981 | 350 | @VMBaseClass.skip_by_date("1813228", fixby="2019-06-02", install=False) | ||
982 | 357 | class DiscoTestScsiBasic(relbase.disco, TestBasicScsiAbs): | 351 | class DiscoTestScsiBasic(relbase.disco, TestBasicScsiAbs): |
983 | 358 | __test__ = True | 352 | __test__ = True |
984 | 359 | 353 | ||
985 | 354 | |||
986 | 355 | @VMBaseClass.skip_by_date("1813228", fixby="2019-06-02", install=False) | ||
987 | 356 | class EoanTestScsiBasic(relbase.eoan, TestBasicScsiAbs): | ||
988 | 357 | __test__ = True | ||
989 | 358 | |||
990 | 360 | # vi: ts=4 expandtab syntax=python | 359 | # vi: ts=4 expandtab syntax=python |
991 | diff --git a/tests/vmtests/test_basic_dasd.py b/tests/vmtests/test_basic_dasd.py | |||
992 | index 496faf9..763bc9c 100644 | |||
993 | --- a/tests/vmtests/test_basic_dasd.py | |||
994 | +++ b/tests/vmtests/test_basic_dasd.py | |||
995 | @@ -67,4 +67,10 @@ class DiscoTestBasicDasd(relbase.disco, TestBasicDasd): | |||
996 | 67 | self.output_files_exist(["netplan.yaml"]) | 67 | self.output_files_exist(["netplan.yaml"]) |
997 | 68 | 68 | ||
998 | 69 | 69 | ||
999 | 70 | class EoanTestBasicDasd(relbase.eoan, TestBasicDasd): | ||
1000 | 71 | __test__ = True | ||
1001 | 72 | |||
1002 | 73 | def test_output_files_exist(self): | ||
1003 | 74 | self.output_files_exist(["netplan.yaml"]) | ||
1004 | 75 | |||
1005 | 70 | # vi: ts=4 expandtab syntax=python | 76 | # vi: ts=4 expandtab syntax=python |
1006 | diff --git a/tests/vmtests/test_bcache_basic.py b/tests/vmtests/test_bcache_basic.py | |||
1007 | index b6044d4..12ed8f6 100644 | |||
1008 | --- a/tests/vmtests/test_bcache_basic.py | |||
1009 | +++ b/tests/vmtests/test_bcache_basic.py | |||
1010 | @@ -48,14 +48,6 @@ class TestBcacheBasic(VMBaseClass): | |||
1011 | 48 | self.check_file_regex("proc_cmdline", r"root=UUID=") | 48 | self.check_file_regex("proc_cmdline", r"root=UUID=") |
1012 | 49 | 49 | ||
1013 | 50 | 50 | ||
1014 | 51 | class TrustyBcacheBasic(relbase.trusty, TestBcacheBasic): | ||
1015 | 52 | __test__ = False # covered by test_raid5_bcache | ||
1016 | 53 | |||
1017 | 54 | |||
1018 | 55 | class TrustyHWEXBcacheBasic(relbase.trusty_hwe_x, TestBcacheBasic): | ||
1019 | 56 | __test__ = False # covered by test_raid5_bcache | ||
1020 | 57 | |||
1021 | 58 | |||
1022 | 59 | class XenialGABcacheBasic(relbase.xenial_ga, TestBcacheBasic): | 51 | class XenialGABcacheBasic(relbase.xenial_ga, TestBcacheBasic): |
1023 | 60 | __test__ = True | 52 | __test__ = True |
1024 | 61 | 53 | ||
1025 | @@ -79,4 +71,8 @@ class CosmicBcacheBasic(relbase.cosmic, TestBcacheBasic): | |||
1026 | 79 | class DiscoBcacheBasic(relbase.disco, TestBcacheBasic): | 71 | class DiscoBcacheBasic(relbase.disco, TestBcacheBasic): |
1027 | 80 | __test__ = True | 72 | __test__ = True |
1028 | 81 | 73 | ||
1029 | 74 | |||
1030 | 75 | class EoancacheBasic(relbase.eoan, TestBcacheBasic): | ||
1031 | 76 | __test__ = True | ||
1032 | 77 | |||
1033 | 82 | # vi: ts=4 expandtab syntax=python | 78 | # vi: ts=4 expandtab syntax=python |
1034 | diff --git a/tests/vmtests/test_bcache_bug1718699.py b/tests/vmtests/test_bcache_bug1718699.py | |||
1035 | index 5410dc3..e6c66fc 100644 | |||
1036 | --- a/tests/vmtests/test_bcache_bug1718699.py | |||
1037 | +++ b/tests/vmtests/test_bcache_bug1718699.py | |||
1038 | @@ -26,4 +26,8 @@ class CosmicTestBcacheBug1718699(relbase.cosmic, TestBcacheBug1718699): | |||
1039 | 26 | class DiscoTestBcacheBug1718699(relbase.disco, TestBcacheBug1718699): | 26 | class DiscoTestBcacheBug1718699(relbase.disco, TestBcacheBug1718699): |
1040 | 27 | __test__ = True | 27 | __test__ = True |
1041 | 28 | 28 | ||
1042 | 29 | |||
1043 | 30 | class EoanTestBcacheBug1718699(relbase.eoan, TestBcacheBug1718699): | ||
1044 | 31 | __test__ = True | ||
1045 | 32 | |||
1046 | 29 | # vi: ts=4 expandtab syntax=python | 33 | # vi: ts=4 expandtab syntax=python |
1047 | diff --git a/tests/vmtests/test_bcache_ceph.py b/tests/vmtests/test_bcache_ceph.py | |||
1048 | index 30820bd..b8b1d9c 100644 | |||
1049 | --- a/tests/vmtests/test_bcache_ceph.py | |||
1050 | +++ b/tests/vmtests/test_bcache_ceph.py | |||
1051 | @@ -59,14 +59,6 @@ class TestBcacheCeph(VMBaseClass): | |||
1052 | 59 | self.load_collect_file("bcache_ls").splitlines()) | 59 | self.load_collect_file("bcache_ls").splitlines()) |
1053 | 60 | 60 | ||
1054 | 61 | 61 | ||
1055 | 62 | class TrustyTestBcacheCeph(relbase.trusty, TestBcacheCeph): | ||
1056 | 63 | __test__ = False # covered by test_raid5_bcache | ||
1057 | 64 | |||
1058 | 65 | |||
1059 | 66 | class TrustyHWEXTestBcacheCeph(relbase.trusty_hwe_x, TestBcacheCeph): | ||
1060 | 67 | __test__ = False # covered by test_raid5_bcache | ||
1061 | 68 | |||
1062 | 69 | |||
1063 | 70 | class XenialGATestBcacheCeph(relbase.xenial_ga, TestBcacheCeph): | 62 | class XenialGATestBcacheCeph(relbase.xenial_ga, TestBcacheCeph): |
1064 | 71 | __test__ = True | 63 | __test__ = True |
1065 | 72 | 64 | ||
1066 | @@ -90,4 +82,8 @@ class CosmicTestBcacheCeph(relbase.cosmic, TestBcacheCeph): | |||
1067 | 90 | class DiscoTestBcacheCeph(relbase.disco, TestBcacheCeph): | 82 | class DiscoTestBcacheCeph(relbase.disco, TestBcacheCeph): |
1068 | 91 | __test__ = True | 83 | __test__ = True |
1069 | 92 | 84 | ||
1070 | 85 | |||
1071 | 86 | class EoanTestBcacheCeph(relbase.eoan, TestBcacheCeph): | ||
1072 | 87 | __test__ = True | ||
1073 | 88 | |||
1074 | 93 | # vi: ts=4 expandtab syntax=python | 89 | # vi: ts=4 expandtab syntax=python |
1075 | diff --git a/tests/vmtests/test_bcache_partitions.py b/tests/vmtests/test_bcache_partitions.py | |||
1076 | index ff86b51..46dbc88 100644 | |||
1077 | --- a/tests/vmtests/test_bcache_partitions.py | |||
1078 | +++ b/tests/vmtests/test_bcache_partitions.py | |||
1079 | @@ -32,4 +32,8 @@ class CosmicTestBcachePartitions(relbase.cosmic, TestBcachePartitions): | |||
1080 | 32 | class DiscoTestBcachePartitions(relbase.disco, TestBcachePartitions): | 32 | class DiscoTestBcachePartitions(relbase.disco, TestBcachePartitions): |
1081 | 33 | __test__ = True | 33 | __test__ = True |
1082 | 34 | 34 | ||
1083 | 35 | |||
1084 | 36 | class EoanTestBcachePartitions(relbase.eoan, TestBcachePartitions): | ||
1085 | 37 | __test__ = True | ||
1086 | 38 | |||
1087 | 35 | # vi: ts=4 expandtab syntax=python | 39 | # vi: ts=4 expandtab syntax=python |
1088 | diff --git a/tests/vmtests/test_fs_battery.py b/tests/vmtests/test_fs_battery.py | |||
1089 | index 347b62a..94850aa 100644 | |||
1090 | --- a/tests/vmtests/test_fs_battery.py | |||
1091 | +++ b/tests/vmtests/test_fs_battery.py | |||
1092 | @@ -124,8 +124,6 @@ class TestFsBattery(VMBaseClass): | |||
1093 | 124 | 124 | ||
1094 | 125 | # tools for these types do not support providing uuid. | 125 | # tools for these types do not support providing uuid. |
1095 | 126 | no_uuid_types = ['vfat', 'jfs', 'fat16', 'fat32', 'ntfs'] | 126 | no_uuid_types = ['vfat', 'jfs', 'fat16', 'fat32', 'ntfs'] |
1096 | 127 | if self.release in ('trusty'): | ||
1097 | 128 | no_uuid_types += ['btrfs', 'xfs'] | ||
1098 | 129 | 127 | ||
1099 | 130 | for k, v in results.items(): | 128 | for k, v in results.items(): |
1100 | 131 | if v['type'] in no_uuid_types: | 129 | if v['type'] in no_uuid_types: |
1101 | @@ -217,14 +215,6 @@ class Centos70XenialTestFsBattery(centos_relbase.centos70_xenial, | |||
1102 | 217 | self.assertEqual(sorted(expected), sorted(results)) | 215 | self.assertEqual(sorted(expected), sorted(results)) |
1103 | 218 | 216 | ||
1104 | 219 | 217 | ||
1105 | 220 | class TrustyTestFsBattery(relbase.trusty, TestFsBattery): | ||
1106 | 221 | __test__ = True | ||
1107 | 222 | |||
1108 | 223 | |||
1109 | 224 | class TrustyHWEXTestFsBattery(relbase.trusty_hwe_x, TestFsBattery): | ||
1110 | 225 | __test__ = True | ||
1111 | 226 | |||
1112 | 227 | |||
1113 | 228 | class XenialGATestFsBattery(relbase.xenial_ga, TestFsBattery): | 218 | class XenialGATestFsBattery(relbase.xenial_ga, TestFsBattery): |
1114 | 229 | __test__ = True | 219 | __test__ = True |
1115 | 230 | 220 | ||
1116 | @@ -248,4 +238,8 @@ class CosmicTestFsBattery(relbase.cosmic, TestFsBattery): | |||
1117 | 248 | class DiscoTestFsBattery(relbase.disco, TestFsBattery): | 238 | class DiscoTestFsBattery(relbase.disco, TestFsBattery): |
1118 | 249 | __test__ = True | 239 | __test__ = True |
1119 | 250 | 240 | ||
1120 | 241 | |||
1121 | 242 | class EoanTestFsBattery(relbase.eoan, TestFsBattery): | ||
1122 | 243 | __test__ = True | ||
1123 | 244 | |||
1124 | 251 | # vi: ts=4 expandtab syntax=python | 245 | # vi: ts=4 expandtab syntax=python |
1125 | diff --git a/tests/vmtests/test_install_umount.py b/tests/vmtests/test_install_umount.py | |||
1126 | index 931cf55..566c4c1 100644 | |||
1127 | --- a/tests/vmtests/test_install_umount.py | |||
1128 | +++ b/tests/vmtests/test_install_umount.py | |||
1129 | @@ -28,7 +28,7 @@ class TestInstallUnmount(VMBaseClass): | |||
1130 | 28 | """Test that install ran with unmount: disabled""" | 28 | """Test that install ran with unmount: disabled""" |
1131 | 29 | collect_curtin_cfg = 'root/curtin-install-cfg.yaml' | 29 | collect_curtin_cfg = 'root/curtin-install-cfg.yaml' |
1132 | 30 | self.output_files_exist([collect_curtin_cfg]) | 30 | self.output_files_exist([collect_curtin_cfg]) |
1134 | 31 | curtin_cfg = yaml.load(self.load_collect_file(collect_curtin_cfg)) | 31 | curtin_cfg = yaml.safe_load(self.load_collect_file(collect_curtin_cfg)) |
1135 | 32 | 32 | ||
1136 | 33 | # check that we have | 33 | # check that we have |
1137 | 34 | # install: | 34 | # install: |
1138 | diff --git a/tests/vmtests/test_iscsi.py b/tests/vmtests/test_iscsi.py | |||
1139 | index 2707d40..3fb2be9 100644 | |||
1140 | --- a/tests/vmtests/test_iscsi.py | |||
1141 | +++ b/tests/vmtests/test_iscsi.py | |||
1142 | @@ -55,10 +55,6 @@ class Centos70XenialTestIscsiBasic(centos_relbase.centos70_xenial, | |||
1143 | 55 | __test__ = True | 55 | __test__ = True |
1144 | 56 | 56 | ||
1145 | 57 | 57 | ||
1146 | 58 | class TrustyTestIscsiBasic(relbase.trusty, TestBasicIscsiAbs): | ||
1147 | 59 | __test__ = True | ||
1148 | 60 | |||
1149 | 61 | |||
1150 | 62 | class XenialGATestIscsiBasic(relbase.xenial_ga, TestBasicIscsiAbs): | 58 | class XenialGATestIscsiBasic(relbase.xenial_ga, TestBasicIscsiAbs): |
1151 | 63 | __test__ = True | 59 | __test__ = True |
1152 | 64 | 60 | ||
1153 | @@ -82,4 +78,8 @@ class CosmicTestIscsiBasic(relbase.cosmic, TestBasicIscsiAbs): | |||
1154 | 82 | class DiscoTestIscsiBasic(relbase.disco, TestBasicIscsiAbs): | 78 | class DiscoTestIscsiBasic(relbase.disco, TestBasicIscsiAbs): |
1155 | 83 | __test__ = True | 79 | __test__ = True |
1156 | 84 | 80 | ||
1157 | 81 | |||
1158 | 82 | class EoanTestIscsiBasic(relbase.eoan, TestBasicIscsiAbs): | ||
1159 | 83 | __test__ = True | ||
1160 | 84 | |||
1161 | 85 | # vi: ts=4 expandtab syntax=python | 85 | # vi: ts=4 expandtab syntax=python |
1162 | diff --git a/tests/vmtests/test_journald_reporter.py b/tests/vmtests/test_journald_reporter.py | |||
1163 | index 80af61e..71d331c 100644 | |||
1164 | --- a/tests/vmtests/test_journald_reporter.py | |||
1165 | +++ b/tests/vmtests/test_journald_reporter.py | |||
1166 | @@ -43,4 +43,8 @@ class CosmicTestJournaldReporter(relbase.cosmic, TestJournaldReporter): | |||
1167 | 43 | class DiscoTestJournaldReporter(relbase.disco, TestJournaldReporter): | 43 | class DiscoTestJournaldReporter(relbase.disco, TestJournaldReporter): |
1168 | 44 | __test__ = True | 44 | __test__ = True |
1169 | 45 | 45 | ||
1170 | 46 | |||
1171 | 47 | class EoanTestJournaldReporter(relbase.eoan, TestJournaldReporter): | ||
1172 | 48 | __test__ = True | ||
1173 | 49 | |||
1174 | 46 | # vi: ts=4 expandtab syntax=python | 50 | # vi: ts=4 expandtab syntax=python |
1175 | diff --git a/tests/vmtests/test_lvm.py b/tests/vmtests/test_lvm.py | |||
1176 | index fdb5314..d5a7328 100644 | |||
1177 | --- a/tests/vmtests/test_lvm.py | |||
1178 | +++ b/tests/vmtests/test_lvm.py | |||
1179 | @@ -47,14 +47,6 @@ class Centos70XenialTestLvm(centos_relbase.centos70_xenial, TestLvmAbs): | |||
1180 | 47 | __test__ = True | 47 | __test__ = True |
1181 | 48 | 48 | ||
1182 | 49 | 49 | ||
1183 | 50 | class TrustyTestLvm(relbase.trusty, TestLvmAbs): | ||
1184 | 51 | __test__ = True | ||
1185 | 52 | |||
1186 | 53 | |||
1187 | 54 | class TrustyHWEXTestLvm(relbase.trusty_hwe_x, TestLvmAbs): | ||
1188 | 55 | __test__ = True | ||
1189 | 56 | |||
1190 | 57 | |||
1191 | 58 | class XenialGATestLvm(relbase.xenial_ga, TestLvmAbs): | 50 | class XenialGATestLvm(relbase.xenial_ga, TestLvmAbs): |
1192 | 59 | __test__ = True | 51 | __test__ = True |
1193 | 60 | 52 | ||
1194 | @@ -78,4 +70,8 @@ class CosmicTestLvm(relbase.cosmic, TestLvmAbs): | |||
1195 | 78 | class DiscoTestLvm(relbase.disco, TestLvmAbs): | 70 | class DiscoTestLvm(relbase.disco, TestLvmAbs): |
1196 | 79 | __test__ = True | 71 | __test__ = True |
1197 | 80 | 72 | ||
1198 | 73 | |||
1199 | 74 | class EoanTestLvm(relbase.eoan, TestLvmAbs): | ||
1200 | 75 | __test__ = True | ||
1201 | 76 | |||
1202 | 81 | # vi: ts=4 expandtab syntax=python | 77 | # vi: ts=4 expandtab syntax=python |
1203 | diff --git a/tests/vmtests/test_lvm_iscsi.py b/tests/vmtests/test_lvm_iscsi.py | |||
1204 | index 6cdcab2..9e42163 100644 | |||
1205 | --- a/tests/vmtests/test_lvm_iscsi.py | |||
1206 | +++ b/tests/vmtests/test_lvm_iscsi.py | |||
1207 | @@ -62,10 +62,6 @@ class Centos70XenialTestLvmIscsi(centos_relbase.centos70_xenial, | |||
1208 | 62 | __test__ = True | 62 | __test__ = True |
1209 | 63 | 63 | ||
1210 | 64 | 64 | ||
1211 | 65 | class TrustyTestIscsiLvm(relbase.trusty, TestLvmIscsiAbs): | ||
1212 | 66 | __test__ = True | ||
1213 | 67 | |||
1214 | 68 | |||
1215 | 69 | class XenialTestIscsiLvm(relbase.xenial, TestLvmIscsiAbs): | 65 | class XenialTestIscsiLvm(relbase.xenial, TestLvmIscsiAbs): |
1216 | 70 | __test__ = True | 66 | __test__ = True |
1217 | 71 | 67 | ||
1218 | @@ -93,4 +89,8 @@ class CosmicTestIscsiLvm(relbase.cosmic, TestLvmIscsiAbs): | |||
1219 | 93 | class DiscoTestIscsiLvm(relbase.disco, TestLvmIscsiAbs): | 89 | class DiscoTestIscsiLvm(relbase.disco, TestLvmIscsiAbs): |
1220 | 94 | __test__ = True | 90 | __test__ = True |
1221 | 95 | 91 | ||
1222 | 92 | |||
1223 | 93 | class EoanTestIscsiLvm(relbase.eoan, TestLvmIscsiAbs): | ||
1224 | 94 | __test__ = True | ||
1225 | 95 | |||
1226 | 96 | # vi: ts=4 expandtab syntax=python | 96 | # vi: ts=4 expandtab syntax=python |
1227 | diff --git a/tests/vmtests/test_lvm_raid.py b/tests/vmtests/test_lvm_raid.py | |||
1228 | index d70f3ef..155bbb9 100644 | |||
1229 | --- a/tests/vmtests/test_lvm_raid.py | |||
1230 | +++ b/tests/vmtests/test_lvm_raid.py | |||
1231 | @@ -43,6 +43,10 @@ class TestLvmOverRaidAbs(TestMdadmAbs, TestLvmAbs): | |||
1232 | 43 | self.check_file_strippedline("pvs", "vg0=/dev/md1") | 43 | self.check_file_strippedline("pvs", "vg0=/dev/md1") |
1233 | 44 | 44 | ||
1234 | 45 | 45 | ||
1235 | 46 | class EoanTestLvmOverRaid(relbase.eoan, TestLvmOverRaidAbs): | ||
1236 | 47 | __test__ = True | ||
1237 | 48 | |||
1238 | 49 | |||
1239 | 46 | class DiscoTestLvmOverRaid(relbase.disco, TestLvmOverRaidAbs): | 50 | class DiscoTestLvmOverRaid(relbase.disco, TestLvmOverRaidAbs): |
1240 | 47 | __test__ = True | 51 | __test__ = True |
1241 | 48 | 52 | ||
1242 | diff --git a/tests/vmtests/test_lvm_root.py b/tests/vmtests/test_lvm_root.py | |||
1243 | index d726a45..33deeac 100644 | |||
1244 | --- a/tests/vmtests/test_lvm_root.py | |||
1245 | +++ b/tests/vmtests/test_lvm_root.py | |||
1246 | @@ -48,7 +48,7 @@ class TestLvmRootAbs(VMBaseClass): | |||
1247 | 48 | self.assertEqual(self.conf_replace['__ROOTFS_FORMAT__'], | 48 | self.assertEqual(self.conf_replace['__ROOTFS_FORMAT__'], |
1248 | 49 | entry['fstype']) | 49 | entry['fstype']) |
1249 | 50 | else: | 50 | else: |
1251 | 51 | # no json output on trusty | 51 | # no json output on older releases |
1252 | 52 | self.output_files_exist(["lsblk.out"]) | 52 | self.output_files_exist(["lsblk.out"]) |
1253 | 53 | lsblk_data = open(self.collect_path('lsblk.out')).readlines() | 53 | lsblk_data = open(self.collect_path('lsblk.out')).readlines() |
1254 | 54 | print(lsblk_data) | 54 | print(lsblk_data) |
1255 | @@ -77,22 +77,6 @@ class Centos70XenialTestLvmRootXfs(centos_relbase.centos70_xenial, | |||
1256 | 77 | } | 77 | } |
1257 | 78 | 78 | ||
1258 | 79 | 79 | ||
1259 | 80 | class TrustyTestLvmRootExt4(relbase.trusty, TestLvmRootAbs): | ||
1260 | 81 | __test__ = True | ||
1261 | 82 | conf_replace = { | ||
1262 | 83 | '__ROOTFS_FORMAT__': 'ext4', | ||
1263 | 84 | } | ||
1264 | 85 | |||
1265 | 86 | |||
1266 | 87 | class TrustyTestLvmRootXfs(relbase.trusty, TestLvmRootAbs): | ||
1267 | 88 | __test__ = True | ||
1268 | 89 | # xfs on trusty can't support uuid= | ||
1269 | 90 | fstab_expected = {} | ||
1270 | 91 | conf_replace = { | ||
1271 | 92 | '__ROOTFS_FORMAT__': 'xfs', | ||
1272 | 93 | } | ||
1273 | 94 | |||
1274 | 95 | |||
1275 | 96 | class XenialTestLvmRootExt4(relbase.xenial, TestLvmRootAbs): | 80 | class XenialTestLvmRootExt4(relbase.xenial, TestLvmRootAbs): |
1276 | 97 | __test__ = True | 81 | __test__ = True |
1277 | 98 | conf_replace = { | 82 | conf_replace = { |
1278 | diff --git a/tests/vmtests/test_mdadm_bcache.py b/tests/vmtests/test_mdadm_bcache.py | |||
1279 | index 7168465..6f8bea7 100644 | |||
1280 | --- a/tests/vmtests/test_mdadm_bcache.py | |||
1281 | +++ b/tests/vmtests/test_mdadm_bcache.py | |||
1282 | @@ -127,15 +127,6 @@ class TestMdadmBcacheAbs(TestMdadmAbs): | |||
1283 | 127 | self.test_dname(disk_to_check=self.bcache_dnames) | 127 | self.test_dname(disk_to_check=self.bcache_dnames) |
1284 | 128 | 128 | ||
1285 | 129 | 129 | ||
1286 | 130 | @VMBaseClass.skip_by_date("1754581", fixby="2020-01-22", install=False) | ||
1287 | 131 | class TrustyTestMdadmBcache(relbase.trusty, TestMdadmBcacheAbs): | ||
1288 | 132 | __test__ = True | ||
1289 | 133 | |||
1290 | 134 | |||
1291 | 135 | class TrustyHWEXTestMdadmBcache(relbase.trusty_hwe_x, TestMdadmBcacheAbs): | ||
1292 | 136 | __test__ = True | ||
1293 | 137 | |||
1294 | 138 | |||
1295 | 139 | class XenialGATestMdadmBcache(relbase.xenial_ga, TestMdadmBcacheAbs): | 130 | class XenialGATestMdadmBcache(relbase.xenial_ga, TestMdadmBcacheAbs): |
1296 | 140 | __test__ = True | 131 | __test__ = True |
1297 | 141 | 132 | ||
1298 | @@ -160,6 +151,10 @@ class DiscoTestMdadmBcache(relbase.disco, TestMdadmBcacheAbs): | |||
1299 | 160 | __test__ = True | 151 | __test__ = True |
1300 | 161 | 152 | ||
1301 | 162 | 153 | ||
1302 | 154 | class EoanTestMdadmBcache(relbase.eoan, TestMdadmBcacheAbs): | ||
1303 | 155 | __test__ = True | ||
1304 | 156 | |||
1305 | 157 | |||
1306 | 163 | class TestMirrorbootAbs(TestMdadmAbs): | 158 | class TestMirrorbootAbs(TestMdadmAbs): |
1307 | 164 | # alternative config for more complex setup | 159 | # alternative config for more complex setup |
1308 | 165 | conf_file = "examples/tests/mirrorboot.yaml" | 160 | conf_file = "examples/tests/mirrorboot.yaml" |
1309 | @@ -176,15 +171,6 @@ class Centos70TestMirrorboot(centos_relbase.centos70_xenial, | |||
1310 | 176 | __test__ = True | 171 | __test__ = True |
1311 | 177 | 172 | ||
1312 | 178 | 173 | ||
1313 | 179 | class TrustyTestMirrorboot(relbase.trusty, TestMirrorbootAbs): | ||
1314 | 180 | __test__ = True | ||
1315 | 181 | |||
1316 | 182 | |||
1317 | 183 | class TrustyHWEXTestMirrorboot(relbase.trusty_hwe_x, TestMirrorbootAbs): | ||
1318 | 184 | # This tests kernel upgrade in target | ||
1319 | 185 | __test__ = True | ||
1320 | 186 | |||
1321 | 187 | |||
1322 | 188 | class XenialGATestMirrorboot(relbase.xenial_ga, TestMirrorbootAbs): | 174 | class XenialGATestMirrorboot(relbase.xenial_ga, TestMirrorbootAbs): |
1323 | 189 | __test__ = True | 175 | __test__ = True |
1324 | 190 | 176 | ||
1325 | @@ -209,6 +195,10 @@ class DiscoTestMirrorboot(relbase.disco, TestMirrorbootAbs): | |||
1326 | 209 | __test__ = True | 195 | __test__ = True |
1327 | 210 | 196 | ||
1328 | 211 | 197 | ||
1329 | 198 | class EoanTestMirrorboot(relbase.eoan, TestMirrorbootAbs): | ||
1330 | 199 | __test__ = True | ||
1331 | 200 | |||
1332 | 201 | |||
1333 | 212 | class TestMirrorbootPartitionsAbs(TestMdadmAbs): | 202 | class TestMirrorbootPartitionsAbs(TestMdadmAbs): |
1334 | 213 | # alternative config for more complex setup | 203 | # alternative config for more complex setup |
1335 | 214 | conf_file = "examples/tests/mirrorboot-msdos-partition.yaml" | 204 | conf_file = "examples/tests/mirrorboot-msdos-partition.yaml" |
1336 | @@ -224,17 +214,6 @@ class Centos70TestMirrorbootPartitions(centos_relbase.centos70_xenial, | |||
1337 | 224 | __test__ = True | 214 | __test__ = True |
1338 | 225 | 215 | ||
1339 | 226 | 216 | ||
1340 | 227 | class TrustyTestMirrorbootPartitions(relbase.trusty, | ||
1341 | 228 | TestMirrorbootPartitionsAbs): | ||
1342 | 229 | __test__ = True | ||
1343 | 230 | |||
1344 | 231 | |||
1345 | 232 | class TrustyHWEXTestMirrorbootPartitions(relbase.trusty_hwe_x, | ||
1346 | 233 | TestMirrorbootPartitionsAbs): | ||
1347 | 234 | # This tests kernel upgrade in target | ||
1348 | 235 | __test__ = True | ||
1349 | 236 | |||
1350 | 237 | |||
1351 | 238 | class XenialGATestMirrorbootPartitions(relbase.xenial_ga, | 217 | class XenialGATestMirrorbootPartitions(relbase.xenial_ga, |
1352 | 239 | TestMirrorbootPartitionsAbs): | 218 | TestMirrorbootPartitionsAbs): |
1353 | 240 | __test__ = True | 219 | __test__ = True |
1354 | @@ -265,6 +244,11 @@ class DiscoTestMirrorbootPartitions(relbase.disco, | |||
1355 | 265 | __test__ = True | 244 | __test__ = True |
1356 | 266 | 245 | ||
1357 | 267 | 246 | ||
1358 | 247 | class EoanTestMirrorbootPartitions(relbase.eoan, | ||
1359 | 248 | TestMirrorbootPartitionsAbs): | ||
1360 | 249 | __test__ = True | ||
1361 | 250 | |||
1362 | 251 | |||
1363 | 268 | class TestMirrorbootPartitionsUEFIAbs(TestMdadmAbs): | 252 | class TestMirrorbootPartitionsUEFIAbs(TestMdadmAbs): |
1364 | 269 | # alternative config for more complex setup | 253 | # alternative config for more complex setup |
1365 | 270 | conf_file = "examples/tests/mirrorboot-uefi.yaml" | 254 | conf_file = "examples/tests/mirrorboot-uefi.yaml" |
1366 | @@ -285,11 +269,6 @@ class Centos70TestMirrorbootPartitionsUEFI(centos_relbase.centos70_xenial, | |||
1367 | 285 | __test__ = True | 269 | __test__ = True |
1368 | 286 | 270 | ||
1369 | 287 | 271 | ||
1370 | 288 | class TrustyTestMirrorbootPartitionsUEFI(relbase.trusty, | ||
1371 | 289 | TestMirrorbootPartitionsUEFIAbs): | ||
1372 | 290 | __test__ = True | ||
1373 | 291 | |||
1374 | 292 | |||
1375 | 293 | class XenialGATestMirrorbootPartitionsUEFI(relbase.xenial_ga, | 272 | class XenialGATestMirrorbootPartitionsUEFI(relbase.xenial_ga, |
1376 | 294 | TestMirrorbootPartitionsUEFIAbs): | 273 | TestMirrorbootPartitionsUEFIAbs): |
1377 | 295 | __test__ = True | 274 | __test__ = True |
1378 | @@ -320,6 +299,11 @@ class DiscoTestMirrorbootPartitionsUEFI(relbase.disco, | |||
1379 | 320 | __test__ = True | 299 | __test__ = True |
1380 | 321 | 300 | ||
1381 | 322 | 301 | ||
1382 | 302 | class EoanTestMirrorbootPartitionsUEFI(relbase.eoan, | ||
1383 | 303 | TestMirrorbootPartitionsUEFIAbs): | ||
1384 | 304 | __test__ = True | ||
1385 | 305 | |||
1386 | 306 | |||
1387 | 323 | class TestRaid5bootAbs(TestMdadmAbs): | 307 | class TestRaid5bootAbs(TestMdadmAbs): |
1388 | 324 | # alternative config for more complex setup | 308 | # alternative config for more complex setup |
1389 | 325 | conf_file = "examples/tests/raid5boot.yaml" | 309 | conf_file = "examples/tests/raid5boot.yaml" |
1390 | @@ -336,15 +320,6 @@ class Centos70TestRaid5boot(centos_relbase.centos70_xenial, TestRaid5bootAbs): | |||
1391 | 336 | __test__ = True | 320 | __test__ = True |
1392 | 337 | 321 | ||
1393 | 338 | 322 | ||
1394 | 339 | class TrustyTestRaid5boot(relbase.trusty, TestRaid5bootAbs): | ||
1395 | 340 | __test__ = True | ||
1396 | 341 | |||
1397 | 342 | |||
1398 | 343 | class TrustyHWEXTestRaid5boot(relbase.trusty_hwe_x, TestRaid5bootAbs): | ||
1399 | 344 | # This tests kernel upgrade in target | ||
1400 | 345 | __test__ = True | ||
1401 | 346 | |||
1402 | 347 | |||
1403 | 348 | class XenialGATestRaid5boot(relbase.xenial_ga, TestRaid5bootAbs): | 323 | class XenialGATestRaid5boot(relbase.xenial_ga, TestRaid5bootAbs): |
1404 | 349 | __test__ = True | 324 | __test__ = True |
1405 | 350 | 325 | ||
1406 | @@ -369,6 +344,10 @@ class DiscoTestRaid5boot(relbase.disco, TestRaid5bootAbs): | |||
1407 | 369 | __test__ = True | 344 | __test__ = True |
1408 | 370 | 345 | ||
1409 | 371 | 346 | ||
1410 | 347 | class EoanTestRaid5boot(relbase.eoan, TestRaid5bootAbs): | ||
1411 | 348 | __test__ = True | ||
1412 | 349 | |||
1413 | 350 | |||
1414 | 372 | class TestRaid6bootAbs(TestMdadmAbs): | 351 | class TestRaid6bootAbs(TestMdadmAbs): |
1415 | 373 | # alternative config for more complex setup | 352 | # alternative config for more complex setup |
1416 | 374 | conf_file = "examples/tests/raid6boot.yaml" | 353 | conf_file = "examples/tests/raid6boot.yaml" |
1417 | @@ -401,14 +380,6 @@ class Centos70TestRaid6boot(centos_relbase.centos70_xenial, TestRaid6bootAbs): | |||
1418 | 401 | __test__ = True | 380 | __test__ = True |
1419 | 402 | 381 | ||
1420 | 403 | 382 | ||
1421 | 404 | class TrustyTestRaid6boot(relbase.trusty, TestRaid6bootAbs): | ||
1422 | 405 | __test__ = True | ||
1423 | 406 | |||
1424 | 407 | |||
1425 | 408 | class TrustyHWEXTestRaid6boot(relbase.trusty_hwe_x, TestRaid6bootAbs): | ||
1426 | 409 | __test__ = True | ||
1427 | 410 | |||
1428 | 411 | |||
1429 | 412 | class XenialGATestRaid6boot(relbase.xenial_ga, TestRaid6bootAbs): | 383 | class XenialGATestRaid6boot(relbase.xenial_ga, TestRaid6bootAbs): |
1430 | 413 | __test__ = True | 384 | __test__ = True |
1431 | 414 | 385 | ||
1432 | @@ -433,6 +404,10 @@ class DiscoTestRaid6boot(relbase.disco, TestRaid6bootAbs): | |||
1433 | 433 | __test__ = True | 404 | __test__ = True |
1434 | 434 | 405 | ||
1435 | 435 | 406 | ||
1436 | 407 | class EoanTestRaid6boot(relbase.eoan, TestRaid6bootAbs): | ||
1437 | 408 | __test__ = True | ||
1438 | 409 | |||
1439 | 410 | |||
1440 | 436 | class TestRaid10bootAbs(TestMdadmAbs): | 411 | class TestRaid10bootAbs(TestMdadmAbs): |
1441 | 437 | # alternative config for more complex setup | 412 | # alternative config for more complex setup |
1442 | 438 | conf_file = "examples/tests/raid10boot.yaml" | 413 | conf_file = "examples/tests/raid10boot.yaml" |
1443 | @@ -451,14 +426,6 @@ class Centos70TestRaid10boot(centos_relbase.centos70_xenial, | |||
1444 | 451 | __test__ = True | 426 | __test__ = True |
1445 | 452 | 427 | ||
1446 | 453 | 428 | ||
1447 | 454 | class TrustyTestRaid10boot(relbase.trusty, TestRaid10bootAbs): | ||
1448 | 455 | __test__ = True | ||
1449 | 456 | |||
1450 | 457 | |||
1451 | 458 | class TrustyHWEXTestRaid10boot(relbase.trusty_hwe_x, TestRaid10bootAbs): | ||
1452 | 459 | __test__ = True | ||
1453 | 460 | |||
1454 | 461 | |||
1455 | 462 | class XenialGATestRaid10boot(relbase.xenial_ga, TestRaid10bootAbs): | 429 | class XenialGATestRaid10boot(relbase.xenial_ga, TestRaid10bootAbs): |
1456 | 463 | __test__ = True | 430 | __test__ = True |
1457 | 464 | 431 | ||
1458 | @@ -483,6 +450,10 @@ class DiscoTestRaid10boot(relbase.disco, TestRaid10bootAbs): | |||
1459 | 483 | __test__ = True | 450 | __test__ = True |
1460 | 484 | 451 | ||
1461 | 485 | 452 | ||
1462 | 453 | class EoanTestRaid10boot(relbase.eoan, TestRaid10bootAbs): | ||
1463 | 454 | __test__ = True | ||
1464 | 455 | |||
1465 | 456 | |||
1466 | 486 | class TestAllindataAbs(TestMdadmAbs): | 457 | class TestAllindataAbs(TestMdadmAbs): |
1467 | 487 | # more complex, needs more time | 458 | # more complex, needs more time |
1468 | 488 | # alternative config for more complex setup | 459 | # alternative config for more complex setup |
1469 | @@ -559,14 +530,6 @@ class TestAllindataAbs(TestMdadmAbs): | |||
1470 | 559 | self.check_file_regex("xfs_info", r"^meta-data=/dev/mapper/dmcrypt0") | 530 | self.check_file_regex("xfs_info", r"^meta-data=/dev/mapper/dmcrypt0") |
1471 | 560 | 531 | ||
1472 | 561 | 532 | ||
1473 | 562 | class TrustyTestAllindata(relbase.trusty, TestAllindataAbs): | ||
1474 | 563 | __test__ = False # luks=no does not disable mounting of device | ||
1475 | 564 | |||
1476 | 565 | |||
1477 | 566 | class TrustyHWEXTestAllindata(relbase.trusty_hwe_x, TestAllindataAbs): | ||
1478 | 567 | __test__ = False # lukes=no does not disable mounting of device | ||
1479 | 568 | |||
1480 | 569 | |||
1481 | 570 | class XenialGATestAllindata(relbase.xenial_ga, TestAllindataAbs): | 533 | class XenialGATestAllindata(relbase.xenial_ga, TestAllindataAbs): |
1482 | 571 | __test__ = True | 534 | __test__ = True |
1483 | 572 | 535 | ||
1484 | @@ -587,8 +550,11 @@ class CosmicTestAllindata(relbase.cosmic, TestAllindataAbs): | |||
1485 | 587 | __test__ = True | 550 | __test__ = True |
1486 | 588 | 551 | ||
1487 | 589 | 552 | ||
1488 | 590 | @VMBaseClass.skip_by_date("1818876", fixby="2019-04-22", install=False) | ||
1489 | 591 | class DiscoTestAllindata(relbase.disco, TestAllindataAbs): | 553 | class DiscoTestAllindata(relbase.disco, TestAllindataAbs): |
1490 | 592 | __test__ = True | 554 | __test__ = True |
1491 | 593 | 555 | ||
1492 | 556 | |||
1493 | 557 | class EoanTestAllindata(relbase.eoan, TestAllindataAbs): | ||
1494 | 558 | __test__ = True | ||
1495 | 559 | |||
1496 | 594 | # vi: ts=4 expandtab syntax=python | 560 | # vi: ts=4 expandtab syntax=python |
1497 | diff --git a/tests/vmtests/test_mdadm_iscsi.py b/tests/vmtests/test_mdadm_iscsi.py | |||
1498 | index b43855d..fa8d88f 100644 | |||
1499 | --- a/tests/vmtests/test_mdadm_iscsi.py | |||
1500 | +++ b/tests/vmtests/test_mdadm_iscsi.py | |||
1501 | @@ -34,10 +34,6 @@ class Centos70TestIscsiMdadm(centos_relbase.centos70_xenial, | |||
1502 | 34 | __test__ = True | 34 | __test__ = True |
1503 | 35 | 35 | ||
1504 | 36 | 36 | ||
1505 | 37 | class TrustyTestIscsiMdadm(relbase.trusty, TestMdadmIscsiAbs): | ||
1506 | 38 | __test__ = True | ||
1507 | 39 | |||
1508 | 40 | |||
1509 | 41 | class XenialGATestIscsiMdadm(relbase.xenial_ga, TestMdadmIscsiAbs): | 37 | class XenialGATestIscsiMdadm(relbase.xenial_ga, TestMdadmIscsiAbs): |
1510 | 42 | __test__ = True | 38 | __test__ = True |
1511 | 43 | 39 | ||
1512 | @@ -61,4 +57,8 @@ class CosmicTestIscsiMdadm(relbase.cosmic, TestMdadmIscsiAbs): | |||
1513 | 61 | class DiscoTestIscsiMdadm(relbase.disco, TestMdadmIscsiAbs): | 57 | class DiscoTestIscsiMdadm(relbase.disco, TestMdadmIscsiAbs): |
1514 | 62 | __test__ = True | 58 | __test__ = True |
1515 | 63 | 59 | ||
1516 | 60 | |||
1517 | 61 | class EoanTestIscsiMdadm(relbase.eoan, TestMdadmIscsiAbs): | ||
1518 | 62 | __test__ = True | ||
1519 | 63 | |||
1520 | 64 | # vi: ts=4 expandtab syntax=python | 64 | # vi: ts=4 expandtab syntax=python |
1521 | diff --git a/tests/vmtests/test_multipath.py b/tests/vmtests/test_multipath.py | |||
1522 | index a22bc0f..7711198 100644 | |||
1523 | --- a/tests/vmtests/test_multipath.py | |||
1524 | +++ b/tests/vmtests/test_multipath.py | |||
1525 | @@ -64,15 +64,6 @@ class Centos70TestMultipathBasic(centos_relbase.centos70_xenial, | |||
1526 | 64 | __test__ = True | 64 | __test__ = True |
1527 | 65 | 65 | ||
1528 | 66 | 66 | ||
1529 | 67 | class TrustyTestMultipathBasic(relbase.trusty, TestMultipathBasicAbs): | ||
1530 | 68 | __test__ = True | ||
1531 | 69 | |||
1532 | 70 | |||
1533 | 71 | class TrustyHWEXTestMultipathBasic(relbase.trusty_hwe_x, | ||
1534 | 72 | TestMultipathBasicAbs): | ||
1535 | 73 | __test__ = True | ||
1536 | 74 | |||
1537 | 75 | |||
1538 | 76 | class XenialGATestMultipathBasic(relbase.xenial_ga, TestMultipathBasicAbs): | 67 | class XenialGATestMultipathBasic(relbase.xenial_ga, TestMultipathBasicAbs): |
1539 | 77 | __test__ = True | 68 | __test__ = True |
1540 | 78 | 69 | ||
1541 | @@ -93,7 +84,13 @@ class CosmicTestMultipathBasic(relbase.cosmic, TestMultipathBasicAbs): | |||
1542 | 93 | __test__ = True | 84 | __test__ = True |
1543 | 94 | 85 | ||
1544 | 95 | 86 | ||
1545 | 87 | @VMBaseClass.skip_by_date("1813228", fixby="2019-06-02", install=False) | ||
1546 | 96 | class DiscoTestMultipathBasic(relbase.disco, TestMultipathBasicAbs): | 88 | class DiscoTestMultipathBasic(relbase.disco, TestMultipathBasicAbs): |
1547 | 97 | __test__ = True | 89 | __test__ = True |
1548 | 98 | 90 | ||
1549 | 91 | |||
1550 | 92 | @VMBaseClass.skip_by_date("1813228", fixby="2019-06-02", install=False) | ||
1551 | 93 | class EoanTestMultipathBasic(relbase.eoan, TestMultipathBasicAbs): | ||
1552 | 94 | __test__ = True | ||
1553 | 95 | |||
1554 | 99 | # vi: ts=4 expandtab syntax=python | 96 | # vi: ts=4 expandtab syntax=python |
1555 | diff --git a/tests/vmtests/test_network.py b/tests/vmtests/test_network.py | |||
1556 | index 1b0e41c..2c3b73c 100644 | |||
1557 | --- a/tests/vmtests/test_network.py | |||
1558 | +++ b/tests/vmtests/test_network.py | |||
1559 | @@ -440,29 +440,6 @@ class CentosTestNetworkBasicAbs(TestNetworkBaseTestsAbs): | |||
1560 | 440 | pass | 440 | pass |
1561 | 441 | 441 | ||
1562 | 442 | 442 | ||
1563 | 443 | class TrustyTestNetworkBasic(relbase.trusty, TestNetworkBasicAbs): | ||
1564 | 444 | __test__ = True | ||
1565 | 445 | |||
1566 | 446 | |||
1567 | 447 | class TrustyHWEUTestNetworkBasic(relbase.trusty_hwe_u, TrustyTestNetworkBasic): | ||
1568 | 448 | # Working, off by default to safe test suite runtime, covered by bonding | ||
1569 | 449 | __test__ = False | ||
1570 | 450 | |||
1571 | 451 | |||
1572 | 452 | class TrustyHWEVTestNetworkBasic(relbase.trusty_hwe_v, TrustyTestNetworkBasic): | ||
1573 | 453 | # Working, off by default to safe test suite runtime, covered by bonding | ||
1574 | 454 | __test__ = False | ||
1575 | 455 | |||
1576 | 456 | |||
1577 | 457 | class TrustyHWEWTestNetworkBasic(relbase.trusty_hwe_w, TrustyTestNetworkBasic): | ||
1578 | 458 | # Working, off by default to safe test suite runtime, covered by bonding | ||
1579 | 459 | __test__ = False | ||
1580 | 460 | |||
1581 | 461 | |||
1582 | 462 | class TrustyHWEXTestNetworkBasic(relbase.trusty_hwe_x, TrustyTestNetworkBasic): | ||
1583 | 463 | __test__ = True | ||
1584 | 464 | |||
1585 | 465 | |||
1586 | 466 | class XenialTestNetworkBasic(relbase.xenial, TestNetworkBasicAbs): | 443 | class XenialTestNetworkBasic(relbase.xenial, TestNetworkBasicAbs): |
1587 | 467 | __test__ = True | 444 | __test__ = True |
1588 | 468 | 445 | ||
1589 | @@ -479,6 +456,10 @@ class DiscoTestNetworkBasic(relbase.disco, TestNetworkBasicAbs): | |||
1590 | 479 | __test__ = True | 456 | __test__ = True |
1591 | 480 | 457 | ||
1592 | 481 | 458 | ||
1593 | 459 | class EoanTestNetworkBasic(relbase.eoan, TestNetworkBasicAbs): | ||
1594 | 460 | __test__ = True | ||
1595 | 461 | |||
1596 | 462 | |||
1597 | 482 | class Centos66TestNetworkBasic(centos_relbase.centos66_xenial, | 463 | class Centos66TestNetworkBasic(centos_relbase.centos66_xenial, |
1598 | 483 | CentosTestNetworkBasicAbs): | 464 | CentosTestNetworkBasicAbs): |
1599 | 484 | __test__ = True | 465 | __test__ = True |
1600 | diff --git a/tests/vmtests/test_network_alias.py b/tests/vmtests/test_network_alias.py | |||
1601 | index b2c4ed7..fb4fb2c 100644 | |||
1602 | --- a/tests/vmtests/test_network_alias.py | |||
1603 | +++ b/tests/vmtests/test_network_alias.py | |||
1604 | @@ -44,29 +44,6 @@ class Centos70TestNetworkAlias(centos_relbase.centos70_xenial, | |||
1605 | 44 | __test__ = True | 44 | __test__ = True |
1606 | 45 | 45 | ||
1607 | 46 | 46 | ||
1608 | 47 | class TrustyTestNetworkAlias(relbase.trusty, TestNetworkAliasAbs): | ||
1609 | 48 | __test__ = True | ||
1610 | 49 | |||
1611 | 50 | |||
1612 | 51 | class TrustyHWEUTestNetworkAlias(relbase.trusty_hwe_u, TrustyTestNetworkAlias): | ||
1613 | 52 | # Working, off by default to safe test suite runtime, covered by bonding | ||
1614 | 53 | __test__ = False | ||
1615 | 54 | |||
1616 | 55 | |||
1617 | 56 | class TrustyHWEVTestNetworkAlias(relbase.trusty_hwe_v, TrustyTestNetworkAlias): | ||
1618 | 57 | # Working, off by default to safe test suite runtime, covered by bonding | ||
1619 | 58 | __test__ = False | ||
1620 | 59 | |||
1621 | 60 | |||
1622 | 61 | class TrustyHWEWTestNetworkAlias(relbase.trusty_hwe_w, TrustyTestNetworkAlias): | ||
1623 | 62 | # Working, off by default to safe test suite runtime, covered by bonding | ||
1624 | 63 | __test__ = False | ||
1625 | 64 | |||
1626 | 65 | |||
1627 | 66 | class TrustyHWEXTestNetworkAlias(relbase.trusty_hwe_x, TrustyTestNetworkAlias): | ||
1628 | 67 | __test__ = True | ||
1629 | 68 | |||
1630 | 69 | |||
1631 | 70 | class XenialTestNetworkAlias(relbase.xenial, TestNetworkAliasAbs): | 47 | class XenialTestNetworkAlias(relbase.xenial, TestNetworkAliasAbs): |
1632 | 71 | __test__ = True | 48 | __test__ = True |
1633 | 72 | 49 | ||
1634 | @@ -82,4 +59,8 @@ class CosmicTestNetworkAlias(relbase.cosmic, TestNetworkAliasAbs): | |||
1635 | 82 | class DiscoTestNetworkAlias(relbase.disco, TestNetworkAliasAbs): | 59 | class DiscoTestNetworkAlias(relbase.disco, TestNetworkAliasAbs): |
1636 | 83 | __test__ = True | 60 | __test__ = True |
1637 | 84 | 61 | ||
1638 | 62 | |||
1639 | 63 | class EoanTestNetworkAlias(relbase.eoan, TestNetworkAliasAbs): | ||
1640 | 64 | __test__ = True | ||
1641 | 65 | |||
1642 | 85 | # vi: ts=4 expandtab syntax=python | 66 | # vi: ts=4 expandtab syntax=python |
1643 | diff --git a/tests/vmtests/test_network_bonding.py b/tests/vmtests/test_network_bonding.py | |||
1644 | index fe3abe9..a66591a 100644 | |||
1645 | --- a/tests/vmtests/test_network_bonding.py | |||
1646 | +++ b/tests/vmtests/test_network_bonding.py | |||
1647 | @@ -49,26 +49,6 @@ class CentosTestNetworkBondingAbs(TestNetworkBondingAbs): | |||
1648 | 49 | pass | 49 | pass |
1649 | 50 | 50 | ||
1650 | 51 | 51 | ||
1651 | 52 | class TrustyTestBonding(relbase.trusty, TestNetworkBondingAbs): | ||
1652 | 53 | __test__ = False | ||
1653 | 54 | |||
1654 | 55 | |||
1655 | 56 | class TrustyHWEVTestBonding(relbase.trusty_hwe_v, TrustyTestBonding): | ||
1656 | 57 | # Working, but off by default to save test suite runtime | ||
1657 | 58 | # oldest/newest HWE-* covered above/below | ||
1658 | 59 | __test__ = False | ||
1659 | 60 | |||
1660 | 61 | |||
1661 | 62 | class TrustyHWEWTestBonding(relbase.trusty_hwe_w, TrustyTestBonding): | ||
1662 | 63 | # Working, but off by default to save test suite runtime | ||
1663 | 64 | # oldest/newest HWE-* covered above/below | ||
1664 | 65 | __test__ = False | ||
1665 | 66 | |||
1666 | 67 | |||
1667 | 68 | class TrustyHWEXTestBonding(relbase.trusty_hwe_x, TrustyTestBonding): | ||
1668 | 69 | __test__ = True | ||
1669 | 70 | |||
1670 | 71 | |||
1671 | 72 | class XenialTestBonding(relbase.xenial, TestNetworkBondingAbs): | 52 | class XenialTestBonding(relbase.xenial, TestNetworkBondingAbs): |
1672 | 73 | __test__ = True | 53 | __test__ = True |
1673 | 74 | 54 | ||
1674 | @@ -85,6 +65,10 @@ class DiscoTestBonding(relbase.disco, TestNetworkBondingAbs): | |||
1675 | 85 | __test__ = True | 65 | __test__ = True |
1676 | 86 | 66 | ||
1677 | 87 | 67 | ||
1678 | 68 | class EoanTestBonding(relbase.eoan, TestNetworkBondingAbs): | ||
1679 | 69 | __test__ = True | ||
1680 | 70 | |||
1681 | 71 | |||
1682 | 88 | class Centos66TestNetworkBonding(centos_relbase.centos66_xenial, | 72 | class Centos66TestNetworkBonding(centos_relbase.centos66_xenial, |
1683 | 89 | CentosTestNetworkBondingAbs): | 73 | CentosTestNetworkBondingAbs): |
1684 | 90 | __test__ = True | 74 | __test__ = True |
1685 | diff --git a/tests/vmtests/test_network_bridging.py b/tests/vmtests/test_network_bridging.py | |||
1686 | index 8576d60..b3ec287 100644 | |||
1687 | --- a/tests/vmtests/test_network_bridging.py | |||
1688 | +++ b/tests/vmtests/test_network_bridging.py | |||
1689 | @@ -243,4 +243,8 @@ class CosmicTestBridging(relbase.cosmic, TestBridgeNetworkAbs): | |||
1690 | 243 | class DiscoTestBridging(relbase.disco, TestBridgeNetworkAbs): | 243 | class DiscoTestBridging(relbase.disco, TestBridgeNetworkAbs): |
1691 | 244 | __test__ = True | 244 | __test__ = True |
1692 | 245 | 245 | ||
1693 | 246 | |||
1694 | 247 | class EoanTestBridging(relbase.eoan, TestBridgeNetworkAbs): | ||
1695 | 248 | __test__ = True | ||
1696 | 249 | |||
1697 | 246 | # vi: ts=4 expandtab syntax=python | 250 | # vi: ts=4 expandtab syntax=python |
1698 | diff --git a/tests/vmtests/test_network_enisource.py b/tests/vmtests/test_network_enisource.py | |||
1699 | index 48baecf..476275c 100644 | |||
1700 | --- a/tests/vmtests/test_network_enisource.py | |||
1701 | +++ b/tests/vmtests/test_network_enisource.py | |||
1702 | @@ -82,15 +82,6 @@ class TestNetworkENISource(TestNetworkBaseTestsAbs): | |||
1703 | 82 | self.assertEqual(_nocidr(expected_address), _nocidr(actual_address)) | 82 | self.assertEqual(_nocidr(expected_address), _nocidr(actual_address)) |
1704 | 83 | 83 | ||
1705 | 84 | 84 | ||
1706 | 85 | class TrustyTestNetworkENISource(relbase.trusty, TestNetworkENISource): | ||
1707 | 86 | __test__ = True | ||
1708 | 87 | |||
1709 | 88 | |||
1710 | 89 | class TrustyHWEXTestNetworkENISource(relbase.trusty_hwe_x, | ||
1711 | 90 | TestNetworkENISource): | ||
1712 | 91 | __test__ = True | ||
1713 | 92 | |||
1714 | 93 | |||
1715 | 94 | class XenialTestNetworkENISource(relbase.xenial, TestNetworkENISource): | 85 | class XenialTestNetworkENISource(relbase.xenial, TestNetworkENISource): |
1716 | 95 | __test__ = True | 86 | __test__ = True |
1717 | 96 | 87 | ||
1718 | diff --git a/tests/vmtests/test_network_ipv6.py b/tests/vmtests/test_network_ipv6.py | |||
1719 | index 42adb20..9b6acc9 100644 | |||
1720 | --- a/tests/vmtests/test_network_ipv6.py | |||
1721 | +++ b/tests/vmtests/test_network_ipv6.py | |||
1722 | @@ -45,25 +45,6 @@ class CentosTestNetworkIPV6Abs(TestNetworkIPV6Abs): | |||
1723 | 45 | pass | 45 | pass |
1724 | 46 | 46 | ||
1725 | 47 | 47 | ||
1726 | 48 | class TrustyTestNetworkIPV6(relbase.trusty, TestNetworkIPV6Abs): | ||
1727 | 49 | __test__ = True | ||
1728 | 50 | |||
1729 | 51 | |||
1730 | 52 | class TrustyHWEVTestNetworkIPV6(relbase.trusty_hwe_v, TrustyTestNetworkIPV6): | ||
1731 | 53 | # Working, off by default to safe test suite runtime, covered by bonding | ||
1732 | 54 | __test__ = False | ||
1733 | 55 | |||
1734 | 56 | |||
1735 | 57 | class TrustyHWEWTestNetworkIPV6(relbase.trusty_hwe_w, TrustyTestNetworkIPV6): | ||
1736 | 58 | # Working, off by default to safe test suite runtime, covered by bonding | ||
1737 | 59 | __test__ = False | ||
1738 | 60 | |||
1739 | 61 | |||
1740 | 62 | class TrustyHWEXTestNetworkIPV6(relbase.trusty_hwe_x, TrustyTestNetworkIPV6): | ||
1741 | 63 | # Working, off by default to safe test suite runtime, covered by bonding | ||
1742 | 64 | __test__ = False | ||
1743 | 65 | |||
1744 | 66 | |||
1745 | 67 | class XenialTestNetworkIPV6(relbase.xenial, TestNetworkIPV6Abs): | 48 | class XenialTestNetworkIPV6(relbase.xenial, TestNetworkIPV6Abs): |
1746 | 68 | __test__ = True | 49 | __test__ = True |
1747 | 69 | 50 | ||
1748 | @@ -80,6 +61,10 @@ class DiscoTestNetworkIPV6(relbase.disco, TestNetworkIPV6Abs): | |||
1749 | 80 | __test__ = True | 61 | __test__ = True |
1750 | 81 | 62 | ||
1751 | 82 | 63 | ||
1752 | 64 | class EoanTestNetworkIPV6(relbase.eoan, TestNetworkIPV6Abs): | ||
1753 | 65 | __test__ = True | ||
1754 | 66 | |||
1755 | 67 | |||
1756 | 83 | class Centos66TestNetworkIPV6(centos_relbase.centos66_xenial, | 68 | class Centos66TestNetworkIPV6(centos_relbase.centos66_xenial, |
1757 | 84 | CentosTestNetworkIPV6Abs): | 69 | CentosTestNetworkIPV6Abs): |
1758 | 85 | __test__ = True | 70 | __test__ = True |
1759 | diff --git a/tests/vmtests/test_network_ipv6_enisource.py b/tests/vmtests/test_network_ipv6_enisource.py | |||
1760 | index 0c92039..bd03bdd 100644 | |||
1761 | --- a/tests/vmtests/test_network_ipv6_enisource.py | |||
1762 | +++ b/tests/vmtests/test_network_ipv6_enisource.py | |||
1763 | @@ -14,15 +14,6 @@ class TestNetworkIPV6ENISource(TestNetworkENISource): | |||
1764 | 14 | pass | 14 | pass |
1765 | 15 | 15 | ||
1766 | 16 | 16 | ||
1767 | 17 | class TrustyTestNetworkIPV6ENISource(relbase.trusty, TestNetworkIPV6ENISource): | ||
1768 | 18 | __test__ = True | ||
1769 | 19 | |||
1770 | 20 | |||
1771 | 21 | class TrustyHWEXTestNetworkIPV6ENISource(relbase.trusty_hwe_x, | ||
1772 | 22 | TestNetworkIPV6ENISource): | ||
1773 | 23 | __test__ = True | ||
1774 | 24 | |||
1775 | 25 | |||
1776 | 26 | class XenialTestNetworkIPV6ENISource(relbase.xenial, TestNetworkIPV6ENISource): | 17 | class XenialTestNetworkIPV6ENISource(relbase.xenial, TestNetworkIPV6ENISource): |
1777 | 27 | __test__ = True | 18 | __test__ = True |
1778 | 28 | 19 | ||
1779 | diff --git a/tests/vmtests/test_network_ipv6_static.py b/tests/vmtests/test_network_ipv6_static.py | |||
1780 | index bbd90c9..b79b9e4 100644 | |||
1781 | --- a/tests/vmtests/test_network_ipv6_static.py | |||
1782 | +++ b/tests/vmtests/test_network_ipv6_static.py | |||
1783 | @@ -15,33 +15,6 @@ class CentosTestNetworkIPV6StaticAbs(CentosTestNetworkStaticAbs): | |||
1784 | 15 | conf_file = "examples/tests/basic_network_static_ipv6.yaml" | 15 | conf_file = "examples/tests/basic_network_static_ipv6.yaml" |
1785 | 16 | 16 | ||
1786 | 17 | 17 | ||
1787 | 18 | class TrustyTestNetworkIPV6Static(relbase.trusty, TestNetworkIPV6StaticAbs): | ||
1788 | 19 | __test__ = True | ||
1789 | 20 | |||
1790 | 21 | |||
1791 | 22 | class TrustyHWEUTestNetworkIPV6Static(relbase.trusty_hwe_u, | ||
1792 | 23 | TestNetworkIPV6StaticAbs): | ||
1793 | 24 | # unsupported kernel, 2016-08 | ||
1794 | 25 | __test__ = False | ||
1795 | 26 | |||
1796 | 27 | |||
1797 | 28 | class TrustyHWEVTestNetworkIPV6Static(relbase.trusty_hwe_v, | ||
1798 | 29 | TestNetworkIPV6StaticAbs): | ||
1799 | 30 | # unsupported kernel, 2016-08 | ||
1800 | 31 | __test__ = False | ||
1801 | 32 | |||
1802 | 33 | |||
1803 | 34 | class TrustyHWEWTestNetworkIPV6Static(relbase.trusty_hwe_w, | ||
1804 | 35 | TestNetworkIPV6StaticAbs): | ||
1805 | 36 | # unsupported kernel, 2016-08 | ||
1806 | 37 | __test__ = False | ||
1807 | 38 | |||
1808 | 39 | |||
1809 | 40 | class TrustyHWEXTestNetworkIPV6Static(relbase.trusty_hwe_x, | ||
1810 | 41 | TestNetworkIPV6StaticAbs): | ||
1811 | 42 | __test__ = True | ||
1812 | 43 | |||
1813 | 44 | |||
1814 | 45 | class XenialTestNetworkIPV6Static(relbase.xenial, TestNetworkIPV6StaticAbs): | 18 | class XenialTestNetworkIPV6Static(relbase.xenial, TestNetworkIPV6StaticAbs): |
1815 | 46 | __test__ = True | 19 | __test__ = True |
1816 | 47 | 20 | ||
1817 | @@ -58,6 +31,10 @@ class DiscoTestNetworkIPV6Static(relbase.disco, TestNetworkIPV6StaticAbs): | |||
1818 | 58 | __test__ = True | 31 | __test__ = True |
1819 | 59 | 32 | ||
1820 | 60 | 33 | ||
1821 | 34 | class EoanTestNetworkIPV6Static(relbase.eoan, TestNetworkIPV6StaticAbs): | ||
1822 | 35 | __test__ = True | ||
1823 | 36 | |||
1824 | 37 | |||
1825 | 61 | class Centos66TestNetworkIPV6Static(centos_relbase.centos66_xenial, | 38 | class Centos66TestNetworkIPV6Static(centos_relbase.centos66_xenial, |
1826 | 62 | CentosTestNetworkIPV6StaticAbs): | 39 | CentosTestNetworkIPV6StaticAbs): |
1827 | 63 | __test__ = True | 40 | __test__ = True |
1828 | diff --git a/tests/vmtests/test_network_ipv6_vlan.py b/tests/vmtests/test_network_ipv6_vlan.py | |||
1829 | index 7401d2c..138ea6a 100644 | |||
1830 | --- a/tests/vmtests/test_network_ipv6_vlan.py | |||
1831 | +++ b/tests/vmtests/test_network_ipv6_vlan.py | |||
1832 | @@ -14,15 +14,6 @@ class CentosTestNetworkIPV6VlanAbs(CentosTestNetworkVlanAbs): | |||
1833 | 14 | conf_file = "examples/tests/vlan_network_ipv6.yaml" | 14 | conf_file = "examples/tests/vlan_network_ipv6.yaml" |
1834 | 15 | 15 | ||
1835 | 16 | 16 | ||
1836 | 17 | class TrustyTestNetworkIPV6Vlan(relbase.trusty, TestNetworkIPV6VlanAbs): | ||
1837 | 18 | __test__ = True | ||
1838 | 19 | |||
1839 | 20 | |||
1840 | 21 | class TrustyHWEXTestNetworkIPV6Vlan(relbase.trusty_hwe_x, | ||
1841 | 22 | TestNetworkIPV6VlanAbs): | ||
1842 | 23 | __test__ = True | ||
1843 | 24 | |||
1844 | 25 | |||
1845 | 26 | class XenialTestNetworkIPV6Vlan(relbase.xenial, TestNetworkIPV6VlanAbs): | 17 | class XenialTestNetworkIPV6Vlan(relbase.xenial, TestNetworkIPV6VlanAbs): |
1846 | 27 | __test__ = True | 18 | __test__ = True |
1847 | 28 | 19 | ||
1848 | @@ -39,6 +30,10 @@ class DiscoTestNetworkIPV6Vlan(relbase.disco, TestNetworkIPV6VlanAbs): | |||
1849 | 39 | __test__ = True | 30 | __test__ = True |
1850 | 40 | 31 | ||
1851 | 41 | 32 | ||
1852 | 33 | class EoanTestNetworkIPV6Vlan(relbase.eoan, TestNetworkIPV6VlanAbs): | ||
1853 | 34 | __test__ = True | ||
1854 | 35 | |||
1855 | 36 | |||
1856 | 42 | class Centos66TestNetworkIPV6Vlan(centos_relbase.centos66_xenial, | 37 | class Centos66TestNetworkIPV6Vlan(centos_relbase.centos66_xenial, |
1857 | 43 | CentosTestNetworkIPV6VlanAbs): | 38 | CentosTestNetworkIPV6VlanAbs): |
1858 | 44 | __test__ = True | 39 | __test__ = True |
1859 | diff --git a/tests/vmtests/test_network_mtu.py b/tests/vmtests/test_network_mtu.py | |||
1860 | index affa6aa..30cc2c8 100644 | |||
1861 | --- a/tests/vmtests/test_network_mtu.py | |||
1862 | +++ b/tests/vmtests/test_network_mtu.py | |||
1863 | @@ -161,54 +161,30 @@ class CentosTestNetworkMtuAbs(TestNetworkMtuAbs): | |||
1864 | 161 | pass | 161 | pass |
1865 | 162 | 162 | ||
1866 | 163 | 163 | ||
1867 | 164 | class TrustyTestNetworkMtu(relbase.trusty, TestNetworkMtuAbs): | ||
1868 | 165 | __test__ = True | ||
1869 | 166 | |||
1870 | 167 | # FIXME: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=809714 | ||
1871 | 168 | # fixed in newer ifupdown than is in trusty | ||
1872 | 169 | def test_ipv6_mtu_smaller_than_ipv4_non_default(self): | ||
1873 | 170 | # trusty ifupdown uses device mtu to change v6 mtu | ||
1874 | 171 | pass | ||
1875 | 172 | |||
1876 | 173 | |||
1877 | 174 | class TrustyHWEUTestNetworkMtu(relbase.trusty_hwe_u, TrustyTestNetworkMtu): | ||
1878 | 175 | # unsupported kernel, 2016-08 | ||
1879 | 176 | __test__ = False | ||
1880 | 177 | |||
1881 | 178 | |||
1882 | 179 | class TrustyHWEVTestNetworkMtu(relbase.trusty_hwe_v, TrustyTestNetworkMtu): | ||
1883 | 180 | # unsupported kernel, 2016-08 | ||
1884 | 181 | __test__ = False | ||
1885 | 182 | |||
1886 | 183 | |||
1887 | 184 | class TrustyHWEWTestNetworkMtu(relbase.trusty_hwe_w, TrustyTestNetworkMtu): | ||
1888 | 185 | # unsupported kernel, 2016-08 | ||
1889 | 186 | __test__ = False | ||
1890 | 187 | |||
1891 | 188 | |||
1892 | 189 | class TrustyHWEXTestNetworkMtu(relbase.trusty_hwe_x, TrustyTestNetworkMtu): | ||
1893 | 190 | __test__ = True | ||
1894 | 191 | |||
1895 | 192 | |||
1896 | 193 | class TestNetworkMtu(relbase.xenial, TestNetworkMtuAbs): | 164 | class TestNetworkMtu(relbase.xenial, TestNetworkMtuAbs): |
1897 | 194 | __test__ = True | 165 | __test__ = True |
1898 | 195 | 166 | ||
1899 | 196 | 167 | ||
1901 | 197 | @TestNetworkMtuAbs.skip_by_date("1671951", fixby="2019-05-02") | 168 | @TestNetworkMtuAbs.skip_by_date("1671951", fixby="2019-10-02") |
1902 | 198 | class BionicTestNetworkMtu(relbase.bionic, TestNetworkMtuAbs): | 169 | class BionicTestNetworkMtu(relbase.bionic, TestNetworkMtuAbs): |
1903 | 199 | __test__ = True | 170 | __test__ = True |
1904 | 200 | 171 | ||
1905 | 201 | 172 | ||
1907 | 202 | @TestNetworkMtuAbs.skip_by_date("1671951", fixby="2019-05-02") | 173 | @TestNetworkMtuAbs.skip_by_date("1671951", fixby="2019-10-02") |
1908 | 203 | class CosmicTestNetworkMtu(relbase.cosmic, TestNetworkMtuAbs): | 174 | class CosmicTestNetworkMtu(relbase.cosmic, TestNetworkMtuAbs): |
1909 | 204 | __test__ = True | 175 | __test__ = True |
1910 | 205 | 176 | ||
1911 | 206 | 177 | ||
1913 | 207 | @TestNetworkMtuAbs.skip_by_date("1671951", fixby="2019-05-02") | 178 | @TestNetworkMtuAbs.skip_by_date("1671951", fixby="2019-10-02") |
1914 | 208 | class DiscoTestNetworkMtu(relbase.disco, TestNetworkMtuAbs): | 179 | class DiscoTestNetworkMtu(relbase.disco, TestNetworkMtuAbs): |
1915 | 209 | __test__ = True | 180 | __test__ = True |
1916 | 210 | 181 | ||
1917 | 211 | 182 | ||
1918 | 183 | @TestNetworkMtuAbs.skip_by_date("1671951", fixby="2019-10-02") | ||
1919 | 184 | class EoanTestNetworkMtu(relbase.eoan, TestNetworkMtuAbs): | ||
1920 | 185 | __test__ = True | ||
1921 | 186 | |||
1922 | 187 | |||
1923 | 212 | class Centos66TestNetworkMtu(centos_relbase.centos66_xenial, | 188 | class Centos66TestNetworkMtu(centos_relbase.centos66_xenial, |
1924 | 213 | CentosTestNetworkMtuAbs): | 189 | CentosTestNetworkMtuAbs): |
1925 | 214 | __test__ = True | 190 | __test__ = True |
1926 | diff --git a/tests/vmtests/test_network_static.py b/tests/vmtests/test_network_static.py | |||
1927 | index 6820c33..9706a2d 100644 | |||
1928 | --- a/tests/vmtests/test_network_static.py | |||
1929 | +++ b/tests/vmtests/test_network_static.py | |||
1930 | @@ -20,33 +20,6 @@ class CentosTestNetworkStaticAbs(TestNetworkStaticAbs): | |||
1931 | 20 | pass | 20 | pass |
1932 | 21 | 21 | ||
1933 | 22 | 22 | ||
1934 | 23 | class TrustyTestNetworkStatic(relbase.trusty, TestNetworkStaticAbs): | ||
1935 | 24 | __test__ = True | ||
1936 | 25 | |||
1937 | 26 | |||
1938 | 27 | class TrustyHWEUTestNetworkStatic(relbase.trusty_hwe_u, | ||
1939 | 28 | TrustyTestNetworkStatic): | ||
1940 | 29 | # Working, off by default to safe test suite runtime, covered by bonding | ||
1941 | 30 | __test__ = False | ||
1942 | 31 | |||
1943 | 32 | |||
1944 | 33 | class TrustyHWEVTestNetworkStatic(relbase.trusty_hwe_v, | ||
1945 | 34 | TrustyTestNetworkStatic): | ||
1946 | 35 | # Working, off by default to safe test suite runtime, covered by bonding | ||
1947 | 36 | __test__ = False | ||
1948 | 37 | |||
1949 | 38 | |||
1950 | 39 | class TrustyHWEWTestNetworkStatic(relbase.trusty_hwe_w, | ||
1951 | 40 | TrustyTestNetworkStatic): | ||
1952 | 41 | # Working, off by default to safe test suite runtime, covered by bonding | ||
1953 | 42 | __test__ = False | ||
1954 | 43 | |||
1955 | 44 | |||
1956 | 45 | class TrustyHWEXTestNetworkStatic(relbase.trusty_hwe_x, | ||
1957 | 46 | TrustyTestNetworkStatic): | ||
1958 | 47 | __test__ = True | ||
1959 | 48 | |||
1960 | 49 | |||
1961 | 50 | class XenialTestNetworkStatic(relbase.xenial, TestNetworkStaticAbs): | 23 | class XenialTestNetworkStatic(relbase.xenial, TestNetworkStaticAbs): |
1962 | 51 | __test__ = True | 24 | __test__ = True |
1963 | 52 | 25 | ||
1964 | @@ -63,6 +36,10 @@ class DiscoTestNetworkStatic(relbase.disco, TestNetworkStaticAbs): | |||
1965 | 63 | __test__ = True | 36 | __test__ = True |
1966 | 64 | 37 | ||
1967 | 65 | 38 | ||
1968 | 39 | class EoanTestNetworkStatic(relbase.eoan, TestNetworkStaticAbs): | ||
1969 | 40 | __test__ = True | ||
1970 | 41 | |||
1971 | 42 | |||
1972 | 66 | class Centos66TestNetworkStatic(centos_relbase.centos66_xenial, | 43 | class Centos66TestNetworkStatic(centos_relbase.centos66_xenial, |
1973 | 67 | CentosTestNetworkStaticAbs): | 44 | CentosTestNetworkStaticAbs): |
1974 | 68 | __test__ = True | 45 | __test__ = True |
1975 | diff --git a/tests/vmtests/test_network_static_routes.py b/tests/vmtests/test_network_static_routes.py | |||
1976 | index 405a730..b441bc9 100644 | |||
1977 | --- a/tests/vmtests/test_network_static_routes.py | |||
1978 | +++ b/tests/vmtests/test_network_static_routes.py | |||
1979 | @@ -18,32 +18,6 @@ class CentosTestNetworkStaticRoutesAbs(CentosTestNetworkBasicAbs): | |||
1980 | 18 | conf_file = "examples/tests/network_static_routes.yaml" | 18 | conf_file = "examples/tests/network_static_routes.yaml" |
1981 | 19 | 19 | ||
1982 | 20 | 20 | ||
1983 | 21 | class TrustyTestNetworkStaticRoutes(relbase.trusty, | ||
1984 | 22 | TestNetworkStaticRoutesAbs): | ||
1985 | 23 | __test__ = True | ||
1986 | 24 | |||
1987 | 25 | |||
1988 | 26 | class TrustyHWEUTestNetworkStaticRoutes(relbase.trusty_hwe_u, | ||
1989 | 27 | TrustyTestNetworkStaticRoutes): | ||
1990 | 28 | # Working, off by default to save test suite runtime, covered by | ||
1991 | 29 | # TrustyTestNetworkStaticRoutes | ||
1992 | 30 | __test__ = False | ||
1993 | 31 | |||
1994 | 32 | |||
1995 | 33 | class TrustyHWEVTestNetworkStaticRoutes(relbase.trusty_hwe_v, | ||
1996 | 34 | TrustyTestNetworkStaticRoutes): | ||
1997 | 35 | # Working, off by default to save test suite runtime, covered by | ||
1998 | 36 | # TrustyTestNetworkStaticRoutes | ||
1999 | 37 | __test__ = False | ||
2000 | 38 | |||
2001 | 39 | |||
2002 | 40 | class TrustyHWEWTestNetworkStaticRoutes(relbase.trusty_hwe_w, | ||
2003 | 41 | TrustyTestNetworkStaticRoutes): | ||
2004 | 42 | # Working, off by default to save test suite runtime, covered by | ||
2005 | 43 | # TrustyTestNetworkStaticRoutes | ||
2006 | 44 | __test__ = False | ||
2007 | 45 | |||
2008 | 46 | |||
2009 | 47 | class XenialTestNetworkStaticRoutes(relbase.xenial, | 21 | class XenialTestNetworkStaticRoutes(relbase.xenial, |
2010 | 48 | TestNetworkStaticRoutesAbs): | 22 | TestNetworkStaticRoutesAbs): |
2011 | 49 | __test__ = True | 23 | __test__ = True |
2012 | @@ -64,6 +38,11 @@ class DiscoTestNetworkStaticRoutes(relbase.disco, | |||
2013 | 64 | __test__ = True | 38 | __test__ = True |
2014 | 65 | 39 | ||
2015 | 66 | 40 | ||
2016 | 41 | class EoanTestNetworkStaticRoutes(relbase.eoan, | ||
2017 | 42 | TestNetworkStaticRoutesAbs): | ||
2018 | 43 | __test__ = True | ||
2019 | 44 | |||
2020 | 45 | |||
2021 | 67 | class Centos66TestNetworkStaticRoutes(centos_relbase.centos66_xenial, | 46 | class Centos66TestNetworkStaticRoutes(centos_relbase.centos66_xenial, |
2022 | 68 | CentosTestNetworkStaticRoutesAbs): | 47 | CentosTestNetworkStaticRoutesAbs): |
2023 | 69 | __test__ = False | 48 | __test__ = False |
2024 | diff --git a/tests/vmtests/test_network_vlan.py b/tests/vmtests/test_network_vlan.py | |||
2025 | index 904f8c2..88e3d35 100644 | |||
2026 | --- a/tests/vmtests/test_network_vlan.py | |||
2027 | +++ b/tests/vmtests/test_network_vlan.py | |||
2028 | @@ -68,14 +68,6 @@ class CentosTestNetworkVlanAbs(TestNetworkVlanAbs): | |||
2029 | 68 | pass | 68 | pass |
2030 | 69 | 69 | ||
2031 | 70 | 70 | ||
2032 | 71 | class TrustyTestNetworkVlan(relbase.trusty, TestNetworkVlanAbs): | ||
2033 | 72 | __test__ = True | ||
2034 | 73 | |||
2035 | 74 | |||
2036 | 75 | class TrustyHWEXTestNetworkVlan(relbase.trusty_hwe_x, TestNetworkVlanAbs): | ||
2037 | 76 | __test__ = True | ||
2038 | 77 | |||
2039 | 78 | |||
2040 | 79 | class XenialTestNetworkVlan(relbase.xenial, TestNetworkVlanAbs): | 71 | class XenialTestNetworkVlan(relbase.xenial, TestNetworkVlanAbs): |
2041 | 80 | __test__ = True | 72 | __test__ = True |
2042 | 81 | 73 | ||
2043 | @@ -92,6 +84,10 @@ class DiscoTestNetworkVlan(relbase.disco, TestNetworkVlanAbs): | |||
2044 | 92 | __test__ = True | 84 | __test__ = True |
2045 | 93 | 85 | ||
2046 | 94 | 86 | ||
2047 | 87 | class EoanTestNetworkVlan(relbase.eoan, TestNetworkVlanAbs): | ||
2048 | 88 | __test__ = True | ||
2049 | 89 | |||
2050 | 90 | |||
2051 | 95 | class Centos66TestNetworkVlan(centos_relbase.centos66_xenial, | 91 | class Centos66TestNetworkVlan(centos_relbase.centos66_xenial, |
2052 | 96 | CentosTestNetworkVlanAbs): | 92 | CentosTestNetworkVlanAbs): |
2053 | 97 | __test__ = True | 93 | __test__ = True |
2054 | diff --git a/tests/vmtests/test_nvme.py b/tests/vmtests/test_nvme.py | |||
2055 | index 60d9d86..730057e 100644 | |||
2056 | --- a/tests/vmtests/test_nvme.py | |||
2057 | +++ b/tests/vmtests/test_nvme.py | |||
2058 | @@ -57,14 +57,6 @@ class Centos70TestNvme(centos70_xenial, TestNvmeAbs): | |||
2059 | 57 | __test__ = True | 57 | __test__ = True |
2060 | 58 | 58 | ||
2061 | 59 | 59 | ||
2062 | 60 | class TrustyTestNvme(relbase.trusty, TestNvmeAbs): | ||
2063 | 61 | __test__ = True | ||
2064 | 62 | |||
2065 | 63 | |||
2066 | 64 | class TrustyHWEXTestNvme(relbase.trusty_hwe_x, TestNvmeAbs): | ||
2067 | 65 | __test__ = True | ||
2068 | 66 | |||
2069 | 67 | |||
2070 | 68 | class XenialGATestNvme(relbase.xenial_ga, TestNvmeAbs): | 60 | class XenialGATestNvme(relbase.xenial_ga, TestNvmeAbs): |
2071 | 69 | __test__ = True | 61 | __test__ = True |
2072 | 70 | 62 | ||
2073 | @@ -85,7 +77,11 @@ class CosmicTestNvme(relbase.cosmic, TestNvmeAbs): | |||
2074 | 85 | __test__ = True | 77 | __test__ = True |
2075 | 86 | 78 | ||
2076 | 87 | 79 | ||
2078 | 88 | class DiscoTestNvme(relbase.cosmic, TestNvmeAbs): | 80 | class DiscoTestNvme(relbase.disco, TestNvmeAbs): |
2079 | 81 | __test__ = True | ||
2080 | 82 | |||
2081 | 83 | |||
2082 | 84 | class EoanTestNvme(relbase.eoan, TestNvmeAbs): | ||
2083 | 89 | __test__ = True | 85 | __test__ = True |
2084 | 90 | 86 | ||
2085 | 91 | 87 | ||
2086 | @@ -158,4 +154,8 @@ class CosmicTestNvmeBcache(relbase.cosmic, TestNvmeBcacheAbs): | |||
2087 | 158 | class DiscoTestNvmeBcache(relbase.disco, TestNvmeBcacheAbs): | 154 | class DiscoTestNvmeBcache(relbase.disco, TestNvmeBcacheAbs): |
2088 | 159 | __test__ = True | 155 | __test__ = True |
2089 | 160 | 156 | ||
2090 | 157 | |||
2091 | 158 | class EoanTestNvmeBcache(relbase.eoan, TestNvmeBcacheAbs): | ||
2092 | 159 | __test__ = True | ||
2093 | 160 | |||
2094 | 161 | # vi: ts=4 expandtab syntax=python | 161 | # vi: ts=4 expandtab syntax=python |
2095 | diff --git a/tests/vmtests/test_old_apt_features.py b/tests/vmtests/test_old_apt_features.py | |||
2096 | index ec3765c..a114bf4 100644 | |||
2097 | --- a/tests/vmtests/test_old_apt_features.py | |||
2098 | +++ b/tests/vmtests/test_old_apt_features.py | |||
2099 | @@ -5,12 +5,13 @@ | |||
2100 | 5 | """ | 5 | """ |
2101 | 6 | import re | 6 | import re |
2102 | 7 | import textwrap | 7 | import textwrap |
2104 | 8 | import yaml | 8 | |
2105 | 9 | 9 | ||
2106 | 10 | from . import VMBaseClass | 10 | from . import VMBaseClass |
2107 | 11 | from .releases import base_vm_classes as relbase | 11 | from .releases import base_vm_classes as relbase |
2108 | 12 | 12 | ||
2109 | 13 | from curtin import util | 13 | from curtin import util |
2110 | 14 | from curtin.config import load_config | ||
2111 | 14 | 15 | ||
2112 | 15 | 16 | ||
2113 | 16 | def sources_to_dict(lines): | 17 | def sources_to_dict(lines): |
2114 | @@ -75,7 +76,7 @@ class TestOldAptAbs(VMBaseClass): | |||
2115 | 75 | # For earlier than xenial 'apt_preserve_sources_list' is expected | 76 | # For earlier than xenial 'apt_preserve_sources_list' is expected |
2116 | 76 | self.assertEqual( | 77 | self.assertEqual( |
2117 | 77 | {'apt': {'preserve_sources_list': True}}, | 78 | {'apt': {'preserve_sources_list': True}}, |
2119 | 78 | yaml.load(self.load_collect_file("curtin-preserve-sources.cfg"))) | 79 | load_config(self.collect_path("curtin-preserve-sources.cfg"))) |
2120 | 79 | 80 | ||
2121 | 80 | def test_debconf(self): | 81 | def test_debconf(self): |
2122 | 81 | """test_debconf - Check if debconf is in place""" | 82 | """test_debconf - Check if debconf is in place""" |
2123 | diff --git a/tests/vmtests/test_pollinate_useragent.py b/tests/vmtests/test_pollinate_useragent.py | |||
2124 | index c1c6c36..d9d9d9d 100644 | |||
2125 | --- a/tests/vmtests/test_pollinate_useragent.py | |||
2126 | +++ b/tests/vmtests/test_pollinate_useragent.py | |||
2127 | @@ -53,10 +53,6 @@ class TestPollinateUserAgent(VMBaseClass): | |||
2128 | 53 | self.assertEqual(ua_val, hit.group()) | 53 | self.assertEqual(ua_val, hit.group()) |
2129 | 54 | 54 | ||
2130 | 55 | 55 | ||
2131 | 56 | class TrustyTestPollinateUserAgent(relbase.trusty, TestPollinateUserAgent): | ||
2132 | 57 | __test__ = True | ||
2133 | 58 | |||
2134 | 59 | |||
2135 | 60 | class XenialTestPollinateUserAgent(relbase.xenial, TestPollinateUserAgent): | 56 | class XenialTestPollinateUserAgent(relbase.xenial, TestPollinateUserAgent): |
2136 | 61 | __test__ = True | 57 | __test__ = True |
2137 | 62 | 58 | ||
2138 | @@ -72,4 +68,8 @@ class CosmicTestPollinateUserAgent(relbase.cosmic, TestPollinateUserAgent): | |||
2139 | 72 | class DiscoTestPollinateUserAgent(relbase.disco, TestPollinateUserAgent): | 68 | class DiscoTestPollinateUserAgent(relbase.disco, TestPollinateUserAgent): |
2140 | 73 | __test__ = True | 69 | __test__ = True |
2141 | 74 | 70 | ||
2142 | 71 | |||
2143 | 72 | class EoanTestPollinateUserAgent(relbase.eoan, TestPollinateUserAgent): | ||
2144 | 73 | __test__ = True | ||
2145 | 74 | |||
2146 | 75 | # vi: ts=4 expandtab syntax=python | 75 | # vi: ts=4 expandtab syntax=python |
2147 | diff --git a/tests/vmtests/test_raid5_bcache.py b/tests/vmtests/test_raid5_bcache.py | |||
2148 | index 347b607..67a794d 100644 | |||
2149 | --- a/tests/vmtests/test_raid5_bcache.py | |||
2150 | +++ b/tests/vmtests/test_raid5_bcache.py | |||
2151 | @@ -67,27 +67,6 @@ class TestMdadmBcacheAbs(TestMdadmAbs): | |||
2152 | 67 | self.check_file_regex("bcache_cache_mode", r"\[writeback\]") | 67 | self.check_file_regex("bcache_cache_mode", r"\[writeback\]") |
2153 | 68 | 68 | ||
2154 | 69 | 69 | ||
2155 | 70 | @VMBaseClass.skip_by_date("1820754", fixby="2020-03-18", install=False) | ||
2156 | 71 | class TrustyTestRaid5Bcache(relbase.trusty, TestMdadmBcacheAbs): | ||
2157 | 72 | __test__ = True | ||
2158 | 73 | |||
2159 | 74 | |||
2160 | 75 | class TrustyHWEUTestRaid5Bcache(relbase.trusty_hwe_u, TrustyTestRaid5Bcache): | ||
2161 | 76 | __test__ = False | ||
2162 | 77 | |||
2163 | 78 | |||
2164 | 79 | class TrustyHWEVTestRaid5Bcache(relbase.trusty_hwe_v, TrustyTestRaid5Bcache): | ||
2165 | 80 | __test__ = False | ||
2166 | 81 | |||
2167 | 82 | |||
2168 | 83 | class TrustyHWEWTestRaid5Bcache(relbase.trusty_hwe_w, TrustyTestRaid5Bcache): | ||
2169 | 84 | __test__ = False | ||
2170 | 85 | |||
2171 | 86 | |||
2172 | 87 | class TrustyHWEXTestRaid5Bcache(relbase.trusty_hwe_x, TrustyTestRaid5Bcache): | ||
2173 | 88 | __test__ = True | ||
2174 | 89 | |||
2175 | 90 | |||
2176 | 91 | class XenialGATestRaid5Bcache(relbase.xenial_ga, TestMdadmBcacheAbs): | 70 | class XenialGATestRaid5Bcache(relbase.xenial_ga, TestMdadmBcacheAbs): |
2177 | 92 | __test__ = True | 71 | __test__ = True |
2178 | 93 | 72 | ||
2179 | @@ -111,4 +90,8 @@ class CosmicTestRaid5Bcache(relbase.cosmic, TestMdadmBcacheAbs): | |||
2180 | 111 | class DiscoTestRaid5Bcache(relbase.disco, TestMdadmBcacheAbs): | 90 | class DiscoTestRaid5Bcache(relbase.disco, TestMdadmBcacheAbs): |
2181 | 112 | __test__ = True | 91 | __test__ = True |
2182 | 113 | 92 | ||
2183 | 93 | |||
2184 | 94 | class EoanTestRaid5Bcache(relbase.eoan, TestMdadmBcacheAbs): | ||
2185 | 95 | __test__ = True | ||
2186 | 96 | |||
2187 | 114 | # vi: ts=4 expandtab syntax=python | 97 | # vi: ts=4 expandtab syntax=python |
2188 | diff --git a/tests/vmtests/test_simple.py b/tests/vmtests/test_simple.py | |||
2189 | index 625f841..bfac4e9 100644 | |||
2190 | --- a/tests/vmtests/test_simple.py | |||
2191 | +++ b/tests/vmtests/test_simple.py | |||
2192 | @@ -4,6 +4,7 @@ from . import VMBaseClass | |||
2193 | 4 | from .releases import base_vm_classes as relbase | 4 | from .releases import base_vm_classes as relbase |
2194 | 5 | from .releases import centos_base_vm_classes as centos_relbase | 5 | from .releases import centos_base_vm_classes as centos_relbase |
2195 | 6 | 6 | ||
2196 | 7 | import os | ||
2197 | 7 | import textwrap | 8 | import textwrap |
2198 | 8 | 9 | ||
2199 | 9 | 10 | ||
2200 | @@ -24,10 +25,6 @@ class Centos70TestSimple(centos_relbase.centos70_xenial, TestSimple): | |||
2201 | 24 | __test__ = True | 25 | __test__ = True |
2202 | 25 | 26 | ||
2203 | 26 | 27 | ||
2204 | 27 | class TrustyTestSimple(relbase.trusty, TestSimple): | ||
2205 | 28 | __test__ = True | ||
2206 | 29 | |||
2207 | 30 | |||
2208 | 31 | class XenialTestSimple(relbase.xenial, TestSimple): | 28 | class XenialTestSimple(relbase.xenial, TestSimple): |
2209 | 32 | __test__ = True | 29 | __test__ = True |
2210 | 33 | 30 | ||
2211 | @@ -53,6 +50,13 @@ class DiscoTestSimple(relbase.disco, TestSimple): | |||
2212 | 53 | self.output_files_exist(["netplan.yaml"]) | 50 | self.output_files_exist(["netplan.yaml"]) |
2213 | 54 | 51 | ||
2214 | 55 | 52 | ||
2215 | 53 | class EoanTestSimple(relbase.eoan, TestSimple): | ||
2216 | 54 | __test__ = True | ||
2217 | 55 | |||
2218 | 56 | def test_output_files_exist(self): | ||
2219 | 57 | self.output_files_exist(["netplan.yaml"]) | ||
2220 | 58 | |||
2221 | 59 | |||
2222 | 56 | class TestSimpleStorage(VMBaseClass): | 60 | class TestSimpleStorage(VMBaseClass): |
2223 | 57 | """ Test curtin runs clear-holders when mode=simple with storage cfg. """ | 61 | """ Test curtin runs clear-holders when mode=simple with storage cfg. """ |
2224 | 58 | conf_file = "examples/tests/simple-storage.yaml" | 62 | conf_file = "examples/tests/simple-storage.yaml" |
2225 | @@ -109,4 +113,36 @@ class DiscoTestSimpleStorage(relbase.disco, TestSimpleStorage): | |||
2226 | 109 | self.output_files_exist(["netplan.yaml"]) | 113 | self.output_files_exist(["netplan.yaml"]) |
2227 | 110 | 114 | ||
2228 | 111 | 115 | ||
2229 | 116 | class EoanTestSimpleStorage(relbase.eoan, TestSimpleStorage): | ||
2230 | 117 | __test__ = True | ||
2231 | 118 | |||
2232 | 119 | def test_output_files_exist(self): | ||
2233 | 120 | self.output_files_exist(["netplan.yaml"]) | ||
2234 | 121 | |||
2235 | 122 | |||
2236 | 123 | class TestGrubNoDefaults(VMBaseClass): | ||
2237 | 124 | """ Test that curtin does not emit any grub configuration files. """ | ||
2238 | 125 | conf_file = "examples/tests/no-grub-file.yaml" | ||
2239 | 126 | extra_disks = [] | ||
2240 | 127 | extra_nics = [] | ||
2241 | 128 | extra_collect_scripts = [textwrap.dedent(""" | ||
2242 | 129 | cd OUTPUT_COLLECT_D | ||
2243 | 130 | cp /etc/netplan/50-cloud-init.yaml netplan.yaml | ||
2244 | 131 | |||
2245 | 132 | exit 0 | ||
2246 | 133 | """)] | ||
2247 | 134 | |||
2248 | 135 | def test_no_grub_file_created(self): | ||
2249 | 136 | """ Curtin did not write a grub configuration file. """ | ||
2250 | 137 | grub_d_path = self.collect_path('etc_default_grub_d') | ||
2251 | 138 | grub_d_files = os.listdir(grub_d_path) | ||
2252 | 139 | self.assertNotIn('50-curtin-settings.cfg', grub_d_files) | ||
2253 | 140 | |||
2254 | 141 | |||
2255 | 142 | class DiscoTestGrubNoDefaults(relbase.disco, TestGrubNoDefaults): | ||
2256 | 143 | __test__ = True | ||
2257 | 144 | |||
2258 | 145 | def test_output_files_exist(self): | ||
2259 | 146 | self.output_files_exist(["netplan.yaml"]) | ||
2260 | 147 | |||
2261 | 112 | # vi: ts=4 expandtab syntax=python | 148 | # vi: ts=4 expandtab syntax=python |
2262 | diff --git a/tests/vmtests/test_uefi_basic.py b/tests/vmtests/test_uefi_basic.py | |||
2263 | index f210e7e..51696c2 100644 | |||
2264 | --- a/tests/vmtests/test_uefi_basic.py | |||
2265 | +++ b/tests/vmtests/test_uefi_basic.py | |||
2266 | @@ -89,14 +89,6 @@ class PreciseHWETUefiTestBasic(relbase.precise_hwe_t, PreciseUefiTestBasic): | |||
2267 | 89 | __test__ = False | 89 | __test__ = False |
2268 | 90 | 90 | ||
2269 | 91 | 91 | ||
2270 | 92 | class TrustyUefiTestBasic(relbase.trusty, TestBasicAbs): | ||
2271 | 93 | __test__ = True | ||
2272 | 94 | |||
2273 | 95 | |||
2274 | 96 | class TrustyHWEXUefiTestBasic(relbase.trusty_hwe_x, TestBasicAbs): | ||
2275 | 97 | __test__ = True | ||
2276 | 98 | |||
2277 | 99 | |||
2278 | 100 | class XenialGAUefiTestBasic(relbase.xenial_ga, TestBasicAbs): | 92 | class XenialGAUefiTestBasic(relbase.xenial_ga, TestBasicAbs): |
2279 | 101 | __test__ = True | 93 | __test__ = True |
2280 | 102 | 94 | ||
2281 | @@ -121,17 +113,11 @@ class DiscoUefiTestBasic(relbase.disco, TestBasicAbs): | |||
2282 | 121 | __test__ = True | 113 | __test__ = True |
2283 | 122 | 114 | ||
2284 | 123 | 115 | ||
2286 | 124 | class Centos70UefiTestBasic4k(centos_relbase.centos70_xenial, TestBasicAbs): | 116 | class EoanUefiTestBasic(relbase.eoan, TestBasicAbs): |
2287 | 125 | __test__ = True | 117 | __test__ = True |
2288 | 126 | disk_block_size = 4096 | ||
2289 | 127 | 118 | ||
2290 | 128 | 119 | ||
2297 | 129 | class TrustyUefiTestBasic4k(relbase.trusty, TestBasicAbs): | 120 | class Centos70UefiTestBasic4k(centos_relbase.centos70_xenial, TestBasicAbs): |
2292 | 130 | __test__ = True | ||
2293 | 131 | disk_block_size = 4096 | ||
2294 | 132 | |||
2295 | 133 | |||
2296 | 134 | class TrustyHWEXUefiTestBasic4k(relbase.trusty_hwe_x, TestBasicAbs): | ||
2298 | 135 | __test__ = True | 121 | __test__ = True |
2299 | 136 | disk_block_size = 4096 | 122 | disk_block_size = 4096 |
2300 | 137 | 123 | ||
2301 | @@ -155,4 +141,9 @@ class DiscoUefiTestBasic4k(relbase.disco, TestBasicAbs): | |||
2302 | 155 | __test__ = True | 141 | __test__ = True |
2303 | 156 | disk_block_size = 4096 | 142 | disk_block_size = 4096 |
2304 | 157 | 143 | ||
2305 | 144 | |||
2306 | 145 | class EoanUefiTestBasic4k(relbase.eoan, TestBasicAbs): | ||
2307 | 146 | __test__ = True | ||
2308 | 147 | disk_block_size = 4096 | ||
2309 | 148 | |||
2310 | 158 | # vi: ts=4 expandtab syntax=python | 149 | # vi: ts=4 expandtab syntax=python |
2311 | diff --git a/tests/vmtests/test_vmtests.py b/tests/vmtests/test_vmtests.py | |||
2312 | index 44cd8dc..5e395f0 100644 | |||
2313 | --- a/tests/vmtests/test_vmtests.py | |||
2314 | +++ b/tests/vmtests/test_vmtests.py | |||
2315 | @@ -17,7 +17,7 @@ class PsuedoBase(PsuedoVMBaseClass): | |||
2316 | 17 | pass | 17 | pass |
2317 | 18 | 18 | ||
2318 | 19 | 19 | ||
2320 | 20 | class PsuedoTestAllPass(relbase.trusty, PsuedoBase): | 20 | class PsuedoTestAllPass(relbase.bionic, PsuedoBase): |
2321 | 21 | __test__ = True | 21 | __test__ = True |
2322 | 22 | # These boot_results would cause first_boot failure | 22 | # These boot_results would cause first_boot failure |
2323 | 23 | # boot_results = { | 23 | # boot_results = { |
2324 | diff --git a/tests/vmtests/test_zfsroot.py b/tests/vmtests/test_zfsroot.py | |||
2325 | index 473c9e3..7ab4f96 100644 | |||
2326 | --- a/tests/vmtests/test_zfsroot.py | |||
2327 | +++ b/tests/vmtests/test_zfsroot.py | |||
2328 | @@ -94,6 +94,10 @@ class DiscoTestZfsRoot(relbase.disco, TestZfsRootAbs): | |||
2329 | 94 | __test__ = True | 94 | __test__ = True |
2330 | 95 | 95 | ||
2331 | 96 | 96 | ||
2332 | 97 | class EoanTestZfsRoot(relbase.eoan, TestZfsRootAbs): | ||
2333 | 98 | __test__ = True | ||
2334 | 99 | |||
2335 | 100 | |||
2336 | 97 | class TestZfsRootFsTypeAbs(TestZfsRootAbs): | 101 | class TestZfsRootFsTypeAbs(TestZfsRootAbs): |
2337 | 98 | conf_file = "examples/tests/basic-zfsroot.yaml" | 102 | conf_file = "examples/tests/basic-zfsroot.yaml" |
2338 | 99 | 103 | ||
2339 | @@ -118,3 +122,7 @@ class CosmicTestZfsRootFsType(relbase.cosmic, TestZfsRootFsTypeAbs): | |||
2340 | 118 | 122 | ||
2341 | 119 | class DiscoTestZfsRootFsType(relbase.disco, TestZfsRootFsTypeAbs): | 123 | class DiscoTestZfsRootFsType(relbase.disco, TestZfsRootFsTypeAbs): |
2342 | 120 | __test__ = True | 124 | __test__ = True |
2343 | 125 | |||
2344 | 126 | |||
2345 | 127 | class EoanTestZfsRootFsType(relbase.eoan, TestZfsRootFsTypeAbs): | ||
2346 | 128 | __test__ = True | ||
2347 | diff --git a/tools/vmtest-system-setup b/tools/vmtest-system-setup | |||
2348 | index bc790cb..b9185db 100755 | |||
2349 | --- a/tools/vmtest-system-setup | |||
2350 | +++ b/tools/vmtest-system-setup | |||
2351 | @@ -16,6 +16,7 @@ DEPS=( | |||
2352 | 16 | make | 16 | make |
2353 | 17 | net-tools | 17 | net-tools |
2354 | 18 | python3 | 18 | python3 |
2355 | 19 | python3-jsonschema | ||
2356 | 19 | python3-nose | 20 | python3-nose |
2357 | 20 | python3-simplestreams | 21 | python3-simplestreams |
2358 | 21 | python3-yaml | 22 | python3-yaml |
2359 | diff --git a/tools/xkvm b/tools/xkvm | |||
2360 | index e65bf76..9135ac1 100755 | |||
2361 | --- a/tools/xkvm | |||
2362 | +++ b/tools/xkvm | |||
2363 | @@ -429,7 +429,7 @@ main() { | |||
2364 | 429 | bios_opts=( "${_RET[@]}" ) | 429 | bios_opts=( "${_RET[@]}" ) |
2365 | 430 | 430 | ||
2366 | 431 | local out="" fmt="" bus="" unit="" index="" serial="" driver="" devopts="" | 431 | local out="" fmt="" bus="" unit="" index="" serial="" driver="" devopts="" |
2368 | 432 | local busorindex="" driveopts="" cur="" val="" file="" | 432 | local busorindex="" driveopts="" cur="" val="" file="" wwn="" |
2369 | 433 | for((i=0;i<${#diskdevs[@]};i++)); do | 433 | for((i=0;i<${#diskdevs[@]};i++)); do |
2370 | 434 | cur=${diskdevs[$i]} | 434 | cur=${diskdevs[$i]} |
2371 | 435 | IFS=","; set -- $cur; IFS="$oifs" | 435 | IFS=","; set -- $cur; IFS="$oifs" |
2372 | @@ -441,6 +441,7 @@ main() { | |||
2373 | 441 | unit="" | 441 | unit="" |
2374 | 442 | index="" | 442 | index="" |
2375 | 443 | serial="" | 443 | serial="" |
2376 | 444 | wwn="" | ||
2377 | 444 | for tok in "$@"; do | 445 | for tok in "$@"; do |
2378 | 445 | [ "${tok#*=}" = "${tok}" -a -f "${tok}" -a -z "$file" ] && file="$tok" | 446 | [ "${tok#*=}" = "${tok}" -a -f "${tok}" -a -z "$file" ] && file="$tok" |
2379 | 446 | val=${tok#*=} | 447 | val=${tok#*=} |
2380 | @@ -454,6 +455,7 @@ main() { | |||
2381 | 454 | file=*) file=$val;; | 455 | file=*) file=$val;; |
2382 | 455 | fmt=*|format=*) fmt=$val;; | 456 | fmt=*|format=*) fmt=$val;; |
2383 | 456 | serial=*) serial=$val;; | 457 | serial=*) serial=$val;; |
2384 | 458 | wwn=*) wwn=$val;; | ||
2385 | 457 | bus=*) bus=$val;; | 459 | bus=*) bus=$val;; |
2386 | 458 | unit=*) unit=$val;; | 460 | unit=*) unit=$val;; |
2387 | 459 | index=*) index=$val;; | 461 | index=*) index=$val;; |
2388 | @@ -471,7 +473,12 @@ main() { | |||
2389 | 471 | driver="$def_disk_driver" | 473 | driver="$def_disk_driver" |
2390 | 472 | fi | 474 | fi |
2391 | 473 | if [ -z "$serial" ]; then | 475 | if [ -z "$serial" ]; then |
2393 | 474 | serial="${file##*/}" | 476 | # use filename as serial if not provided a wwn |
2394 | 477 | if [ -n "$wwn" ]; then | ||
2395 | 478 | serial="$wwn" | ||
2396 | 479 | else | ||
2397 | 480 | serial="${file##*/}" | ||
2398 | 481 | fi | ||
2399 | 475 | fi | 482 | fi |
2400 | 476 | 483 | ||
2401 | 477 | # make sure we add either bus= or index= | 484 | # make sure we add either bus= or index= |
2402 | diff --git a/tox.ini b/tox.ini | |||
2403 | index 8e5faf2..3a8e40e 100644 | |||
2404 | --- a/tox.ini | |||
2405 | +++ b/tox.ini | |||
2406 | @@ -50,7 +50,7 @@ commands = {envpython} -m flake8 {posargs:curtin tests/} | |||
2407 | 50 | # set basepython because tox 1.6 (trusty) does not support generated environments | 50 | # set basepython because tox 1.6 (trusty) does not support generated environments |
2408 | 51 | basepython = python3 | 51 | basepython = python3 |
2409 | 52 | deps = {[testenv]deps} | 52 | deps = {[testenv]deps} |
2411 | 53 | pylint==1.8.1 | 53 | pylint==2.3.1 |
2412 | 54 | git+https://git.launchpad.net/simplestreams | 54 | git+https://git.launchpad.net/simplestreams |
2413 | 55 | commands = {envpython} -m pylint --errors-only {posargs:curtin tests/vmtests} | 55 | commands = {envpython} -m pylint --errors-only {posargs:curtin tests/vmtests} |
2414 | 56 | 56 |
FAILED: Continuous integration, rev:7892b282fc4 d81aed1037dcdad cae388a8efbdc0 /code.launchpad .net/~daniel- thewatkins/ curtin/ +git/curtin/ +merge/ 367779/ +edit-commit- message
No commit message was specified in the merge proposal. Click on the following link and set the commit message (if you want a jenkins rebuild you need to trigger it yourself):
https:/
https:/ /jenkins. ubuntu. com/server/ job/curtin- ci/1269/ /jenkins. ubuntu. com/server/ job/curtin- ci/nodes= metal-arm64/ 1269 /jenkins. ubuntu. com/server/ job/curtin- ci/nodes= metal-ppc64el/ 1269 /jenkins. ubuntu. com/server/ job/curtin- ci/nodes= metal-s390x/ 1269 /jenkins. ubuntu. com/server/ job/curtin- ci/nodes= torkoal/ 1269
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
Click here to trigger a rebuild: /jenkins. ubuntu. com/server/ job/curtin- ci/1269/ rebuild
https:/