Merge ~paride/utah:forward-file-lists into utah:master

Proposed by Paride Legovini
Status: Merged
Merged at revision: dc2237e1778f9f0f85f0c8886f303fa47f853435
Proposed branch: ~paride/utah:forward-file-lists
Merge into: utah:master
Diff against target: 202 lines (+86/-23)
5 files modified
utah/isotest/data/file_list_subiquity.groovy (+21/-0)
utah/isotest/data/file_list_ubiquity (+1/-0)
utah/isotest/data/file_list_ubiquity.groovy (+18/-0)
utah/isotest/data/file_list_uefi.groovy (+3/-0)
utah/isotest/iso_static_validation.py (+43/-23)
Reviewer Review Type Date Requested Status
Michael Hudson-Doyle Approve
Paride Legovini Needs Fixing
Review via email: mp+393451@code.launchpad.net

Commit message

Make release-specific file lists apply to future releases

Static validation file lists specific for a given release are allowed
in the form of files named with the scheme:

  file_list.<release>

This change makes these lists apply for <release> and for all the
releases that follow <release>, unless a newer release-specific file
exists, in which case that's the one that applies.

To post a comment you must log in.
Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :

The idea seems fine but I think there's a logic bug hiding.

review: Needs Fixing
Revision history for this message
Paride Legovini (paride) :
review: Needs Fixing
Revision history for this message
Paride Legovini (paride) wrote :

MP updated with fixed logic and helper function.

Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :

