1*6e4a39ccSPatrick Mooney /* 2*6e4a39ccSPatrick Mooney * This file and its contents are supplied under the terms of the 3*6e4a39ccSPatrick Mooney * Common Development and Distribution License ("CDDL"), version 1.0. 4*6e4a39ccSPatrick Mooney * You may only use this file in accordance with the terms of version 5*6e4a39ccSPatrick Mooney * 1.0 of the CDDL. 6*6e4a39ccSPatrick Mooney * 7*6e4a39ccSPatrick Mooney * A full copy of the text of the CDDL should have accompanied this 8*6e4a39ccSPatrick Mooney * source. A copy of the CDDL is also available via the Internet at 9*6e4a39ccSPatrick Mooney * http://www.illumos.org/license/CDDL. 10*6e4a39ccSPatrick Mooney */ 11*6e4a39ccSPatrick Mooney 12*6e4a39ccSPatrick Mooney /* 13*6e4a39ccSPatrick Mooney * Copyright 2025 Oxide Computer Company 14*6e4a39ccSPatrick Mooney */ 15*6e4a39ccSPatrick Mooney 16*6e4a39ccSPatrick Mooney #ifndef _LIBKTEST_H 17*6e4a39ccSPatrick Mooney #define _LIBKTEST_H 18*6e4a39ccSPatrick Mooney 19*6e4a39ccSPatrick Mooney #include <stdbool.h> 20*6e4a39ccSPatrick Mooney 21*6e4a39ccSPatrick Mooney #ifdef __cplusplus 22*6e4a39ccSPatrick Mooney extern "C" { 23*6e4a39ccSPatrick Mooney #endif 24*6e4a39ccSPatrick Mooney 25*6e4a39ccSPatrick Mooney typedef struct ktest_hdl ktest_hdl_t; 26*6e4a39ccSPatrick Mooney typedef struct ktest_list_iter ktest_list_iter_t; 27*6e4a39ccSPatrick Mooney 28*6e4a39ccSPatrick Mooney typedef struct ktest_entry { 29*6e4a39ccSPatrick Mooney const char *ke_module; 30*6e4a39ccSPatrick Mooney const char *ke_suite; 31*6e4a39ccSPatrick Mooney const char *ke_test; 32*6e4a39ccSPatrick Mooney bool ke_requires_input; 33*6e4a39ccSPatrick Mooney } ktest_entry_t; 34*6e4a39ccSPatrick Mooney 35*6e4a39ccSPatrick Mooney typedef struct ktest_run_req { 36*6e4a39ccSPatrick Mooney const char *krq_module; 37*6e4a39ccSPatrick Mooney const char *krq_suite; 38*6e4a39ccSPatrick Mooney const char *krq_test; 39*6e4a39ccSPatrick Mooney uchar_t *krq_input; 40*6e4a39ccSPatrick Mooney size_t krq_input_len; 41*6e4a39ccSPatrick Mooney } ktest_run_req_t; 42*6e4a39ccSPatrick Mooney 43*6e4a39ccSPatrick Mooney typedef enum ktest_code { 44*6e4a39ccSPatrick Mooney KTEST_CODE_NONE, 45*6e4a39ccSPatrick Mooney KTEST_CODE_PASS, 46*6e4a39ccSPatrick Mooney KTEST_CODE_FAIL, 47*6e4a39ccSPatrick Mooney KTEST_CODE_SKIP, 48*6e4a39ccSPatrick Mooney KTEST_CODE_ERROR 49*6e4a39ccSPatrick Mooney } ktest_code_t; 50*6e4a39ccSPatrick Mooney 51*6e4a39ccSPatrick Mooney typedef struct ktest_run_result { 52*6e4a39ccSPatrick Mooney ktest_code_t krr_code; 53*6e4a39ccSPatrick Mooney char *krr_msg; 54*6e4a39ccSPatrick Mooney uint_t krr_line; 55*6e4a39ccSPatrick Mooney } ktest_run_result_t; 56*6e4a39ccSPatrick Mooney 57*6e4a39ccSPatrick Mooney extern ktest_hdl_t *ktest_init(void); 58*6e4a39ccSPatrick Mooney extern void ktest_fini(ktest_hdl_t *); 59*6e4a39ccSPatrick Mooney 60*6e4a39ccSPatrick Mooney extern ktest_list_iter_t *ktest_list(ktest_hdl_t *); 61*6e4a39ccSPatrick Mooney extern void ktest_list_free(ktest_list_iter_t *); 62*6e4a39ccSPatrick Mooney extern bool ktest_list_next(ktest_list_iter_t *, ktest_entry_t *); 63*6e4a39ccSPatrick Mooney extern void ktest_list_reset(ktest_list_iter_t *); 64*6e4a39ccSPatrick Mooney 65*6e4a39ccSPatrick Mooney extern bool ktest_run(ktest_hdl_t *, const ktest_run_req_t *, 66*6e4a39ccSPatrick Mooney ktest_run_result_t *); 67*6e4a39ccSPatrick Mooney 68*6e4a39ccSPatrick Mooney extern const char *ktest_code_name(ktest_code_t); 69*6e4a39ccSPatrick Mooney 70*6e4a39ccSPatrick Mooney extern bool ktest_mod_load(const char *); 71*6e4a39ccSPatrick Mooney extern bool ktest_mod_load_all(void); 72*6e4a39ccSPatrick Mooney extern void ktest_mod_unload(const char *); 73*6e4a39ccSPatrick Mooney extern bool ktest_mod_unload_all(void); 74*6e4a39ccSPatrick Mooney 75*6e4a39ccSPatrick Mooney extern size_t ktest_max_input_size(void); 76*6e4a39ccSPatrick Mooney 77*6e4a39ccSPatrick Mooney 78*6e4a39ccSPatrick Mooney #ifdef __cplusplus 79*6e4a39ccSPatrick Mooney } 80*6e4a39ccSPatrick Mooney #endif 81*6e4a39ccSPatrick Mooney 82*6e4a39ccSPatrick Mooney #endif /* _LIBKTEST_H */ 83