Add host based unit tests for the CpuPageTableLib services. Unit test focuses on PageTableMap function, containing two kinds of test cases: manual test case and random test case. Manual test case creates some corner case to test function PageTableMap. Random test case generates multiple random memory entries (with random attribute) as the input of function PageTableMap to get the output pagetable. Output pagetable will be validated and be parsed to get output memory entries, and then the input and output memory entries will be compared to verify the functionality. The unit test is not perfect yet. There are options for random test, and some of them control the test coverage, and some option are not ready. Will enhance in the future. Cc: Eric Dong <eric.dong@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Cc: Rahul Kumar <rahul1.kumar@intel.com> Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com>
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Internal header for Random test.
 | 
						|
 | 
						|
  Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef RANDOM_TEST_H_
 | 
						|
#define RANDOM_TEST_H_
 | 
						|
 | 
						|
#include "CpuPageTableLibUnitTest.h"
 | 
						|
 | 
						|
typedef struct _ALLOCATE_PAGE_RECORDS ALLOCATE_PAGE_RECORDS;
 | 
						|
 | 
						|
typedef
 | 
						|
VOID *
 | 
						|
(EFIAPI *ALLOCATE_PAGES)(
 | 
						|
  IN ALLOCATE_PAGE_RECORDS  *PagesRecord,
 | 
						|
  IN UINTN                  Pages
 | 
						|
  );
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  VOID     *Buffer;
 | 
						|
  UINTN    Pages;
 | 
						|
} ALLOCATE_PAGE_RECORD;
 | 
						|
 | 
						|
struct _ALLOCATE_PAGE_RECORDS {
 | 
						|
  UINTN                   Count;
 | 
						|
  UINTN                   MaxCount;
 | 
						|
  ALLOCATE_PAGES          AllocatePagesForPageTable;
 | 
						|
  ALLOCATE_PAGE_RECORD    Records[0];
 | 
						|
};
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT64                LinearAddress;
 | 
						|
  UINT64                Length;
 | 
						|
  IA32_MAP_ATTRIBUTE    Attribute;
 | 
						|
  IA32_MAP_ATTRIBUTE    Mask;
 | 
						|
} MAP_ENTRY;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINTN        Count;
 | 
						|
  UINTN        InitCount;
 | 
						|
  UINTN        MaxCount;
 | 
						|
  MAP_ENTRY    Maps[10];
 | 
						|
} MAP_ENTRYS;
 | 
						|
 | 
						|
UINT64
 | 
						|
GetEntryFromPageTable (
 | 
						|
  IN     UINTN        PageTable,
 | 
						|
  IN     PAGING_MODE  PagingMode,
 | 
						|
  IN     UINT64       Address,
 | 
						|
  OUT    UINTN        *Level
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |