diff options
Diffstat (limited to 'meta')
-rw-r--r-- | meta/lib/oeqa/selftest/cases/reproducible.py | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/meta/lib/oeqa/selftest/cases/reproducible.py b/meta/lib/oeqa/selftest/cases/reproducible.py index f6433c9a02..d3fd8c392b 100644 --- a/meta/lib/oeqa/selftest/cases/reproducible.py +++ b/meta/lib/oeqa/selftest/cases/reproducible.py | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # SPDX-License-Identifier: MIT | 2 | # SPDX-License-Identifier: MIT |
3 | # | 3 | # |
4 | # Copyright 2019 by Garmin Ltd. or its subsidiaries | 4 | # Copyright 2019-2020 by Garmin Ltd. or its subsidiaries |
5 | 5 | ||
6 | from oeqa.selftest.case import OESelftestTestCase | 6 | from oeqa.selftest.case import OESelftestTestCase |
7 | from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars | 7 | from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars |
@@ -167,10 +167,16 @@ class ReproducibleTests(OESelftestTestCase): | |||
167 | return d | 167 | return d |
168 | 168 | ||
169 | def test_reproducible_builds(self): | 169 | def test_reproducible_builds(self): |
170 | def strip_topdir(s): | ||
171 | if s.startswith(self.topdir): | ||
172 | return s[len(self.topdir):] | ||
173 | return s | ||
174 | |||
170 | # Build native utilities | 175 | # Build native utilities |
171 | self.write_config('') | 176 | self.write_config('') |
172 | bitbake("diffutils-native -c addto_recipe_sysroot") | 177 | bitbake("diffoscope-native diffutils-native -c addto_recipe_sysroot") |
173 | diffutils_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "diffutils-native") | 178 | diffutils_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "diffutils-native") |
179 | diffoscope_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "diffoscope-native") | ||
174 | 180 | ||
175 | if self.save_results: | 181 | if self.save_results: |
176 | os.makedirs(self.save_results, exist_ok=True) | 182 | os.makedirs(self.save_results, exist_ok=True) |
@@ -206,18 +212,22 @@ class ReproducibleTests(OESelftestTestCase): | |||
206 | 212 | ||
207 | if self.save_results: | 213 | if self.save_results: |
208 | for d in result.different: | 214 | for d in result.different: |
209 | self.copy_file(d.reference, '/'.join([save_dir, d.reference])) | 215 | self.copy_file(d.reference, '/'.join([save_dir, 'packages', strip_topdir(d.reference)])) |
210 | self.copy_file(d.test, '/'.join([save_dir, d.test])) | 216 | self.copy_file(d.test, '/'.join([save_dir, 'packages', strip_topdir(d.test)])) |
211 | 217 | ||
212 | if result.missing or result.different: | 218 | if result.missing or result.different: |
213 | fails.append("The following %s packages are missing or different: %s" % | 219 | fails.append("The following %s packages are missing or different: %s" % |
214 | (c, '\n'.join(r.test for r in (result.missing + result.different)))) | 220 | (c, '\n'.join(r.test for r in (result.missing + result.different)))) |
215 | 221 | ||
216 | if fails: | ||
217 | self.fail('\n'.join(fails)) | ||
218 | |||
219 | # Clean up empty directories | 222 | # Clean up empty directories |
220 | if self.save_results: | 223 | if self.save_results: |
221 | if not os.listdir(save_dir): | 224 | if not os.listdir(save_dir): |
222 | os.rmdir(save_dir) | 225 | os.rmdir(save_dir) |
226 | else: | ||
227 | self.logger.info('Running diffoscope') | ||
228 | runCmd(['diffoscope', '--no-default-limits', '--exclude-directory-metadata', '--html-dir', 'diff-html', 'reproducibleA', 'reproducibleB'], | ||
229 | native_sysroot=diffoscope_sysroot, ignore_status=True, cwd=os.path.join(save_dir, 'packages')) | ||
230 | |||
231 | if fails: | ||
232 | self.fail('\n'.join(fails)) | ||
223 | 233 | ||