From patchwork Tue May 9 07:44:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tobias Schaffner X-Patchwork-Id: 2792 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Tue, 09 May 2023 09:45:11 +0200 X-Sieve: CMU Sieve 2.4 Received: from mail-lj1-f184.google.com (mail-lj1-f184.google.com [209.85.208.184]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 3497jAj5030693 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 9 May 2023 09:45:11 +0200 Received: by mail-lj1-f184.google.com with SMTP id 38308e7fff4ca-2ac89cef5e8sf21778621fa.1; Tue, 09 May 2023 00:45:11 -0700 (PDT) ARC-Seal: i=3; a=rsa-sha256; t=1683618305; cv=pass; d=google.com; s=arc-20160816; b=n5JTFCqG/ghSWUMW/DDKzLMbN9EaC1XpMhnGiBx7kuSRB82+iligMGFLzXK12qdGeo U6ctWPg8ToTYBPg49GQ3YZjKCuoxK2SvxZ23+N8B1U9L3enq2YbQ3vZ3xJ/PlC1YaN2X 9UWtShqQrb+NF/zGK0BdmSC3772K4Z8ZmtiPRCocBHniL9nDPam9iEiLll/bjmdhqkMy wrSlM816isuUszOG1iHzJ2hezrTajuy3sINhn810e1vncJzEvlNtlnLg3L9ucYFmqj+a XGj/DSpVutr/1CP6ZA4alfd0iAzVdb2TR8647yLxGmzH8ek2jzrYE3ug1IN36WPFK1lL 2vSw== 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=EH/6oiaDg8qMU88ieUl0OMm2aZZh0izlYMnCHSx0KjA=; b=r40eEIvCjJnaMhvRgk8jdXhMUvgR3gNI+VTzGUVwW/uYIoM9BNloZD80hJYjMOoKKj /fGlkMrcbpKbPwFVN1Kg3IFrEIh+nf92LCH+Xq/D/l+N9l+2pTXIRw3oWJ6i6xGfZFep TZx2tuCCxoUBAIwt98aq0/QW2zzQRTrTGdBjf1YvkoBsC9pa1nMOP8cfliHO6h8mwZ+o Yy2SwlazNheDkA3qwryfbQma0TVtFOYN9mGTpraTHVcYveAQF0K12B5P3AdfVWLa2GD2 r+4vD7XgAtkMg1eMvZoG7wW5iCWKj5V06S4WMozaXjCg6xn9IB2yAur+357f9rH9+Tv1 z/Ww== ARC-Authentication-Results: i=3; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b=q9vErNeV; 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:7eaf::610 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=1683618305; x=1686210305; 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=EH/6oiaDg8qMU88ieUl0OMm2aZZh0izlYMnCHSx0KjA=; b=jeEvoRF149qyrZHdWSbtgtpKRvQfOBR0DJ6kpTARRQ18liN4ogbJOTbrPajfGNZ2Wh c64EEfKVtkxDiFHCWuXh0GeQDrzyvsH0afs5XIDdQxulRE4CoHe8pFb49Bst9BxoP1sa rXnbPzmYgCOhaIbaHNaA1U9LuNl591cST7jUgDDqqJBuzUScbnlJzNPqhD7ZqD+NfW3a P1B5WeK6wmcwp2/uH6VB0gl8v+YNjo8g9G8lDkkSR3cBZC63/3xypYLmC58uAaYm2XQp H/8Cx1YTLsQaiCYd8ATMFzlHC1+ZNlv/mv0hWZReEFYwTdkJClEw5kBXF5BVQ8rctrKv Iwsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683618305; x=1686210305; 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=EH/6oiaDg8qMU88ieUl0OMm2aZZh0izlYMnCHSx0KjA=; b=dnpr4NBlUPzGvLsQHJsbavecktpzMR+tPBJKqdRTTMfi4wL6nIF/kN0hxe/pVVR6bd WTegsED4tu0azTqr+Jste0p4SIOlDbaBe+7OeRMAH9rKkohYqF6rLe9g2QWBoK9ejNv5 cr4p3ECnUMEGgRddQWmwYH7ntJtTp+yI0ysXLG8Eyru/nTwyjYUw5j5cmueTAG/Si1+j n/f3Y95eFTkNL2+NNKXVPGuIRx+j+zXwdZdvhXLd97dKPHYNNG1u4ARVIl4CzVhD/F/I UBvBz719fmWh16x8OTK6pZpfh71GEofeFf0+mHLpMJDLfuvPxaIUCYryPPbsH3C9JgnQ xZYg== X-Gm-Message-State: AC+VfDw5W2TazBcykiAh2JrFx5940ttfH6RwFaHeADf3bSQeZt6TzU+n RN0ZeeC1nx1M7DKcgxz0XUc= X-Google-Smtp-Source: ACHHUZ5xpV8Gzba5eAxZzhS0Yf2CE2MGIMcCmDV9MBJYo+I8YGHkRUeQf0gAbwZcc/E0vTNzlSghDQ== X-Received: by 2002:a2e:3e08:0:b0:2ac:87a6:1738 with SMTP id l8-20020a2e3e08000000b002ac87a61738mr488277lja.0.1683618305476; Tue, 09 May 2023 00:45:05 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a2e:be13:0:b0:2a7:7ca6:a43b with SMTP id z19-20020a2ebe13000000b002a77ca6a43bls292098ljq.1.-pod-prod-03-eu; Tue, 09 May 2023 00:45:04 -0700 (PDT) X-Received: by 2002:a2e:90ca:0:b0:2a8:b188:139a with SMTP id o10-20020a2e90ca000000b002a8b188139amr500328ljg.45.1683618304111; Tue, 09 May 2023 00:45:04 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1683618304; cv=pass; d=google.com; s=arc-20160816; b=FbpaGSijVVBydHvZb2r+95fAaP7Y349QFWw1Rqlb3AahN1nEpHmwCe/P6d7lHbtCK3 s/bUtjovmsM8PoELhxRItPY0Ooqf7dnd8iB5TiCM1DDCZFbaRH82IBZjI1NoJhsopWtv yNp+tOo6Yda0PYEMGucjQ1+gVyu1AxQzdsfmfSBBiLRWKcAbtzIpeh4WpFilefo/4zdU IHcF0pOYVjrQ6gVZc0Yxwartd0cn7j1D8Z61DKtK01rjWOeE950g6wSNfkEBgTHkIyd/ +8gjFXb0BbyhccVkxs/orHXUoZJd0Z2iYG0Dd8hHK8pM/wYbOkXbC0ENDgS2z8cuodcr qYHA== 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=M0Ltgm50tz0ySrE2rBdSa+pfRmGCF0qe7g9yPN8+VHc=; b=AdGpgVTe4kODEBB3S5TFyULTifYGUusndURqkyWP6FFhzmNXw3mvA9nxNdU1l//aHf Lh4zMlqoM8m3r9Qcn3sFpVudkOuNZ40zRRtBJ4AYEpt5MymqrEdJJnVgsWjDAjeW8s5R An7T0Cwx8yjAE6INv4UQPdG5xKSz8Ob/3j7rL6CpLsV/MXwiPzMIsIbNQc83WNC5qsBK psypz1/bQ/JdK1ZMmqhaoM32A4S3KNpVHySLHxF6YdJQw5ZvQp7hBqiS2Pm/vnbeionv kDvZOV8s3RHgUg3XbfGu/GtlDJIrMJPBtcOKOkJeUwcn47zk/bdE+8QfIWsltOnBkMkt HBhw== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b=q9vErNeV; 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:7eaf::610 as permitted sender) smtp.mailfrom=tobias.schaffner@siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on20610.outbound.protection.outlook.com. [2a01:111:f400:7eaf::610]) by gmr-mx.google.com with ESMTPS id bz16-20020a05651c0c9000b002a8b2891ba7si575864ljb.1.2023.05.09.00.45.03 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 May 2023 00:45:04 -0700 (PDT) Received-SPF: pass (google.com: domain of tobias.schaffner@siemens.com designates 2a01:111:f400:7eaf::610 as permitted sender) client-ip=2a01:111:f400:7eaf::610; ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GV7xHfgmhs1ye5AmJhV64u6TDVzdxlVT7Q+HR8wQmqESQXI0D0LZjhAa5HUU+R7BrFWBjNQSdXtJbxn9SxiT1B/W15qNwBup2GLFSZAHNSx1NynspH8444gcOUxFCiT3Usap14xxbfxEfcP7PCsdDcfD8ScZKIwIdN52QXKi/cTVQNxuAxm+mypABJ5HZK3GwLodMQ7UsWqfpdwwaqcV0Ef+AeXY7oZqA/lqtmCLGjUXQCk/2DdqNiypzvs8VKAsaLWU8upv1Ts7Uv9uADb2d7NcSmk99Cq+WxcsBlQxPk4YVydrbHt2tHML5hmG83Nq2HWn0rGBzWrJ52RcY+JMXw== 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=M0Ltgm50tz0ySrE2rBdSa+pfRmGCF0qe7g9yPN8+VHc=; b=Fk+DEQWXutDjUtt8VJMTwSlbCEWy81Cij0d2J0dkpazNT5AAg6wJuZOvP6TFAjyPge0WPX7MQ5rJiLSD4EhpsAu/AbkewX4xREjsKiHfMjhpM4Qur6RjAXAOLHaAGfE5PdJiDdWcW51zrDkMUP60IzZIUCMcDp0Nn0CzG69+wW04Wued6KEHorgc/oSvBp4qA4v05A/Kzo/JlNFoNpm2xqVJU+aDGAqNz9KGm0r7XZoemMe+b6obXcyzju1LNfYctnpwUE8m0/eZfBNNLnRJGNB9Qz+IQ2mjqOYrxqvztoHrtdqVdkC7rvIOXihPzp7MacML4o9OslMflm/QQNdj5Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 194.138.21.74) 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 GV2PEPF000000FC.SWEP280.PROD.OUTLOOK.COM (2603:10a6:144:1:0:1:0:19) by DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:45a::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.32; Tue, 9 May 2023 07:45:02 +0000 Received: from HE1EUR01FT018.eop-EUR01.prod.protection.outlook.com (2a01:111:f400:7e1f::202) by GV2PEPF000000FC.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.6363.32 via Frontend Transport; Tue, 9 May 2023 07:45:02 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 194.138.21.74) 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.74 as permitted sender) receiver=protection.outlook.com; client-ip=194.138.21.74; helo=hybrid.siemens.com; pr=C Received: from hybrid.siemens.com (194.138.21.74) by HE1EUR01FT018.mail.protection.outlook.com (10.152.0.175) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6387.18 via Frontend Transport; Tue, 9 May 2023 07:45:02 +0000 Received: from DEMCHDC8WBA.ad011.siemens.net (139.25.226.105) by DEMCHDC8VQA.ad011.siemens.net (194.138.21.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.25; Tue, 9 May 2023 09:45:01 +0200 Received: from L15-Gen2.fritz.box (139.22.36.202) 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; Tue, 9 May 2023 09:44:58 +0200 X-Patchwork-Original-From: "'T. Schaffner' via isar-users" From: Tobias Schaffner To: CC: , , "Tobias Schaffner" Subject: [PATCH v2 3/4] add unittests for the image-account-extension Date: Tue, 9 May 2023 09:44:11 +0200 Message-ID: <20230509074412.86392-4-tobias.schaffner@siemens.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230509074412.86392-1-tobias.schaffner@siemens.com> References: <20230509074412.86392-1-tobias.schaffner@siemens.com> MIME-Version: 1.0 X-Originating-IP: [139.22.36.202] 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: HE1EUR01FT018:EE_|DB9PR10MB7100:EE_ X-MS-Office365-Filtering-Correlation-Id: 858d4446-af2f-49c1-7fee-08db50614c30 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wzw8j8ilDyvSN2I+3khV09x4sx/zDrx8I/pdXQpvTcQRYbUOztreQSASEHRbHXPZ9hCUAWbSyobqfLU/Zei1DOxGeXNVgqfgsbUCfHQbLCoOjoKnOHOdZgmCjblVa4bxsr/bjBCll37wgmDi73FBoC49uc76uwzwOZKlXW4oDO/sfVRXq8j40ra62mUDCAg37QHnfaVBok1b+vuxZu5EBZW4dPcOFFBYY1gILMBNTBsMnOEMiQTuvPruWSOMn8sAH3Q6s8mm6xUH2+a+7PTmkvBP2jNA+tf5AbRTGMst5TsfkP2w0GuOF6ql6P1v6PY9PCGzH2HpGxjaSvxML5fvsueyql5gpVoDgXZBF6sqT6p7Q1hBxfihYAxdtossR6UVZpGTGhaZ8Dzp+vVOI37Nlpe8od5xBZ/oRf8jmPwM+sqWdMe3IMM5XDNiEfuS6ECys0ePnZ6/wgJtIK69gI9u53VB7/lFaIfSShYW4YQzCkvZDJ1Kl0Olb9VikOvfVvm0PzhJsmGmoGP5HES9YuU0UsrG+Kzfgt+5crALw1xtQrlskIWt+a+sqyh3hJLnLT6+GesIJq4DISosl9vSuVWTthWy/N6PW1igV++ZCNwwb8ep3Tt/xX+uYcUO/7iKXUjokse1SMouQdQr9xwjJ4dA0q1OuYOMWjdGTwMvGbNXaci30VmA2F/KNpOOpoUtJ5aB3Kt4gWWCDaEN5h16Gguppw== X-Forefront-Antispam-Report: CIP:194.138.21.74;CTRY:DE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:hybrid.siemens.com;PTR:hybrid.siemens.com;CAT:NONE;SFS:(13230028)(4636009)(39860400002)(346002)(376002)(136003)(396003)(451199021)(46966006)(36840700001)(40470700004)(336012)(86362001)(36756003)(54906003)(316002)(478600001)(70206006)(6916009)(4326008)(70586007)(82310400005)(40480700001)(5660300002)(41300700001)(2906002)(15650500001)(8676002)(8936002)(186003)(356005)(16526019)(82960400001)(7596003)(7636003)(82740400003)(26005)(107886003)(1076003)(36860700001)(47076005)(83380400001)(2616005)(956004)(6666004)(40460700003);DIR:OUT;SFP:1101; X-OriginatorOrg: siemens.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2023 07:45:02.1166 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 858d4446-af2f-49c1-7fee-08db50614c30 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.74];Helo=[hybrid.siemens.com] X-MS-Exchange-CrossTenant-AuthSource: HE1EUR01FT018.eop-EUR01.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR10MB7100 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=q9vErNeV; 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:7eaf::610 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 This is a first example on how to use the unittest_isar module to test python functions defined in a bitbake file. Signed-off-by: Tobias Schaffner --- .../unittests/test_image_account_extension.py | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 testsuite/unittests/test_image_account_extension.py diff --git a/testsuite/unittests/test_image_account_extension.py b/testsuite/unittests/test_image_account_extension.py new file mode 100644 index 00000000..d35de723 --- /dev/null +++ b/testsuite/unittests/test_image_account_extension.py @@ -0,0 +1,145 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2023 +# +# SPDX-License-Identifier: MIT + +from bitbake import load_function, DataSmart +from rootfs import TemporaryRootfs + +import unittest +from unittest.mock import patch +from typing import Tuple + + +file_name = "meta/classes/image-account-extension.bbclass" +image_create_users = load_function(file_name, "image_create_users") +image_create_groups = load_function(file_name, "image_create_groups") + + +class TestImageAccountExtensionCommon(unittest.TestCase): + + def setup(self) -> Tuple[DataSmart, TemporaryRootfs]: + rootfs = TemporaryRootfs() + + d = DataSmart() + d.setVar("ROOTFSDIR", rootfs.path()) + + return (d, rootfs) + + +class TestImageAccountExtensionImageCreateUsers(TestImageAccountExtensionCommon): + + def setup(self, user_name: str) -> Tuple[DataSmart, TemporaryRootfs]: + d, rootfs = super().setup() + rootfs.create_file( + "/etc/passwd", "test:x:1000:1000::/home/test:/bin/sh") + d.setVar("USERS", user_name) + return (d, rootfs) + + def test_new_user(self): + test_user = "new" + d, rootfs = self.setup(test_user) + + with patch.object(bb.process, "run") as run_mock: + image_create_users(d) + + run_mock.assert_called_once_with( + ["sudo", "-E", "chroot", rootfs.path(), "/usr/sbin/useradd", test_user]) + + def test_existing_user_no_change(self): + test_user = "test" + d, _ = self.setup(test_user) + + with patch.object(bb.process, "run") as run_mock: + image_create_users(d) + + run_mock.assert_not_called() + + def test_existing_user_home_change(self): + test_user = "test" + d, _ = self.setup(test_user) + d.setVarFlag("USER_{}".format(test_user), "home", "/home/new_home") + + with patch.object(bb.process, "run") as run_mock: + image_create_users(d) + + assert run_mock.call_count == 1 + assert run_mock.call_args[0][0][-5:] == ["/usr/sbin/usermod", + '--home', '/home/new_home', '--move-home', 'test'] + + def test_deterministic_password(self): + test_user = "new" + cleartext_password = "test" + d, _ = self.setup(test_user) + + d.setVarFlag("USER_{}".format(test_user), + "flags", "clear-text-password") + d.setVarFlag("USER_{}".format(test_user), + "password", cleartext_password) + + source_date_epoch = "1672427776" + d.setVar("SOURCE_DATE_EPOCH", source_date_epoch) + + # openssl passwd -6 -salt $(echo "1672427776" | sha256sum -z | cut -c 1-15) test + encrypted_password = "$6$eb2e2a12cccc88a$IuhgisFe5AKM5.VREKg8wIAcPSkaJDWBM1cMUsEjNZh2Wa6BT2f5OFhqGTGpL4lFzHGN8oiwvAh0jFO1GhO3S." + + with patch.object(bb.process, "run") as run_mock: + image_create_users(d) + + assert run_mock.call_count == 2 + assert run_mock.call_args[0][1] == "{}:{}".format( + test_user, encrypted_password).encode() + + +class TestImageAccountExtensionImageCreateGroups(TestImageAccountExtensionCommon): + + def setup(self, group_name: str) -> Tuple[DataSmart, TemporaryRootfs]: + d, rootfs = super().setup() + rootfs.create_file("/etc/group", "test:x:1000:test") + d.setVar("GROUPS", group_name) + return (d, rootfs) + + def test_new_group(self): + test_group = "new" + d, rootfs = self.setup(test_group) + + with patch.object(bb.process, "run") as run_mock: + image_create_groups(d) + + run_mock.assert_called_once_with( + ["sudo", "-E", "chroot", rootfs.path(), "/usr/sbin/groupadd", test_group]) + + def test_existing_group_no_change(self): + test_group = "test" + d, _ = self.setup(test_group) + + with patch.object(bb.process, "run") as run_mock: + image_create_groups(d) + + run_mock.assert_not_called() + + def test_existing_group_id_change(self): + test_group = "test" + d, rootfs = self.setup(test_group) + d.setVarFlag("GROUP_{}".format(test_group), "gid", "1005") + + with patch.object(bb.process, "run") as run_mock: + image_create_groups(d) + + run_mock.assert_called_once_with( + ["sudo", "-E", "chroot", rootfs.path(), "/usr/sbin/groupmod", "--gid", "1005", test_group]) + + def test_system_flag(self): + test_group = "test" + d, _ = self.setup(test_group) + d.setVarFlag("GROUP_{}".format(test_group), "flags", "system") + + with patch.object(bb.process, "run") as run_mock: + image_create_groups(d) + + assert run_mock.call_count == 1 + assert "--system" in run_mock.call_args[0][0] + + +if __name__ == "__main__": + unittest.main()