All of lore.kernel.org
 help / color / mirror / Atom feed
* [OE-core] [PATCH 1/2] lib/oeqa/selftest/cases/reproducible.py : updated test to faketime in future when buiding the second test build.
@ 2021-03-02  7:55 Sangeeta Jain
  2021-03-02  7:55 ` [OE-core] [PATCH 2/2] meta/recipes-support/libfaketime: added recipe libfaketime Sangeeta Jain
  0 siblings, 1 reply; 2+ messages in thread
From: Sangeeta Jain @ 2021-03-02  7:55 UTC (permalink / raw)
  To: openembedded-core; +Cc: sangeeta jain

From: sangeeta jain <sangeeta.jain@intel.com>

This update will ensure that recipes are not including time stamps by creating an
image with modified system time. It uses libfaketime recipe to fake system
time to advance by 34308122 seconds.

Signed-off-by: sangeeta jain <sangeeta.jain@intel.com>
---
 meta/lib/oeqa/selftest/cases/reproducible.py | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/meta/lib/oeqa/selftest/cases/reproducible.py b/meta/lib/oeqa/selftest/cases/reproducible.py
index f2d9f95..1592c96 100644
--- a/meta/lib/oeqa/selftest/cases/reproducible.py
+++ b/meta/lib/oeqa/selftest/cases/reproducible.py
@@ -163,6 +163,7 @@ class ReproducibleTests(OESelftestTestCase):
     # will test that and also make the test run faster. If your sstate is not
     # reproducible, disable this in your derived test class
     build_from_sstate = True
+    use_faketime = False
 
     def setUpLocal(self):
         super().setUpLocal()
@@ -210,7 +211,7 @@ class ReproducibleTests(OESelftestTestCase):
         bb.utils.mkdirhier(os.path.dirname(dest))
         shutil.copyfile(source, dest)
 
-    def do_test_build(self, name, use_sstate):
+    def do_test_build(self, name, use_sstate, use_faketime):
         capture_vars = ['DEPLOY_DIR_' + c.upper() for c in self.package_classes]
 
         tmpdir = os.path.join(self.topdir, name, 'tmp')
@@ -239,6 +240,18 @@ class ReproducibleTests(OESelftestTestCase):
                 SSTATE_MIRRORS = ""
                 ''')
 
+        if use_faketime:
+            # This config fragment will enable to fake system time
+            # advance by 34308122 sec
+            bitbake("libfaketime")
+            find_binary = "find . -path '*/image/*/libfaketime.so.1"
+            full_path_to_binary = runCmd(find_binary)
+            binary_path = full_path_to_binary.split("./")
+            ld_preload_path = os.path.join(os.environ.get('BUILDDIR'), binary_path[1])
+            seconds_add_to_system_time = "+34308122"
+            cmd = 'LD_PRELOAD=%s FAKETIME=%s' %(ld_preload_path, seconds_add_to_system_time)
+            runCmd(cmd)
+
         self.logger.info("Building %s (sstate%s allowed)..." % (name, '' if use_sstate else ' NOT'))
         self.write_config(config)
         d = get_bb_vars(capture_vars)
@@ -265,9 +278,9 @@ class ReproducibleTests(OESelftestTestCase):
             os.chmod(save_dir, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
             self.logger.info('Non-reproducible packages will be copied to %s', save_dir)
 
-        vars_A = self.do_test_build('reproducibleA', self.build_from_sstate)
+        vars_A = self.do_test_build('reproducibleA', self.build_from_sstate, self.use_faketime))
 
-        vars_B = self.do_test_build('reproducibleB', False)
+        vars_B = self.do_test_build('reproducibleB', False, True)
 
         # NOTE: The temp directories from the reproducible build are purposely
         # kept after the build so it can be diffed for debugging.
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [OE-core] [PATCH 2/2] meta/recipes-support/libfaketime: added recipe libfaketime
  2021-03-02  7:55 [OE-core] [PATCH 1/2] lib/oeqa/selftest/cases/reproducible.py : updated test to faketime in future when buiding the second test build Sangeeta Jain
@ 2021-03-02  7:55 ` Sangeeta Jain
  0 siblings, 0 replies; 2+ messages in thread
From: Sangeeta Jain @ 2021-03-02  7:55 UTC (permalink / raw)
  To: openembedded-core; +Cc: sangeeta jain

From: sangeeta jain <sangeeta.jain@intel.com>

libfaketime intercepts various system calls that programs use to retrieve the
current date and time. It then reports modified (faked) dates and times (as
specified the user) to these programs. It can modify the system time a
program sees without having to change the time system-wide. It is useful
for QA to fake the time in the future when building the test build to check
for better reproducibility.

Signed-off-by: sangeeta jain <sangeeta.jain@intel.com>
---
 meta/recipes-support/libfaketime/libfaketime_0.9.8.bb | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 meta/recipes-support/libfaketime/libfaketime_0.9.8.bb

diff --git a/meta/recipes-support/libfaketime/libfaketime_0.9.8.bb b/meta/recipes-support/libfaketime/libfaketime_0.9.8.bb
new file mode 100644
index 0000000..e7e203b
--- /dev/null
+++ b/meta/recipes-support/libfaketime/libfaketime_0.9.8.bb
@@ -0,0 +1,19 @@
+SUMMARY = "It can modify the system time a program sees without changing time system-wide"
+HOMEPAGE = "https://github.com/wolfcw/libfaketime"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "git://github.com/wolfcw/libfaketime.git;protocol=https"
+
+SRCREV = "dc2ae5eef31c7a64ce3a976487d8e57d50b8d594"
+
+S = "${WORKDIR}/git"
+
+do_compile() {
+        oe_runmake -C src
+}
+
+do_install() {
+
+         oe_runmake install DESTDIR=${D} PREFIX=${prefix}/ LIBDIRNAME=${baselib}
+}
\ No newline at end of file
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-03-02  7:55 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-02  7:55 [OE-core] [PATCH 1/2] lib/oeqa/selftest/cases/reproducible.py : updated test to faketime in future when buiding the second test build Sangeeta Jain
2021-03-02  7:55 ` [OE-core] [PATCH 2/2] meta/recipes-support/libfaketime: added recipe libfaketime Sangeeta Jain

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.