From patchwork Mon May 22 06:55:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tobias Schaffner X-Patchwork-Id: 2822 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Mon, 22 May 2023 08:56:08 +0200 X-Sieve: CMU Sieve 2.4 Received: from mail-lf1-f60.google.com (mail-lf1-f60.google.com [209.85.167.60]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 34M6u765015506 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 22 May 2023 08:56:07 +0200 Received: by mail-lf1-f60.google.com with SMTP id 2adb3069b0e04-4f3932e5a4esf1722577e87.0; Sun, 21 May 2023 23:56:07 -0700 (PDT) ARC-Seal: i=3; a=rsa-sha256; t=1684738562; cv=pass; d=google.com; s=arc-20160816; b=mPV451T5+NnxqnHtzj8ppwDJiUmSji3lcPUVt+8iwUf65ookJeNohd9c4wArIJMqDB a4/uV0lZ2RJVMyFJZ3RQZnxWJeYGrsyb7LE2YufBuZleefzvVWIG8xf8W0eYBycVN2Pi VaflIwXPSieozICoK+jQIFtBiGP1DNMDROQmY7S6pWBVxUq5eJxyC7H7wbfiHwoSf0Ez yS4FGc1o76WqM4K2UgTB7TIUIWmHGnzdkW4yeG5V2mf5WseQRXqEwJryS6YsAq5jkpto jrCyfuvUKoG3PklxK/99Fmi1+xUzEIWMV8s9wHug3C04+2IUI4+CDBqO2xh2J4PIwqIF Ppsw== ARC-Message-Signature: i=3; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=GVE2YpHqXiG2TcfEgJbnRNuD48o4ZFuJOKNRMFq3KMc=; b=MYUh7tBGjvmfl2WDST8kvvK/sYjZ3QqnQEbdv0yxrequeCPgSgQW+A2Nn6kbssjVy+ VyIMEJDYab96LIpml2wOgHO7g50DcEOuxvbVz5UmTw/lNwRzFZDrJFeVqzCFXNJZC/co vIaN6cDwP82WHnQ543x/f0NS3dzzLYTumqXLXCx0BLCkMUZUwaTnpYGuXfiJy1zLd3Bt /j2cBhAalRtPpzcACDDzDqcmABJS6G+1+VB4kHjwX8ZihZ3tqM5VH59/g1g6LugSX7IJ zzjohGUnJZ88ef72vJ5pSn4s9+cQ2mKBprhrcV1fOVgIiV0K5mJu1aM1IyXLVoXpqk8x Aksg== ARC-Authentication-Results: i=3; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b="yD1/oZxC"; arc=pass (i=1 spf=pass spfdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of tobias.schaffner@siemens.com designates 2a01:111:f400:fe16::626 as permitted sender) smtp.mailfrom=tobias.schaffner@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=20221208; t=1684738562; x=1687330562; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=GVE2YpHqXiG2TcfEgJbnRNuD48o4ZFuJOKNRMFq3KMc=; b=NnZQRvwh+sXeTyfSafdJcF2hdADtX0mKO3CINjuE51xxMtZPJI62uSPbKCibtsLbnM rpd+LI5wTtbTspycJDkxxAwD/9AJ74ztKFn+JZmpSLFvE64x5TfiEdXKTDf57Lzcb78w D4XN7JfW7GUxA7I1TsgsDt9zcdDsyiwKyVfeRxrKgDQkrG1wKiI/H4HsGmjh4v1bb6Jj UAkDiKJol0FvCmcjTYpRf6mrpXCYrXsFZdpr3ZKl7MNVv2LRvs3ji6S1WkjAyOdRGz4/ u7ynNyql5My3xIQ6FJ2DteYfI93aTqnzc79OCXhRpG1wuYxYSuM9lw70IruARsSh+dWE i1tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684738562; x=1687330562; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender: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; bh=GVE2YpHqXiG2TcfEgJbnRNuD48o4ZFuJOKNRMFq3KMc=; b=fYpAwTevLjX1Vx5goHo9f4kKFxsAZgaTYSzri5vMgf0J1edYT1EA5lzwSb56UMBd2R Z0eZoOxEUMyVTvrhsXp2B2WTmd10pUVfeXSxaXMLWcKZ53WevmhJKpf5Wlv9szzYZuCN MbT1JK1IWVGYSTmzzMSOKWLdr1DG7H8eFuTiSPlejm0j2ZgFniP0pAGDJP6kek/Fy/2G KwHIl2y8bFULUdeniug3xLGFC7Y+8fq1TnxXyeptaFIw2mNmJdwcHfynvEtXgYo35dcI pnvu4WFcgRgC3kqTsgNHTlFP8/GPpNNOaU7llmyVqHUZDjlZawxsG2Ho3sNyodQLk0zQ yfRA== X-Gm-Message-State: AC+VfDwExFge54yoaiNiIEV15zXdraL8agpBpfcWorZZkXbYw6a2x90y MnP4uxNtGWvCJ0ft3Snrwew= X-Google-Smtp-Source: ACHHUZ799f2UwBduzzoYywEI4jTM+C/iqanrA2yFCWm+3E2p/cKe4k0AhOiRKvCSR9ztVSLFl1PerA== X-Received: by 2002:a19:f00a:0:b0:4f3:a7d3:28d4 with SMTP id p10-20020a19f00a000000b004f3a7d328d4mr2346364lfc.0.1684738561994; Sun, 21 May 2023 23:56:01 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a19:7715:0:b0:4f2:5056:2be with SMTP id s21-20020a197715000000b004f2505602bels871657lfc.0.-pod-prod-04-eu; Sun, 21 May 2023 23:56:00 -0700 (PDT) X-Received: by 2002:a05:6512:146:b0:4f3:b2ce:7a15 with SMTP id m6-20020a056512014600b004f3b2ce7a15mr2693678lfo.29.1684738560607; Sun, 21 May 2023 23:56:00 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1684738560; cv=pass; d=google.com; s=arc-20160816; b=hFDCK0sYuKNSWsHFvh42tFuKGD3nXM41FV6FvpDcIh9O1zwG/M1gaegKzCk7upfmFK VR5rmKsNzVvg2GE3XvxZgFszYCqQnj8evfPEA60rdv5gh4WaCw1ti3aIX5ER/XMJkUY5 nZSCCABb04AHpS/smYcOXsPg4Lv9rrjC5uLYl569M5Czq2ueJkaK3IL0PQWlcvUe2VnR V9SFYkLvFcX34zgHcijSWwbAFEAplHBJr3L/KVcc9KcBeNpBgBm76DDZBr8KZh+huOZC n0PJxaPw9Eu6dkJA3jYGR4Vxppn6SFLvnQZgrc49nB5FTbi0fI7igDqpScGM8keoRoOR OGNw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=Cyz4pf25ub2ZI5LaoEn0HCNrbYRL1G5mREaDYfAtdEQ=; b=Sb58tk+P48NT0xhCu/iU3/k9GW5PNRR0rLYWN9BJ/mtQ92PmplEyuJhdE/s/ZuxgxL JAH5K/s5I8JVqgHrKC+bY/EydMrVP9DlbsyycJc11hEBj7RjXwQm1E/vxzqo+zX9+qeK 9eLDKovqmtBJAnEb4seXBLRnavq5DeJa+7Vzj4biorpdFQ8K8AKiBQ6FsJk1rrC+PTOi Ux6Ej7qdgHcDBJToIaXtF4VnYm+wP3Ywuml9SAGsQ6qeWob7m9ChXHrw5VlBOrSX3+/p /h45rXUWHU4zn71FsWlDLmlJ6jqEhtQIdjf9dLhfXsZmJdHc9ISiTn/2L+Rk+5I1DI44 Kg1A== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b="yD1/oZxC"; arc=pass (i=1 spf=pass spfdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of tobias.schaffner@siemens.com designates 2a01:111:f400:fe16::626 as permitted sender) smtp.mailfrom=tobias.schaffner@siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on20626.outbound.protection.outlook.com. [2a01:111:f400:fe16::626]) by gmr-mx.google.com with ESMTPS id o15-20020ac24bcf000000b004f1371664bfsi407380lfq.8.2023.05.21.23.56.00 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 21 May 2023 23:56:00 -0700 (PDT) Received-SPF: pass (google.com: domain of tobias.schaffner@siemens.com designates 2a01:111:f400:fe16::626 as permitted sender) client-ip=2a01:111:f400:fe16::626; ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RHMcbnVY2EODO0qKkl32cmq2RPDYnSxDLDVVkNFhaz48MHuFyIDVrPqwBH4iSZOewN33ghd8wy/cs5uUiC/zp08rZfym/GVB8IXK8OzW0tu74FFZGXSyUrjmRn1WSQEPZHGX2BCBQfjtQv1itpwJeRH2pt5260ohRQY97aBouYM7SNImh16jzsN3vCuYnzrcqxhkrwNKyXy1644l1uW45bM7SgrxEH2HFbNQBuNoRkbT81v0QRGflNgeNPfi3+faNzQNGCdR9vtIeLDZ7DwGG/SGAztAKyqS5aBD8aebdZM4DjMv2ASnFGbUVJ9iD0zqe5/kJZfZQiQ0s0UaKMmU1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Cyz4pf25ub2ZI5LaoEn0HCNrbYRL1G5mREaDYfAtdEQ=; b=nZhjB3Qp0kwsLMYh0JrrzQkt3RttEwxMxDO+L0vsBWhdJx/8+MohDiovraazHR42Ef4vUNeR+W4/X0BP6VQ2ZUILaygDe6d1I6zRZy/V4NGzzEcH7xFzM/YumhHPBHpElK5oYWM9ht+9Bvrc83k5NrxyFykXxjMKruH1WwEImP97QStOm43qMxt7w9xd5zN7GJNNPCcGxzXO3KOaYLYxPyH1NGIt92ho9Ik+e3N4rCyKRNYNqVdskkrjBar5Byy8KKnAVf351RRyB6PwHSDbRdzzyGvki8xJUMvVsoQEIMjxYbLCEY1D3M9mOMjdPoGjXJyzNyAWhQ0YV3b/pikdng== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 194.138.21.75) smtp.rcpttodomain=googlegroups.com smtp.mailfrom=siemens.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=siemens.com; dkim=none (message not signed); arc=none Received: from GV2PEPF000000F9.SWEP280.PROD.OUTLOOK.COM (2603:10a6:144:1:0:1:0:18) by VI1PR10MB3197.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:803:13c::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.28; Mon, 22 May 2023 06:55:58 +0000 Received: from HE1EUR01FT102.eop-EUR01.prod.protection.outlook.com (2a01:111:f400:7e1f::208) by GV2PEPF000000F9.outlook.office365.com (2603:1026:900::3) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.21 via Frontend Transport; Mon, 22 May 2023 06:55:58 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 194.138.21.75) smtp.mailfrom=siemens.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=siemens.com; Received-SPF: Pass (protection.outlook.com: domain of siemens.com designates 194.138.21.75 as permitted sender) receiver=protection.outlook.com; client-ip=194.138.21.75; helo=hybrid.siemens.com; pr=C Received: from hybrid.siemens.com (194.138.21.75) by HE1EUR01FT102.mail.protection.outlook.com (10.152.1.64) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.19 via Frontend Transport; Mon, 22 May 2023 06:55:58 +0000 Received: from DEMCHDC8WBA.ad011.siemens.net (139.25.226.105) by DEMCHDC8VRA.ad011.siemens.net (194.138.21.75) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.25; Mon, 22 May 2023 08:55:57 +0200 Received: from L15-Gen2.fritz.box (139.22.37.93) by DEMCHDC8WBA.ad011.siemens.net (139.25.226.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.25; Mon, 22 May 2023 08:55:56 +0200 X-Patchwork-Original-From: "'T. Schaffner' via isar-users" From: Tobias Schaffner To: CC: , , , Tobias Schaffner Subject: [PATCH v3 2/4] create a minimal python unittest infrastructure Date: Mon, 22 May 2023 08:55:29 +0200 Message-ID: <20230522065531.2300448-3-tobias.schaffner@siemens.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230522065531.2300448-1-tobias.schaffner@siemens.com> References: <20230522065531.2300448-1-tobias.schaffner@siemens.com> MIME-Version: 1.0 X-Originating-IP: [139.22.37.93] X-ClientProxiedBy: DEMCHDC8WAA.ad011.siemens.net (139.25.226.104) To DEMCHDC8WBA.ad011.siemens.net (139.25.226.105) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: HE1EUR01FT102:EE_|VI1PR10MB3197:EE_ X-MS-Office365-Filtering-Correlation-Id: ce035dd9-8c74-4228-d503-08db5a9198b4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XShwAA6C5ZvM55QOzjyXIXwiasZMd8sAdWqdZIpwHNoK2EqBnmzr4OIdfDs/GPQxTKgFy35ewyyFw1ptZBQbb9CucSo3nru+pincPDsgdBzWgmZfPFi5ktlFaNZ8rzln55xg53kFYWw35E2sxCRPFu9tOcUR6oswlf1EzeImg3gPXz3X2birKOpX4BRaKOFPOTru5Gto72mj6rRHEetGgfyicQGWZH5JbMXh1MZQdJHblNnxoHM9MPuoSe9PL+A0ZpConzi9vKIa6ivtvppG9wTQGnBIpr/8rX/4mLBlRRb/E+U9owXoA6qc64hjwhpmzFyRL4Nkwd6LNfkFQuj7EO2jJqq72WtdPYs3W8e3t6l25R1H6EB+vOt3IdvvnSSsCMRKnTdIM6LTSSlMaDg+aX0GH2DsAb0C0EeNc/x0UIcrYNtOwRmzjfnJzTqNqV7IqwYX6HRGuM7DlAhK+dUEkoq2GOB9qk9j/ScOIQmQ+flLg/IA7v8OmB24bhQpV0TJ2vnF09kwgG31s2AG5sqom2Ly7+bi9wjBuIvud4fjUDpoV2TgnwIz5kWnDjJAJRncSAHVJh9t1R9fe6wflfWNh453lL6Nq3BH59ogkGNFNTxXglbIhXyyg/AwITTHql2/bR5LemmpWXABhAugGIljnG5UCyLaCcvONW9oPlwR1P44zgF0yGmVuOLznAvN+JoyOJ8yepjy2K2t4OyaNvOm67byBqrc9NOAb0NkcFQ5gCOh4quY7NjrpMwQeacRVGrgVoFIpQp1KZvXARwvCCmIUsuKxGXm0lHTDV3lzWqgkaQ= X-Forefront-Antispam-Report: CIP:194.138.21.75;CTRY:DE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:hybrid.siemens.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230028)(4636009)(136003)(396003)(39860400002)(346002)(376002)(451199021)(40470700004)(46966006)(36840700001)(8676002)(8936002)(5660300002)(82310400005)(47076005)(36860700001)(186003)(16526019)(107886003)(1076003)(26005)(956004)(2616005)(336012)(86362001)(82960400001)(356005)(81166007)(82740400003)(40460700003)(41300700001)(40480700001)(6666004)(478600001)(4326008)(6916009)(36756003)(70586007)(70206006)(316002)(54906003)(2906002)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: siemens.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2023 06:55:58.0709 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ce035dd9-8c74-4228-d503-08db5a9198b4 X-MS-Exchange-CrossTenant-Id: 38ae3bcd-9579-4fd4-adda-b42e1495d55a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=38ae3bcd-9579-4fd4-adda-b42e1495d55a;Ip=[194.138.21.75];Helo=[hybrid.siemens.com] X-MS-Exchange-CrossTenant-AuthSource: HE1EUR01FT102.eop-EUR01.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR10MB3197 X-Original-Sender: tobias.schaffner@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b="yD1/oZxC"; arc=pass (i=1 spf=pass spfdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of tobias.schaffner@siemens.com designates 2a01:111:f400:fe16::626 as permitted sender) smtp.mailfrom=tobias.schaffner@siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com X-Original-From: "T. Schaffner" Reply-To: "T. Schaffner" 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=-1.2 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H2,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?= From: Tobias Schaffner Add some some infrastructure for python unittesting. The unittest_isar module exposes a function that uses the bb.parse module to import python functions that are defined in bitbake files. Signed-off-by: Tobias Schaffner --- testsuite/unittests/README.md | 28 +++++++++++++++++++++ testsuite/unittests/bitbake.py | 37 ++++++++++++++++++++++++++++ testsuite/unittests/rootfs.py | 45 ++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 testsuite/unittests/README.md create mode 100644 testsuite/unittests/bitbake.py create mode 100644 testsuite/unittests/rootfs.py diff --git a/testsuite/unittests/README.md b/testsuite/unittests/README.md new file mode 100644 index 00000000..75a3bb01 --- /dev/null +++ b/testsuite/unittests/README.md @@ -0,0 +1,28 @@ +# Isar Unittests + +The unittest python module adds some simple infrastructure that allows to +unittest python functions defined in bitbake files. + +## Running the tests + +You can run the tests using avocado with `avocado --show=app,test run testsuite/unittests/` +or by using the buildin module with `python3 -m unittest discover testsuite/unittests/` + +## Creating new tests + +See the [unittest documentation](https://docs.python.org/3/library/unittest.html) +on how to create a test module and name it test_*bitbake_module_name*.py + +Use the function `load_function(file_name: str, function_name: str) -> Callable` +in the bitbake module to load the function. + +Example: +```python +from bitbake import load_function + +my_function = load_function("meta/classes/my_module.bbclass", "my_function") +my_function(arg1, arg2) +``` + +Use the [unittest.mock](https://docs.python.org/3/library/unittest.mock.html) +library to mock the bb modules as needed. diff --git a/testsuite/unittests/bitbake.py b/testsuite/unittests/bitbake.py new file mode 100644 index 00000000..1e2f685a --- /dev/null +++ b/testsuite/unittests/bitbake.py @@ -0,0 +1,37 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2023 +# +# SPDX-License-Identifier: MIT + +import sys +import pathlib +from typing import Callable + +location = pathlib.Path(__file__).parent.resolve() +sys.path.insert(0, "{}/../../bitbake/lib".format(location)) + +from bb.parse import handle +from bb.data import init + +# Modules added for reimport from testfiles +from bb.data_smart import DataSmart + + +def load_function(file_name: str, function_name: str) -> Callable: + """Load a python function defined in a bitbake file. + + Args: + file_name (str): The path to the file e.g. `meta/classes/my_special.bbclass`. + function_name (str): The name of the python function without braces e.g. `my_special_function` + + Returns: + Callable: The loaded function. + """ + d = init() + parse = handle("{}/../../{}".format(location, file_name), d) + if function_name not in parse: + raise KeyError("Function {} does not exist in {}".format( + function_name, file_name)) + namespace = {} + exec(parse[function_name], namespace) + return namespace[function_name] diff --git a/testsuite/unittests/rootfs.py b/testsuite/unittests/rootfs.py new file mode 100644 index 00000000..6c511493 --- /dev/null +++ b/testsuite/unittests/rootfs.py @@ -0,0 +1,45 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2023 +# +# SPDX-License-Identifier: MIT + +import tempfile +import pathlib +import shutil +import atexit + +temp_dirs = [] + + +class TemporaryRootfs: + """ A temporary rootfs folder that will be removed after the testrun. """ + + def __init__(self): + self._rootfs_path = tempfile.mkdtemp() + temp_dirs.append(self._rootfs_path) + + def path(self) -> str: + return self._rootfs_path + + def create_file(self, path: str, content: str) -> None: + """ Create a file with the given content. + + Args: + path (str): The path to the file e.g. `/etc/hostname`. + content (str): The content of the file e.g. `my_special_host` + + Returns: + None + """ + pathlib.Path(self._rootfs_path + + path).parent.mkdir(parents=True, exist_ok=True) + with open(self._rootfs_path + path, 'w') as file: + file.write(content) + + +def cleanup(): + for temp_dir in temp_dirs: + shutil.rmtree(temp_dir) + + +atexit.register(cleanup)