* -------------------------------------------------------------------------
* Copyright (c) 2020 Huawei Technologies Co.,Ltd.
*
* openGauss is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* -------------------------------------------------------------------------
*
* knl_uheaptest.h
* interface for uheap test framework.
*
* IDENTIFICATION
* src/include/utils/knl_uheaptest.h
*
* -------------------------------------------------------------------------
*/
#ifndef WHITEBOX_TEST
#define WHITEBOX_TEST
#define MAX_NAME_STR_LEN (256)
#define MAX_UNIT_TEST (32)
typedef enum WhiteboxType {
WHITEBOX_PRINT,
WHITEBOX_SLEEP,
WHITEBOX_SUSPEND,
WHITEBOX_ENABLE,
WHITEBOX_DISABLE,
WHITEBOX_ASSERT,
WHITEBOX_SEND_SIGNAL,
WHITEBOX_CHANGE_RETURN_CODE,
WHITEBOX_ERROR
} WhiteboxType;
typedef struct WhiteboxAttribute {
int timeout;
int skip_iteration;
int return_code;
char target_test_stub[MAX_NAME_STR_LEN];
bool enabled;
int hit_count;
char message[MAX_NAME_STR_LEN];
} WhiteboxAttribute;
typedef struct WhiteboxTestParam {
* eg. "WHITE_BOX_ALL_RANDOM_FAILED"
*/
char test_stub_name[MAX_NAME_STR_LEN];
char test_file_name[MAX_NAME_STR_LEN];
int elevel;
int num_testcase;
WhiteboxType type;
WhiteboxAttribute attributes;
} WhiteboxTestParam;
typedef bool (*whitebox_stub_callback)(WhiteboxTestParam&);
extern char* TrimStr(const char* str);
extern void AssignUStoreUnitTest(const char* newval, const void* extra);
extern bool WhiteboxTestStubActivator(const char* name, whitebox_stub_callback function);
extern bool WhiteboxDefaultErrorEmit(WhiteboxTestParam& whitebox_test_param_instance);
extern bool WhiteboxTestPrint(const char* functionName);
extern bool WhiteboxTestSleep(const char* functionName, int timeout, int num_skip, int& hit_count);
extern bool WhiteboxTestSuspend(const char* functionName, int timeout, const bool& enabled);
extern bool WhiteboxTestSetEnable(const char* functionName, bool enable);
extern bool WhiteboxTestSetError(const char* functionName, const bool& enabled);
#ifdef ENABLE_WHITEBOX
#define WHITEBOX_TEST_STUB(_stub_name, _call_back_func) WhiteboxTestStubActivator((_stub_name), (_call_back_func))
#else
#define WHITEBOX_TEST_STUB(_stub_name, _call_back_func) {}
#endif
#define UHEAP_INSERT_FAILED "UHEAP_INSERT"
#define UHEAP_MULTI_INSERT_FAILED "UHEAP_MULTI_INSERT"
#define UHEAP_DELETE_FAILED "UHEAP_DELETE"
#define UHEAP_UPDATE_FAILED "UHEAP_UPDATE"
#define UHEAP_LOCK_TUPLE_FAILED "UHEAP_LOCK_TUPLE"
#define UHEAP_FETCH_FAILED "UHEAP_FETCH"
#define UHEAP_PAGE_PRUNE_FAILED "UHEAP_PAGE_PRUNE"
#define UHEAP_REPAIR_FRAGMENTATION_FAILED "UHEAP_REPAIR_FRAGMENTATION"
#define UHEAP_XLOG_INSERT_FAILED "UHEAP_XLOG_INSERT"
#define UHEAP_XLOG_DELETE_FAILED "UHEAP_XLOG_DELETE"
#define UHEAP_XLOG_LOCK_FAILED "UHEAP_XLOG_LOCK"
#define UHEAP_XLOG_CLEAN_FAILED "UHEAP_XLOG_CLEAN"
#define UHEAP_XLOG_UPDATE_FAILED "UHEAP_XLOG_UPDATE"
#define UHEAP_XLOG_MULTI_INSERT_FAILED "UHEAP_XLOG_MULTI_INSERT"
#define UHEAP_XLOG_FREEZE_TD_SLOT_FAILED "UHEAP_XLOG_FREEZE_TD_SLOT"
#define UHEAP_XLOG_INVALID_TD_SLOT_FAILED "UHEAP_XLOG_INVALID_TD_SLOT"
#define UHEAP_UNDO_ACTION_FAILED "UHEAP_UNDO_ACTION"
#define UHEAP_LAZY_VACUUM_FAILED "UHEAP_LAZY_VACUUM"
#define UHEAP_LAZY_VACUUM_REL_FAILED "UHEAP_LAZY_VACUUM_REL"
#define UHEAP_LAZY_SCAN_FAILED "UHEAP_LAZY_SCAN"
#define UHEAP_DEFORM_TUPLE_FAILED "UHEAP_DEFORM_TUPLE"
#define UHEAP_FORM_TUPLE_FAILED "UHEAP_FORM_TUPLE"
#define UHEAP_SEARCH_BUFFER_FAILED "UHEAP_SEARCH_BUFFER"
#define UHEAP_TOAST_DELETE_FAILED "UHEAP_TOAST_DELETE"
#define UHEAP_TOAST_INSERT_UPDATE_FAILED "UHEAP_TOAST_INSERT_UPDATE"
#define UNDO_UPDATE_BEFORE_UPDATE_FAILED "UNDO_UPDATE_BEFORE_UPDATE"
#define UNDO_UPDATE_AFTER_UPDATE_FAILED "UNDO_UPDATE_AFTER_UPDATE"
#define UNDO_RECYCL_ESPACE_FAILED "UNDO_RECYCL_ESPACE"
#define UNDO_EXTEND_FILE_FAILED "UNDO_EXTEND_FILE"
#define UNDO_CHECK_DIRECTORY_FAILED "UNDO_CHECK_DIRECTORY"
#define UNDO_CHECK_FILE_DIRECTORY_FAILED "UNDO_CHECK_FILE_DIRECTORY"
#define UNDO_GET_FILE_BLOCKS_FAILED "UNDO_GET_FILE_BLOCKS"
#define UNDO_READ_FILE_FAILED "UNDO_READ_FILE"
#define UNDO_OPEN_FILE_FAILED "UNDO_OPEN_FILE"
#define UNDO_WRITE_FILE_FAILED "UNDO_WRITE_FILE"
#define UNDO_SWITCH_ZONE_FAILED "UNDO_SWITCH_ZONE"
#define UNDO_EXTEND_LOG_FAILED "UNDO_EXTEND_LOG"
#define UNDO_USED_FAILED "UNDO_USED"
#define UNDO_UNLINK_LOG_FAILED "UNDO_UNLINK_LOG"
#define UNDO_CHECK_RECYCLE_FAILED "UNDO_CHECK_RECYCLE"
#define UNDO_PREPARE_SWITCH_FAILED "UNDO_PREPARE_SWITCH"
#define UNDO_CLEAN_SPACE_FAILED "UNDO_CLEAN_SPACE"
#define UNDO_CLEAN_SLOT_SPACE_FAILED "UNDO_CLEAN_SLOT_SPACE"
#define UNDO_ALLOCATE_ZONE_FAILED "UNDO_ALLOCATE_ZONE"
#define UNDO_RELEASE_ZONE_FAILED "UNDO_RELEASE_ZONE"
#define UNDO_GET_ZONE_FAILED "UNDO_GET_ZONE"
#define UNDO_ALLOCATE_TRANS_SLOT_FAILED "UNDO_ALLOCATE_TRANS_SLOT"
#define UNDO_PREPAR_ZONE_FAILED "UNDO_PREPAR_ZONE"
#define UNDO_UPDATE_TRANSACTION_SLOT_FAILED "UNDO_UPDATE_TRANSACTION_SLOT"
#define UNDO_UPDATE_SLOT_FAILED "UNDO_UPDATE_SLOT"
#define UNDO_CHECK_LAST_RECORD_SIZE_FAILED "UNDO_CHECK_LAST_RECORD_SIZE"
#define UNDO_PREPARE_RECORD_FAILED "UNDO_PREPARE_RECORD"
#define UNDO_INSERT_PREPARED_FAILED "UNDO_INSERT_PREPARED"
#define UNDO_ALLOCATE_ZONE_BEFO_XID_FAILED "UNDO_ALLOCATE_ZONE_BEFO_XID"
#define UNDO_PREPARE_TRANSACTION_SLOT_FAILED "UNDO_PREPARE_TRANSACTION_SLOT"
#define UNDO_FETCH_TRANSACTION_SLOT_FAILED "UNDO_FETCH_TRANSACTION_SLOT"
#define XLOG_FILE_INIT_REUSE_FAILED "XLOG_FILE_INIT_REUSE"
#define XLOG_FILE_INIT_ZEROFILL_NEW_FAILED "XLOG_FILE_INIT_ZEROFILL_NEW"
#define XLOG_FILE_INIT_ZEROFILL_WRITE_FAILED "XLOG_FILE_INIT_ZEROFILL_WRITE"
#define XLOG_FILE_INIT_ZEROFILL_SYNC_FAILED "XLOG_FILE_INIT_ZEROFILL_SYNC"
#define XLOG_FILE_INIT_CLOSE_FAILED "XLOG_FILE_INIT_CLOSE"
#define XLOG_FILE_INIT_OPEN_TARGET_FAILED "XLOG_FILE_OPEN_TARGET_FAILED"
#define XLOG_FILE_WRITE_INIT_FAILED "XLOG_FILE_WRITE_INIT"
#endif