Skip to content

Commit

Permalink
Mocks for googletest
Browse files Browse the repository at this point in the history
  • Loading branch information
os-d committed Apr 26, 2024
1 parent fa3b580 commit 35ade72
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 50 deletions.
3 changes: 2 additions & 1 deletion MdePkg/Include/Base.h
Original file line number Diff line number Diff line change
Expand Up @@ -283,8 +283,9 @@ struct _LIST_ENTRY {

///
/// Datum is scoped to the current file or function.
/// To support GoogleTest compiling static functions, do away with static in that case
///
#ifndef UNIT_TEST
#ifndef GOOGLETEST_HOST_UNIT_TEST_BUILD
#define STATIC static
#else
#define STATIC
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,15 @@ struct MockUefiBootServicesTableLib {
(IN EFI_EVENT Event)
);

MOCK_FUNCTION_DECLARATION (
EFI_STATUS,
gBS_InstallProtocolInterface,
(IN OUT EFI_HANDLE *UserHandle,
IN EFI_GUID *Protocol,
IN EFI_INTERFACE_TYPE InterfaceType,
IN VOID *Interface)
);

MOCK_FUNCTION_DECLARATION (
EFI_STATUS,
gBS_HandleProtocol,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,60 +10,98 @@ MOCK_INTERFACE_DEFINITION (MockUefiBootServicesTableLib);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_GetMemoryMap, 5, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_CreateEvent, 5, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_CloseEvent, 1, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_InstallProtocolInterface, 4, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_HandleProtocol, 3, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_LocateProtocol, 3, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_CreateEventEx, 6, EFIAPI);

extern "C" {
EFI_STATUS
EFIAPI
gBS_InstallMultipleProtocolInterfaces (
IN OUT EFI_HANDLE *Handle,
...
)
{
VA_LIST Args;
EFI_STATUS Status;
EFI_GUID *Protocol;
VOID *Interface;
UINTN Index;

VA_START (Args, Handle);
for (Index = 0, Status = EFI_SUCCESS; !EFI_ERROR (Status); Index++) {
//
// If protocol is NULL, then it's the end of the list
//
Protocol = VA_ARG (Args, EFI_GUID *);
if (Protocol == NULL) {
break;
}

Interface = VA_ARG (Args, VOID *);

//
// Install it
//
Status = gBS_InstallProtocolInterface (Handle, Protocol, EFI_NATIVE_INTERFACE, Interface);
}

VA_END (Args);
return Status;
}
}

static EFI_BOOT_SERVICES LocalBs = {
{ 0, 0, 0, 0, 0 }, // EFI_TABLE_HEADER
NULL, // EFI_RAISE_TPL
NULL, // EFI_RESTORE_TPL
NULL, // EFI_ALLOCATE_PAGES
NULL, // EFI_FREE_PAGES
gBS_GetMemoryMap, // EFI_GET_MEMORY_MAP
NULL, // EFI_ALLOCATE_POOL
NULL, // EFI_FREE_POOL
gBS_CreateEvent, // EFI_CREATE_EVENT
NULL, // EFI_SET_TIMER
NULL, // EFI_WAIT_FOR_EVENT
NULL, // EFI_SIGNAL_EVENT
gBS_CloseEvent, // EFI_CLOSE_EVENT
NULL, // EFI_CHECK_EVENT
NULL, // EFI_INSTALL_PROTOCOL_INTERFACE
NULL, // EFI_REINSTALL_PROTOCOL_INTERFACE
NULL, // EFI_UNINSTALL_PROTOCOL_INTERFACE
gBS_HandleProtocol, // EFI_HANDLE_PROTOCOL
NULL, // VOID
NULL, // EFI_REGISTER_PROTOCOL_NOTIFY
NULL, // EFI_LOCATE_HANDLE
NULL, // EFI_LOCATE_DEVICE_PATH
NULL, // EFI_INSTALL_CONFIGURATION_TABLE
NULL, // EFI_IMAGE_LOAD
NULL, // EFI_IMAGE_START
NULL, // EFI_EXIT
NULL, // EFI_IMAGE_UNLOAD
NULL, // EFI_EXIT_BOOT_SERVICES
NULL, // EFI_GET_NEXT_MONOTONIC_COUNT
NULL, // EFI_STALL
NULL, // EFI_SET_WATCHDOG_TIMER
NULL, // EFI_CONNECT_CONTROLLER
NULL, // EFI_DISCONNECT_CONTROLLER
NULL, // EFI_OPEN_PROTOCOL
NULL, // EFI_CLOSE_PROTOCOL
NULL, // EFI_OPEN_PROTOCOL_INFORMATION
NULL, // EFI_PROTOCOLS_PER_HANDLE
NULL, // EFI_LOCATE_HANDLE_BUFFER
gBS_LocateProtocol, // EFI_LOCATE_PROTOCOL
NULL, // EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES
NULL, // EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES
NULL, // EFI_CALCULATE_CRC32
NULL, // EFI_COPY_MEM
NULL, // EFI_SET_MEM
gBS_CreateEventEx // EFI_CREATE_EVENT_EX
{ 0, 0, 0, 0, 0 }, // EFI_TABLE_HEADER
NULL, // EFI_RAISE_TPL
NULL, // EFI_RESTORE_TPL
NULL, // EFI_ALLOCATE_PAGES
NULL, // EFI_FREE_PAGES
gBS_GetMemoryMap, // EFI_GET_MEMORY_MAP
NULL, // EFI_ALLOCATE_POOL
NULL, // EFI_FREE_POOL
gBS_CreateEvent, // EFI_CREATE_EVENT
NULL, // EFI_SET_TIMER
NULL, // EFI_WAIT_FOR_EVENT
NULL, // EFI_SIGNAL_EVENT
gBS_CloseEvent, // EFI_CLOSE_EVENT
NULL, // EFI_CHECK_EVENT
gBS_InstallProtocolInterface, // EFI_INSTALL_PROTOCOL_INTERFACE
NULL, // EFI_REINSTALL_PROTOCOL_INTERFACE
NULL, // EFI_UNINSTALL_PROTOCOL_INTERFACE
gBS_HandleProtocol, // EFI_HANDLE_PROTOCOL
NULL, // VOID
NULL, // EFI_REGISTER_PROTOCOL_NOTIFY
NULL, // EFI_LOCATE_HANDLE
NULL, // EFI_LOCATE_DEVICE_PATH
NULL, // EFI_INSTALL_CONFIGURATION_TABLE
NULL, // EFI_IMAGE_LOAD
NULL, // EFI_IMAGE_START
NULL, // EFI_EXIT
NULL, // EFI_IMAGE_UNLOAD
NULL, // EFI_EXIT_BOOT_SERVICES
NULL, // EFI_GET_NEXT_MONOTONIC_COUNT
NULL, // EFI_STALL
NULL, // EFI_SET_WATCHDOG_TIMER
NULL, // EFI_CONNECT_CONTROLLER
NULL, // EFI_DISCONNECT_CONTROLLER
NULL, // EFI_OPEN_PROTOCOL
NULL, // EFI_CLOSE_PROTOCOL
NULL, // EFI_OPEN_PROTOCOL_INFORMATION
NULL, // EFI_PROTOCOLS_PER_HANDLE
NULL, // EFI_LOCATE_HANDLE_BUFFER
gBS_LocateProtocol, // EFI_LOCATE_PROTOCOL
gBS_InstallMultipleProtocolInterfaces, // EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES
NULL, // EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES
NULL, // EFI_CALCULATE_CRC32
NULL, // EFI_COPY_MEM
NULL, // EFI_SET_MEM
gBS_CreateEventEx // EFI_CREATE_EVENT_EX
};

extern "C" {
EFI_BOOT_SERVICES *gBS = &LocalBs;
EFI_HANDLE gImageHandle = NULL;
EFI_SYSTEM_TABLE *gST = NULL;
EFI_BOOT_SERVICES *gBS = &LocalBs;
EFI_HANDLE gImageHandle = NULL;
EFI_SYSTEM_TABLE *gST = NULL;
}
4 changes: 3 additions & 1 deletion UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
#
# MSFT
#
MSFT:*_*_*_CC_FLAGS = /EHs
MSFT:*_*_*_CC_FLAGS = /EHs -D GOOGLETEST_HOST_UNIT_TEST_BUILD=1
MSFT:*_*_*_DLINK_FLAGS == /out:"$(BIN_DIR)\$(MODULE_NAME_GUID).exe" /pdb:"$(BIN_DIR)\$(MODULE_NAME_GUID).pdb" /IGNORE:4001 /NOLOGO /SUBSYSTEM:CONSOLE /DEBUG /STACK:0x40000,0x40000 /NODEFAULTLIB:libcmt.lib libcmtd.lib
MSFT:*_*_IA32_DLINK_FLAGS = /MACHINE:I386
MSFT:*_*_X64_DLINK_FLAGS = /MACHINE:AMD64
Expand All @@ -61,13 +61,15 @@
#
# GCC
#
GCC:*_*_*_CC_FLAGS = -D GOOGLETEST_HOST_UNIT_TEST_BUILD=1
GCC:*_*_IA32_DLINK_FLAGS == -o $(BIN_DIR)/$(MODULE_NAME_GUID) -m32 -no-pie
GCC:*_*_X64_DLINK_FLAGS == -o $(BIN_DIR)/$(MODULE_NAME_GUID) -m64 -no-pie
GCC:*_*_*_DLINK2_FLAGS == -lgcov -lpthread -lstdc++ -lm

#
# Need to do this link via gcc and not ld as the pathing to libraries changes from OS version to OS version
#
XCODE:*_*_*_CC_FLAGS = -D GOOGLETEST_HOST_UNIT_TEST_BUILD=1
XCODE:*_*_IA32_DLINK_PATH == gcc
XCODE:*_*_IA32_CC_FLAGS = -I$(WORKSPACE)/EmulatorPkg/Unix/Host/X11IncludeHack
XCODE:*_*_IA32_DLINK_FLAGS == -arch i386 -o $(BIN_DIR)/$(MODULE_NAME_GUID) -L/usr/X11R6/lib -lXext -lX11 -framework Carbon
Expand Down

0 comments on commit 35ade72

Please sign in to comment.