REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3911 This change added unit test and enabled it from pipeline for the updated SecureBootVariableLib. The unit test covers all implemented interfaces and certain corner cases. Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Min Xu <min.m.xu@intel.com> Signed-off-by: Kun Qin <kun.qin@microsoft.com> Reviewed-by: Jiewen Yao <Jiewen.yao@intel.com> Acked-by: Michael Kubacki <michael.kubacki@microsoft.com>
		
			
				
	
	
		
			2038 lines
		
	
	
		
			94 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			2038 lines
		
	
	
		
			94 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Unit tests of the implementation of SecureBootVariableLib.
 | 
						|
 | 
						|
  Copyright (C) Microsoft Corporation.
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
#include <string.h>
 | 
						|
#include <stdarg.h>
 | 
						|
#include <stddef.h>
 | 
						|
#include <setjmp.h>
 | 
						|
#include <cmocka.h>
 | 
						|
 | 
						|
#include <Uefi.h>
 | 
						|
#include <UefiSecureBoot.h>
 | 
						|
#include <Guid/GlobalVariable.h>
 | 
						|
#include <Guid/AuthenticatedVariableFormat.h>
 | 
						|
#include <Guid/ImageAuthentication.h>
 | 
						|
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
 | 
						|
#include <Library/UnitTestLib.h>
 | 
						|
#include <Library/SecureBootVariableLib.h>
 | 
						|
 | 
						|
#define UNIT_TEST_APP_NAME     "SecureBootVariableLib Unit Tests"
 | 
						|
#define UNIT_TEST_APP_VERSION  "1.0"
 | 
						|
#define VAR_AUTH_DESC_SIZE     OFFSET_OF (EFI_VARIABLE_AUTHENTICATION_2, AuthInfo) + OFFSET_OF (WIN_CERTIFICATE_UEFI_GUID, CertData)
 | 
						|
 | 
						|
extern EFI_TIME  mMaxTimestamp;
 | 
						|
extern EFI_TIME  mDefaultPayloadTimestamp;
 | 
						|
 | 
						|
/**
 | 
						|
  Sets the value of a variable.
 | 
						|
 | 
						|
  @param[in]  VariableName       A Null-terminated string that is the name of the vendor's variable.
 | 
						|
                                 Each VariableName is unique for each VendorGuid. VariableName must
 | 
						|
                                 contain 1 or more characters. If VariableName is an empty string,
 | 
						|
                                 then EFI_INVALID_PARAMETER is returned.
 | 
						|
  @param[in]  VendorGuid         A unique identifier for the vendor.
 | 
						|
  @param[in]  Attributes         Attributes bitmask to set for the variable.
 | 
						|
  @param[in]  DataSize           The size in bytes of the Data buffer. Unless the EFI_VARIABLE_APPEND_WRITE or
 | 
						|
                                 EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute is set, a size of zero
 | 
						|
                                 causes the variable to be deleted. When the EFI_VARIABLE_APPEND_WRITE attribute is
 | 
						|
                                 set, then a SetVariable() call with a DataSize of zero will not cause any change to
 | 
						|
                                 the variable value (the timestamp associated with the variable may be updated however
 | 
						|
                                 even if no new data value is provided,see the description of the
 | 
						|
                                 EFI_VARIABLE_AUTHENTICATION_2 descriptor below. In this case the DataSize will not
 | 
						|
                                 be zero since the EFI_VARIABLE_AUTHENTICATION_2 descriptor will be populated).
 | 
						|
  @param[in]  Data               The contents for the variable.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The firmware has successfully stored the variable and its data as
 | 
						|
                                 defined by the Attributes.
 | 
						|
  @retval EFI_INVALID_PARAMETER  An invalid combination of attribute bits, name, and GUID was supplied, or the
 | 
						|
                                 DataSize exceeds the maximum allowed.
 | 
						|
  @retval EFI_INVALID_PARAMETER  VariableName is an empty string.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   Not enough storage is available to hold the variable and its data.
 | 
						|
  @retval EFI_DEVICE_ERROR       The variable could not be retrieved due to a hardware error.
 | 
						|
  @retval EFI_WRITE_PROTECTED    The variable in question is read-only.
 | 
						|
  @retval EFI_WRITE_PROTECTED    The variable in question cannot be deleted.
 | 
						|
  @retval EFI_SECURITY_VIOLATION The variable could not be written due to EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACESS being set,
 | 
						|
                                 but the AuthInfo does NOT pass the validation check carried out by the firmware.
 | 
						|
 | 
						|
  @retval EFI_NOT_FOUND          The variable trying to be updated or deleted was not found.
 | 
						|
 | 
						|
**/
 | 
						|