LGTM but i'm mostly asleep :)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/utah/isotest/data/file_list_subiquity.groovy b/utah/isotest/data/file_list_subiquity.groovy
2new file mode 100644
3index 0000000..43f9991
4--- /dev/null
5+++ b/utah/isotest/data/file_list_subiquity.groovy
6@@ -0,0 +1,21 @@
7+.disk
8+.disk/info
9+EFI
10+EFI/boot
11+EFI/boot/bootx64.efi
12+EFI/boot/grubx64.efi
13+README.diskdefines
14+boot
15+boot/grub
16+casper
17+casper/filesystem.manifest
18+casper/filesystem.squashfs
19+casper/filesystem.squashfs.gpg
20+casper/installer.squashfs
21+casper/vmlinuz
22+dists
23+install
24+md5sum.txt
25+pics
26+pool
27+ubuntu
28diff --git a/utah/isotest/data/file_list_ubiquity b/utah/isotest/data/file_list_ubiquity
29index f7c6306..64c12ea 100644
30--- a/utah/isotest/data/file_list_ubiquity
31+++ b/utah/isotest/data/file_list_ubiquity
32@@ -3,6 +3,7 @@ casper
33 .disk
34 dists
35 install
36+isolinux
37 md5sum.txt
38 pics
39 pool
40diff --git a/utah/isotest/data/file_list_ubiquity.groovy b/utah/isotest/data/file_list_ubiquity.groovy
41new file mode 100644
42index 0000000..f7c6306
43--- /dev/null
44+++ b/utah/isotest/data/file_list_ubiquity.groovy
45@@ -0,0 +1,18 @@
46+boot
47+casper
48+.disk
49+dists
50+install
51+md5sum.txt
52+pics
53+pool
54+preseed
55+README.diskdefines
56+ubuntu
57+casper
58+casper/filesystem.squashfs
59+casper/vmlinuz
60+casper/initrd
61+casper/filesystem.manifest
62+casper/filesystem.manifest-remove
63+casper/filesystem.size
64diff --git a/utah/isotest/data/file_list_uefi.groovy b/utah/isotest/data/file_list_uefi.groovy
65new file mode 100644
66index 0000000..d46843d
67--- /dev/null
68+++ b/utah/isotest/data/file_list_uefi.groovy
69@@ -0,0 +1,3 @@
70+EFI/boot/bootx64.efi
71+EFI/boot/grubx64.efi
72+boot/grub/x86_64-efi
73diff --git a/utah/isotest/iso_static_validation.py b/utah/isotest/iso_static_validation.py
74index 5c101c2..4480d33 100755
75--- a/utah/isotest/iso_static_validation.py
76+++ b/utah/isotest/iso_static_validation.py
77@@ -58,6 +58,7 @@ import re
78 import tempfile
79 import shutil
80 import time
81+import glob
82 import platform
83 import distro_info
84 from traceback import format_exception
85@@ -211,6 +212,23 @@ class TestValidateISO(unittest.TestCase):
86 else:
87 self.fail("Image name be in the form of release-variant-arch.iso")
88
89+ def get_latest_file_list(self, filelist):
90+ file_list_path = os.path.join(DATA_PATH, filelist)
91+ relspec_flists = glob.glob(file_list_path + ".*")
92+
93+ if not relspec_flists:
94+ # No release-specific file lists available
95+ return file_list_path
96+
97+ relindex = distro_info.UbuntuDistroInfo().all.index(self.st_release)
98+ releases = distro_info.UbuntuDistroInfo().all[:relindex+1]
99+ for release in reversed(releases):
100+ new_file_list_path = file_list_path + "." + release
101+ if new_file_list_path in relspec_flists:
102+ return new_file_list_path
103+
104+ return file_list_path
105+
106 def test_sha256_checksum(self):
107 """Test if the ISO SHA checksum matches what is given in the server."""
108 current_iso_digest = {}
109@@ -347,13 +365,11 @@ class TestValidateISO(unittest.TestCase):
110 (stdout, stderr) = self.iso.listfiles()
111 logging.debug('Check for error in extracting file list from the iso')
112 self.assertEqual(stderr, '')
113- files_list_path = os.path.join(DATA_PATH, 'file_list_ubiquity')
114- if os.path.exists(files_list_path + '.' + self.st_release):
115- files_list_path = files_list_path + '.' + self.st_release
116- files_list = open(os.path.join(files_list_path))
117+ file_list_path = self.get_latest_file_list("file_list_ubiquity")
118+ file_list = open(file_list_path)
119 exclude_files = []
120 logging.debug('Check if relevant files are present in the iso')
121- for list_server in files_list:
122+ for list_server in file_list:
123 path = list_server.rstrip()
124 if path in exclude_files:
125 logging.debug('%s excluded based on release', path)
126@@ -398,23 +414,18 @@ class TestValidateISO(unittest.TestCase):
127 logging.debug('Check for error in extracting file list from the iso')
128 self.assertEqual(stderr, '')
129
130+ file_list_fname = "file_list_subiquity"
131 if self.st_arch == 'ppc64el':
132- files_list = open(os.path.join(DATA_PATH,
133- 'file_list_subiquity_powerpc'))
134+ file_list_fname = file_list_fname + '_powerpc'
135 elif self.st_arch == 's390x':
136- files_list = open(os.path.join(DATA_PATH,
137- 'file_list_subiquity_s390x'))
138+ file_list_fname = file_list_fname + '_s390x'
139 elif self.st_arch == 'arm64':
140- files_list = open(os.path.join(DATA_PATH,
141- 'file_list_subiquity_arm64'))
142- else:
143- files_list_path = os.path.join(DATA_PATH, 'file_list_subiquity')
144- if os.path.exists(files_list_path + '.' + self.st_release):
145- files_list_path = files_list_path + '.' + self.st_release
146- files_list = open(os.path.join(files_list_path))
147+ file_list_fname = file_list_fname + '_arm64'
148
149- for list_server in files_list:
150- logging.debug('check if important d-i files are present in iso')
151+ file_list_path = self.get_latest_file_list(file_list_fname)
152+ file_list = open(file_list_path)
153+ for list_server in file_list:
154+ logging.debug('check if important live-server files are present in iso')
155 path = list_server.rstrip()
156 self.assertIn(path, stdout)
157
158@@ -495,13 +506,13 @@ class TestValidateISO(unittest.TestCase):
159
160 @unittest.skipUnless(uefi_image,
161 "Test EFI files on ubuntu amd64 images")
162- @unittest.skipIf(st_release == 'groovy', "no EFI/BOOT LP1895131")
163 def test_efi_files_present(self):
164 """Test if the relevant files are present in the ISO for UEFI."""
165 (stdout, stderr) = self.iso.listfiles()
166 logging.debug('Check for error in extracting file list from the iso')
167 self.assertEqual(stderr, '')
168- files_list = open(os.path.join(DATA_PATH, 'file_list_uefi'))
169+ file_list_path = self.get_latest_file_list("file_list_uefi")
170+ files_list = open(file_list_path)
171 logging.debug('Check if relevant files are present in the iso')
172 for list_server in files_list:
173 path = list_server.rstrip()
174@@ -509,7 +520,6 @@ class TestValidateISO(unittest.TestCase):
175
176 @unittest.skipUnless(uefi_image,
177 "Test Secure Boot UEFI signatures")
178- @unittest.skipIf(st_release == 'groovy', "no EFI/BOOT LP1895131")
179 def test_efi_secure_boot_signatures(self):
180 logging.debug('Generating verification certificates')
181 repo_dir = os.path.expanduser('~/repo_dir')
182@@ -539,8 +549,18 @@ class TestValidateISO(unittest.TestCase):
183 keys, 'canonical-master-signing-public-chain.pem')
184
185 logging.debug('Extracting UEFI boot and kernel images')
186- shim = self.iso.extract('./EFI/BOOT/BOOTx64.EFI', self.temp_dir)
187- grub = self.iso.extract('./EFI/BOOT/grubx64.efi', self.temp_dir)
188+
189+ udi_all = distro_info.UbuntuDistroInfo().all
190+
191+ shimfile = './EFI/boot/bootx64.efi'
192+ grubfile = './EFI/boot/grubx64.efi'
193+ if udi_all.index(self.st_release) < udi_all.index("groovy"):
194+ # Pre-groovy releases had uppercase EFI files
195+ shimfile = './EFI/BOOT/BOOTx64.EFI'
196+ grubfile = './EFI/BOOT/grubx64.efi'
197+
198+ shim = self.iso.extract(shimfile, self.temp_dir)
199+ grub = self.iso.extract(grubfile, self.temp_dir)
200 kernel = self.iso.extract(iso.kernelpath(), self.temp_dir)
201
202 logging.debug('Verifying UEFI shim')

Subscribers

People subscribed via source and target branches