From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 7096083842147024896 X-Received: by 2002:a05:6512:370a:b0:472:5a8:5859 with SMTP id z10-20020a056512370a00b0047205a85859mr23954231lfr.363.1652357720320; Thu, 12 May 2022 05:15:20 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a05:651c:553:b0:250:615f:dbd1 with SMTP id q19-20020a05651c055300b00250615fdbd1ls918385ljp.7.gmail; Thu, 12 May 2022 05:15:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyOZwu/OGH/l2sLsR+10HuW2CmoX+fHETAGzGkF982ki2SrtEF3zkjfQJTwL6win4I0AluC X-Received: by 2002:a2e:580b:0:b0:24f:4e25:f26d with SMTP id m11-20020a2e580b000000b0024f4e25f26dmr19926505ljb.346.1652357719165; Thu, 12 May 2022 05:15:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652357719; cv=none; d=google.com; s=arc-20160816; b=EquiOwFEyc0KHgUPXpULSq7yQ1WkMn/2WX5G6qlz7b1Kr6pVpm+H2N8IAIRqEMDEMj JhkNsmzvYDp3hzwiWDEEL57fny9glIBgJtjXeF14oBQIUdApqFv0x8FdFjiHh0dj45AR 0D2fER6qlv9AlhwkUQiyxthOHy6kQzz7L4TdVXs0sVOvnIxjAiUWyfqrVPAAisXUZvOl sHv5TzmR7P6uL7R4ok0kesDKLIQa+aY28YXgdW/O6UNCxy09RMS5INK3KHoYRFdGiXS/ ratGfNgSq/Jg2AsjtG0tDxu3RTMt2bid2pU8+IzzxCLTnRm3uKDQ+SYDl7JwSuYgqu1b MDKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=feedback-id:content-transfer-encoding:mime-version:message-id:date :subject:cc:to:from:dkim-signature; bh=eBlM0BBBgO303cO4Pcmf/dGOqCxvppNrWSwAd3W+jqs=; b=Fy7+w3aJGpGSoiuM/E0y+qq4MX/Qy0vvJBJb3uIpPjuKZvWh117feEbtSZWbUriHMT dI8ozwmcVrTV0fz1CXebkgbmtLSgTu3ixi18ETiM4JgfolLECHZ13NtBqfiG1dnfyj4X qGGP1a0tblZW6hmvQPJmNaIFDYTjtYRgCj7HjdetqzJ3doiG82Er5lXzDgHSSSOChJFl w+xE67mK0zMeFaS9tIz3VK72fVFxqkdayPNfdWqd7FZuXtqdlYBQRJR9NDa3H8jz2tln GUsuIgMq43i8nDhNyx3d4YvzDsJZpGvCeUm1bKrZWt/lHwcETb02fYxiLvRNPjUaCTVX bvNg== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=OibUWpvg; spf=pass (google.com: domain of fm-72506-20220512121517a0c994c0f87f471837-z9f2oh@rts-flowmailer.siemens.com designates 185.136.64.225 as permitted sender) smtp.mailfrom=fm-72506-20220512121517a0c994c0f87f471837-z9F2Oh@rts-flowmailer.siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from mta-64-225.siemens.flowmailer.net (mta-64-225.siemens.flowmailer.net. [185.136.64.225]) by gmr-mx.google.com with ESMTPS id x8-20020a056512078800b00473a659879csi223760lfr.13.2022.05.12.05.15.19 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 May 2022 05:15:19 -0700 (PDT) Received-SPF: pass (google.com: domain of fm-72506-20220512121517a0c994c0f87f471837-z9f2oh@rts-flowmailer.siemens.com designates 185.136.64.225 as permitted sender) client-ip=185.136.64.225; Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=OibUWpvg; spf=pass (google.com: domain of fm-72506-20220512121517a0c994c0f87f471837-z9f2oh@rts-flowmailer.siemens.com designates 185.136.64.225 as permitted sender) smtp.mailfrom=fm-72506-20220512121517a0c994c0f87f471837-z9F2Oh@rts-flowmailer.siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: by mta-64-225.siemens.flowmailer.net with ESMTPSA id 20220512121517a0c994c0f87f471837 for ; Thu, 12 May 2022 14:15:18 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=felix.moessbauer@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc; bh=eBlM0BBBgO303cO4Pcmf/dGOqCxvppNrWSwAd3W+jqs=; b=OibUWpvgBmoZFJ7DZ/pl2j24iuNSVA8BbeoAVI9VsFm3EXUvD8bo6mxkRNmBovGtHf6Oc6 Z9vuqaQdoLfi/Q5rXeO02Rz9hvXqC/eaDWv44tLJJKTeuRnIt2/wA0IbR3RppZDqvzE7xdjt wAbb9nIpOwRBl1iNFWADh3YMAqE8E=; From: Felix Moessbauer To: isar-users@googlegroups.com Cc: henning.schild@siemens.com, jan.kiszka@siemens.com, florian.bezdeka@siemens.com, Felix Moessbauer Subject: [PATCH v3 4/4] ci: test partition layout of splitted-rootfs image Date: Thu, 12 May 2022 14:15:07 +0200 Message-Id: <20220512121507.362108-1-felix.moessbauer@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-72506:519-21489:flowmailer X-TUID: 3M6BpGLalYUu This adds a test that checks if splitting the rootfs across multiple partitions correctly works. The following is checked: file-permissions (based on wic internal check): WIC already has a built-in check for correct file permissions. In case the permission db is missing, a WIC warning is emitted. We simply check for this warning. partition layout and excluded paths: Specifying exclude paths is error prone. Hence, we check that all generated partitions do not contain excluded paths. Further, we check that the expected paths are there. Signed-off-by: Felix Moessbauer --- testsuite/cibase.py | 58 ++++++++++++++++++++++++++++++++++++++++++ testsuite/cibuilder.py | 6 ++++- testsuite/citest.py | 14 ++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/testsuite/cibase.py b/testsuite/cibase.py index b25c356e..fd272ef5 100755 --- a/testsuite/cibase.py +++ b/testsuite/cibase.py @@ -164,3 +164,61 @@ class CIBaseTest(CIBuilder): ['do_rootfs_install_setscene', '!do_rootfs_install']) ]): self.fail("Failed rebuild package and image") + + def perform_partition_layout_test(self, mc_target, **kwargs): + def _mount(device, mountpoint): + process.run(f'mount -o ro {device} {mountpoint}', sudo=True, ignore_status=False) + + def _umount(mountpoint): + process.run(f'umount -l {mountpoint}', sudo=True, ignore_status=True) + + def check_output_for_warnings(target, machine): + wic_output_files = glob.glob(f'{self.build_dir}/tmp/work/*/{target}-{machine}/*/temp/log.do_image_wic') + if len(wic_output_files) == 0: + self.fail('could not find WIC output file') + with open(wic_output_files[0], 'r') as output: + # in case we had permission problems, a WIC warning is in the logs + for line in output: + token = line.split() + if len(token) > 0 and token[0] == 'WARNING:': + self.fail(f'WIC issue found: {line}') + + def check_part_layout(target, machine): + pattern = f'{self.build_dir}/tmp/deploy/images/{machine}/{target}-*-{machine}.wic.p*' + partitions = sorted(glob.glob(pattern)) + if len(partitions) != 3: + self.fail(f'expected 3 partitions, but got {len(partitions)} (in {pattern})') + mountpoints = [os.path.join(self.build_dir, mp) for mp in 'mnt_efi mnt_root mnt_home'.split()] + for i in range(3): + os.makedirs(mountpoints[i], exist_ok=True) + _umount(mountpoints[i]) + _mount(partitions[i], mountpoints[i]) + + # in boot partition, we expect /boot + if not os.path.isdir(os.path.join(mountpoints[0], 'EFI')): + self.fail('boot partition does not provide /EFI') + # in root partition, boot and home should be excluded + if not os.path.isdir(os.path.join(mountpoints[1], 'etc')) or \ + os.path.isdir(os.path.join(mountpoints[1], 'home')) or \ + os.path.isdir(os.path.join(mountpoints[1], 'boot')): + self.fail('root partition does not contain expected dirs') + # home partition should contain home of user "user" + if not os.path.isdir(os.path.join(mountpoints[2], 'user')): + self.fail('home partition does not contain home of user') + + [_umount(mnt) for mnt in mountpoints] + + mc_spec = mc_target.split(':') + target = mc_spec[2] + machine = mc_spec[1].split('-')[0] + + self.configure( + sstate=False, + compat_arch=False, + interactive_user=True, + **kwargs) + + self.bitbake(mc_target, **kwargs) + + check_output_for_warnings(target, machine) + check_part_layout(target, machine) diff --git a/testsuite/cibuilder.py b/testsuite/cibuilder.py index bc48d47f..e3fbb859 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): + gpg_pub_key=None, interactive_user=False, **kwargs): # write configuration file and set bitbake_args # can run multiple times per test case self.check_init() @@ -107,6 +107,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 interactive_user: + f.write('USERS += "user"\n') + f.write('USER_user[home] = "/home/user"\n') + f.write('USER_user[flags] = "create-home"\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 8d00054a..26101010 100755 --- a/testsuite/citest.py +++ b/testsuite/citest.py @@ -318,3 +318,17 @@ class VmBootTestFull(CIBaseTest): def test_amd64_focal(self): self.init() self.vm_start('amd64','focal') + +class SplittedRootfsTest(CIBaseTest): + + """ + Test partition layout of splitted rootfs image + + :avocado: tags=splittedrootfs,full + """ + + def test_wic_partition_layout(self): + mc_target = 'mc:qemuamd64-bookworm:isar-image-base' + + self.init('build-wic-rootfs') + self.perform_partition_layout_test(mc_target) -- 2.30.2