From patchwork Mon May 22 06:55:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tobias Schaffner X-Patchwork-Id: 2824 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:20 +0200 X-Sieve: CMU Sieve 2.4 Received: from mail-wr1-f64.google.com (mail-wr1-f64.google.com [209.85.221.64]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 34M6uKEd015575 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 22 May 2023 08:56:20 +0200 Received: by mail-wr1-f64.google.com with SMTP id ffacd0b85a97d-30a8ba2debdsf294050f8f.3; Sun, 21 May 2023 23:56:20 -0700 (PDT) ARC-Seal: i=3; a=rsa-sha256; t=1684738575; cv=pass; d=google.com; s=arc-20160816; b=RHoSatMfLobJ9AUBTOA6XSdU0sDzTFYiLpZsg9OYSdFihxPJDkONySRfoZqUMy3c31 7EZ4fHhn7wVilw7R+IYyydGeUV+SHGwvJsTq6/7Q3GCzjTylFf6nlpkoSZ5ojKFsyvnf +vRZR+O1NNPGsNp7272XHaFzYHrrO53Na5TF+M7HpD06N2ronDqzssWbi7puR7gaps32 t68SSQ2jMVu1Pbcvj2uOylBJbT1oUaekvNyxIomT+dKHxycYN5ykgaJKyk2ZoMcXPJo+ BBndGxPzHFTy1Zi/VCSI6u584EDaha4xdJPzZxsn+O3UFsXeD6BuyjMCRmCgwRkQNu9i BOGQ== 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=WHagoh3SH+kt5uRDP4VTZMWWTK8Pao5CznHAQzGYatI=; b=gd/HHJvxhRWH7pgsvY8T1ETktZqTMavmad064hFgghYQvVC+PRLQozNUbo46raYbNG jHVxCEcCzERS0YWC9DmJHstduDKEFrUhj9R3IjMdeDcECjYcD+mMghZwU1HQAvnN5kyU Dk0G1Za8pQOhPeK9By5BN5h+Wa3ayAginmvWH4FwZdMwPeM8NNu2FHlAWmL2OkISsrp/ 6uhUzMl34bLEHcZCbMo3c0xQEYFZOWhH6ZI8E0ABT3g6CqZ+NZyZhCAbstLZ8Ws8em0P O8tPj+gaGe4AwiyR6g2bW6oKHWEp+EgBTAFoaoOr4DliYWGpiPqBQ3pBiqApQw5+lYEL WYUw== ARC-Authentication-Results: i=3; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b="DBg4/A82"; 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:fe1f::61d 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=1684738575; x=1687330575; 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=WHagoh3SH+kt5uRDP4VTZMWWTK8Pao5CznHAQzGYatI=; b=GSmkY0BEUlnlQ3LOeL3P3sURJR2pzTqNOFaDOEtYroMdEn1DGznCjBXpboTNwtl34x D1QdoopdUmpKHA9Fh32IPAUMvBO2aUOPMrLlffGJjp/waAf3147jKnRF3v3JeRpkSHVK elrKBNIqwQk4F2rW5USvty4ZaaA+hw6b2E0OsFRAeial/0qy5n9uUtbJVEI/5THpmjGJ yr14LjrKoZDhZQFxXtWSzcb4AMacZzMtJ80HCdQ1bt7atq9eQPTXwikb5WbWWAQLq061 S9xtYYEVl4Eq6Tmolz4/7iA6SGoS0T+e16iySvCKIkaB9583dPvvk/us1UHQg6o1acj4 eEsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684738575; x=1687330575; 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=WHagoh3SH+kt5uRDP4VTZMWWTK8Pao5CznHAQzGYatI=; b=UfFQa7AaEAXaiU72XdlhtESDAxIxTekaSDbeNU2ZOB1rFBdiV3j0RhYs5c3hl6/snb j6bzo0qnPLaY4bKHnsyh8TisFMNvuKLURbGYXlkBmKRgkZEP55KiIVYkG/wJtjU4LgrF ZweulkL5M3ff2IvW44RJUKG7qiANZesVMMJH2pLvVbmwsmH/inr/yAuDlVxlMiBewPrC m7KNv+JEzdyrrZzwKuqz440/9xqMvPsuBtBx6K7IlPgaLvP+g8SG4pJrLQ640iL7Eg7v +TUDreIHk7y0TxhQEWWyrAp84KA9+NINxfORB8fN71b2/NEfJhH7M8sFh/aNlYF2u9V1 6+EA== X-Gm-Message-State: AC+VfDzenRWN0kNxi9c4PY/4YcEJGhlcFMJkdAr7Qv/gIHuI8mvGUXep TviWmq60A4/cmKvOnLXVNU8= X-Google-Smtp-Source: ACHHUZ5pl9b/jLGgmFcKxNOt6qJlbl7ZQtaELo4lzJIHNPqGHwrZlMnGychAVCAdCi8ME1TPY33huA== X-Received: by 2002:adf:f108:0:b0:306:37c8:c03 with SMTP id r8-20020adff108000000b0030637c80c03mr1163598wro.1.1684738574369; Sun, 21 May 2023 23:56:14 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a05:600c:1f14:b0:3f6:4f0:b68 with SMTP id bd20-20020a05600c1f1400b003f604f00b68ls345278wmb.1.-pod-prod-06-eu; Sun, 21 May 2023 23:56:13 -0700 (PDT) X-Received: by 2002:a1c:c911:0:b0:3f5:772:f333 with SMTP id f17-20020a1cc911000000b003f50772f333mr5937916wmb.4.1684738573010; Sun, 21 May 2023 23:56:13 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1684738572; cv=pass; d=google.com; s=arc-20160816; b=jFLzZvHuCLYjspJPYXRrqg6xgLxiZqdzW9XgA7dgcQJG68i8PD0BQruwHFlUWkj37R 5f0Ww6TOg9TX41hmegV8BJUvgrnl6bR36FoEOj6tb+VSpBCpD9akr+u/8KOfkocQKJ1J 0HaABGOuXn/W4c9dRX7D3vJoUfQgDQYOZWUiXujZ7QO/p/rXYvIOUDL9Es6dtv+mwjav lL+arpEZkCv4ZWRQlMVsSBWo22xywKJNhh0ISp59Ea/q2hROXLprvDTHaQ7gGBn+XG7o 7WuaJERnRibqgNg+zq3c+jUpV0JzH35ii+c/F1fg7S5Hpq2hNr9Cn+/Sn1AiL0xQ0Csk T05Q== 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=PXLFACKnECamQJKvcDOxZB/I8bmMb7NEPNGC8FxrGo8=; b=cTQhkuLLNf/ezfBQpjYuailFUNPHSE416WrUrGpZvnswI8ubJzoJf5UIyvjnzqoYcB rEptwk9KgKnbFMuALgv/XZpk6pgZt08dJboroHk3HrGw5P4RfeA1Qahxjpuhf8D+PtWX 0ZUrz7iOdMJRmFhM/62H5ZjPm7w15/M3KvFfNiWDaCTMzD5U/v9DgVRDCTGemtpqP7Lp Ccp49a1QqqIDkGG1fhTobm4MhERdlb6XkvIMbFOpHpsN8lqOwO39JlOp6t8AKG0/qm2t wCjDm1oeIzGbKGvbrAn5ORtazSpw/i68z00ifeYXHMRa8RsBV7Vjv1ZwXKCBEtjy+oRi 4iHQ== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b="DBg4/A82"; 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:fe1f::61d as permitted sender) smtp.mailfrom=tobias.schaffner@siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on061d.outbound.protection.outlook.com. [2a01:111:f400:fe1f::61d]) by gmr-mx.google.com with ESMTPS id ay7-20020a05600c1e0700b003f605aae39csi111671wmb.1.2023.05.21.23.56.12 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 21 May 2023 23:56:12 -0700 (PDT) Received-SPF: pass (google.com: domain of tobias.schaffner@siemens.com designates 2a01:111:f400:fe1f::61d as permitted sender) client-ip=2a01:111:f400:fe1f::61d; ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CsUaOJXuup7mMbplX/A7drptZNnrCX5AiUYHPp5TJUcnd8Zb/YfsnvZVp6lf9CEXqjifqRJLuE0EKegfHOgpMXcB24zaamedO6zzk2rZjWR0kFMJaoUm6p4zenaPfCWUyKGN9S2T45Keg3GL28RRRnP+RvAAQ79PE0blgpIL/YcXvHdzJbBF75Ha9v/TzB7vDla7cnZyXtgZmYDkJLxrS0m8WOcL0vIq98vWONc/yq+crQ9TRo0xC3S5kmBMbPPAZBZXfUWzDX1tbYbKLaQzH65T36dPW8PG2kyKgcWAFSNiglnmBgxY3itzfDw3OASnmgg4a1eFYK7NCJ86jSnccQ== 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=PXLFACKnECamQJKvcDOxZB/I8bmMb7NEPNGC8FxrGo8=; b=PSfX/XAdUBVGDC+A03buzT66sGhUUrvkB5YrjwW+kbdqiFHl8RfzuTPM2GcfvqAHh0CwXxdgg/bFWAGG8vskWsUL5eBl9wRMPu21Ndo7p0rkJSYFnXqFwPZE9urkXCdHLHswBEWFHHbOAqvtGen51h28pqGUpGM0nnaSV5M72+V8IRVXfsyEBERgm7r1Zw1KdysW9H0qAzA3oyrs0nhdnmt5B2cBUjKj+M3GMjaGQTbYrJvn8ZM+YpzlClEUaWpMhUb+L9Usk/EZ/JzwCTlphcQk5zPnmIHFIdtJK+ahuAs+l/OJgY02J7p2siz9au33u/xG47Iv+AUbXpLKy5q8NA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 194.138.21.76) 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 OS6P279CA0064.NORP279.PROD.OUTLOOK.COM (2603:10a6:e10:3f::14) by AS4PR10MB5343.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:4bb::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.27; Mon, 22 May 2023 06:56:11 +0000 Received: from HE1EUR01FT069.eop-EUR01.prod.protection.outlook.com (2603:10a6:e10:3f:cafe::41) by OS6P279CA0064.outlook.office365.com (2603:10a6:e10:3f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.28 via Frontend Transport; Mon, 22 May 2023 06:56:11 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 194.138.21.76) 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.76 as permitted sender) receiver=protection.outlook.com; client-ip=194.138.21.76; helo=hybrid.siemens.com; pr=C Received: from hybrid.siemens.com (194.138.21.76) by HE1EUR01FT069.mail.protection.outlook.com (10.152.1.52) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6433.13 via Frontend Transport; Mon, 22 May 2023 06:56:11 +0000 Received: from DEMCHDC8WBA.ad011.siemens.net (139.25.226.105) by DEMCHDC8VSA.ad011.siemens.net (194.138.21.76) 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:56:10 +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:56:09 +0200 X-Patchwork-Original-From: "'T. Schaffner' via isar-users" From: Tobias Schaffner To: CC: , , , Tobias Schaffner Subject: [PATCH v3 3/4] add unittests for the image-account-extension Date: Mon, 22 May 2023 08:55:30 +0200 Message-ID: <20230522065531.2300448-4-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: DEMCHDC8WBA.ad011.siemens.net (139.25.226.105) To DEMCHDC8WBA.ad011.siemens.net (139.25.226.105) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: HE1EUR01FT069:EE_|AS4PR10MB5343:EE_ X-MS-Office365-Filtering-Correlation-Id: 5154923f-46f5-48d3-9da3-08db5a91a0ad X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1WlCckqLu7bkKnTDZLK9iuBSiJRmOJUVdQxcsOLo/wq0lvkTZRWInBrtdGb7harAv58Xgb+r6OGJo6IV/Rnj1qyH1qebZtLoY/Hl7CeBPWkJG9NQw4r8vo9txIZhCNdJ6pIEetwGXA3FP5p3QFZniXwfF4dMO/RPYveIvLueinzZnFEXbqjqsPkObDuTDV1SKVwbEqaks5o2PiX7jfSDuV2MoCK4te7hlZBuiSDwofeRTfLa8G92ulBxSlt19B6nPMF8H1qLG9tvx4Q06AT1uwYPH+qvuZpSxovMGZ4Nva2FQXyobHUcn8oUCBdi+IjcjRbe/xJX8ra7lmbY+9YjJYbxfB9PKzHS3XxRWngvOh4gjJ7eh9U6rkTbwNE1JI0NIH9oSj89NyL3Pw6K6m9qCp6h7BD7dqp7xSg0m7qWvPM0vvu8PXAgC2LMKUc8NdDwuzy9HOn1YGOVeWLixigxJwkY8H+VII++jXfw1Neb9pwf4znOCXHrZiURe8iL1ENemMs02z7JHRbZqWJE/LLfhrnYIOkPBG40vatqVPSaFgqM5Y8zqts7o46Gt1Ll2Dwo8+sWItuOy8CJJctklvu60WIFPxHoJtYLeh+mZrOg1L4OfG1vPNlGctVwavynvu7NZQd6P7jgoXQN8KzCrxfFA/EERgXnb0qPLIOXiZqj8DLa+AeK3B9Vkv5DqrSlxR3y+wxb0m4mQfM5kNFSBXUh8ETv4gBwnTlHcSu0njezckDvRpA8FK4QvhRL8Qc2ozX3orXRZOH37Ri/RQXBVGw6sA== X-Forefront-Antispam-Report: CIP:194.138.21.76;CTRY:DE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:hybrid.siemens.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230028)(4636009)(376002)(39860400002)(136003)(396003)(346002)(451199021)(36840700001)(46966006)(40470700004)(40480700001)(40460700003)(336012)(956004)(47076005)(2616005)(83380400001)(186003)(2906002)(16526019)(15650500001)(36860700001)(6916009)(4326008)(70206006)(70586007)(41300700001)(316002)(6666004)(54906003)(478600001)(5660300002)(26005)(1076003)(107886003)(8676002)(8936002)(82310400005)(82740400003)(82960400001)(81166007)(86362001)(356005)(36756003)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: siemens.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2023 06:56:11.4544 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5154923f-46f5-48d3-9da3-08db5a91a0ad 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.76];Helo=[hybrid.siemens.com] X-MS-Exchange-CrossTenant-AuthSource: HE1EUR01FT069.eop-EUR01.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR10MB5343 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="DBg4/A82"; 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:fe1f::61d 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 | 157 ++++++++++++++++++ 1 file changed, 157 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..b7ad0c5c --- /dev/null +++ b/testsuite/unittests/test_image_account_extension.py @@ -0,0 +1,157 @@ +# 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_new_group_system_flag(self): + test_group = "new" + 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_existing_group_no_system_flag(self): + test_group = "test" + d, _ = self.setup(test_group) + d.setVarFlag("GROUP_{}".format(test_group), "flags", "system") + d.setVarFlag("GROUP_{}".format(test_group), "gid", "1005") + + with patch.object(bb.process, "run") as run_mock: + image_create_groups(d) + + assert run_mock.call_count == 1 + assert "--system" not in run_mock.call_args[0][0] + + +if __name__ == "__main__": + unittest.main()