From patchwork Wed Jan 25 09:01:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tobias Schaffner X-Patchwork-Id: 2530 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Wed, 25 Jan 2023 10:02:35 +0100 X-Sieve: CMU Sieve 2.4 Received: from mail-ed1-f60.google.com (mail-ed1-f60.google.com [209.85.208.60]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 30P92ZfT026056 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 25 Jan 2023 10:02:35 +0100 Received: by mail-ed1-f60.google.com with SMTP id m12-20020a056402430c00b0049e4ac58509sf12508327edc.16; Wed, 25 Jan 2023 01:02:35 -0800 (PST) ARC-Seal: i=3; a=rsa-sha256; t=1674637350; cv=pass; d=google.com; s=arc-20160816; b=BvpUfyxOgL2Shrk4OeMDBZ1MFDWj994rarTWQZAGkhYzOB8O3f+PoyBnaixtdDCtg5 viC6M1VmlPmf5EfjRyZ5WAA9hyZA6x5whQlZpKW+i3UNkUPc8xUxAk0H9kylsrP3CDM5 IE2gAeWSyvzHgP0sQVP947JRODhf7rX4lLhk0gNYT+nCExCoHmo8Zl08FNBv+HfWuNQs yJp2PxA0TifZ6+GpYMZUioMX/BDimObuKnoI8B8uvTjfzHFQp5k54jh+O9tS9j+pE1av deG1HPAsP2KqKHzud9F4LN20HgzUQukWzwoEEYeMVAMa3GVjaVqeGsj2/67EHpsnAxWE a/jQ== 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:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:dkim-signature; bh=j4a5HsY7f2z+BhF+Cb3ooA9PLv/8R9CJpirZrCEMubA=; b=XwopxMG16pu5MgXfaNawfVdoSxWEeiwa68Q5SDjZqIoKWz9xCBA9hwky1LZCB1BMmi /arAWzFmERUa0WBmIq8ZZjY6EuR6Z5lkZXPkwv1Iadz97tVqOtC/xetQHb79S32LV0ML IwkLGtU9FkNC6AaTtxIfFYyP96pYHXeEMRJhIwmoa/Ujjbp72hIZqebYvw40x2Y+1twY y+XcXkMSYPCYIhpLe6IAsi835dICxZ2EJhsuMeAAnX6cz1ZH6RHseQx4709y7ka7sAFF emx8VsIO5fK9LFOLIJUfHa5kUtCCFzSE5azFCw3PRHbwWem0pVo018C/RJ5cA6ttNvn6 bdWA== ARC-Authentication-Results: i=3; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b=KKcTEGbD; 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 40.107.6.79 as permitted sender) smtp.mailfrom=tobias.schaffner@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20210112; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:sender:from:to:cc:subject:date:message-id :reply-to; bh=j4a5HsY7f2z+BhF+Cb3ooA9PLv/8R9CJpirZrCEMubA=; b=qx/bPMJ4x5d3p+8xvxhb7CDBc5WMw9MaYybmyiqfzKSoJKn3pSmkOVmGmY2FtoWNmc BS8fZ1+gfcYsVefU5qnmDUdgxtcuqYn20hBVhuVdBVJCVnRYdgSIk6U1YrQnnipuH49C 7FjMxT759Cdhq4ZxQEE+Fuw5edVF09t8nC1S1xUgxEjZlWqYbaqeoMBPgMgbCFBTVUMA lIndZKF3xpYg7yRXalO4Ht981tHiz5J69m9x77f71nzr9xVO8r6HV4uYEuvSt8a/k4bg SGbQVAh/os7dG0b5V0uW87UvP+U7tltSAwEq8KIG4xTGk7I/mxoL5ANeab/sAAM7Rwt6 c4uA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:sender:from:to:cc:subject:date:message-id :reply-to; bh=j4a5HsY7f2z+BhF+Cb3ooA9PLv/8R9CJpirZrCEMubA=; b=l79ohuR87oL63gZsLRdcmBou9PfdLNTGDvHIN+0t4bUT3vUhRh1FxeJrrmt3ddlXKE xEZ4TWumdpk/pVkxfDQITFHuN7RrAP/fw+36W8maowIWcR11Sl+eyRl7NWuSB4/Zhrow Uw7WO9wpfSa2Nb0lKrBtOQtrPRUR9ffGWCvkrwom4einhG6HKfuUgtK6NEeM6syo+bZM oiynSAquqJWbxS/wQcepB6YxV1WjEyDZFjfVtvDkmGu+v3FtpuFUYIl7dkulzScDsBnR WldQTNftY9M0pwu9+q8IAwP+4sP9M2npzXL2ehxmxap11rIgXMjTqs5HVeI8bWLmKcv+ KrCA== Sender: isar-users@googlegroups.com X-Gm-Message-State: AFqh2kqN0aE+vEkPjiEaC3/Hd4/5c/xMGNO/CXesCGxtej8N3bqLS8tI d7x049/UN+eXxZB7Xe/LwD4= X-Google-Smtp-Source: AMrXdXtHchiAxJ5cGySGHaWyHyXcp18GKFI88KrNLFEDBziDrVYPAH8XEdpj0cZ9j2miaIZIhg8eIg== X-Received: by 2002:a05:6402:2998:b0:46f:a73d:6bd7 with SMTP id eq24-20020a056402299800b0046fa73d6bd7mr4981669edb.93.1674637350119; Wed, 25 Jan 2023 01:02:30 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a05:6402:270a:b0:49e:5b8c:71c4 with SMTP id y10-20020a056402270a00b0049e5b8c71c4ls3041969edd.3.-pod-prod-gmail; Wed, 25 Jan 2023 01:02:29 -0800 (PST) X-Received: by 2002:aa7:cc98:0:b0:486:ecd3:15f8 with SMTP id p24-20020aa7cc98000000b00486ecd315f8mr31565283edt.6.1674637349004; Wed, 25 Jan 2023 01:02:29 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1674637348; cv=pass; d=google.com; s=arc-20160816; b=v2wyQvvgaoZYoXkemspViV7HbByxbNWfYgiGcFbWF7JSO/j9PqlwI57R+kVQ5JfTLz P7teGLYvCqMNHXbnq7Vc1umy/8rpWLc+PGxXC+lAWAI/K05nNve3jhywDlo7qpasyoJd DzKG/gOjgTTJGrm3UsV0RbwwfShdSyKDIJDmuZdfxP1A5e32m36yyVAjuaT/7Gh9oH1O EjstUroq8qNH1PcFvR8tTCt6dplK3/4O3RMo2SnkboAztQIzczoEZtVCKAY3gsKM4jyw VLjNMkPQOxHqsDJQb4Q1f7f8GFLJ9EjUqjP2918goENkhN5LZZnPHlYwhgjnU2RbowGW yRWA== 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=VX6SmAt5yUemBBxovjDjoKBtRqbWALt82gZOIkEbGes=; b=es8GM7lUC20nLXtGM4UyWFSWbJPEzOVsy2FFAW/AaG+V5Li3jrypdZezDSLTO9uq0D EwYetleLZszLIiNRfyDcGCQx705WMiZNMam5gRI7K03Yy8qmdOZ4xiBzvRIqyr5XCaFu uVv/jFm1AcF8bDLq8YRoK4c7DbUiw8msfppLNESRs6lTXcRMUIl2UERpocq5ryc1PnX4 d4dTH9LBxAxspscGdiHksmET1vVkAvzicVV7k4BDUPLYppJcy8M+UgcxUCPdCs7I1iVP wIddrgMBoLSDwZCurhE6EUeSp80L4yBvxH2sJl2oyrfr4ladeETuUDVa6Q5Y0aF6BRVw C+AA== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b=KKcTEGbD; 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 40.107.6.79 as permitted sender) smtp.mailfrom=tobias.schaffner@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2079.outbound.protection.outlook.com. [40.107.6.79]) by gmr-mx.google.com with ESMTPS id u25-20020a056402065900b0045a1a4ee8d3si249963edx.0.2023.01.25.01.02.28 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Jan 2023 01:02:28 -0800 (PST) Received-SPF: pass (google.com: domain of tobias.schaffner@siemens.com designates 40.107.6.79 as permitted sender) client-ip=40.107.6.79; ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kPK28i1TqCwmZdFihJXB5mL5pdS2vqBYR3dwRqReOIx2RITPzdoHVFWYhXQn4vQWMEFyw9OCBhv8R2Q4pb06DcKwhlk7royYxAkOtgudI8WQyE6h2yjdmci2vBvPE+r20QH753sgg54Gg7K8dsrjT8jlDsTx3j/Z/YteTakvhmxraRrLOaokIo+aAZ6LsxLfWm+O81PCl2bZlPTExL8v8Gk//SddsIjAXVGRQ4BfMoJ2A3MvfjYEFGEW6CqeP2H38XRd9X0M0sMlVHX63BjmQp/ru/CgNBClCkh6MEbOIzlaDJ0ZtHZK7dlwdk6/ABSYVUTMOxfDPNjnYDaWN/D5Cg== 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=VX6SmAt5yUemBBxovjDjoKBtRqbWALt82gZOIkEbGes=; b=YYfUfbsFRJnA6/h1fVrE7bThFkbCFI7FphmPR5ZXOkr4JywieGdsPLStI2XCgwpRb6u14K1mh9EGBTNTu8EIoyQnLNjq/oyEX6MCCwnUODbfNxUMzC9+N2wsZNJ2PbggRUubzrZinKT+YYRFjlzkuMp3SFTdfQTrQOGYlxaeX3GcBLc+vw+DDvdHNVrbAN94DQeQEPBz4XjwO3xC9saRRpSHkO8JlT2eysLnnI7g9vMB+eyUM+1nrlV7mMBRzXyp1NBqb/imeZ7m5gTqpoEviWXGLeaee0/sf7Kv8MpOOeN4fb330TCiK8+ZRnnZ0unixey6P831R0i/dbzl1rC9vQ== 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=none sp=none pct=100) action=none header.from=siemens.com; dkim=none (message not signed); arc=none Received: from AM5PR0601CA0029.eurprd06.prod.outlook.com (2603:10a6:203:68::15) by DB9PR10MB5762.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:2ed::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33; Wed, 25 Jan 2023 09:02:27 +0000 Received: from VE1EUR01FT011.eop-EUR01.prod.protection.outlook.com (2603:10a6:203:68:cafe::54) by AM5PR0601CA0029.outlook.office365.com (2603:10a6:203:68::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33 via Frontend Transport; Wed, 25 Jan 2023 09:02:27 +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 VE1EUR01FT011.mail.protection.outlook.com (10.152.2.229) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.17 via Frontend Transport; Wed, 25 Jan 2023 09:02:27 +0000 Received: from DEMCHDC8WAA.ad011.siemens.net (139.25.226.104) 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.20; Wed, 25 Jan 2023 10:02:26 +0100 Received: from L15-Gen2.fritz.box (139.21.146.184) by DEMCHDC8WAA.ad011.siemens.net (139.25.226.104) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.20; Wed, 25 Jan 2023 10:02:25 +0100 From: "T. Schaffner" To: CC: , , "Tobias Schaffner" Subject: [PATCH 4/5] add unittests for the image-account-extension Date: Wed, 25 Jan 2023 10:01:55 +0100 Message-ID: <20230125090156.284309-5-tobias.schaffner@siemens.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230125090156.284309-1-tobias.schaffner@siemens.com> References: <20230125090156.284309-1-tobias.schaffner@siemens.com> MIME-Version: 1.0 X-Originating-IP: [139.21.146.184] X-ClientProxiedBy: DEMCHDC8WBA.ad011.siemens.net (139.25.226.105) To DEMCHDC8WAA.ad011.siemens.net (139.25.226.104) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1EUR01FT011:EE_|DB9PR10MB5762:EE_ X-MS-Office365-Filtering-Correlation-Id: 7ffdc206-10d7-4665-ce30-08dafeb2e1db X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: x8xHEEJ2v5DAU5TvrBOV1CBeSqrts4nxXrnztCNq+HiVGPIypegphbVCBakZkZsAQSOWo67f4BB5lcNSuDTCZ2YMuwciN5t/zfM0MA2QU2QxqvuG1ENcwV/xWVQTOQCuvs0HGGRJqnTK2tJ8x9ZmAZ+AglNcFf04i3Cdudfs79NMY8sI4WhEBr9rzGA74tKT4Jilxm1cU2VvyxvmkT83+U2q4GYeFicd7qLRnOlj9U5CXIM6D8gGG40tInFoX7iDMktDKu5MZywZv3BNzkwajV69tbVGI+HBK3E+49xXwO86I/BSikv+tsYQdGnEEfRcMEX2O7a5cz2t4qffL4O6wf3Ws/GAnf/nPQVQIMXkurv/ihlqqFdvL9XDOupTWPF+JWedlmkYvx+cxdkvpL6aIzWWSRPAcd2qWYnccSdue0Y0R8zq/LVhHwxieaoYho35D0LXXAGscFEq4theZYqxLudE8a3WouWNYU89Wn5urFsBrI324L8X9KwI3crg5LwSgtFOC7yv/46rx6HZbfZdKqSeFGjWHd0GrzwTNIXNzFntxTgiASZ6IpDmnPQ+Eo7iyyjiQwhnAf5+7IguuFtxPAYu5LyLVJAs9CSK4xT60Ogp8t5aLRykMip+kW5CI1CEzsSqyEJUeKa6GIRN2h9unv++/ZUN62NGIZGzW8+S5SQyQX+L/j9zIXGMl7V8bblK/Ke4z0s/7XM+Ko7KAALi1Q== 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:(13230025)(4636009)(39860400002)(136003)(346002)(396003)(376002)(451199018)(40470700004)(36840700001)(46966006)(2616005)(41300700001)(7636003)(82960400001)(4326008)(2906002)(36756003)(5660300002)(82740400003)(26005)(8676002)(70206006)(316002)(6916009)(40480700001)(7596003)(47076005)(1076003)(956004)(336012)(6666004)(16526019)(70586007)(8936002)(54906003)(107886003)(83380400001)(36860700001)(86362001)(186003)(82310400005)(356005)(15650500001)(40460700003)(478600001);DIR:OUT;SFP:1101; X-OriginatorOrg: siemens.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jan 2023 09:02:27.1227 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7ffdc206-10d7-4665-ce30-08dafeb2e1db 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: VE1EUR01FT011.eop-EUR01.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR10MB5762 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=KKcTEGbD; 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 40.107.6.79 as permitted sender) smtp.mailfrom=tobias.schaffner@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com 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=-0.9 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, 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 | 175 ++++++++++++++++++ 1 file changed, 175 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 0000000..11a0aa1 --- /dev/null +++ b/testsuite/unittests/test_image_account_extension.py @@ -0,0 +1,175 @@ +# 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_pre_flag(self): + test_user = "new" + d, _ = self.setup(test_user) + d.setVarFlag("USER_{}".format(test_user), "pre", "true") + + with patch.object(bb.process, "run") as run_mock: + image_create_users(d) + + run_mock.assert_not_called() + + with patch.object(bb.process, "run") as run_mock: + image_create_users(d, True) + + assert run_mock.call_count == 1 + + 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] + + def test_pre_flag(self): + test_user = "new" + d, _ = self.setup(test_user) + d.setVarFlag("GROUP_{}".format(test_user), "pre", "true") + + with patch.object(bb.process, "run") as run_mock: + image_create_groups(d) + + run_mock.assert_not_called() + + with patch.object(bb.process, "run") as run_mock: + image_create_groups(d, True) + + assert run_mock.call_count == 1 + + +if __name__ == "__main__": + unittest.main()