Browse Source

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>
Liu, Zhiguang 1 year ago
parent
commit
1cd902f1f4

+ 9 - 5
UnitTestFrameworkPkg/Include/Library/UnitTestPersistenceLib.h

@@ -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

+ 4 - 2
UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLib.c

@@ -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;

+ 8 - 3
UnitTestFrameworkPkg/Library/UnitTestPersistenceLibNull/UnitTestPersistenceLibNull.c

@@ -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;

+ 15 - 8
UnitTestFrameworkPkg/Library/UnitTestPersistenceLibSimpleFileSystem/UnitTestPersistenceLibSimpleFileSystem.c

@@ -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.
-  Buffer   = AllocatePool (FileSize);
+  FileSize       = (UINTN)LargeFileSize; // You know what... if it's too large, this lib don't care.
+  *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;