public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Michael D Kinney" <michael.d.kinney@intel.com>
To: devel@edk2.groups.io
Cc: Chris Johnson <chris.n.johnson@intel.com>,
	Liming Gao <gaoliming@byosoft.com.cn>,
	Zhiguang Liu <zhiguang.liu@intel.com>
Subject: [Patch 05/12] MdePkg: Add gmock examples
Date: Sat, 25 Mar 2023 11:45:33 -0700	[thread overview]
Message-ID: <20230325184541.596-6-michael.d.kinney@intel.com> (raw)
In-Reply-To: <20230325184541.596-1-michael.d.kinney@intel.com>

From: Chris Johnson <chris.n.johnson@intel.com>

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4389

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Signed-off-by: Chris Johnson <chris.n.johnson@intel.com>
---
 MdePkg/MdePkg.dec                             |  1 +
 MdePkg/Test/MdePkgHostTest.dsc                |  2 +
 .../Include/GoogleTest/Library/MockUefiLib.h  | 39 +++++++++++++++++
 .../Library/MockUefiRuntimeServicesTableLib.h | 42 +++++++++++++++++++
 .../GoogleTest/MockUefiLib/MockUefiLib.cpp    | 12 ++++++
 .../GoogleTest/MockUefiLib/MockUefiLib.inf    | 33 +++++++++++++++
 .../MockUefiRuntimeServicesTableLib.cpp       | 40 ++++++++++++++++++
 .../MockUefiRuntimeServicesTableLib.inf       | 33 +++++++++++++++
 8 files changed, 202 insertions(+)
 create mode 100644 MdePkg/Test/Mock/Include/GoogleTest/Library/MockUefiLib.h
 create mode 100644 MdePkg/Test/Mock/Include/GoogleTest/Library/MockUefiRuntimeServicesTableLib.h
 create mode 100644 MdePkg/Test/Mock/Library/GoogleTest/MockUefiLib/MockUefiLib.cpp
 create mode 100644 MdePkg/Test/Mock/Library/GoogleTest/MockUefiLib/MockUefiLib.inf
 create mode 100644 MdePkg/Test/Mock/Library/GoogleTest/MockUefiRuntimeServicesTableLib/MockUefiRuntimeServicesTableLib.cpp
 create mode 100644 MdePkg/Test/Mock/Library/GoogleTest/MockUefiRuntimeServicesTableLib/MockUefiRuntimeServicesTableLib.inf

diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
index 2d643bede1d7..2a1d7694aa18 100644
--- a/MdePkg/MdePkg.dec
+++ b/MdePkg/MdePkg.dec
@@ -26,6 +26,7 @@ [Defines]
 [Includes]
   Include
   Test/UnitTest/Include
+  Test/Mock/Include
 
 [Includes.IA32]
   Include/Ia32
diff --git a/MdePkg/Test/MdePkgHostTest.dsc b/MdePkg/Test/MdePkgHostTest.dsc
index b8b186dd8b17..35e3ef6d9729 100644
--- a/MdePkg/Test/MdePkgHostTest.dsc
+++ b/MdePkg/Test/MdePkgHostTest.dsc
@@ -34,3 +34,5 @@ [Components]
   # Build HOST_APPLICATION Libraries
   #
   MdePkg/Library/BaseLib/UnitTestHostBaseLib.inf
