summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/selftest/cases/reproducible.py
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib/oeqa/selftest/cases/reproducible.py')
-rw-r--r--meta/lib/oeqa/selftest/cases/reproducible.py24
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
6from oeqa.selftest.case import OESelftestTestCase 6from oeqa.selftest.case import OESelftestTestCase
7from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars 7from 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