STATIC
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
MockSetVariable (
 | 
						|
  IN  CHAR16    *VariableName,
 | 
						|
  IN  EFI_GUID  *VendorGuid,
 | 
						|
  IN  UINT32    Attributes,
 | 
						|
  IN  UINTN     DataSize,
 | 
						|
  IN  VOID      *Data
 | 
						|
  )
 | 
						|
{
 | 
						|
  DEBUG ((
 | 
						|
    DEBUG_INFO,
 | 
						|
    "%a %s %g %x %x %p\n",
 | 
						|
    __FUNCTION__,
 | 
						|
    VariableName,
 | 
						|
    VendorGuid,
 | 
						|
    Attributes,
 | 
						|
    DataSize,
 | 
						|
    Data
 | 
						|
    ));
 | 
						|
  check_expected_ptr (VariableName);
 | 
						|
  check_expected_ptr (VendorGuid);
 | 
						|
  check_expected_ptr (Attributes);
 | 
						|
  check_expected (DataSize);
 | 
						|
  check_expected (Data);
 | 
						|
 | 
						|
  return (EFI_STATUS)mock ();
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Returns the value of a variable.
 | 
						|
 | 
						|
  @param[in]       VariableName  A Null-terminated string that is the name of the vendor's
 | 
						|
                                 variable.
 | 
						|
  @param[in]       VendorGuid    A unique identifier for the vendor.
 | 
						|
  @param[out]      Attributes    If not NULL, a pointer to the memory location to return the
 | 
						|
                                 attributes bitmask for the variable.
 | 
						|
  @param[in, out]  DataSize      On input, the size in bytes of the return Data buffer.
 | 
						|
                                 On output the size of data returned in Data.
 | 
						|
  @param[out]      Data          The buffer to return the contents of the variable. May be NULL
 | 
						|
                                 with a zero DataSize in order to determine the size buffer needed.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The function completed successfully.
 | 
						|
  @retval EFI_NOT_FOUND          The variable was not found.
 | 
						|
  @retval EFI_BUFFER_TOO_SMALL   The DataSize is too small for the result.
 | 
						|
  @retval EFI_INVALID_PARAMETER  VariableName is NULL.
 | 
						|
  @retval EFI_INVALID_PARAMETER  VendorGuid is NULL.
 | 
						|
  @retval EFI_INVALID_PARAMETER  DataSize is NULL.
 | 
						|
  @retval EFI_INVALID_PARAMETER  The DataSize is not too small and Data is NULL.
 | 
						|
  @retval EFI_DEVICE_ERROR       The variable could not be retrieved due to a hardware error.
 | 
						|
  @retval EFI_SECURITY_VIOLATION The variable could not be retrieved due to an authentication failure.
 | 
						|
 | 
						|
**/
 | 
						|
STATIC
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
MockGetVariable (
 | 
						|
  IN     CHAR16    *VariableName,
 | 
						|
  IN     EFI_GUID  *VendorGuid,
 | 
						|
  OUT    UINT32    *Attributes     OPTIONAL,
 | 
						|
  IN OUT UINTN     *DataSize,
 | 
						|
  OUT    VOID      *Data           OPTIONAL
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINTN    TargetSize;
 | 
						|
  BOOLEAN  Exist;
 | 
						|
 | 
						|
  DEBUG ((
 | 
						|
    DEBUG_INFO,
 | 
						|
    "%a %s %g %p %x %p\n",
 | 
						|
    __FUNCTION__,
 | 
						|
    VariableName,
 | 
						|
    VendorGuid,
 | 
						|
    Attributes,
 | 
						|
    *DataSize,
 | 
						|
    Data
 | 
						|
    ));
 | 
						|
  assert_non_null (DataSize);
 | 
						|
  check_expected_ptr (VariableName);
 | 
						|
  check_expected_ptr (VendorGuid);
 | 
						|
  check_expected (*DataSize);
 | 
						|
 | 
						|
  Exist = (BOOLEAN)mock ();
 | 
						|
 | 
						|
  if (!Exist) {
 | 
						|
    return EFI_NOT_FOUND;
 | 
						|
  }
 | 
						|
 | 
						|
  TargetSize = (UINTN)mock ();
 | 
						|
  if (TargetSize > *DataSize) {
 | 
						|
    *DataSize = TargetSize;
 | 
						|
    return EFI_BUFFER_TOO_SMALL;
 | 
						|
  } else {
 | 
						|
    assert_non_null (Data);
 | 
						|
    CopyMem (Data, (VOID *)mock (), TargetSize);
 | 
						|
  }
 | 
						|
 | 
						|
  return EFI_SUCCESS;
 | 
						|
}
 | 
						|
 | 
						|
///
 | 
						|
/// Mock version of the UEFI Runtime Services Table
 | 
						|
///
 | 
						|
EFI_RUNTIME_SERVICES  gMockRuntime = {
 | 
						|
  {
 | 
						|
    EFI_RUNTIME_SERVICES_SIGNATURE,     // Signature
 | 
						|
    EFI_RUNTIME_SERVICES_REVISION,      // Revision
 | 
						|
    sizeof (EFI_RUNTIME_SERVICES),      // HeaderSize
 | 
						|
    0,                                  // CRC32
 | 
						|
    0                                   // Reserved
 | 
						|
  },
 | 
						|
  NULL,               // GetTime
 | 
						|
  NULL,               // SetTime
 | 
						|
  NULL,               // GetWakeupTime
 | 
						|
  NULL,               // SetWakeupTime
 | 
						|
  NULL,               // SetVirtualAddressMap
 | 
						|
  NULL,               // ConvertPointer
 | 
						|
  MockGetVariable,    // GetVariable
 | 
						|
  NULL,               // GetNextVariableName
 | 
						|
  MockSetVariable,    // SetVariable
 | 
						|
  NULL,               // GetNextHighMonotonicCount
 | 
						|
  NULL,               // ResetSystem
 | 
						|
  NULL,               // UpdateCapsule
 | 
						|
  NULL,               // QueryCapsuleCapabilities
 | 
						|
  NULL                // QueryVariableInfo
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for SetSecureBootMode () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
SetSecureBootModeShouldSetVar (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT8       SecureBootMode;
 | 
						|
  EFI_STATUS  Status;
 | 
						|
 | 
						|
  SecureBootMode = 0xAB; // Any random magic number...
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_CUSTOM_MODE_NAME, sizeof (EFI_CUSTOM_MODE_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiCustomModeEnableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, sizeof (SecureBootMode));
 | 
						|
  expect_memory (MockSetVariable, Data, &SecureBootMode, sizeof (SecureBootMode));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  Status = SetSecureBootMode (SecureBootMode);
 | 
						|
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for GetSetupMode () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
GetSetupModeShouldGetVar (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
  UINT8       TargetMode;
 | 
						|
  UINT8       SetupMode;
 | 
						|
 | 
						|
  TargetMode = 0xAB; // Any random magic number...
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_SETUP_MODE_NAME, sizeof (EFI_SETUP_MODE_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (SetupMode));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (SetupMode));
 | 
						|
  will_return (MockGetVariable, &TargetMode);
 | 
						|
 | 
						|
  Status = GetSetupMode (&SetupMode);
 | 
						|
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (SetupMode, TargetMode);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for GetSetupMode () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
IsSecureBootEnableShouldGetVar (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  BOOLEAN  Enabled;
 | 
						|
  UINT8    TargetMode;
 | 
						|
 | 
						|
  TargetMode = SECURE_BOOT_MODE_ENABLE;
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_SECURE_BOOT_MODE_NAME, sizeof (EFI_SECURE_BOOT_MODE_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (TargetMode));
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_SECURE_BOOT_MODE_NAME, sizeof (EFI_SECURE_BOOT_MODE_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (TargetMode));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (TargetMode));
 | 
						|
  will_return (MockGetVariable, &TargetMode);
 | 
						|
 | 
						|
  Enabled = IsSecureBootEnabled ();
 | 
						|
 | 
						|
  UT_ASSERT_EQUAL (Enabled, SECURE_BOOT_MODE_ENABLE);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for SecureBootCreateDataFromInput () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
SecureBootCreateDataFromInputSimple (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_SIGNATURE_LIST            *SigList    = NULL;
 | 
						|
  EFI_SIGNATURE_DATA            *SigData    = NULL;
 | 
						|
  UINTN                         SigListSize = 0;
 | 
						|
  EFI_STATUS                    Status;
 | 
						|
  UINT8                         TestData[] = { 0 };
 | 
						|
  SECURE_BOOT_CERTIFICATE_INFO  KeyInfo    = {
 | 
						|
    .Data     = TestData,
 | 
						|
    .DataSize = sizeof (TestData)
 | 
						|
  };
 | 
						|
 | 
						|
  Status = SecureBootCreateDataFromInput (&SigListSize, &SigList, 1, &KeyInfo);
 | 
						|
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  UT_ASSERT_NOT_NULL (SigList);
 | 
						|
  UT_ASSERT_TRUE (CompareGuid (&SigList->SignatureType, &gEfiCertX509Guid));
 | 
						|
  UT_ASSERT_EQUAL (SigList->SignatureSize, sizeof (EFI_SIGNATURE_DATA) - 1 + sizeof (TestData));
 | 
						|
  UT_ASSERT_EQUAL (SigList->SignatureHeaderSize, 0);
 | 
						|
  UT_ASSERT_EQUAL (SigList->SignatureListSize, sizeof (EFI_SIGNATURE_LIST) + sizeof (EFI_SIGNATURE_DATA) - 1 + sizeof (TestData));
 | 
						|
  UT_ASSERT_EQUAL (SigList->SignatureListSize, SigListSize);
 | 
						|
 | 
						|
  SigData = (EFI_SIGNATURE_DATA *)((UINTN)SigList + sizeof (EFI_SIGNATURE_LIST));
 | 
						|
  UT_ASSERT_TRUE (CompareGuid (&SigData->SignatureOwner, &gEfiGlobalVariableGuid));
 | 
						|
  UT_ASSERT_MEM_EQUAL (SigData->SignatureData, TestData, sizeof (TestData));
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for SecureBootCreateDataFromInput () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
SecureBootCreateDataFromInputNull (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_SIGNATURE_LIST            *SigList    = NULL;
 | 
						|
  UINTN                         SigListSize = 0;
 | 
						|
  EFI_STATUS                    Status;
 | 
						|
  SECURE_BOOT_CERTIFICATE_INFO  KeyInfo = {
 | 
						|
    .Data     = NULL,
 | 
						|
    .DataSize = 0
 | 
						|
  };
 | 
						|
 | 
						|
  Status = SecureBootCreateDataFromInput (&SigListSize, &SigList, 0, NULL);
 | 
						|
  UT_ASSERT_STATUS_EQUAL (Status, EFI_INVALID_PARAMETER);
 | 
						|
 | 
						|
  Status = SecureBootCreateDataFromInput (&SigListSize, &SigList, 1, &KeyInfo);
 | 
						|
  UT_ASSERT_STATUS_EQUAL (Status, EFI_NOT_FOUND);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for SecureBootCreateDataFromInput () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
SecureBootCreateDataFromInputMultiple (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_SIGNATURE_LIST            *SigList    = NULL;
 | 
						|
  EFI_SIGNATURE_DATA            *SigData    = NULL;
 | 
						|
  UINTN                         SigListSize = 0;
 | 
						|
  UINTN                         TotalSize   = 0;
 | 
						|
  UINTN                         Index       = 0;
 | 
						|
  UINT8                         TestData1[] = { 0 };
 | 
						|
  UINT8                         TestData2[] = { 1, 2 };
 | 
						|
  EFI_STATUS                    Status;
 | 
						|
  SECURE_BOOT_CERTIFICATE_INFO  KeyInfo[2] = {
 | 
						|
    {
 | 
						|
      .Data     = TestData1,
 | 
						|
      .DataSize = sizeof (TestData1)
 | 
						|
    },
 | 
						|
    {
 | 
						|
      .Data     = TestData2,
 | 
						|
      .DataSize = sizeof (TestData2)
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  Status = SecureBootCreateDataFromInput (&SigListSize, &SigList, 2, KeyInfo);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  UT_ASSERT_NOT_NULL (SigList);
 | 
						|
 | 
						|
  for (Index = 0; Index < 2; Index++) {
 | 
						|
    UT_ASSERT_TRUE (SigListSize > TotalSize);
 | 
						|
 | 
						|
    UT_ASSERT_TRUE (CompareGuid (&SigList->SignatureType, &gEfiCertX509Guid));
 | 
						|
    UT_ASSERT_EQUAL (SigList->SignatureSize, sizeof (EFI_SIGNATURE_DATA) - 1 + KeyInfo[Index].DataSize);
 | 
						|
    UT_ASSERT_EQUAL (SigList->SignatureHeaderSize, 0);
 | 
						|
    UT_ASSERT_EQUAL (SigList->SignatureListSize, sizeof (EFI_SIGNATURE_LIST) + sizeof (EFI_SIGNATURE_DATA) - 1 + KeyInfo[Index].DataSize);
 | 
						|
 | 
						|
    SigData = (EFI_SIGNATURE_DATA *)((UINTN)SigList + sizeof (EFI_SIGNATURE_LIST));
 | 
						|
    UT_ASSERT_TRUE (CompareGuid (&SigData->SignatureOwner, &gEfiGlobalVariableGuid));
 | 
						|
    UT_ASSERT_MEM_EQUAL (SigData->SignatureData, KeyInfo[Index].Data, KeyInfo[Index].DataSize);
 | 
						|
    TotalSize = TotalSize + SigList->SignatureListSize;
 | 
						|
    SigList   = (EFI_SIGNATURE_LIST *)((UINTN)SigList + SigList->SignatureListSize);
 | 
						|
  }
 | 
						|
 | 
						|
  UT_ASSERT_EQUAL (SigListSize, TotalSize);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for CreateTimeBasedPayload () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
CreateTimeBasedPayloadShouldPopulateDescriptor (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT8                          Data[]   = { 2 };
 | 
						|
  UINTN                          DataSize = sizeof (Data);
 | 
						|
  UINT8                          *CheckData;
 | 
						|
  EFI_VARIABLE_AUTHENTICATION_2  *VarAuth;
 | 
						|
  EFI_STATUS                     Status;
 | 
						|
  EFI_TIME                       Time = {
 | 
						|
    .Year       = 2012,
 | 
						|
    .Month      = 3,
 | 
						|
    .Day        = 4,
 | 
						|
    .Hour       = 5,
 | 
						|
    .Minute     = 6,
 | 
						|
    .Second     = 7,
 | 
						|
    .Pad1       = 0,
 | 
						|
    .Nanosecond = 8910,
 | 
						|
    .TimeZone   = 1112,
 | 
						|
    .Pad2       = 0
 | 
						|
  };
 | 
						|
 | 
						|
  CheckData = AllocateCopyPool (DataSize, Data);
 | 
						|
  Status    = CreateTimeBasedPayload (&DataSize, &CheckData, &Time);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  // This is result that we did not pack this structure...
 | 
						|
  // we cannot even use the sizeof (EFI_VARIABLE_AUTHENTICATION_2) - 1,
 | 
						|
  // because the structure is not at the end of this structure, but partially
 | 
						|
  // inside it...
 | 
						|
  UT_ASSERT_EQUAL (DataSize, VAR_AUTH_DESC_SIZE + sizeof (Data));
 | 
						|
  UT_ASSERT_NOT_NULL (CheckData);
 | 
						|
 | 
						|
  VarAuth = (EFI_VARIABLE_AUTHENTICATION_2 *)CheckData;
 | 
						|
  UT_ASSERT_MEM_EQUAL (&(VarAuth->TimeStamp), &Time, sizeof (EFI_TIME));
 | 
						|
 | 
						|
  UT_ASSERT_EQUAL (VarAuth->AuthInfo.Hdr.dwLength, OFFSET_OF (WIN_CERTIFICATE_UEFI_GUID, CertData));
 | 
						|
  UT_ASSERT_EQUAL (VarAuth->AuthInfo.Hdr.wRevision, 0x0200);
 | 
						|
  UT_ASSERT_EQUAL (VarAuth->AuthInfo.Hdr.wCertificateType, WIN_CERT_TYPE_EFI_GUID);
 | 
						|
  UT_ASSERT_TRUE (CompareGuid (&VarAuth->AuthInfo.CertType, &gEfiCertPkcs7Guid));
 | 
						|
 | 
						|
  UT_ASSERT_MEM_EQUAL (VarAuth->AuthInfo.CertData, Data, sizeof (Data));
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for CreateTimeBasedPayload () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
CreateTimeBasedPayloadShouldCheckInput (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINTN       DataSize = 0;
 | 
						|
  UINT8       *Data    = NULL;
 | 
						|
  EFI_TIME    Time;
 | 
						|
  EFI_STATUS  Status;
 | 
						|
 | 
						|
  Status = CreateTimeBasedPayload (NULL, &Data, &Time);
 | 
						|
  UT_ASSERT_STATUS_EQUAL (Status, EFI_INVALID_PARAMETER);
 | 
						|
 | 
						|
  Status = CreateTimeBasedPayload (&DataSize, NULL, &Time);
 | 
						|
  UT_ASSERT_STATUS_EQUAL (Status, EFI_INVALID_PARAMETER);
 | 
						|
 | 
						|
  Status = CreateTimeBasedPayload (&DataSize, &Data, NULL);
 | 
						|
  UT_ASSERT_STATUS_EQUAL (Status, EFI_INVALID_PARAMETER);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for DeleteDb () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
DeleteDbShouldDelete (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
  UINT8       Dummy       = 3;
 | 
						|
  UINT8       *Payload    = NULL;
 | 
						|
  UINTN       PayloadSize = 0;
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (Dummy));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
  will_return (MockGetVariable, &Dummy);
 | 
						|
 | 
						|
  Status = CreateTimeBasedPayload (&PayloadSize, &Payload, &mMaxTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE);
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  Status = DeleteDb ();
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for DeleteDbx () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
DeleteDbxShouldDelete (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
  UINT8       Dummy       = 3;
 | 
						|
  UINT8       *Payload    = NULL;
 | 
						|
  UINTN       PayloadSize = 0;
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (Dummy));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
  will_return (MockGetVariable, &Dummy);
 | 
						|
 | 
						|
  Status = CreateTimeBasedPayload (&PayloadSize, &Payload, &mMaxTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE);
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  Status = DeleteDbx ();
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for DeleteDbt () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
DeleteDbtShouldDelete (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
  UINT8       Dummy       = 3;
 | 
						|
  UINT8       *Payload    = NULL;
 | 
						|
  UINTN       PayloadSize = 0;
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE2, sizeof (EFI_IMAGE_SECURITY_DATABASE2));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE2, sizeof (EFI_IMAGE_SECURITY_DATABASE2));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (Dummy));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
  will_return (MockGetVariable, &Dummy);
 | 
						|
 | 
						|
  Status = CreateTimeBasedPayload (&PayloadSize, &Payload, &mMaxTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE2, sizeof (EFI_IMAGE_SECURITY_DATABASE2));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE);
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  Status = DeleteDbt ();
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for DeleteKEK () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
DeleteKEKShouldDelete (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
  UINT8       Dummy       = 3;
 | 
						|
  UINT8       *Payload    = NULL;
 | 
						|
  UINTN       PayloadSize = 0;
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_KEY_EXCHANGE_KEY_NAME, sizeof (EFI_KEY_EXCHANGE_KEY_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_KEY_EXCHANGE_KEY_NAME, sizeof (EFI_KEY_EXCHANGE_KEY_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (Dummy));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
  will_return (MockGetVariable, &Dummy);
 | 
						|
 | 
						|
  Status = CreateTimeBasedPayload (&PayloadSize, &Payload, &mMaxTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_KEY_EXCHANGE_KEY_NAME, sizeof (EFI_KEY_EXCHANGE_KEY_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE);
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  Status = DeleteKEK ();
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for DeletePlatformKey () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
DeletePKShouldDelete (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
  UINT8       Dummy       = 3;
 | 
						|
  UINT8       *Payload    = NULL;
 | 
						|
  UINTN       PayloadSize = 0;
 | 
						|
  UINT8       BootMode    = CUSTOM_SECURE_BOOT_MODE;
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_CUSTOM_MODE_NAME, sizeof (EFI_CUSTOM_MODE_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiCustomModeEnableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, sizeof (BootMode));
 | 
						|
  expect_memory (MockSetVariable, Data, &BootMode, sizeof (BootMode));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_PLATFORM_KEY_NAME, sizeof (EFI_PLATFORM_KEY_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_PLATFORM_KEY_NAME, sizeof (EFI_PLATFORM_KEY_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (Dummy));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
  will_return (MockGetVariable, &Dummy);
 | 
						|
 | 
						|
  Status = CreateTimeBasedPayload (&PayloadSize, &Payload, &mMaxTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_PLATFORM_KEY_NAME, sizeof (EFI_PLATFORM_KEY_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE);
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  Status = DeletePlatformKey ();
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for DeleteSecureBootVariables () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
DeleteSecureBootVariablesShouldDelete (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
  UINT8       Dummy       = 3;
 | 
						|
  UINT8       *Payload    = NULL;
 | 
						|
  UINTN       PayloadSize = 0;
 | 
						|
  UINT8       BootMode    = CUSTOM_SECURE_BOOT_MODE;
 | 
						|
 | 
						|
  Status = CreateTimeBasedPayload (&PayloadSize, &Payload, &mMaxTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  will_return (DisablePKProtection, EFI_SUCCESS);
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_CUSTOM_MODE_NAME, sizeof (EFI_CUSTOM_MODE_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiCustomModeEnableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, sizeof (BootMode));
 | 
						|
  expect_memory (MockSetVariable, Data, &BootMode, sizeof (BootMode));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_PLATFORM_KEY_NAME, sizeof (EFI_PLATFORM_KEY_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_PLATFORM_KEY_NAME, sizeof (EFI_PLATFORM_KEY_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (Dummy));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
  will_return (MockGetVariable, &Dummy);
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_PLATFORM_KEY_NAME, sizeof (EFI_PLATFORM_KEY_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE);
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_KEY_EXCHANGE_KEY_NAME, sizeof (EFI_KEY_EXCHANGE_KEY_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_KEY_EXCHANGE_KEY_NAME, sizeof (EFI_KEY_EXCHANGE_KEY_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (Dummy));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
  will_return (MockGetVariable, &Dummy);
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_KEY_EXCHANGE_KEY_NAME, sizeof (EFI_KEY_EXCHANGE_KEY_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE);
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (Dummy));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
  will_return (MockGetVariable, &Dummy);
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE);
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (Dummy));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
  will_return (MockGetVariable, &Dummy);
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE);
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE2, sizeof (EFI_IMAGE_SECURITY_DATABASE2));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE2, sizeof (EFI_IMAGE_SECURITY_DATABASE2));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (Dummy));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (Dummy));
 | 
						|
  will_return (MockGetVariable, &Dummy);
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE2, sizeof (EFI_IMAGE_SECURITY_DATABASE2));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE);
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE);
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  Status = DeleteSecureBootVariables ();
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for DeleteSecureBootVariables () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
DeleteSecureBootVariablesShouldCheckProtection (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
 | 
						|
  will_return (DisablePKProtection, EFI_SECURITY_VIOLATION);
 | 
						|
 | 
						|
  Status = DeleteSecureBootVariables ();
 | 
						|
  UT_ASSERT_STATUS_EQUAL (Status, EFI_ABORTED);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for DeleteSecureBootVariables () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
DeleteSecureBootVariablesShouldProceedWithNotFound (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
  UINT8       BootMode = CUSTOM_SECURE_BOOT_MODE;
 | 
						|
 | 
						|
  will_return (DisablePKProtection, EFI_SUCCESS);
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_CUSTOM_MODE_NAME, sizeof (EFI_CUSTOM_MODE_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiCustomModeEnableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, sizeof (BootMode));
 | 
						|
  expect_memory (MockSetVariable, Data, &BootMode, sizeof (BootMode));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_PLATFORM_KEY_NAME, sizeof (EFI_PLATFORM_KEY_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, FALSE);
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_KEY_EXCHANGE_KEY_NAME, sizeof (EFI_KEY_EXCHANGE_KEY_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, FALSE);
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, FALSE);
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, FALSE);
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE2, sizeof (EFI_IMAGE_SECURITY_DATABASE2));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, FALSE);
 | 
						|
 | 
						|
  Status = DeleteSecureBootVariables ();
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for DeleteSecureBootVariables () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
EnrollFromInputShouldComplete (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
  UINT8       Dummy       = 3;
 | 
						|
  UINT8       *Payload    = NULL;
 | 
						|
  UINTN       PayloadSize = sizeof (Dummy);
 | 
						|
 | 
						|
  Payload = AllocateCopyPool (sizeof (Dummy), &Dummy);
 | 
						|
  Status  = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (Dummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_PLATFORM_KEY_NAME, sizeof (EFI_PLATFORM_KEY_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (Dummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (Dummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  Status = EnrollFromInput (EFI_PLATFORM_KEY_NAME, &gEfiGlobalVariableGuid, sizeof (Dummy), &Dummy);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for SetDefaultSecureBootVariables () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
SetSecureBootVariablesShouldComplete (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                Status;
 | 
						|
  UINT8                     DbDummy     = 0xDE;
 | 
						|
  UINT8                     DbtDummy    = 0xAD;
 | 
						|
  UINT8                     DbxDummy    = 0xBE;
 | 
						|
  UINT8                     KekDummy    = 0xEF;
 | 
						|
  UINT8                     PkDummy     = 0xFE;
 | 
						|
  UINT8                     *Payload    = NULL;
 | 
						|
  UINTN                     PayloadSize = sizeof (DbDummy);
 | 
						|
  SECURE_BOOT_PAYLOAD_INFO  PayloadInfo = {
 | 
						|
    .DbPtr             = &DbDummy,
 | 
						|
    .DbSize            = sizeof (DbDummy),
 | 
						|
    .DbxPtr            = &DbxDummy,
 | 
						|
    .DbxSize           = sizeof (DbxDummy),
 | 
						|
    .DbtPtr            = &DbtDummy,
 | 
						|
    .DbtSize           = sizeof (DbtDummy),
 | 
						|
    .KekPtr            = &KekDummy,
 | 
						|
    .KekSize           = sizeof (KekDummy),
 | 
						|
    .PkPtr             = &PkDummy,
 | 
						|
    .PkSize            = sizeof (PkDummy),
 | 
						|
    .SecureBootKeyName = L"Food"
 | 
						|
  };
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_SECURE_BOOT_MODE_NAME, sizeof (EFI_SECURE_BOOT_MODE_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, FALSE);
 | 
						|
 | 
						|
  Payload = AllocateCopyPool (sizeof (DbxDummy), &DbxDummy);
 | 
						|
  Status  = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &DbDummy, sizeof (DbDummy));
 | 
						|
  PayloadSize = sizeof (DbDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &DbtDummy, sizeof (DbtDummy));
 | 
						|
  PayloadSize = sizeof (DbtDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbtDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE2, sizeof (EFI_IMAGE_SECURITY_DATABASE2));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbtDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbtDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &KekDummy, sizeof (KekDummy));
 | 
						|
  PayloadSize = sizeof (KekDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (KekDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_KEY_EXCHANGE_KEY_NAME, sizeof (EFI_KEY_EXCHANGE_KEY_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (KekDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (KekDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &PkDummy, sizeof (PkDummy));
 | 
						|
  PayloadSize = sizeof (PkDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (PkDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_PLATFORM_KEY_NAME, sizeof (EFI_PLATFORM_KEY_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (PkDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (PkDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  Status = SetSecureBootVariablesToDefault (&PayloadInfo);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for SetDefaultSecureBootVariables () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
SetSecureBootVariablesShouldStopWhenSecure (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                Status;
 | 
						|
  UINT8                     TargetMode = SECURE_BOOT_MODE_ENABLE;
 | 
						|
  SECURE_BOOT_PAYLOAD_INFO  PayloadInfo;
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_SECURE_BOOT_MODE_NAME, sizeof (EFI_SECURE_BOOT_MODE_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (TargetMode));
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_SECURE_BOOT_MODE_NAME, sizeof (EFI_SECURE_BOOT_MODE_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, sizeof (TargetMode));
 | 
						|
 | 
						|
  will_return (MockGetVariable, TRUE);
 | 
						|
  will_return (MockGetVariable, sizeof (TargetMode));
 | 
						|
  will_return (MockGetVariable, &TargetMode);
 | 
						|
 | 
						|
  Status = SetSecureBootVariablesToDefault (&PayloadInfo);
 | 
						|
  UT_ASSERT_STATUS_EQUAL (Status, EFI_ABORTED);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for SetDefaultSecureBootVariables () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
SetSecureBootVariablesShouldStopFailDBX (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                Status;
 | 
						|
  UINT8                     DbxDummy    = 0xBE;
 | 
						|
  UINT8                     *Payload    = NULL;
 | 
						|
  UINTN                     PayloadSize = sizeof (DbxDummy);
 | 
						|
  SECURE_BOOT_PAYLOAD_INFO  PayloadInfo = {
 | 
						|
    .DbxPtr            = &DbxDummy,
 | 
						|
    .DbxSize           = sizeof (DbxDummy),
 | 
						|
    .SecureBootKeyName = L"Fail DBX"
 | 
						|
  };
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_SECURE_BOOT_MODE_NAME, sizeof (EFI_SECURE_BOOT_MODE_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, FALSE);
 | 
						|
 | 
						|
  Payload = AllocateCopyPool (sizeof (DbxDummy), &DbxDummy);
 | 
						|
  Status  = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_WRITE_PROTECTED);
 | 
						|
 | 
						|
  Status = SetSecureBootVariablesToDefault (&PayloadInfo);
 | 
						|
  UT_ASSERT_STATUS_EQUAL (Status, EFI_WRITE_PROTECTED);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for SetDefaultSecureBootVariables () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
SetSecureBootVariablesShouldStopFailDB (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                Status;
 | 
						|
  UINT8                     DbDummy     = 0xDE;
 | 
						|
  UINT8                     DbxDummy    = 0xBE;
 | 
						|
  UINT8                     *Payload    = NULL;
 | 
						|
  UINTN                     PayloadSize = sizeof (DbDummy);
 | 
						|
  SECURE_BOOT_PAYLOAD_INFO  PayloadInfo = {
 | 
						|
    .DbPtr             = &DbDummy,
 | 
						|
    .DbSize            = sizeof (DbDummy),
 | 
						|
    .DbxPtr            = &DbxDummy,
 | 
						|
    .DbxSize           = sizeof (DbxDummy),
 | 
						|
    .SecureBootKeyName = L"Fail DB"
 | 
						|
  };
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_SECURE_BOOT_MODE_NAME, sizeof (EFI_SECURE_BOOT_MODE_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, FALSE);
 | 
						|
 | 
						|
  Payload = AllocateCopyPool (sizeof (DbxDummy), &DbxDummy);
 | 
						|
  Status  = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &DbDummy, sizeof (DbDummy));
 | 
						|
  PayloadSize = sizeof (DbDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_WRITE_PROTECTED);
 | 
						|
 | 
						|
  Status = SetSecureBootVariablesToDefault (&PayloadInfo);
 | 
						|
  UT_ASSERT_STATUS_EQUAL (Status, EFI_WRITE_PROTECTED);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for SetDefaultSecureBootVariables () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
SetSecureBootVariablesShouldStopFailDBT (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                Status;
 | 
						|
  UINT8                     DbDummy     = 0xDE;
 | 
						|
  UINT8                     DbtDummy    = 0xAD;
 | 
						|
  UINT8                     DbxDummy    = 0xBE;
 | 
						|
  UINT8                     *Payload    = NULL;
 | 
						|
  UINTN                     PayloadSize = sizeof (DbDummy);
 | 
						|
  SECURE_BOOT_PAYLOAD_INFO  PayloadInfo = {
 | 
						|
    .DbPtr             = &DbDummy,
 | 
						|
    .DbSize            = sizeof (DbDummy),
 | 
						|
    .DbxPtr            = &DbxDummy,
 | 
						|
    .DbxSize           = sizeof (DbxDummy),
 | 
						|
    .DbtPtr            = &DbtDummy,
 | 
						|
    .DbtSize           = sizeof (DbtDummy),
 | 
						|
    .SecureBootKeyName = L"Fail DBT"
 | 
						|
  };
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_SECURE_BOOT_MODE_NAME, sizeof (EFI_SECURE_BOOT_MODE_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, FALSE);
 | 
						|
 | 
						|
  Payload = AllocateCopyPool (sizeof (DbxDummy), &DbxDummy);
 | 
						|
  Status  = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &DbDummy, sizeof (DbDummy));
 | 
						|
  PayloadSize = sizeof (DbDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &DbtDummy, sizeof (DbtDummy));
 | 
						|
  PayloadSize = sizeof (DbtDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbtDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE2, sizeof (EFI_IMAGE_SECURITY_DATABASE2));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbtDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbtDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_ACCESS_DENIED);
 | 
						|
 | 
						|
  Status = SetSecureBootVariablesToDefault (&PayloadInfo);
 | 
						|
  UT_ASSERT_STATUS_EQUAL (Status, EFI_ACCESS_DENIED);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for SetDefaultSecureBootVariables () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
SetSecureBootVariablesShouldStopFailKEK (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                Status;
 | 
						|
  UINT8                     DbDummy     = 0xDE;
 | 
						|
  UINT8                     DbtDummy    = 0xAD;
 | 
						|
  UINT8                     DbxDummy    = 0xBE;
 | 
						|
  UINT8                     KekDummy    = 0xEF;
 | 
						|
  UINT8                     PkDummy     = 0xFE;
 | 
						|
  UINT8                     *Payload    = NULL;
 | 
						|
  UINTN                     PayloadSize = sizeof (DbDummy);
 | 
						|
  SECURE_BOOT_PAYLOAD_INFO  PayloadInfo = {
 | 
						|
    .DbPtr             = &DbDummy,
 | 
						|
    .DbSize            = sizeof (DbDummy),
 | 
						|
    .DbxPtr            = &DbxDummy,
 | 
						|
    .DbxSize           = sizeof (DbxDummy),
 | 
						|
    .DbtPtr            = &DbtDummy,
 | 
						|
    .DbtSize           = sizeof (DbtDummy),
 | 
						|
    .KekPtr            = &KekDummy,
 | 
						|
    .KekSize           = sizeof (KekDummy),
 | 
						|
    .PkPtr             = &PkDummy,
 | 
						|
    .PkSize            = sizeof (PkDummy),
 | 
						|
    .SecureBootKeyName = L"Food"
 | 
						|
  };
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_SECURE_BOOT_MODE_NAME, sizeof (EFI_SECURE_BOOT_MODE_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, FALSE);
 | 
						|
 | 
						|
  Payload = AllocateCopyPool (sizeof (DbxDummy), &DbxDummy);
 | 
						|
  Status  = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &DbDummy, sizeof (DbDummy));
 | 
						|
  PayloadSize = sizeof (DbDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &DbtDummy, sizeof (DbtDummy));
 | 
						|
  PayloadSize = sizeof (DbtDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbtDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE2, sizeof (EFI_IMAGE_SECURITY_DATABASE2));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbtDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbtDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &KekDummy, sizeof (KekDummy));
 | 
						|
  PayloadSize = sizeof (KekDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (KekDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_KEY_EXCHANGE_KEY_NAME, sizeof (EFI_KEY_EXCHANGE_KEY_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (KekDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (KekDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_DEVICE_ERROR);
 | 
						|
 | 
						|
  Status = SetSecureBootVariablesToDefault (&PayloadInfo);
 | 
						|
  UT_ASSERT_STATUS_EQUAL (Status, EFI_DEVICE_ERROR);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for SetDefaultSecureBootVariables () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
SetSecureBootVariablesShouldStopFailPK (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                Status;
 | 
						|
  UINT8                     DbDummy     = 0xDE;
 | 
						|
  UINT8                     DbtDummy    = 0xAD;
 | 
						|
  UINT8                     DbxDummy    = 0xBE;
 | 
						|
  UINT8                     KekDummy    = 0xEF;
 | 
						|
  UINT8                     PkDummy     = 0xFE;
 | 
						|
  UINT8                     *Payload    = NULL;
 | 
						|
  UINTN                     PayloadSize = sizeof (DbDummy);
 | 
						|
  SECURE_BOOT_PAYLOAD_INFO  PayloadInfo = {
 | 
						|
    .DbPtr             = &DbDummy,
 | 
						|
    .DbSize            = sizeof (DbDummy),
 | 
						|
    .DbxPtr            = &DbxDummy,
 | 
						|
    .DbxSize           = sizeof (DbxDummy),
 | 
						|
    .DbtPtr            = &DbtDummy,
 | 
						|
    .DbtSize           = sizeof (DbtDummy),
 | 
						|
    .KekPtr            = &KekDummy,
 | 
						|
    .KekSize           = sizeof (KekDummy),
 | 
						|
    .PkPtr             = &PkDummy,
 | 
						|
    .PkSize            = sizeof (PkDummy),
 | 
						|
    .SecureBootKeyName = L"Food"
 | 
						|
  };
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_SECURE_BOOT_MODE_NAME, sizeof (EFI_SECURE_BOOT_MODE_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, FALSE);
 | 
						|
 | 
						|
  Payload = AllocateCopyPool (sizeof (DbxDummy), &DbxDummy);
 | 
						|
  Status  = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &DbDummy, sizeof (DbDummy));
 | 
						|
  PayloadSize = sizeof (DbDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &DbtDummy, sizeof (DbtDummy));
 | 
						|
  PayloadSize = sizeof (DbtDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbtDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE2, sizeof (EFI_IMAGE_SECURITY_DATABASE2));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbtDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbtDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &KekDummy, sizeof (KekDummy));
 | 
						|
  PayloadSize = sizeof (KekDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (KekDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_KEY_EXCHANGE_KEY_NAME, sizeof (EFI_KEY_EXCHANGE_KEY_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (KekDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (KekDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &PkDummy, sizeof (PkDummy));
 | 
						|
  PayloadSize = sizeof (PkDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (PkDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_PLATFORM_KEY_NAME, sizeof (EFI_PLATFORM_KEY_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (PkDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (PkDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_INVALID_PARAMETER);
 | 
						|
 | 
						|
  Status = SetSecureBootVariablesToDefault (&PayloadInfo);
 | 
						|
  UT_ASSERT_STATUS_EQUAL (Status, EFI_SECURITY_VIOLATION);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Unit test for SetDefaultSecureBootVariables () API of the SecureBootVariableLib.
 | 
						|
 | 
						|
  @param[in]  Context    [Optional] An optional parameter that enables:
 | 
						|
                         1) test-case reuse with varied parameters and
 | 
						|
                         2) test-case re-entry for Target tests that need a
 | 
						|
                         reboot.  This parameter is a VOID* and it is the
 | 
						|
                         responsibility of the test author to ensure that the
 | 
						|
                         contents are well understood by all test cases that may
 | 
						|
                         consume it.
 | 
						|
 | 
						|
  @retval  UNIT_TEST_PASSED             The Unit test has completed and the test
 | 
						|
                                        case was successful.
 | 
						|
  @retval  UNIT_TEST_ERROR_TEST_FAILED  A test case assertion has failed.
 | 
						|
**/
 | 
						|
UNIT_TEST_STATUS
 | 
						|
EFIAPI
 | 
						|
SetSecureBootVariablesDBTOptional (
 | 
						|
  IN UNIT_TEST_CONTEXT  Context
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                Status;
 | 
						|
  UINT8                     DbDummy     = 0xDE;
 | 
						|
  UINT8                     DbxDummy    = 0xBE;
 | 
						|
  UINT8                     KekDummy    = 0xEF;
 | 
						|
  UINT8                     PkDummy     = 0xFE;
 | 
						|
  UINT8                     *Payload    = NULL;
 | 
						|
  UINTN                     PayloadSize = sizeof (DbDummy);
 | 
						|
  SECURE_BOOT_PAYLOAD_INFO  PayloadInfo = {
 | 
						|
    .DbPtr             = &DbDummy,
 | 
						|
    .DbSize            = sizeof (DbDummy),
 | 
						|
    .DbxPtr            = &DbxDummy,
 | 
						|
    .DbxSize           = sizeof (DbxDummy),
 | 
						|
    .DbtPtr            = NULL,
 | 
						|
    .DbtSize           = 0,
 | 
						|
    .KekPtr            = &KekDummy,
 | 
						|
    .KekSize           = sizeof (KekDummy),
 | 
						|
    .PkPtr             = &PkDummy,
 | 
						|
    .PkSize            = sizeof (PkDummy),
 | 
						|
    .SecureBootKeyName = L"Food"
 | 
						|
  };
 | 
						|
 | 
						|
  expect_memory (MockGetVariable, VariableName, EFI_SECURE_BOOT_MODE_NAME, sizeof (EFI_SECURE_BOOT_MODE_NAME));
 | 
						|
  expect_value (MockGetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockGetVariable, *DataSize, 0);
 | 
						|
 | 
						|
  will_return (MockGetVariable, FALSE);
 | 
						|
 | 
						|
  Payload = AllocateCopyPool (sizeof (DbxDummy), &DbxDummy);
 | 
						|
  Status  = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE1, sizeof (EFI_IMAGE_SECURITY_DATABASE1));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbxDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &DbDummy, sizeof (DbDummy));
 | 
						|
  PayloadSize = sizeof (DbDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_IMAGE_SECURITY_DATABASE, sizeof (EFI_IMAGE_SECURITY_DATABASE));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiImageSecurityDatabaseGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (DbDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &KekDummy, sizeof (KekDummy));
 | 
						|
  PayloadSize = sizeof (KekDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (KekDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_KEY_EXCHANGE_KEY_NAME, sizeof (EFI_KEY_EXCHANGE_KEY_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (KekDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (KekDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  CopyMem (Payload, &PkDummy, sizeof (PkDummy));
 | 
						|
  PayloadSize = sizeof (PkDummy);
 | 
						|
  Status      = CreateTimeBasedPayload (&PayloadSize, &Payload, &mDefaultPayloadTimestamp);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
  UT_ASSERT_EQUAL (PayloadSize, VAR_AUTH_DESC_SIZE + sizeof (PkDummy));
 | 
						|
 | 
						|
  expect_memory (MockSetVariable, VariableName, EFI_PLATFORM_KEY_NAME, sizeof (EFI_PLATFORM_KEY_NAME));
 | 
						|
  expect_value (MockSetVariable, VendorGuid, &gEfiGlobalVariableGuid);
 | 
						|
  expect_value (MockSetVariable, Attributes, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
 | 
						|
  expect_value (MockSetVariable, DataSize, VAR_AUTH_DESC_SIZE + sizeof (PkDummy));
 | 
						|
  expect_memory (MockSetVariable, Data, Payload, VAR_AUTH_DESC_SIZE + sizeof (PkDummy));
 | 
						|
 | 
						|
  will_return (MockSetVariable, EFI_SUCCESS);
 | 
						|
 | 
						|
  Status = SetSecureBootVariablesToDefault (&PayloadInfo);
 | 
						|
  UT_ASSERT_NOT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  return UNIT_TEST_PASSED;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Initialze the unit test framework, suite, and unit tests for the
 | 
						|
  SecureBootVariableLib and run the SecureBootVariableLib unit test.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           All test cases were dispatched.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  There are not enough resources available to
 | 
						|
                                 initialize the unit tests.
 | 
						|
**/
 | 
						|
STATIC
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UnitTestingEntry (
 | 
						|
  VOID
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                  Status;
 | 
						|
  UNIT_TEST_FRAMEWORK_HANDLE  Framework;
 | 
						|
  UNIT_TEST_SUITE_HANDLE      SecureBootVarMiscTests;
 | 
						|
  UNIT_TEST_SUITE_HANDLE      SecureBootVarDeleteTests;
 | 
						|
  UNIT_TEST_SUITE_HANDLE      SecureBootVarEnrollTests;
 | 
						|
 | 
						|
  Framework = NULL;
 | 
						|
 | 
						|
  DEBUG ((DEBUG_INFO, "%a v%a\n", UNIT_TEST_APP_NAME, UNIT_TEST_APP_VERSION));
 | 
						|
 | 
						|
  //
 | 
						|
  // Start setting up the test framework for running the tests.
 | 
						|
  //
 | 
						|
  Status = InitUnitTestFramework (&Framework, UNIT_TEST_APP_NAME, gEfiCallerBaseName, UNIT_TEST_APP_VERSION);
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    DEBUG ((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status = %r\n", Status));
 | 
						|
    goto EXIT;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  // Populate the SecureBootVariableLib Unit Test Suite.
 | 
						|
  //
 | 
						|
  Status = CreateUnitTestSuite (&SecureBootVarMiscTests, Framework, "SecureBootVariableLib Miscellaneous Tests", "SecureBootVariableLib.Miscellaneous", NULL, NULL);
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for SecureBootVariableLib\n"));
 | 
						|
    Status = EFI_OUT_OF_RESOURCES;
 | 
						|
    goto EXIT;
 | 
						|
  }
 | 
						|
 | 
						|
  Status = CreateUnitTestSuite (&SecureBootVarDeleteTests, Framework, "SecureBootVariableLib Deletion Tests", "SecureBootVariableLib.Deletion", NULL, NULL);
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for SecureBootVariableLib\n"));
 | 
						|
    Status = EFI_OUT_OF_RESOURCES;
 | 
						|
    goto EXIT;
 | 
						|
  }
 | 
						|
 | 
						|
  Status = CreateUnitTestSuite (&SecureBootVarEnrollTests, Framework, "SecureBootVariableLib Enrollment Tests", "SecureBootVariableLib.Enrollment", NULL, NULL);
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for SecureBootVariableLib\n"));
 | 
						|
    Status = EFI_OUT_OF_RESOURCES;
 | 
						|
    goto EXIT;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  // --------------Suite-----------Description--------------Name----------Function--------Pre---Post-------------------Context-----------
 | 
						|
  //
 | 
						|
  AddTestCase (SecureBootVarMiscTests, "SetSecureBootMode should propagate to set variable", "SetSecureBootMode", SetSecureBootModeShouldSetVar, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarMiscTests, "GetSetupMode should propagate to get variable", "GetSetupMode", GetSetupModeShouldGetVar, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarMiscTests, "IsSecureBootEnabled should propagate to get variable", "IsSecureBootEnabled", IsSecureBootEnableShouldGetVar, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarMiscTests, "SecureBootCreateDataFromInput with one input cert", "SecureBootCreateDataFromInput One Cert", SecureBootCreateDataFromInputSimple, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarMiscTests, "SecureBootCreateDataFromInput with no input cert", "SecureBootCreateDataFromInput No Cert", SecureBootCreateDataFromInputNull, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarMiscTests, "SecureBootCreateDataFromInput with multiple input cert", "SecureBootCreateDataFromInput No Cert", SecureBootCreateDataFromInputMultiple, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarMiscTests, "CreateTimeBasedPayload should populate descriptor data", "CreateTimeBasedPayload Normal", CreateTimeBasedPayloadShouldPopulateDescriptor, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarMiscTests, "CreateTimeBasedPayload should fail on NULL inputs", "CreateTimeBasedPayload NULL", CreateTimeBasedPayloadShouldCheckInput, NULL, NULL, NULL);
 | 
						|
 | 
						|
  AddTestCase (SecureBootVarDeleteTests, "DeleteDb should delete DB with auth info", "DeleteDb", DeleteDbShouldDelete, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarDeleteTests, "DeleteDbx should delete DBX with auth info", "DeleteDbx", DeleteDbxShouldDelete, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarDeleteTests, "DeleteDbt should delete DBT with auth info", "DeleteDbt", DeleteDbtShouldDelete, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarDeleteTests, "DeleteKEK should delete KEK with auth info", "DeleteKEK", DeleteKEKShouldDelete, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarDeleteTests, "DeletePlatformKey should delete PK with auth info", "DeletePlatformKey", DeletePKShouldDelete, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarDeleteTests, "DeleteSecureBootVariables should delete properly", "DeleteSecureBootVariables Normal", DeleteSecureBootVariablesShouldDelete, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarDeleteTests, "DeleteSecureBootVariables should fail if protection disable fails", "DeleteSecureBootVariables Fail", DeleteSecureBootVariablesShouldCheckProtection, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarDeleteTests, "DeleteSecureBootVariables should continue if any variable is not found", "DeleteSecureBootVariables Proceed", DeleteSecureBootVariablesShouldProceedWithNotFound, NULL, NULL, NULL);
 | 
						|
 | 
						|
  AddTestCase (SecureBootVarEnrollTests, "EnrollFromInput should supply with authenticated payload", "EnrollFromInput Normal", EnrollFromInputShouldComplete, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarEnrollTests, "SetSecureBootVariablesToDefault should complete", "SetSecureBootVariablesToDefault Normal", SetSecureBootVariablesShouldComplete, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarEnrollTests, "SetSecureBootVariablesToDefault should stop when already enabled", "SetSecureBootVariablesToDefault Already Started", SetSecureBootVariablesShouldStopWhenSecure, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarEnrollTests, "SetSecureBootVariablesToDefault should stop when DB failed", "SetSecureBootVariablesToDefault Fails DB", SetSecureBootVariablesShouldStopFailDB, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarEnrollTests, "SetSecureBootVariablesToDefault should stop when DBT failed", "SetSecureBootVariablesToDefault Fails DBT", SetSecureBootVariablesShouldStopFailDBT, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarEnrollTests, "SetSecureBootVariablesToDefault should stop when DBX failed", "SetSecureBootVariablesToDefault Fails DBX", SetSecureBootVariablesShouldStopFailDBX, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarEnrollTests, "SetSecureBootVariablesToDefault should stop when KEK failed", "SetSecureBootVariablesToDefault Fails KEK", SetSecureBootVariablesShouldStopFailKEK, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarEnrollTests, "SetSecureBootVariablesToDefault should stop when PK failed", "SetSecureBootVariablesToDefault Fails PK", SetSecureBootVariablesShouldStopFailPK, NULL, NULL, NULL);
 | 
						|
  AddTestCase (SecureBootVarEnrollTests, "SetSecureBootVariablesToDefault should only be optional", "SetSecureBootVariablesToDefault DBT Optional", SetSecureBootVariablesDBTOptional, NULL, NULL, NULL);
 | 
						|
 | 
						|
  //
 | 
						|
  // Execute the tests.
 | 
						|
  //
 | 
						|
  Status = RunAllTestSuites (Framework);
 | 
						|
 | 
						|
EXIT:
 | 
						|
  if (Framework) {
 | 
						|
    FreeUnitTestFramework (Framework);
 | 
						|
  }
 | 
						|
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Standard POSIX C entry point for host based unit test execution.
 | 
						|
**/
 | 
						|
int
 | 
						|
main (
 | 
						|
  int   argc,
 | 
						|
  char  *argv[]
 | 
						|
  )
 | 
						|
{
 | 
						|
  return UnitTestingEntry ();
 | 
						|
}
 |