aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJP Appel <jeanpierre.appel01@gmail.com>2024-07-26 15:40:43 -0400
committerJP Appel <jeanpierre.appel01@gmail.com>2024-07-26 15:42:09 -0400
commit6f864672834e646aedbdf8c279b58226e8a2a2f3 (patch)
tree7ea9795676f574057a057c42f95b2c0c0bcad07a
parentbbc91111375e5ecd2be708fe8c2baea88093eb1a (diff)
REFACTOR/FEAT: created timeout status, changed behavior to a set
-rw-r--r--README.md2
-rw-r--r--eztester.c22
-rw-r--r--eztester.h19
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