[RFC,v2,3/3] ci: Added test for isar-apt reuse functionality

Message ID 20220613070759.16949-4-ubely@ilbers.de
State RFC
Headers show
Series PoC for isar-apt repo reusing | expand

Commit Message

Uladzimir Bely June 12, 2022, 11:07 p.m. UTC
Test makes clean build of "libhello" package that is placed to local
isar-apt repo outside of 'tmp'.

Second build with cleaned 'tmp' should use previously built package
that is detected by missing Makefile in source directory.

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 testsuite/cibase.py    | 42 ++++++++++++++++++++++++++++++++++++++++++
 testsuite/cibuilder.py |  7 ++++++-
 testsuite/citest.py    | 12 ++++++++++++
 3 files changed, 60 insertions(+), 1 deletion(-)

Patch

diff --git a/testsuite/cibase.py b/testsuite/cibase.py
index 2ffb8191..9ef9d247 100755
--- a/testsuite/cibase.py
+++ b/testsuite/cibase.py
@@ -73,6 +73,48 @@  class CIBaseTest(CIBuilder):
         self.delete_from_build_dir('tmp')
         self.delete_from_build_dir('ccache')
 
+    def perform_isarapt_test(self, package_target, **kwargs):
+        def check_compiled(package_name):
+            # Makefile should exist if there was compilation
+            makefile = glob.glob(f'{self.build_dir}/tmp/work/*/{package_name}/*/{package_name}-*/Makefile')
+            if makefile:
+                self.log.info("Makefile was generated")
+                return True
+
+            self.log.info("Makefile was not generated")
+            return False
+
+        self.configure(isar_apt_reuse=True, **kwargs)
+
+        package_name = package_target.split(':')[-1]
+
+        # Cleanup sstate and tmp before test`
+        self.delete_from_build_dir('tmp')
+        self.delete_from_build_dir('sstate-cache')
+        self.delete_from_build_dir('isar-apt')
+
+        self.log.info('Start build and populate isar-apt...')
+        self.bitbake(package_target, **kwargs)
+        compiled1 = check_compiled(package_name)
+
+        if not compiled1:
+            self.fail('isar-apt repo used at first build')
+
+        # Cleanup build stuff
+        self.delete_from_build_dir('tmp')
+        self.delete_from_build_dir('sstate-cache')
+
+        self.log.info('Starting build and reuse isar-apt repo...')
+        self.bitbake(package_target, **kwargs)
+        compiled2 = check_compiled(package_name)
+
+        if compiled2:
+            self.fail('isar-apt repo not used at second build')
+
+        # Cleanup
+        self.delete_from_build_dir('tmp')
+        self.delete_from_build_dir('sstate-cache')
+
     def perform_sstate_test(self, image_target, package_target, **kwargs):
         def check_executed_tasks(target, expected):
             taskorder_file = glob.glob(f'{self.build_dir}/tmp/work/*/{target}/*/temp/log.task_order')
diff --git a/testsuite/cibuilder.py b/testsuite/cibuilder.py
index bc48d47f..42e344a3 100755
--- a/testsuite/cibuilder.py
+++ b/testsuite/cibuilder.py
@@ -54,7 +54,7 @@  class CIBuilder(Test):
 
     def configure(self, compat_arch=True, cross=None, debsrc_cache=False,
                   container=False, ccache=False, sstate=False, offline=False,
-                  gpg_pub_key=None, **kwargs):
+                  isar_apt_reuse=False, gpg_pub_key=None, **kwargs):
         # write configuration file and set bitbake_args
         # can run multiple times per test case
         self.check_init()
@@ -76,6 +76,7 @@  class CIBuilder(Test):
                       f'  container = {container}\n'
                       f'  ccache = {ccache}\n'
                       f'  sstate = {sstate}\n'
+                      f'  isar_apt_reuse = {isar_apt_reuse}\n'
                       f'  gpg_pub_key = {gpg_pub_key}\n'
                       f'===================================================')
 
@@ -107,6 +108,10 @@  class CIBuilder(Test):
                 f.write('BASE_REPO_KEY="file://' + gpg_pub_key + '"\n')
             if distro_apt_premir:
                 f.write('DISTRO_APT_PREMIRRORS = "%s"\n' % distro_apt_premir)
+            if isar_apt_reuse:
+                f.write('ISAR_APT_REUSE = "1"\n')
+                f.write('REPO_ISAR_DIR = "${TOPDIR}/isar-apt/${DISTRO}-${DISTRO_ARCH}/apt"\n')
+                f.write('REPO_ISAR_DB_DIR = "${TOPDIR}/isar-apt/${DISTRO}-${DISTRO_ARCH}/db"\n')
 
         # include ci_build.conf in local.conf
         with open(self.build_dir + '/conf/local.conf', 'r+') as f:
diff --git a/testsuite/citest.py b/testsuite/citest.py
index 16e38d07..7545d9e6 100755
--- a/testsuite/citest.py
+++ b/testsuite/citest.py
@@ -60,6 +60,18 @@  class CcacheTest(CIBaseTest):
         self.init()
         self.perform_ccache_test(targets)
 
+class IsarAptTest(CIBaseTest):
+
+    """
+    Test rebuild speed improve with isar-apt reuse enabled
+
+    :avocado: tags=isarapt,full
+    """
+    def test_isarapt_reuse(self):
+        target = 'mc:qemuamd64-bullseye:libhello'
+        self.init()
+        self.perform_isarapt_test(target)
+
 class CrossTest(CIBaseTest):
 
     """