From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web11.6993.1670212642967130171 for ; Sun, 04 Dec 2022 19:57:23 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=jptiTZyr; spf=pass (domain: intel.com, ip: 192.55.52.43, mailfrom: dun.tan@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1670212642; x=1701748642; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=XXFMSM88ChTqD/Gt5Wbh7/IMf2FBQct2Le/AllOLPjA=; b=jptiTZyrEOj9oaK+nEr8Hgq2PZZUXhVZGK7l+GmUabVcd9Ra0kLqXLH3 LpeEehyp+eNhEb/WPz5igrTSMhPEim1dQmCWtNU5hVFddq/KQqr8SlQjW jW2I5+8NzWsGDQs7UGPguglbQqd4JSnB0t3jS6NoqvWoxjaRs8S86+WHN m61tXTtfldzRzcObKpLj8pzJahYcL2mY9noKfR0hW/WXQ+ZjvpgIc+c4M tIoBmzS/fq1EnVnnjLwTHYPx+Xwvx/ou/GU+iuKObDEq/APbly8lPfUef X9TYdo5lG83QwWhgQVT5ryfyUxcNckuSmtGF/PjI2vojdCXMQvNxte1pD w==; X-IronPort-AV: E=McAfee;i="6500,9779,10551"; a="402533968" X-IronPort-AV: E=Sophos;i="5.96,218,1665471600"; d="scan'208";a="402533968" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Dec 2022 19:57:22 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10551"; a="647794966" X-IronPort-AV: E=Sophos;i="5.96,218,1665471600"; d="scan'208";a="647794966" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by fmsmga007.fm.intel.com with ESMTP; 04 Dec 2022 19:57:22 -0800 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Sun, 4 Dec 2022 19:57:21 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16 via Frontend Transport; Sun, 4 Dec 2022 19:57:21 -0800 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (104.47.74.47) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Sun, 4 Dec 2022 19:57:21 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=APeX195j/H7REy+/Bb68QPSmvXbTwb6MTu3l79YYzhQrr+kXWKj+P+ZkUjoYY4WF6qdi3P+XTqACbCTrcrYy+pnzy+ntUAPrDYKSmWGQfPImyGNZzn1felnLN7XSFkyudmGgWmaUM7JSkgSI3pO8uhktnQWRrevyEs9tnJ3ysxY6EM3Fa/s27wlwuN67Rwsao5OuCeVd+CdGNnYjOaJhSpUXJ7ajQt4sxknD80IQZZwEGEZ+6ZojzGA2BLmcaQrxpMWMHHpN26+l4rH44sl+9pJvCqowp1I5fbf5Vaj9W1v5gHH129LJ4DFKl4mmQk/IsMFTaIF/9HuJq3+Omp268g== 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=jBsStsnbxFnfYD/Z3fnOHL3USkhN9T9jOmNzOGJ1wp4=; b=aeJG7FvywzZ8fAnl3phRMtBz9449pLBmiJNray9UFF/o4dygeqk3/XogthTijlbyVcgWlJHVlrrmYhk3n32Y1gtopKbhaAf+5+eaCpMB5GqRk12zcBLWwEd7m0mmDmlkvO7WgzS4BDEhsiPebNfcdaP57Ra0Qe0aztHHf5c9Pvgkt1tg+kH/MS43bNJz5o4Rvx3a64hu/k3+PlW3iYbn9FrGmD96Dsi91WGRBZVxOsCGTiUZ9GpNFKC8Msp34rTs9HcsZso3m9f6UL0u782X4y0d93QUe/2xx7e5joG9AT7tGYE0Jkzw3bJYU2GVucx/o2z66NO5VRwMtI2XBHNXvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from BN9PR11MB5483.namprd11.prod.outlook.com (2603:10b6:408:104::10) by BN9PR11MB5466.namprd11.prod.outlook.com (2603:10b6:408:11f::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.14; Mon, 5 Dec 2022 03:57:19 +0000 Received: from BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::c945:6fc3:ca84:dd9b]) by BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::c945:6fc3:ca84:dd9b%9]) with mapi id 15.20.5880.014; Mon, 5 Dec 2022 03:57:18 +0000 From: "duntan" To: "devel@edk2.groups.io" CC: Ard Biesheuvel , "Yao, Jiewen" , "Justen, Jordan L" , "Gerd Hoffmann" , "Ni, Ray" , Sean Brogan , "Kinney, Michael D" Subject: Re: [edk2-devel] [PATCH 1/3] OvmfPkg/PlatformCI: Expand Ovmf PlatformCI for Shell UnitTest Thread-Topic: [edk2-devel] [PATCH 1/3] OvmfPkg/PlatformCI: Expand Ovmf PlatformCI for Shell UnitTest Thread-Index: AQHY/mhUjTU/B98SM02Ddp8TdwXJ865UGptggAqiAgA= Date: Mon, 5 Dec 2022 03:57:18 +0000 Message-ID: References: <20221122114737.393-1-dun.tan@intel.com> <1729E5AF924ED134.5511@groups.io> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BN9PR11MB5483:EE_|BN9PR11MB5466:EE_ x-ms-office365-filtering-correlation-id: 29549ca6-6703-4982-1b4b-08dad674ce20 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Y078AqVgxRJVXQfUBd9xX2lAr338rxHn4eajotvnLwYq+k8Wl0Vv5Wlpp1Ik/0E2hYG3CwuPcxkTJYYzmK1ULNhIVapcICbZlDsqa4XOJkz9MdSENPTHPTtTjXCszu48ERc8BTnxvv0Ei2WvnZMKldKgCETiaCCeM93Mk9FlQdL5RPJh+LYuh1PZ3Ui0bHFfPDDtjwxGWE7JOo7M4qiG0TX40MdFgsCO1COLnSzlry7DwG3fgeDZX9JJBHr/L2RcoaR+1qJRAvfdIS5UrfrjWIzigmBzDMwg3p+IFVP2b0lHB01yx4GVnZzGdigUnYJtaRCTP1w8WjgPz7yxB0mF1SdRIecoxPtd9tfsVMLrpVg4m489rSCNqmZ2r2jMW+FjmSv8ar8yBdBV1Mt7wcx+1Q/+6QAgCj47Qd/RkimfziU7xg2OnCAvUq+qoSKjppZ6wbkEenWyX7XCkb6mNZxG2lC+aYBTBJu+Y/Mi4XV3dt/m9sPEvIzep84mUy2miSswetX8MVTfwGXTqW6gQbtBHIllSWywX/mHWR6A0Th9+ZVjFVi4IlKuK+O8NrVRiNpw1Q3aoVo/TJAEKwLPn46jC2EQNBx+7AqkKF29xRjNbou9NpdmsaqXWSd9B/nbpNARIHO8Q+N8zgNeNWwzadA39TirCQNfQI7riPv3JPTByx0/DUCDctaghK3i6fh3seB1ltNTT5boRRPVXG82INYeZPmbya+2AZDxR9Yxi9G/s4X1wcDh+cJruSxiieVbJhyRd1achAz/Fn+LNXbegbZuGg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN9PR11MB5483.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(366004)(396003)(346002)(39860400002)(136003)(376002)(451199015)(4326008)(966005)(38100700002)(82960400001)(122000001)(66476007)(66556008)(66946007)(76116006)(8676002)(64756008)(66446008)(107886003)(478600001)(86362001)(53546011)(6506007)(33656002)(55016003)(7696005)(38070700005)(71200400001)(6916009)(26005)(9686003)(54906003)(316002)(2906002)(30864003)(83380400001)(66899015)(52536014)(8936002)(41300700001)(5660300002)(186003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?pEuSaJqyb7YIONdu1+iIOV5HCGcw0MnAYwbjePJ+2i3dAFsyQnOSUDdhWhJ7?= =?us-ascii?Q?Cu8JMmg59q31z8p4PjOD7pUHcyKjR4Z/+Lzp0XN06/Ck6byApKLX4SZ7BLwI?= =?us-ascii?Q?fs/YYSS75Pe/a/9DvTsqMqk7jqmhsvY86uDY/Gi9Y2rQ3HCoQd7H5RAeONHN?= =?us-ascii?Q?lb74ZoHEq1D9sdrBia7JZnGnmA0p1mz4/VuKEKlj29YaH3O8RZz2FbWE90VS?= =?us-ascii?Q?Gpf3EIBpGYKEB6VkH3GGsQT1HiLrWf9gVVuYpP6/23eTeS/9xOaDv8Tn1Y/O?= =?us-ascii?Q?7BbvAfYDzPcgd96WzPy3aucAtpDZLSuf8ODY7ldj+rMagpinC4WvLD82e3fO?= =?us-ascii?Q?Ev7hZRlj8g7PkPjyD5PdUc+w7OwLBovtL5NlpqrVyKziluZTBz0uxChhm5EI?= =?us-ascii?Q?4w4hVgfyCg1impI2RXQVfMgbifkdg4vfEgXVmlSfDff68HAQ1O6bJBOogEZ8?= =?us-ascii?Q?5nGk8PYXsGfBlw3AnqBkprihithgf5gu10JnaQ7TE84cA1Ki/J9E0S6lNi4A?= =?us-ascii?Q?hlDVzhGYpLFEGJBFvWDjK3C2oija0WVi+Rh+HWBKtDWW0B4mXMVswM95lGej?= =?us-ascii?Q?nTxkSeIbucgwV7NrzBcwI+YYP5oU8SFDaw2xDumKr7nmId/E8FwYNOXuFPT5?= =?us-ascii?Q?xzeZN12FliNL4SXSlWD/uC69aAAd8d1lKmEbh8JdlKX3g9Lj0fxu60PyNFCL?= =?us-ascii?Q?jiG3vS4N8zQqgQxiS3z95D1miQCy5QKw9+8EfwK3BoxhiNgw2SB1F+VbSxaB?= =?us-ascii?Q?oW3Ddok1Bzf8vZF75qx2jwQRCqiDAwvVPVy5FlxN6wYY93F/H+GvSZNzJgBX?= =?us-ascii?Q?uaadPMY8Ti1AxIjcIIJKubd/TAu3Ag05HRY3SaLuInARPZ/R0gBJHszcjXT9?= =?us-ascii?Q?QA+WGdC0pyNCvsbcTOXJSwQYEeuyE3sfMYUeYGam90Q5zoKhtOI+JUtLZqTC?= =?us-ascii?Q?eiaWqjBlRiNmdpjXGKrkoqIQEl3Wist+GVZZVhWRqU+SBoaBjRBFn0e1QQis?= =?us-ascii?Q?cFvMGlac8ebg41yJXFrgHCk7xL/nfqT//dKfgZuDmv+nTCOABMoFp4JyPobY?= =?us-ascii?Q?1op41uU1ZMKTuE+396yegzD0BdrSGtFxpg5kQaTDiXiJ7bHr1fBDt802f9Q+?= =?us-ascii?Q?MVdh0aDXlyCT6/LkJGIwnEXOBdsIj39jUMRPZNV/G7YhJiUeC5hx4V0JWhJz?= =?us-ascii?Q?3msfsY66lQlITyg/9VJL6DH1MjUO0/YOWni4Lsqew/dbcMyBxh2uFUXI2uA+?= =?us-ascii?Q?gW4dJKfo04ZCrvc3WBWK6pn/c8Jl8+/nYXnYczm6UH4VzA/qTBNmmf1LqLTD?= =?us-ascii?Q?Yf//sCpOW3Gs0KEw9WCw6B7PMZa91qa5RxUYmW9EAc79iWgmW4bd5jnaNFs6?= =?us-ascii?Q?cu4B3e2R69UjOHNYr9FY1qYEvskBjpAG2RUJxw/fTotaCsjOOsoiud7o3ujJ?= =?us-ascii?Q?BVDziI227xmMI5cYtmilAOewGaGwPnfqHOv5umvYHvHvANCJm4QxUvXAiDLL?= =?us-ascii?Q?XbJhSp+wRY7a+xZTe+Mf/iyxpW9SH91JHOHpYR1V24QnVnHJxaj6wPHh1ROK?= =?us-ascii?Q?DUySpfO4jQvqprqNvQk=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5483.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 29549ca6-6703-4982-1b4b-08dad674ce20 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Dec 2022 03:57:18.8638 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 2t+M4PSjzXbrjAn4sNZoEUKFBPdK2IGLf3BN2bdYXDEGidy7o2n6cfKydO4s+XzZUsiEh85rg0jy5uBmoXZqPQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR11MB5466 Return-Path: dun.tan@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi all, Is there anything else I can do to speed up the review process for this pat= ch set? Looking forward to your reply. Thanks, Dun -----Original Message----- From: Tan, Dun=20 Sent: Monday, November 28, 2022 5:34 PM To: devel@edk2.groups.io; Tan, Dun Cc: Ard Biesheuvel ; Yao, Jiewen ; Justen, Jordan L ; Gerd Hoffmann ; Ni, Ray Subject: RE: [edk2-devel] [PATCH 1/3] OvmfPkg/PlatformCI: Expand Ovmf Platf= ormCI for Shell UnitTest Hi all, Could you please help to review this patch? Thanks a lot! Thanks, Dun -----Original Message----- From: devel@edk2.groups.io On Behalf Of duntan Sent: Tuesday, November 22, 2022 7:48 PM To: devel@edk2.groups.io Cc: Ard Biesheuvel ; Yao, Jiewen ; Justen, Jordan L ; Gerd Hoffmann ; Ni, Ray Subject: [edk2-devel] [PATCH 1/3] OvmfPkg/PlatformCI: Expand Ovmf PlatformC= I for Shell UnitTest Expand Ovmf PlatformBuild.py and PlatformBuildLib.py to support building an= d running specific Shell target UnitTest modules. In the new CommonPlatform class: It provides new class attributes and new methods to support build and run s= pecific Shell Unit Test modules. In the new SettingsManager class for stuart_pr_eval: It calls new API in CommonPlatform to updates PackagesSupported based on -u= ShellUnitTestList input from cmd. The package which contains the module in= ShellUnitTestList will be added into PackagesSupported for further evaluat= ion. In the new PlatformBuilder class for stuart_build: 1.In PlatformPostBuild(), it conditionally calls new API in CommonPlatform = to build -u ShellUnitTestList in -p PkgsToBuild and copy them to VirtualDri= ve folder. If no -p option, all the modules in -u ShellUnitTestList will be= built. 2.In FlashRomImage(), it conditionally calls the new API in CommonPlatform = to write all efi files name in VirtualDrive into startup.nsh and output Uni= tTest log into ShellUnitTestLog. 3. After the boot process, it conditionally calls new API in CommonPlatform= to check the UnitTest boot log. Signed-off-by: Dun Tan Cc: Ard Biesheuvel Cc: Jiewen Yao Cc: Jordan Justen Cc: Gerd Hoffmann Cc: Ray Ni --- OvmfPkg/PlatformCI/PlatformBuild.py | 112 +++++++++++++++++++++++++++++= +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= ++++++++ OvmfPkg/PlatformCI/PlatformBuildLib.py | 51 +++++++++++++++++++++++++++++= ++++++++++++++++------ 2 files changed, 157 insertions(+), 6 deletions(-) diff --git a/OvmfPkg/PlatformCI/PlatformBuild.py b/OvmfPkg/PlatformCI/Platf= ormBuild.py index 6c541cdea4..72cb7e0e9e 100644 --- a/OvmfPkg/PlatformCI/PlatformBuild.py +++ b/OvmfPkg/PlatformCI/PlatformBuild.py @@ -6,6 +6,11 @@ ## import os import sys +import shutil +import logging +import re +from edk2toolext.environment import shell_environment from=20 +edk2toolext.environment.multiple_workspace import MultipleWorkspace =20 sys.path.append(os.path.dirname(os.path.abspath(__file__))) from PlatformBuildLib import SettingsManager @@ -24,6 +29,10 @@ class Comm= onPlatform(): Scopes =3D ('ovmf', 'edk2-build') WorkspaceRoot =3D os.path.realpath(os.path.join( os.path.dirname(os.path.abspath(__file__)), "..", "..")) + # Support build and run Shell Unit Test modules + UnitTestModuleList =3D {} + RunShellUnitTest =3D False + ShellUnitTestLog =3D '' =20 @classmethod def GetDscName(cls, ArchCsv: str) -> str: @@ -39,5 +48,108 @@ class CommonPlatform(): dsc +=3D ".dsc" return dsc =20 + @classmethod + def UpdatePackagesSupported(cls, ShellUnitTestListArg): + ''' Update PackagesSupported by -u ShellUnitTestList from cmd line= . ''' + UnitTestModuleListStr =3D ','.join(ShellUnitTestListArg) + if not re.search(r'.+.inf:.+.dsc', UnitTestModuleListStr): + raise Exception('No valid ModulePath:DscPath in the -u {}'.for= mat(UnitTestModuleListStr)) + UnitTestModuleList =3D UnitTestModuleListStr.split(',') + PackagesSupported =3D [] + for KeyValue in UnitTestModuleList: + PkgName =3D KeyValue.split("Pkg")[0] + 'Pkg' + if PkgName not in PackagesSupported: + PackagesSupported.append(PkgName) + cls.PackagesSupported =3D tuple(PackagesSupported) + print('PackagesSupported for UnitTest is + {}'.format(cls.PackagesSupported)) + + @classmethod + def UpdateUnitTestConfig(cls, args): + ''' Update UnitTest config by -u ShellUnitTestList and -p PkgsToBu= ildForUT from cmd line. + ShellUnitTestList is in this format: {module1:dsc1, module2:ds= c2, module3:dsc2...}. + Only the modules which are in the PkgsToBuildForUT list are ad= ded into self.UnitTestModuleList. + ''' + UnitTestModuleListStr =3D ','.join(args.ShellUnitTestList) + if not re.search(r'.+.inf:.+.dsc', UnitTestModuleListStr): + raise Exception('No valid ModulePath:DscPath in the -u {}'.for= mat(args.ShellUnitTestList)) + UnitTestModuleList =3D UnitTestModuleListStr.split(',') + if args.PkgsToBuildForUT is None or all(['Pkg' not in Pkg for Pkg = in args.PkgsToBuildForUT]): + # No invalid Pkgs from input. Build all modules in -u UnitTest= ModuleList. + for KeyValue in UnitTestModuleList: + UnitTestPath =3D os.path.normpath(KeyValue.split(":")[0]) + DscPath =3D os.path.normpath(KeyValue.split(":")[1]) + cls.UnitTestModuleList[UnitTestPath] =3D DscPath + else: + PkgsToBuildForUT =3D ','.join(args.PkgsToBuildForUT).split(','= ) + for KeyValue in UnitTestModuleList: + UnitTestPath =3D os.path.normpath(KeyValue.split(":")[0]) + DscPath =3D os.path.normpath(KeyValue.split(":")[1]) + PkgName =3D UnitTestPath.split("Pkg")[0] + 'Pkg' + if PkgName in PkgsToBuildForUT: + cls.UnitTestModuleList[UnitTestPath] =3D DscPath + if len(cls.UnitTestModuleList) > 0: + cls.RunShellUnitTest =3D True + cls.ShellUnitTestLog =3D os.path.join(cls.WorkspaceRoot, 'Buil= d', "BUILDLOG_UnitTest.txt") + print('UnitTestModuleList is + {}'.format(cls.UnitTestModuleList)) + + def BuildUnitTest(self): + ''' Build specific DSC for modules in UnitTestModuleList ''' + self.env =3D shell_environment.GetBuildVars() + self.ws =3D PlatformBuilder.GetWorkspaceRoot(self) + self.mws =3D MultipleWorkspace() + self.pp =3D '' + VirtualDrive =3D os.path.join(self.env.GetValue("BUILD_OUTPUT_BASE= "), "VirtualDrive") + os.makedirs(VirtualDrive, exist_ok=3DTrue) + + # DSC by self.GetDscName() should have been built in BUILD process= . + BuiltDsc =3D [CommonPlatform.GetDscName(",".join(self.env.GetValue= ("TARGET_ARCH").split(' ')))] + for UnitTestPath, DscPath in CommonPlatform.UnitTestModuleList.ite= ms(): + if DscPath not in BuiltDsc: + ModuleName =3D os.path.split(UnitTestPath)[1].split('.inf'= )[0] + logging.info('Build {0} for {1}'.format(DscPath, ModuleNam= e)) + BuiltDsc.append(DscPath) + Arch =3D self.env.GetValue("TARGET_ARCH").split(" ") + if 'X64' in Arch: + UTArch =3D 'X64' + else: + UTArch =3D 'IA32' + self.env.AllowOverride("ACTIVE_PLATFORM") + self.env.SetValue("ACTIVE_PLATFORM", DscPath, "For UnitTes= t") + self.env.AllowOverride("TARGET_ARCH") + self.env.SetValue("TARGET_ARCH", UTArch, "For UnitTest") #= Set UnitTest arch the same as Ovmf Shell module. + ret =3D PlatformBuilder.Build(self) = # Build specific dsc for UnitTest modules + if (ret !=3D 0): + return ret + ret =3D PlatformBuilder.ParseDscFile(self) # Parse OUTPUT_DIRE= CTORY from dsc files + if(ret !=3D 0): + return ret + OutputPath =3D os.path.normpath(os.path.join(self.ws, self.env= .GetValue("OUTPUT_DIRECTORY"))) + EfiPath =3D os.path.join(OutputPath, self.env.GetValue("TAR= GET") + "_" + self.env.GetValue("TOOL_CHAIN_TAG"), + UTArch, UnitTestPath.split('.inf')[0], "OUTPUT", = ModuleName + '.efi') + logging.info('Copy {0}.efi from:{1}'.format(ModuleName, EfiPat= h)) + shutil.copy(EfiPath, VirtualDrive) + return 0 + + @staticmethod + def WriteEfiToStartup(EfiFolder, FileObj): + ''' Write all the .efi files' name in VirtualDrive into Startup.ns= h ''' + for Root,Dirs,Files in os.walk(EfiFolder): + for File in Files: + if os.path.splitext(File)[1] =3D=3D '.efi': + FileObj.write("{0} \n".format(File)) + + @classmethod + def CheckUnitTestLog(cls): + ''' Check the boot log for UnitTest ''' + File =3D open(cls.ShellUnitTestLog, "r") + FileContent =3D File.readlines() + logging.info('Check the UnitTest boot log:{0}'.format(cls.ShellUni= tTestLog)) + for Index in range(len(FileContent)): + if 'FAILURE MESSAGE:' in FileContent[Index]: + if FileContent[Index + 1].strip() !=3D '': + FailureMessage =3D FileContent[Index + 1] + FileConten= t[Index + 2] + return FailureMessage + return 0 + import PlatformBuildLib PlatformBuildLib.CommonPlatform =3D CommonPlatform diff --git a/OvmfPkg/Pl= atformCI/PlatformBuildLib.py b/OvmfPkg/PlatformCI/PlatformBuildLib.py index bfef9849c7..b42235b2ac 100644 --- a/OvmfPkg/PlatformCI/PlatformBuildLib.py +++ b/OvmfPkg/PlatformCI/PlatformBuildLib.py @@ -103,15 +103,28 @@ class SettingsManager(UpdateSettingsManager, SetupSet= tingsManager, PrEvalSetting =20 return build_these_packages =20 + def AddCommandLineOptions(self, parserObj): + parserObj.add_argument('-u', '--UnitTest', dest=3D'ShellUnitTestLi= st', type=3Dstr, + help=3D'Optional - Key:Value that contains Shell UnitTest list= and corresponding DscPath you want to test.(workspace relative)' + 'Can list multiple by doing -u , or -u -u ', + action=3D"append", default=3DNone) + + def RetrieveCommandLineOptions(self, args): + if args.ShellUnitTestList: + =20 + CommonPlatform.UpdatePackagesSupported(args.ShellUnitTestList) + def GetPlatformDscAndConfig(self) -> tuple: ''' If a platform desires to provide its DSC then Policy 4 will ev= aluate if any of the changes will be built in the dsc. =20 The tuple should be (, ) + This Policy 4 can only be applied when PackagesSupported only cont= ains OvmfPkg Since it doesn't support + mutiple packages evaluation. ''' - dsc =3D CommonPlatform.GetDscName(",".join(self.ActualArchitecture= s)) - return (f"OvmfPkg/{dsc}", {}) - + if (len(CommonPlatform.PackagesSupported) =3D=3D 1) and (CommonPla= tform.PackagesSupported[0] =3D=3D 'OvmfPkg'): + dsc =3D CommonPlatform.GetDscName(",".join(self.ActualArchitec= tures)) + return (f"OvmfPkg/{dsc}", {}) + return None =20 # ####################################################################= ################### # # Actual Configuration for Platform Build = # @@ -126,6 +139,14 @@ class PlatformBuilder( UefiBuilder, BuildSettingsManag= er): help=3D"Optional - CSV of architecture to build. IA32 will us= e IA32 for Pei & Dxe. " "X64 will use X64 for both PEI and DXE. IA32,X64 will use IA3= 2 for PEI and " "X64 for DXE. default is IA32,X64") + parserObj.add_argument('-p', '--pkg', '--pkg-dir', dest=3D'PkgsToB= uildForUT', type=3Dstr, + help=3D'Optional - Package list you want to build for UnitTest= .efi. (workspace relative).' + 'Can list multiple by doing -p , or -p -p <= pkg4>.If no valid input -p, build and run all -u UnitTest', + action=3D"append", default=3DNone) + parserObj.add_argument('-u', '--UnitTest', dest=3D'ShellUnitTestLi= st', type=3Dstr, + help=3D'Optional - Key:Value that contains Shell UnitTest list= and corresponding DscPath you want to test.(workspace relative)' + 'Can list multiple by doing -u , or -u -u ', + action=3D"append", default=3DNone) =20 def RetrieveCommandLineOptions(self, args): ''' Retrieve command line options from the argparser ''' @@ -133,6 +154,10 @@ class PlatformBuilder( UefiBuilder, BuildSettingsManag= er): shell_environment.GetBuildVars().SetValue("TARGET_ARCH"," ".join(a= rgs.build_arch.upper().split(",")), "From CmdLine") dsc =3D CommonPlatform.GetDscName(args.build_arch) shell_environment.GetBuildVars().SetValue("ACTIVE_PLATFORM", f"Ovm= fPkg/{dsc}", "From CmdLine") + self.RunShellUnitTest =3D False + if args.ShellUnitTestList: + CommonPlatform.UpdateUnitTestConfig(args) + self.RunShellUnitTest =3D CommonPlatform.RunShellUnitTest =20 def GetWorkspaceRoot(self): ''' get WorkspacePath ''' @@ -176,6 +201,11 @@ class PlatformBuilder( UefiBuilder, BuildSettingsManag= er): return 0 =20 def PlatformPostBuild(self): + if self.RunShellUnitTest: + ret =3D CommonPlatform.BuildUnitTest(self) + if ret !=3D0: + logging.critical("Build UnitTest failed") + return ret return 0 =20 def FlashRomImage(self): @@ -210,9 +240,13 @@ class PlatformBuilder( UefiBuilder, BuildSettingsManag= er): else: args +=3D " -pflash " + os.path.join(OutputPath_FV, "OVMF.fd")= # path to firmware =20 - if (self.env.GetValue("MAKE_STARTUP_NSH").upper() =3D=3D "TRUE"): f =3D open(os.path.join(VirtualDrive, "startup.nsh"), "w") + if self.RunShellUnitTest: + # When RunShellUnitTest is True, write all efi files name = into startup.nsh. + CommonPlatform.WriteEfiToStartup(VirtualDrive, f) + # Output UnitTest log into ShellUnitTestLog. + args +=3D " -serial + file:{}".format(CommonPlatform.ShellUnitTestLog) f.write("BOOT SUCCESS !!! \n") ## add commands here f.write("reset -s\n") @@ -222,6 +256,11 @@ class PlatformBuilder( UefiBuilder, BuildSettingsManag= er): =20 if ret =3D=3D 0xc0000005: #for some reason getting a c0000005 on successful return - return 0 - + ret =3D 0 + if self.RunShellUnitTest and ret =3D=3D 0: + # Check the UnitTest boot log. + UnitTestResult =3D CommonPlatform.CheckUnitTestLog() + if (UnitTestResult): + logging.info("UnitTest failed with this FAILURE MESSAGE:\n= {}".format(UnitTestResult)) + return UnitTestResult return ret -- 2.31.1.windows.1