UnitTestFrameworkPkg: Modify APIs in UnitTestPersistenceLib

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

UnitTestPersistenceLib now consumes private struct definition.
Modify APIs in UnitTestPersistenceLib to make it easy to become
a public library.

Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
Reviewed-by: Michael Kubacki <mikuback@linux.microsoft.com>
Cc: Sean Brogan <sean.brogan@microsoft.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com>
This commit is contained in:
Liu, Zhiguang 2022-12-06 13:25:43 +08:00 committed by mergify[bot]
parent e986f4ce96
commit 1cd902f1f4
4 changed files with 36 additions and 18 deletions

View File

@ -4,7 +4,7 @@
(eg. a reboot-based test). (eg. a reboot-based test).
Copyright (c) Microsoft Corporation.<BR> Copyright (c) Microsoft Corporation.<BR>
Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR> Copyright (c) 2019 - 2022, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent SPDX-License-Identifier: BSD-2-Clause-Patent
**/ **/
@ -12,7 +12,7 @@
#ifndef _UNIT_TEST_PERSISTENCE_LIB_H_ #ifndef _UNIT_TEST_PERSISTENCE_LIB_H_
#define _UNIT_TEST_PERSISTENCE_LIB_H_ #define _UNIT_TEST_PERSISTENCE_LIB_H_
#include <UnitTestFrameworkTypes.h> #include <Library/UnitTestLib.h>
#define UNIT_TEST_PERSISTENCE_LIB_VERSION 1 #define UNIT_TEST_PERSISTENCE_LIB_VERSION 1
@ -40,6 +40,7 @@ DoesCacheExist (
@param[in] FrameworkHandle A pointer to the framework that is being persisted. @param[in] FrameworkHandle A pointer to the framework that is being persisted.
@param[in] SaveData A pointer to the buffer containing the serialized @param[in] SaveData A pointer to the buffer containing the serialized
framework internal state. framework internal state.
@param[in] SaveStateSize The size of SaveData in bytes.
@retval EFI_SUCCESS Data is persisted and the test can be safely quit. @retval EFI_SUCCESS Data is persisted and the test can be safely quit.
@retval Others Data is not persisted and test cannot be resumed upon exit. @retval Others Data is not persisted and test cannot be resumed upon exit.
@ -49,7 +50,8 @@ EFI_STATUS
EFIAPI EFIAPI
SaveUnitTestCache ( SaveUnitTestCache (
IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle, IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle,
IN UNIT_TEST_SAVE_HEADER *SaveData IN VOID *SaveData,
IN UINTN SaveStateSize
); );
/** /**
@ -57,8 +59,9 @@ SaveUnitTestCache (
Will allocate a buffer to hold the loaded data. Will allocate a buffer to hold the loaded data.
@param[in] FrameworkHandle A pointer to the framework that is being persisted. @param[in] FrameworkHandle A pointer to the framework that is being persisted.
@param[in] SaveData A pointer pointer that will be updated with the address @param[out] SaveData A pointer pointer that will be updated with the address
of the loaded data buffer. of the loaded data buffer.
@param[out] SaveStateSize Return the size of SaveData in bytes.
@retval EFI_SUCCESS Data has been loaded successfully and SaveData is updated @retval EFI_SUCCESS Data has been loaded successfully and SaveData is updated
with a pointer to the buffer. with a pointer to the buffer.
@ -70,7 +73,8 @@ EFI_STATUS
EFIAPI EFIAPI
LoadUnitTestCache ( LoadUnitTestCache (
IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle, IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle,
OUT UNIT_TEST_SAVE_HEADER **SaveData OUT VOID **SaveData,
OUT UINTN *SaveStateSize
); );
#endif #endif

View File

@ -2,6 +2,7 @@
Implement UnitTestLib Implement UnitTestLib
Copyright (c) Microsoft Corporation. Copyright (c) Microsoft Corporation.
Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent SPDX-License-Identifier: BSD-2-Clause-Patent
**/ **/
@ -210,6 +211,7 @@ InitUnitTestFramework (
EFI_STATUS Status; EFI_STATUS Status;
UNIT_TEST_FRAMEWORK_HANDLE NewFrameworkHandle; UNIT_TEST_FRAMEWORK_HANDLE NewFrameworkHandle;
UNIT_TEST_FRAMEWORK *NewFramework; UNIT_TEST_FRAMEWORK *NewFramework;
UINTN SaveStateSize;
Status = EFI_SUCCESS; Status = EFI_SUCCESS;
NewFramework = NULL; NewFramework = NULL;
@ -267,7 +269,7 @@ InitUnitTestFramework (
// If there is a persisted context, load it now. // If there is a persisted context, load it now.
// //
if (DoesCacheExist (NewFrameworkHandle)) { if (DoesCacheExist (NewFrameworkHandle)) {
Status = LoadUnitTestCache (NewFrameworkHandle, (UNIT_TEST_SAVE_HEADER **)(&NewFramework->SavedState)); Status = LoadUnitTestCache (NewFrameworkHandle, (VOID **)(&NewFramework->SavedState), &SaveStateSize);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
// //
// Don't actually report it as an error, but emit a warning. // Don't actually report it as an error, but emit a warning.
@ -852,7 +854,7 @@ SaveFrameworkState (
// //
// All that should be left to do is save it using the associated persistence lib. // All that should be left to do is save it using the associated persistence lib.
// //
Status = SaveUnitTestCache (FrameworkHandle, Header); Status = SaveUnitTestCache (FrameworkHandle, Header, Header->SaveStateSize);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "%a - Could not save state! %r\n", __FUNCTION__, Status)); DEBUG ((DEBUG_ERROR, "%a - Could not save state! %r\n", __FUNCTION__, Status));
Status = EFI_DEVICE_ERROR; Status = EFI_DEVICE_ERROR;

View File

@ -2,6 +2,7 @@
This is an instance of the Unit Test Persistence Lib that does nothing. This is an instance of the Unit Test Persistence Lib that does nothing.
Copyright (c) Microsoft Corporation.<BR> Copyright (c) Microsoft Corporation.<BR>
Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent SPDX-License-Identifier: BSD-2-Clause-Patent
**/ **/
@ -35,6 +36,7 @@ DoesCacheExist (
@param[in] FrameworkHandle A pointer to the framework that is being persisted. @param[in] FrameworkHandle A pointer to the framework that is being persisted.
@param[in] SaveData A pointer to the buffer containing the serialized @param[in] SaveData A pointer to the buffer containing the serialized
framework internal state. framework internal state.
@param[in] SaveStateSize The size of SaveData in bytes.
@retval EFI_SUCCESS Data is persisted and the test can be safely quit. @retval EFI_SUCCESS Data is persisted and the test can be safely quit.
@retval Others Data is not persisted and test cannot be resumed upon exit. @retval Others Data is not persisted and test cannot be resumed upon exit.
@ -44,7 +46,8 @@ EFI_STATUS
EFIAPI EFIAPI
SaveUnitTestCache ( SaveUnitTestCache (
IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle, IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle,
IN UNIT_TEST_SAVE_HEADER *SaveData IN VOID *SaveData,
IN UINTN SaveStateSize
) )
{ {
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;
@ -55,8 +58,9 @@ SaveUnitTestCache (
Will allocate a buffer to hold the loaded data. Will allocate a buffer to hold the loaded data.
@param[in] FrameworkHandle A pointer to the framework that is being persisted. @param[in] FrameworkHandle A pointer to the framework that is being persisted.
@param[in] SaveData A pointer pointer that will be updated with the address @param[out] SaveData A pointer pointer that will be updated with the address
of the loaded data buffer. of the loaded data buffer.
@param[out] SaveStateSize Return the size of SaveData in bytes.
@retval EFI_SUCCESS Data has been loaded successfully and SaveData is updated @retval EFI_SUCCESS Data has been loaded successfully and SaveData is updated
with a pointer to the buffer. with a pointer to the buffer.
@ -68,7 +72,8 @@ EFI_STATUS
EFIAPI EFIAPI
LoadUnitTestCache ( LoadUnitTestCache (
IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle, IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle,
OUT UNIT_TEST_SAVE_HEADER **SaveData OUT VOID **SaveData,
OUT UINTN *SaveStateSize
) )
{ {
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;

View File

@ -4,6 +4,7 @@
version of the internal test state in case the test needs to quit and restore. version of the internal test state in case the test needs to quit and restore.
Copyright (c) Microsoft Corporation.<BR> Copyright (c) Microsoft Corporation.<BR>
Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent SPDX-License-Identifier: BSD-2-Clause-Patent
**/ **/
@ -16,6 +17,7 @@
#include <Library/DevicePathLib.h> #include <Library/DevicePathLib.h>
#include <Library/ShellLib.h> #include <Library/ShellLib.h>
#include <Protocol/LoadedImage.h> #include <Protocol/LoadedImage.h>
#include <UnitTestFrameworkTypes.h>
#define CACHE_FILE_SUFFIX L"_Cache.dat" #define CACHE_FILE_SUFFIX L"_Cache.dat"
@ -213,6 +215,7 @@ DoesCacheExist (
@param[in] FrameworkHandle A pointer to the framework that is being persisted. @param[in] FrameworkHandle A pointer to the framework that is being persisted.
@param[in] SaveData A pointer to the buffer containing the serialized @param[in] SaveData A pointer to the buffer containing the serialized
framework internal state. framework internal state.
@param[in] SaveStateSize The size of SaveData in bytes.
@retval EFI_SUCCESS Data is persisted and the test can be safely quit. @retval EFI_SUCCESS Data is persisted and the test can be safely quit.
@retval Others Data is not persisted and test cannot be resumed upon exit. @retval Others Data is not persisted and test cannot be resumed upon exit.
@ -222,7 +225,8 @@ EFI_STATUS
EFIAPI EFIAPI
SaveUnitTestCache ( SaveUnitTestCache (
IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle, IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle,
IN UNIT_TEST_SAVE_HEADER *SaveData IN VOID *SaveData,
IN UINTN SaveStateSize
) )
{ {
EFI_DEVICE_PATH_PROTOCOL *FileDevicePath; EFI_DEVICE_PATH_PROTOCOL *FileDevicePath;
@ -280,7 +284,7 @@ SaveUnitTestCache (
// //
// Write the data to the file. // Write the data to the file.
// //
WriteCount = SaveData->SaveStateSize; WriteCount = SaveStateSize;
DEBUG ((DEBUG_INFO, "%a - Writing %d bytes to file...\n", __FUNCTION__, WriteCount)); DEBUG ((DEBUG_INFO, "%a - Writing %d bytes to file...\n", __FUNCTION__, WriteCount));
Status = ShellWriteFile ( Status = ShellWriteFile (
FileHandle, FileHandle,
@ -288,7 +292,7 @@ SaveUnitTestCache (
SaveData SaveData
); );
if (EFI_ERROR (Status) || (WriteCount != SaveData->SaveStateSize)) { if (EFI_ERROR (Status) || (WriteCount != SaveStateSize)) {
DEBUG ((DEBUG_ERROR, "%a - Writing to file failed! %r\n", __FUNCTION__, Status)); DEBUG ((DEBUG_ERROR, "%a - Writing to file failed! %r\n", __FUNCTION__, Status));
} else { } else {
DEBUG ((DEBUG_INFO, "%a - SUCCESS!\n", __FUNCTION__)); DEBUG ((DEBUG_INFO, "%a - SUCCESS!\n", __FUNCTION__));
@ -312,8 +316,9 @@ Exit:
Will allocate a buffer to hold the loaded data. Will allocate a buffer to hold the loaded data.
@param[in] FrameworkHandle A pointer to the framework that is being persisted. @param[in] FrameworkHandle A pointer to the framework that is being persisted.
@param[in] SaveData A pointer pointer that will be updated with the address @param[out] SaveData A pointer pointer that will be updated with the address
of the loaded data buffer. of the loaded data buffer.
@param[out] SaveStateSize Return the size of SaveData in bytes.
@retval EFI_SUCCESS Data has been loaded successfully and SaveData is updated @retval EFI_SUCCESS Data has been loaded successfully and SaveData is updated
with a pointer to the buffer. with a pointer to the buffer.
@ -325,7 +330,8 @@ EFI_STATUS
EFIAPI EFIAPI
LoadUnitTestCache ( LoadUnitTestCache (
IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle, IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle,
OUT UNIT_TEST_SAVE_HEADER **SaveData OUT VOID **SaveData,
OUT UINTN *SaveStateSize
) )
{ {
EFI_STATUS Status; EFI_STATUS Status;
@ -334,7 +340,7 @@ LoadUnitTestCache (
BOOLEAN IsFileOpened; BOOLEAN IsFileOpened;
UINT64 LargeFileSize; UINT64 LargeFileSize;
UINTN FileSize; UINTN FileSize;
UNIT_TEST_SAVE_HEADER *Buffer; VOID *Buffer;
IsFileOpened = FALSE; IsFileOpened = FALSE;
Buffer = NULL; Buffer = NULL;
@ -380,8 +386,9 @@ LoadUnitTestCache (
// //
// Now that we know the size, let's allocated a buffer to hold the contents. // Now that we know the size, let's allocated a buffer to hold the contents.
// //
FileSize = (UINTN)LargeFileSize; // You know what... if it's too large, this lib don't care. FileSize = (UINTN)LargeFileSize; // You know what... if it's too large, this lib don't care.
Buffer = AllocatePool (FileSize); *SaveStateSize = FileSize;
Buffer = AllocatePool (FileSize);
if (Buffer == NULL) { if (Buffer == NULL) {
DEBUG ((DEBUG_ERROR, "%a - Failed to allocate a pool to hold the file contents! %r\n", __FUNCTION__, Status)); DEBUG ((DEBUG_ERROR, "%a - Failed to allocate a pool to hold the file contents! %r\n", __FUNCTION__, Status));
Status = EFI_OUT_OF_RESOURCES; Status = EFI_OUT_OF_RESOURCES;