123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- /** @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)
- ///
- /// 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
|