+  MdePkg/Test/Mock/Library/GoogleTest/MockUefiLib/MockUefiLib.inf
+  MdePkg/Test/Mock/Library/GoogleTest/MockUefiRuntimeServicesTableLib/MockUefiRuntimeServicesTableLib.inf
diff --git a/MdePkg/Test/Mock/Include/GoogleTest/Library/MockUefiLib.h b/MdePkg/Test/Mock/Include/GoogleTest/Library/MockUefiLib.h
new file mode 100644
index 000000000000..dec2c93e1b34
--- /dev/null
+++ b/MdePkg/Test/Mock/Include/GoogleTest/Library/MockUefiLib.h
@@ -0,0 +1,39 @@
+/** @file
+  Google Test mocks for UefiLib
+
+  Copyright (c) 2022, Intel Corporation. All rights reserved.
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef MOCK_UEFI_LIB_H_
+#define MOCK_UEFI_LIB_H_
+
+#include <Library/GoogleTestLib.h>
+#include <Library/FunctionMockLib.h>
+extern "C" {
+#include <Uefi.h>
+#include <Library/UefiLib.h>
+}
+
+struct MockUefiLib {
+  MOCK_INTERFACE_DECLARATION (MockUefiLib);
+
+  MOCK_FUNCTION_DECLARATION (
+    EFI_STATUS,
+    GetVariable2,
+    (IN CONST CHAR16    *Name,
+     IN CONST EFI_GUID  *Guid,
+     OUT VOID           **Value,
+     OUT UINTN          *Size OPTIONAL)
+    );
+
+  MOCK_FUNCTION_DECLARATION (
+    EFI_STATUS,
+    GetEfiGlobalVariable2,
+    (IN CONST CHAR16  *Name,
+     OUT VOID         **Value,
+     OUT UINTN        *Size OPTIONAL)
+    );
+};
+
+#endif
diff --git a/MdePkg/Test/Mock/Include/GoogleTest/Library/MockUefiRuntimeServicesTableLib.h b/MdePkg/Test/Mock/Include/GoogleTest/Library/MockUefiRuntimeServicesTableLib.h
new file mode 100644
index 000000000000..afdfc6b85597
--- /dev/null
+++ b/MdePkg/Test/Mock/Include/GoogleTest/Library/MockUefiRuntimeServicesTableLib.h
@@ -0,0 +1,42 @@
+/** @file
+  Google Test mocks for UefiRuntimeServicesTableLib
+
+  Copyright (c) 2022, Intel Corporation. All rights reserved.
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef MOCK_UEFI_RUNTIME_SERVICES_TABLE_LIB_H_
+#define MOCK_UEFI_RUNTIME_SERVICES_TABLE_LIB_H_
+
+#include <Library/GoogleTestLib.h>
+#include <Library/FunctionMockLib.h>
+extern "C" {
+#include <Uefi.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+}
+
+struct MockUefiRuntimeServicesTableLib {
+  MOCK_INTERFACE_DECLARATION (MockUefiRuntimeServicesTableLib);
+
+  MOCK_FUNCTION_DECLARATION (
+    EFI_STATUS,
+    gRT_GetVariable,
+    (IN      CHAR16    *VariableName,
+     IN      EFI_GUID  *VendorGuid,
+     OUT     UINT32    *Attributes OPTIONAL,
+     IN OUT  UINTN     *DataSize,
+     OUT     VOID      *Data)
+    );
+
+  MOCK_FUNCTION_DECLARATION (
+    EFI_STATUS,
+    gRT_SetVariable,
+    (IN CHAR16    *VariableName,
+     IN EFI_GUID  *VendorGuid,
+     IN UINT32    Attributes,
+     IN UINTN     DataSize,
+     IN VOID      *Data)
+    );
+};
+
+#endif
diff --git a/MdePkg/Test/Mock/Library/GoogleTest/MockUefiLib/MockUefiLib.cpp b/MdePkg/Test/Mock/Library/GoogleTest/MockUefiLib/MockUefiLib.cpp
new file mode 100644
index 000000000000..5339d040c999
--- /dev/null
+++ b/MdePkg/Test/Mock/Library/GoogleTest/MockUefiLib/MockUefiLib.cpp
@@ -0,0 +1,12 @@
+/** @file
+  Google Test mocks for UefiLib
+
+  Copyright (c) 2022, Intel Corporation. All rights reserved.
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+#include <GoogleTest/Library/MockUefiLib.h>
+
+MOCK_INTERFACE_DEFINITION(MockUefiLib);
+
+MOCK_FUNCTION_DEFINITION(MockUefiLib, GetVariable2, 4, EFIAPI);
+MOCK_FUNCTION_DEFINITION(MockUefiLib, GetEfiGlobalVariable2, 3, EFIAPI);
diff --git a/MdePkg/Test/Mock/Library/GoogleTest/MockUefiLib/MockUefiLib.inf b/MdePkg/Test/Mock/Library/GoogleTest/MockUefiLib/MockUefiLib.inf
new file mode 100644
index 000000000000..1a7461e44449
--- /dev/null
+++ b/MdePkg/Test/Mock/Library/GoogleTest/MockUefiLib/MockUefiLib.inf
@@ -0,0 +1,33 @@
+## @file
+# Google Test mocks for UefiLib
+#
+# Copyright (c) 2022, Intel Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = MockUefiLib
+  FILE_GUID                      = 47211F7A-6D90-4DFB-BDF9-610B69197C2E
+  MODULE_TYPE                    = HOST_APPLICATION
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = UefiLib
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+#  VALID_ARCHITECTURES           = IA32 X64
+#
+
+[Sources]
+  MockUefiLib.cpp
+
+[Packages]
+  MdePkg/MdePkg.dec
+  UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
+
+[LibraryClasses]
+  GoogleTestLib
+
+[BuildOptions]
+  MSFT:*_*_*_CC_FLAGS = /EHsc
diff --git a/MdePkg/Test/Mock/Library/GoogleTest/MockUefiRuntimeServicesTableLib/MockUefiRuntimeServicesTableLib.cpp b/MdePkg/Test/Mock/Library/GoogleTest/MockUefiRuntimeServicesTableLib/MockUefiRuntimeServicesTableLib.cpp
new file mode 100644
index 000000000000..ecd1ba82366c
--- /dev/null
+++ b/MdePkg/Test/Mock/Library/GoogleTest/MockUefiRuntimeServicesTableLib/MockUefiRuntimeServicesTableLib.cpp
@@ -0,0 +1,40 @@
+/** @file
+  Google Test mocks for UefiRuntimeServicesTableLib
+
+  Copyright (c) 2022, Intel Corporation. All rights reserved.
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+#include <GoogleTest/Library/MockUefiRuntimeServicesTableLib.h>
+
+MOCK_INTERFACE_DEFINITION(MockUefiRuntimeServicesTableLib);
+
+MOCK_FUNCTION_DEFINITION(MockUefiRuntimeServicesTableLib, gRT_GetVariable, 5, EFIAPI);
+MOCK_FUNCTION_DEFINITION(MockUefiRuntimeServicesTableLib, gRT_SetVariable, 5, EFIAPI);
+
+static EFI_RUNTIME_SERVICES localRt = {
+  {0},              // EFI_TABLE_HEADER
+
+  NULL,             // EFI_GET_TIME
+  NULL,             // EFI_SET_TIME
+  NULL,             // EFI_GET_WAKEUP_TIME
+  NULL,             // EFI_SET_WAKEUP_TIME
+
+  NULL,             // EFI_SET_VIRTUAL_ADDRESS_MAP
+  NULL,             // EFI_CONVERT_POINTER
+
+  gRT_GetVariable,  // EFI_GET_VARIABLE
+  NULL,             // EFI_GET_NEXT_VARIABLE_NAME
+  gRT_SetVariable,  // EFI_SET_VARIABLE
+
+  NULL,             // EFI_GET_NEXT_HIGH_MONO_COUNT
+  NULL,             // EFI_RESET_SYSTEM
+
+  NULL,             // EFI_UPDATE_CAPSULE
+  NULL,             // EFI_QUERY_CAPSULE_CAPABILITIES
+
+  NULL,             // EFI_QUERY_VARIABLE_INFO
+};
+
+extern "C" {
+  EFI_RUNTIME_SERVICES* gRT = &localRt;
+}
diff --git a/MdePkg/Test/Mock/Library/GoogleTest/MockUefiRuntimeServicesTableLib/MockUefiRuntimeServicesTableLib.inf b/MdePkg/Test/Mock/Library/GoogleTest/MockUefiRuntimeServicesTableLib/MockUefiRuntimeServicesTableLib.inf
new file mode 100644
index 000000000000..7ba74d93bfc2
--- /dev/null
+++ b/MdePkg/Test/Mock/Library/GoogleTest/MockUefiRuntimeServicesTableLib/MockUefiRuntimeServicesTableLib.inf
@@ -0,0 +1,33 @@
+## @file
+# Google Test mocks for UefiRuntimeServicesTableLib
+#
+# Copyright (c) 2022, Intel Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = MockUefiRuntimeServicesTableLib
+  FILE_GUID                      = 0A0E13C2-4176-4293-89C7-C2497AA31B92
+  MODULE_TYPE                    = HOST_APPLICATION
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = UefiRuntimeServicesTableLib
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+#  VALID_ARCHITECTURES           = IA32 X64
+#
+
+[Sources]
+  MockUefiRuntimeServicesTableLib.cpp
+
+[Packages]
+  MdePkg/MdePkg.dec
+  UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
+
+[LibraryClasses]
+  GoogleTestLib
+
+[BuildOptions]
+  MSFT:*_*_*_CC_FLAGS = /EHsc
-- 
2.39.1.windows.1


  parent reply	other threads:[~2023-03-25 18:45 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-25 18:45 [Patch 00/12] Add gmock support for host-based unit testing Michael D Kinney
2023-03-25 18:45 ` [Patch 01/12] UnitTestFrameworkPkg: Add subhook submodule required for gmock Michael D Kinney
2023-03-25 18:45 ` [Patch 02/12] .pytool/CISettings.py: Add subhook submodule Michael D Kinney
2023-03-25 18:45 ` [Patch 03/12] UnitTestFrameworkPkg: Add gmock support to GoogleTestLib Michael D Kinney
2023-03-25 18:45 ` [Patch 04/12] UnitTestFrameworkPkg/ReadMe.md: Add gmock documentation Michael D Kinney
2023-03-28 18:23   ` Johnson, Chris N
2023-03-25 18:45 ` Michael D Kinney [this message]
2023-03-25 18:45 ` [Patch 06/12] MdeModulePkg/Library/UefiSortLib: Add GoogleTestLib example Michael D Kinney
2023-03-25 18:45 ` [Patch 07/12] SecurityPkg: Add gmock example Michael D Kinney
2023-03-26  2:51   ` Yao, Jiewen
2023-03-25 18:45 ` [Patch 08/12] SecurityPkg/Library/SecureBootVariableLib: Fix VS20xx 4122 errors Michael D Kinney
2023-03-26  2:50   ` Yao, Jiewen
2023-03-25 18:45 ` [Patch 09/12] SecurityPkg/Library/SecureBootVariableLib: HOST_APPLICATION IA32/X64 only Michael D Kinney
2023-03-26  2:50   ` Yao, Jiewen
2023-03-25 18:45 ` [Patch 10/12] MdePkg/Library/BaseLib: " Michael D Kinney
2023-03-25 18:45 ` [Patch 11/12] MdeModulePkg: " Michael D Kinney
2023-03-25 18:45 ` [Patch 12/12] PrmPkg/Library: " Michael D Kinney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230325184541.596-6-michael.d.kinney@intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox