From patchwork Mon Oct 26 10:10:18 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Clara Kowalsky X-Patchwork-Id: 5563 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Mon, 26 Oct 2026 11:10:45 +0100 X-Sieve: CMU Sieve 2.4 Received: from mail-pj1-f55.google.com (mail-pj1-f55.google.com [209.85.216.55]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 69QAAfa7009563 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 26 Oct 2026 11:10:42 +0100 Received: by mail-pj1-f55.google.com with SMTP id 98e67ed59e1d1-3abb4c24125sf2695573a91.3 for ; Mon, 26 Oct 2026 03:10:42 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1793009435; cv=pass; d=google.com; s=arc-20260327; b=ikLVaspZ6+5wt21lYkCXSa9jwcskSh2yZzlDlCHe7Ot2ZZmjwnxvF3BTTgXirmjj8W gkDyYaWQz2TOYYUTdq2jpXFV+Lg9BKedb+m4lOk/0Ihq55dgVr1b2QWQCLYSS/n3aXmi /zh5q3mRDAeiNCkgJPp0TTK/7CN12CRWb2arao1fldJcrlR6sd2KMCrpXtd8IhaqbVm/ +TXJTYrhHv71rCnAyyTNb4bkuZXArGEsHrgLK5fyvJeTsOLhgnkEl9/J9e141WJndGqe lTp6pxXJHtfmYgGL/zATp16AgFzJifDMjnnURA5Ujbyb8LU4SaJJcgjIoAXBnLCnHZeH ClPQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:feedback-id:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=shbMxJWaw84N1kOXufxieFDOkoHMmkBtFYcmLxbUqKQ=; fh=nnglbhG1137+op4kYEMeLTOrOA7eOcQUoNfubueSGXM=; b=a1zKFsoTVcUTRoItIKaOs+A60JXaXb2W6YPYMM3yizXqQS98pSEyrC88bRHNlmVAXy vbqYRV/JuC2HKCEP1ogPmIgOH895zbO6QMWxjV3Z/pTFcfcLxXcmI9MiwW90Wdyw43ft CkagrK3S/ASPuWIiicLiRW9ZDxXWzJERCB7j/gYx2Cye/uPmXmnXRf/t9DCUbJPYU7YU gOkFlP+mDbtXv7hXMTEI521tC3gWDM3LVLsDRRwnyXtXMgukx2E40GJ1LVjlIQpXwPun u02YDGJ84ZNNcLRR4/blm/EkVf0w8JBduCKI5CFehCtNHkPFN1w9fQ9GJjjPh/mAM7/P rtMQ==; darn=isar-build.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=YItARXID; spf=pass (google.com: domain of fm-1047747-20261026101031e6af87662700020728-mmydog@rts-flowmailer.siemens.com designates 185.136.65.227 as permitted sender) smtp.mailfrom=fm-1047747-20261026101031e6af87662700020728-mmYdoG@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20251104; t=1793009435; x=1793614235; darn=isar-build.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:content-type:reply-to :x-original-authentication-results:x-original-sender:feedback-id :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=shbMxJWaw84N1kOXufxieFDOkoHMmkBtFYcmLxbUqKQ=; b=DlgOv8+ys7Sm8L8+NACSez5DJRWcOVHJ+c9m4LFJWuJovnN44IGFEB6iMQVWVbpdAP siqHWuY0mawcrnz4kElmFMl+PJBWIyLTHnDHI6pYbscm0dql7l90i4WbIS9s2E0V0x6V xqfZ+7p4b3xv7fIeodZsr7AKQwFCNGdxnD9QXak/c+f0pTIDwFirRPat7Gmo+pDruuix CVkbp89pwYmvjaI81jfsSP5WBfdUk5csOWUPNUMdhcvJesHvbdcY0wGA/JzjzDGlzmg3 /MjVm5/In9eQyX0YqPKxBHOFe3yQXUbkH8P6JulAjHuCdrifXZDIFY49Izh3+hrpCuDq nRUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793009435; x=1793614235; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :content-type:reply-to:x-original-authentication-results :x-original-sender:feedback-id:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-beenthere:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to:content-type; bh=shbMxJWaw84N1kOXufxieFDOkoHMmkBtFYcmLxbUqKQ=; b=gKxooS7K6w5dPAVg8dTAgfVYE32OVeFZRnIElAdPHrjC9zB7nA1cNwsEnYjfWE9z4u 78T3+HOfwu4zwFUeNq0nwLa92PgZ8P6eQNZgQRnyvZLaShBMMhdZbC5mIW7OtnIOaxeT jAmplP5ED6WSqYqNHYirGeweXS6mYX3De07+DPd3PGOphycqF8OCMaJcwzaRhZWTBwa1 fIgtv1pbGbSM+DEhbyKpsk7EaznNf/qKgOwjSrhEuUcMHBSWGOqhx2Zjs7DW9kEOgAet N5DuFA7p1/qt6MG+9OTDkE6IyGS97NeWsFy8tAmpYtk+G1B3APB9QnUzZUk7fJj+BZuE ndIQ== X-Forwarded-Encrypted: i=2; AKwUvBxbVUTACcZrhL3/A2/Sr9h0dbjl371Xnzlnmc4QE2scTdCtqpNjFIICb/v2kekLy6FTdXAtptQ=@isar-build.org X-Gm-Message-State: AFq9FYIxaD1ZlDjDVMgUXhexDlneLJD5hu6786ObAeSgtTb5v+1ujAst rBS/5Z8ev6qpm42o/Euv0iIA7PS2fTw3zqGAAf4q4aF5hlPut/gREIdL X-Received: by 2002:a17:90a:e18c:b0:3ad:3e8:12 with SMTP id 98e67ed59e1d1-3adeb126491mr4430219a91.48.1793009435354; Mon, 26 Oct 2026 03:10:35 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com; h="ATskLdd3Eq86b6Uuh4C+oKh740af5tyhYqnKaXMXbckxF8r1mw==" Received: by 2002:a17:90b:1642:b0:3a4:bd4e:6d14 with SMTP id 98e67ed59e1d1-3adc9dc1a95ls3694292a91.1.-pod-prod-02-us; Mon, 26 Oct 2026 03:10:34 -0700 (PDT) X-Received: by 2002:a17:90b:5210:b0:3ab:5832:72af with SMTP id 98e67ed59e1d1-3adeafae0f2mr4534000a91.32.1793009434396; Mon, 26 Oct 2026 03:10:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1793009434; cv=none; d=google.com; s=arc-20260327; b=V1LKB50n030jaevA1ormR6krs7gfKibFGYMmbItNoqcAfNVya2jqsdDTusgkVL5Fxw 4GqGsRrttnKvkxPIIzZ96+a+7S10fevcd6xQvvnRp35I/gwLkSsuguRmJJs25FB2fcus M8zqkrgjcwsHGkLQOSJEX6BQSIp2rTUOsxISO66gs1qprWyuumaREAt3GY9hssEdQIp4 OEjxyej4t7Aw7G60InODQ0LUKltnWteP5NibIaPsabHr/8WQykICR428Hvz3Bqx8KneN ufnkBS6OxrMofvNUKKnBcs4saPKbK4PtHHRcGz9ieP6xAHjSget20voISiow0MLOS9hr 4L3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=feedback-id:content-transfer-encoding:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=p6QgLgNHjy7UkrNO+O5FW4tQ1DZveAoJU8lkl4qjsYQ=; fh=SLhQ9z95daToN/NWg2kUHafQqIBVSlBxJ9bhUZMImFA=; b=AwTXsMSrRfdtnmBgiClfXgIIvg5IKCZsOGzcPFlU34YEjD9VxVzv9lddhZ9wk6XM8Z Y9s+XSzT/LFaAtXZUn1th8L8ERn+JcBdo/spJzi27wbNybyAKunGn8rTWm/3NUrZ/o8I GbuGTzj+VdgsjI3d1F7JWLdu6iZp8TX9EZpCFoPWJGkYveVgPrdKNHUY9bgSIEbA5eU+ oQBbIX9G2ZLy2LjAvbwZ/0ZlbZD/U63HIiC/VuJRsOyMp60+F1SU9adTU+wqoaC/oMP0 ew7Fh0Exqm/2a7f0juQHURjUGa8gUFFQcv/wEGO7L7RhlL2DAZ27jVjU5a25YPd7ywUU muEQ==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=YItARXID; spf=pass (google.com: domain of fm-1047747-20261026101031e6af87662700020728-mmydog@rts-flowmailer.siemens.com designates 185.136.65.227 as permitted sender) smtp.mailfrom=fm-1047747-20261026101031e6af87662700020728-mmYdoG@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from mta-65-227.siemens.flowmailer.net (mta-65-227.siemens.flowmailer.net. [185.136.65.227]) by gmr-mx.google.com with ESMTPS id 41be03b00d2f7-cd8ccc1732esi132895a12.3.2026.10.26.03.10.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 26 Oct 2026 03:10:34 -0700 (PDT) Received-SPF: pass (google.com: domain of fm-1047747-20261026101031e6af87662700020728-mmydog@rts-flowmailer.siemens.com designates 185.136.65.227 as permitted sender) client-ip=185.136.65.227; Received: by mta-65-227.siemens.flowmailer.net with ESMTPSA id 20261026101031e6af87662700020728 for ; Mon, 26 Oct 2026 11:10:31 +0100 X-Patchwork-Original-From: "'Clara Kowalsky' via isar-users" From: Clara Kowalsky To: isar-users@googlegroups.com Cc: felix.moessbauer@siemens.com, Clara Kowalsky Subject: [PATCH v2 4/4] testsuite: add rootfs-add-files unittest Date: Mon, 26 Oct 2026 11:10:18 +0100 Message-ID: <20261026101018.276241-4-clara.kowalsky@siemens.com> In-Reply-To: <20261026101018.276241-1-clara.kowalsky@siemens.com> References: <20261026101018.276241-1-clara.kowalsky@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1047747:519-21489:flowmailer X-Original-Sender: clara.kowalsky@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=YItARXID; spf=pass (google.com: domain of fm-1047747-20261026101031e6af87662700020728-mmydog@rts-flowmailer.siemens.com designates 185.136.65.227 as permitted sender) smtp.mailfrom=fm-1047747-20261026101031e6af87662700020728-mmYdoG@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com X-Original-From: Clara Kowalsky Reply-To: Clara Kowalsky Precedence: list Mailing-list: list isar-users@googlegroups.com; contact isar-users+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: isar-users@googlegroups.com X-Google-Group-Id: 914930254986 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , X-Spam-Status: No, score=-4.9 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL, RCVD_IN_RP_CERTIFIED,RCVD_IN_RP_RNBL,RCVD_IN_RP_SAFE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on shymkent.ilbers.de X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= Run rootfs_add_files and verify the removal command targets ROOTFSDIR before the replacement is copied. Cover schroot and unshare commands, including the unshare ownership. Signed-off-by: Clara Kowalsky --- testsuite/unittests/test_rootfs_add_files.py | 80 ++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 testsuite/unittests/test_rootfs_add_files.py diff --git a/testsuite/unittests/test_rootfs_add_files.py b/testsuite/unittests/test_rootfs_add_files.py new file mode 100644 index 00000000..1ef7c4a8 --- /dev/null +++ b/testsuite/unittests/test_rootfs_add_files.py @@ -0,0 +1,80 @@ +# This software is a part of Isar. +# Copyright (C) Siemens AG, 2026 +# +# SPDX-License-Identifier: MIT + +from rootfs import TemporaryRootfs + +import os +import sys +import unittest +from unittest.mock import patch +from typing import Tuple + +sys.path.append(os.path.join(os.path.dirname(__file__), '../../bitbake/lib')) + +from bb import process +from bb.build import exec_func +from bb.data_smart import DataSmart +from bb.data import init +from bb.parse import handle + +file_name = 'meta/classes-recipe/rootfs-add-files.bbclass' + + +class TestRootfsAddFiles(unittest.TestCase): + def assert_remove_targets_rootfs(self, run_mock, rootfs_file): + command = run_mock.call_args_list[0].args[0] + if isinstance(command, str): + command = command.split() + self.assertEqual( + command[-3:], ['/usr/bin/rm', '-f', rootfs_file], + 'Expected the existing destination to be removed from ROOTFSDIR.', + ) + + def setup(self, chroot_mode: str, + destination: str = 'install/payload' + ) -> Tuple[DataSmart, TemporaryRootfs]: + rootfs = TemporaryRootfs() + rootfs.create_file('/source', 'payload') + rootfs.create_file('/install/payload', 'old payload') + + d = handle( + os.path.join(os.path.dirname(__file__), '../..', file_name), + init(), + ) + d.setVar('T', f'{rootfs.path()}/temp') + d.setVar('ROOTFSDIR', rootfs.path()) + d.setVar('ROOTFS_ADDITIONAL_FILES', 'payload') + d.setVar('RUN_PRIVILEGED_CMD', 'unshare --mount --user' + if chroot_mode == 'unshare' else 'sudo -E') + d.setVar('ISAR_CHROOT_MODE', chroot_mode) + d.setVarFlag('ROOTFS_ADDITIONAL_FILE_payload', 'source', + f'{rootfs.path()}/source') + d.setVarFlag('ROOTFS_ADDITIONAL_FILE_payload', 'destination', + destination) + return (d, rootfs) + + def test_replace_existing_file(self): + for destination in ('install/payload', '/install/payload'): + with self.subTest(destination=destination): + d, rootfs = self.setup('schroot', destination) + rootfs_file = f'{rootfs.path()}/{destination}' + + with patch.object(process, 'run') as run_mock: + exec_func('rootfs_add_files', d) + + self.assert_remove_targets_rootfs(run_mock, rootfs_file) + + def test_replace_existing_file_unshare(self): + d, rootfs = self.setup('unshare') + rootfs_file = f'{rootfs.path()}/install/payload' + + with patch.object(process, 'run') as run_mock: + exec_func('rootfs_add_files', d) + + self.assert_remove_targets_rootfs(run_mock, rootfs_file) + + +if __name__ == '__main__': + unittest.main()