/** @file
|
Provides the basic types and common elements of the unit test framework
|
|
Copyright (c) Microsoft Corporation.<BR>
|
Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
**/
|
|
#ifndef __UNIT_TEST_TYPES_H__
|
#define __UNIT_TEST_TYPES_H__
|
|
#include <Library/UnitTestLib.h>
|
|
///
|
/// The maximum length of a string stored in the unit test framework
|
///
|
#define UNIT_TEST_MAX_STRING_LENGTH (120)
|
|
///
|
/// The size of a firngerprint used to save/resume execution of a unit test
|
/// framework. This is the size of a CRC32 value which is 32-bit value.
|
///
|
///
|
#define UNIT_TEST_FINGERPRINT_SIZE (sizeof (UINT32))
|
|
///
|
/// The maximum length of a test failure message stored in the unit test
|
/// framework
|
///
|
#define UNIT_TEST_TESTFAILUREMSG_LENGTH (120)
|
|
///
|
/// FAILURE_TYPE used to record the type of assert that was triggered by a unit
|
/// test.
|
///
|
typedef UINT32 FAILURE_TYPE;
|
#define FAILURETYPE_NOFAILURE (0)
|
#define FAILURETYPE_OTHER (1)
|
#define FAILURETYPE_ASSERTTRUE (2)
|
#define FAILURETYPE_ASSERTFALSE (3)
|
#define FAILURETYPE_ASSERTEQUAL (4)
|
#define FAILURETYPE_ASSERTNOTEQUAL (5)
|
#define FAILURETYPE_ASSERTNOTEFIERROR (6)
|
#define FAILURETYPE_ASSERTSTATUSEQUAL (7)
|
#define FAILURETYPE_ASSERTNOTNULL (8)
|
#define FAILURETYPE_EXPECTASSERT (9)
|
|
///
|
/// Unit Test context structure tracked by the unit test framework.
|
///
|
typedef struct {
|
CHAR8 *Description;
|
CHAR8 *Name; //can't have spaces and should be short
|
CHAR8 *Log;
|
FAILURE_TYPE FailureType;
|
CHAR8 FailureMessage[UNIT_TEST_TESTFAILUREMSG_LENGTH];
|
UINT8 Fingerprint[UNIT_TEST_FINGERPRINT_SIZE];
|
UNIT_TEST_STATUS Result;
|
UNIT_TEST_FUNCTION RunTest;
|
UNIT_TEST_PREREQUISITE Prerequisite;
|
UNIT_TEST_CLEANUP CleanUp;
|
UNIT_TEST_CONTEXT Context;
|
UNIT_TEST_SUITE_HANDLE ParentSuite;
|
} UNIT_TEST;
|
|
///
|
/// Structure used to store the set of unit tests in a unit test suite as a list.
|
///
|
typedef struct {
|
LIST_ENTRY Entry;
|
UNIT_TEST UT;
|
} UNIT_TEST_LIST_ENTRY;
|
|
///
|
/// Unit Test Suite context structure tracked by the unit test framework.
|
///
|
typedef struct {
|
UINTN NumTests;
|
CHAR8 *Title;
|
CHAR8 *Name;
|
UINT8 Fingerprint[UNIT_TEST_FINGERPRINT_SIZE];
|
UNIT_TEST_SUITE_SETUP Setup;
|
UNIT_TEST_SUITE_TEARDOWN Teardown;
|
LIST_ENTRY TestCaseList; // UNIT_TEST_LIST_ENTRY
|
UNIT_TEST_FRAMEWORK_HANDLE ParentFramework;
|
} UNIT_TEST_SUITE;
|
|
///
|
/// Structure used to store the set of unit test suites in a unit test framework
|
/// as a list.
|
///
|
typedef struct {
|
LIST_ENTRY Entry;
|
UNIT_TEST_SUITE UTS;
|
} UNIT_TEST_SUITE_LIST_ENTRY;
|
|
///
|
/// Unit Test Framework context structure tracked by the unit test framework.
|
///
|
typedef struct {
|
CHAR8 *Title;
|
CHAR8 *ShortTitle; // This title should contain NO spaces or non-filename characters. Is used in reporting and serialization.
|
CHAR8 *VersionString;
|
CHAR8 *Log;
|
UINT8 Fingerprint[UNIT_TEST_FINGERPRINT_SIZE];
|
LIST_ENTRY TestSuiteList; // UNIT_TEST_SUITE_LIST_ENTRY
|
EFI_TIME StartTime;
|
EFI_TIME EndTime;
|
UNIT_TEST *CurrentTest;
|
VOID *SavedState; // This is an instance of UNIT_TEST_SAVE_HEADER*, if present.
|
} UNIT_TEST_FRAMEWORK;
|
|
///
|
/// Serialized version of a unit test
|
///
|
typedef struct {
|
UINT32 Size; // Size of the UNIT_TEST_SAVE_TEST including Log[]
|
UINT8 Fingerprint[UNIT_TEST_FINGERPRINT_SIZE]; // Fingerprint of the test itself.
|
CHAR8 FailureMessage[UNIT_TEST_TESTFAILUREMSG_LENGTH];
|
FAILURE_TYPE FailureType;
|
UNIT_TEST_STATUS Result;
|
CHAR8 Log[];
|
} UNIT_TEST_SAVE_TEST;
|
|
///
|
/// Serialized version of a unit test context
|
///
|
typedef struct {
|
UINT32 Size; // Size of the UNIT_TEST_SAVE_CONTEXT including Data[]
|
UINT8 Fingerprint[UNIT_TEST_FINGERPRINT_SIZE]; // Fingerprint of the corresponding test.
|
UINT8 Data[]; // Actual data of the context.
|
} UNIT_TEST_SAVE_CONTEXT;
|
|
///
|
/// Serialized version of unit test framework
|
///
|
typedef struct {
|
UINT8 Version;
|
UINT32 SaveStateSize; // Size of the entire serialized buffer.
|
UINT8 Fingerprint[UNIT_TEST_FINGERPRINT_SIZE]; // Fingerprint of the framework that has been saved.
|
EFI_TIME StartTime;
|
UINT32 TestCount;
|
BOOLEAN HasSavedContext;
|
// UNIT_TEST_SAVE_TEST Tests[]; // Array of structures starts here.
|
// UNIT_TEST_SAVE_CONTEXT SavedContext[]; // Saved context for the currently running test.
|
// CHAR8 Log[]; // NOTE: Not yet implemented!!
|
} UNIT_TEST_SAVE_HEADER;
|
|
/**
|
This function is responsible for initializing the log buffer for a single test. It can
|
be used internally, but may also be consumed by the test framework to add pre-existing
|
data to a log before it's used.
|
|
@param[in,out] TestHandle A handle to the test being initialized.
|
@param[in] Buffer [Optional] A pointer to pre-existing log data that should
|
be used to initialize the log. Should include a NULL terminator.
|
@param[in] BufferSize [Optional] The size of the pre-existing log data.
|
|
**/
|
VOID
|
EFIAPI
|
UnitTestLogInit (
|
IN OUT UNIT_TEST *Test,
|
IN UINT8 *Buffer OPTIONAL,
|
IN UINTN BufferSize OPTIONAL
|
);
|
|
/**
|
Internal helper function to return a handle to the currently executing framework.
|
This function is generally used for communication within the UnitTest framework, but is
|
defined here so that it can be consumed by the Assertion and Logging macros.
|
|
There should be no need to consume as a test writer, but it's there if you need it.
|
|
@retval Handle to the currently executing test framework.
|
|
**/
|
UNIT_TEST_FRAMEWORK_HANDLE
|
GetActiveFrameworkHandle (
|
VOID
|
);
|
|
#endif
|