From 6f864672834e646aedbdf8c279b58226e8a2a2f3 Mon Sep 17 00:00:00 2001 From: JP Appel Date: Fri, 26 Jul 2024 15:40:43 -0400 Subject: REFACTOR/FEAT: created timeout status, changed behavior to a set --- README.md | 2 +- eztester.c | 22 ++++++++++++++++------ eztester.h | 19 +++++++++++++++---- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 9e5f6f2..bf88697 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ int main(int argc, char* argv[]){ eztester_register(tests, (eztester_test){sample_shell_test, "Check a non existent url"); - eztester_run(tests, CONTINUE_ALL); + eztester_run(tests, EXIT_ON_FAIL | EXIT_ON_TIMEOUT ); eztester_destroy_list(tests); return 0; diff --git a/eztester.c b/eztester.c index 38d02dc..578d50a 100644 --- a/eztester.c +++ b/eztester.c @@ -15,8 +15,8 @@ struct _ez_shared_mem { int work_in_queue : 1; - eztester_status status : 2; - eztester_behavior behavior : 2; + eztester_status status : 3; + eztester_behavior behavior : 3; size_t index; }; @@ -116,8 +116,9 @@ void _ez_worker(volatile struct _ez_shared_mem *mem, // check if worker should die if (mem->status == TEST_ERROR || - (mem->status == TEST_FAIL && mem->behavior != CONTINUE_ALL) || - (mem->status == TEST_WARNING && mem->behavior == EXIT_ON_WARNING)) { + (mem->status == TEST_FAIL && mem->behavior & EXIT_ON_FAIL) || + (mem->status == TEST_WARNING && mem->behavior & EXIT_ON_WARNING) || + (mem->status == TEST_TIMEOUT && mem->behavior & EXIT_ON_TIMEOUT)) { exit(1); } @@ -199,16 +200,24 @@ void eztester_run(eztester_list *test_list, eztester_behavior behavior) { case TEST_WARNING: printf("[%03zu/%03zu] %s Result: Warning\n", results.current, results.total, test.name); - if (behavior == EXIT_ON_WARNING) { + if (behavior & EXIT_ON_WARNING) { _ez_premature_exit("Warning occured, Exitting", pid, mem, results); } results.passed++; break; + case TEST_TIMEOUT: + printf("[%03zu/%03zu] %s Result: Timeout\n", results.current, + results.total, test.name); + if (behavior & EXIT_ON_TIMEOUT) { + _ez_premature_exit("Timeout occured, Exitting", pid, mem, results); + } + break; + case TEST_FAIL: printf("[%03zu/%03zu] %s Result: Fail\n", results.current, results.total, test.name); - if (behavior != CONTINUE_ALL) { + if (behavior & EXIT_ON_FAIL) { _ez_premature_exit("Failure occured, Exitting", pid, mem, results); } break; @@ -259,5 +268,6 @@ void eztester_log(const char *restrict format, ...) { eztester_status eztester_always_pass_test() { return TEST_PASS; } eztester_status eztester_always_warn_test() { return TEST_WARNING; } +eztester_status eztester_always_timeout_test() { return TEST_TIMEOUT; } eztester_status eztester_always_fail_test() { return TEST_FAIL; } eztester_status eztester_always_error_test() { return TEST_ERROR; } diff --git a/eztester.h b/eztester.h index c216dd3..1f7e385 100644 --- a/eztester.h +++ b/eztester.h @@ -6,13 +6,22 @@ // possible results of a test. // error is always fatal -typedef enum { TEST_PASS, TEST_WARNING, TEST_FAIL, TEST_ERROR } eztester_status; +typedef enum { + TEST_PASS, + TEST_WARNING, + TEST_TIMEOUT, + TEST_FAIL, + TEST_ERROR +} eztester_status; /* how eztester should behave when encountering a non passing test. - * - * EXIT_ON_WARNING implies EXIT_ON_FAIL */ -typedef enum { EXIT_ON_WARNING, CONTINUE_ALL, EXIT_ON_FAIL } eztester_behavior; +typedef enum { + EXIT_NEVER = 0, + EXIT_ON_WARNING = 1, + EXIT_ON_TIMEOUT = 2, + EXIT_ON_FAIL = 4 +} eztester_behavior; // a single individual test to be ran typedef eztester_status(eztester_runner)(); @@ -60,6 +69,8 @@ int eztester_shell(const char *command); eztester_status eztester_always_pass_test(); // always return warning eztester_status eztester_always_warn_test(); +// always return timeout +eztester_status eztester_always_timeout_test(); // always return fail eztester_status eztester_always_fail_test(); // always return error -- cgit v1.2.3