From b957866a8112fe14a37579e4e9188ce210ef3fc7 Mon Sep 17 00:00:00 2001 From: Bruce Ashfield Date: Thu, 4 Jun 2026 20:04:48 +0000 Subject: tests: fix container-cross-install bitbake invocation and busybox compat Three issues in test_container_cross_install.py: - run_bitbake() called bitbake directly, requiring the OE build environment to be pre-sourced. test_multilayer_oci.py wraps bitbake in 'bash -c source oe-init-build-env && bitbake' which is self- contained. Adopt the same pattern so tests work from any shell. - test_vdkr_initramfs_create and test_vpdmn_initramfs_create built the initramfs recipes in the main config, but these recipes require the vruntime multiconfig distro. Use mc:vruntime-x86-64: prefix. - test_systemd_services_directory_exists used 'head -5' which BusyBox does not support (requires 'head -n 5'). The container-image-host image uses BusyBox when built without coreutils. Also fix conftest.py VdkrRunner and VpdmnRunner ensure_memres() to default no_registry=True, so pulled images use short names (alpine:latest) rather than registry-prefixed names from the baked-in VDKR_DEFAULT_REGISTRY config. Signed-off-by: Bruce Ashfield --- tests/conftest.py | 26 ++++++++++++++++++++------ tests/test_container_cross_install.py | 28 ++++++++++++++-------------- 2 files changed, 34 insertions(+), 20 deletions(-) (limited to 'tests') diff --git a/tests/conftest.py b/tests/conftest.py index 22c47d17..2028ef32 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -501,10 +501,17 @@ class VdkrRunner: result = self.memres_status() return result.returncode == 0 and "running" in result.stdout.lower() - def ensure_memres(self, timeout=180): - """Ensure memres is running, starting it if needed.""" + def ensure_memres(self, timeout=180, no_registry=True): + """Ensure memres is running, starting it if needed. + + Args: + timeout: Timeout for memres start + no_registry: Disable baked-in registry (default True for tests + so that pulled images use short names like alpine:latest + rather than registry-prefixed names) + """ if not self.is_memres_running(): - result = self.memres_start(timeout=timeout) + result = self.memres_start(timeout=timeout, no_registry=no_registry) if result.returncode != 0: raise RuntimeError(f"Failed to start memres: {result.stderr}") @@ -790,10 +797,17 @@ class VpdmnRunner: result = self.memres_status() return result.returncode == 0 and "running" in result.stdout.lower() - def ensure_memres(self, timeout=180): - """Ensure memres is running, starting it if needed.""" + def ensure_memres(self, timeout=180, no_registry=True): + """Ensure memres is running, starting it if needed. + + Args: + timeout: Timeout for memres start + no_registry: Disable baked-in registry (default True for tests + so that pulled images use short names like alpine:latest + rather than registry-prefixed names) + """ if not self.is_memres_running(): - result = self.memres_start(timeout=timeout) + result = self.memres_start(timeout=timeout, no_registry=no_registry) if result.returncode != 0: raise RuntimeError(f"Failed to start memres: {result.stderr}") diff --git a/tests/test_container_cross_install.py b/tests/test_container_cross_install.py index ceb8b874..f14bfbc5 100644 --- a/tests/test_container_cross_install.py +++ b/tests/test_container_cross_install.py @@ -88,21 +88,21 @@ def meta_virt_dir(poky_dir): def run_bitbake(build_dir, recipe, task=None, extra_args=None, timeout=1800): - """Run a bitbake command.""" - cmd = ["bitbake"] + """Run a bitbake command within the Yocto environment.""" + bb_cmd = "bitbake" if task: - cmd.extend(["-c", task]) - cmd.append(recipe) + bb_cmd += f" -c {task}" + bb_cmd += f" {recipe}" if extra_args: - cmd.extend(extra_args) + bb_cmd += " " + " ".join(extra_args) - env = os.environ.copy() - env["BUILDDIR"] = str(build_dir) + poky_dir = build_dir.parent + full_cmd = f"bash -c 'cd {poky_dir} && source oe-init-build-env {build_dir} >/dev/null 2>&1 && {bb_cmd}'" result = subprocess.run( - cmd, + full_cmd, + shell=True, cwd=build_dir, - env=env, timeout=timeout, capture_output=True, text=True, @@ -298,13 +298,13 @@ class TestVdkrRecipes: assert len(installers) > 0, f"No SDK installer found in {sdk_deploy}" def test_vdkr_initramfs_create(self, build_dir): - """Test vdkr-initramfs-create builds.""" - result = run_bitbake(build_dir, "vdkr-initramfs-create") + """Test vdkr-initramfs-create builds via multiconfig.""" + result = run_bitbake(build_dir, "mc:vruntime-x86-64:vdkr-initramfs-create") assert result.returncode == 0, f"Build failed: {result.stderr}" def test_vpdmn_initramfs_create(self, build_dir): - """Test vpdmn-initramfs-create builds.""" - result = run_bitbake(build_dir, "vpdmn-initramfs-create") + """Test vpdmn-initramfs-create builds via multiconfig.""" + result = run_bitbake(build_dir, "mc:vruntime-x86-64:vpdmn-initramfs-create") assert result.returncode == 0, f"Build failed: {result.stderr}" @@ -991,7 +991,7 @@ class TestCustomServiceFileBoot: @pytest.mark.boot def test_systemd_services_directory_exists(self, runqemu_session): """Test that systemd service directories exist.""" - output = runqemu_session.run_command('ls -la /lib/systemd/system/ | head -5') + output = runqemu_session.run_command('ls -la /lib/systemd/system/ | head -n 5') assert 'systemd' in output or 'total' in output, \ "Systemd system directory not accessible" -- cgit v1.2.3-54-g00ecf