diff options
-rw-r--r-- | tests/bdb_sprw_test.c | 2 | ||||
-rw-r--r-- | tests/bdb_test.c | 2 | ||||
-rw-r--r-- | tests/test_common.c | 125 | ||||
-rw-r--r-- | tests/test_common.h | 95 |
4 files changed, 158 insertions, 66 deletions
diff --git a/tests/bdb_sprw_test.c b/tests/bdb_sprw_test.c index 995707da..4528751d 100644 --- a/tests/bdb_sprw_test.c +++ b/tests/bdb_sprw_test.c @@ -17,8 +17,6 @@ #include "test_common.h" #include "vboot_register.h" -#define TEST_EQ_S(result, expect) TEST_EQ(result, expect, #result "==" #expect) - static struct bdb_header *bdb, *bdb0, *bdb1; static uint32_t vboot_register; static uint32_t vboot_register_persist; diff --git a/tests/bdb_test.c b/tests/bdb_test.c index d9226f4d..da723662 100644 --- a/tests/bdb_test.c +++ b/tests/bdb_test.c @@ -14,8 +14,6 @@ #include "host.h" #include "test_common.h" -#define TEST_EQ_S(result, expect) TEST_EQ(result, expect, #result "==" #expect) - void check_header_tests(void) { struct bdb_header sgood = { diff --git a/tests/test_common.c b/tests/test_common.c index 233c9f5b..dd3f0eac 100644 --- a/tests/test_common.c +++ b/tests/test_common.c @@ -18,128 +18,157 @@ /* Global test success flag. */ int gTestSuccess = 1; -int TEST_EQ(int result, int expected_result, const char* testname) { - if (result == expected_result) { - fprintf(stderr, "%s Test " COL_GREEN "PASSED\n" COL_STOP, testname); +int test_eq(int result, int expected, + const char *preamble, const char *desc, const char *comment) +{ + if (result == expected) { + fprintf(stderr, "%s: %s, %s ... " COL_GREEN "PASSED\n" COL_STOP, + preamble, desc, comment); return 1; } else { - fprintf(stderr, "%s Test " COL_RED "FAILED\n" COL_STOP, testname); + fprintf(stderr, "%s: %s, %s ... " COL_RED "FAILED\n" COL_STOP, + preamble, desc, comment); fprintf(stderr, " Expected: 0x%x (%d), got: 0x%x (%d)\n", - expected_result, expected_result, result, result); + expected, expected, result, result); gTestSuccess = 0; return 0; } } -int TEST_NEQ(int result, int not_expected_result, const char* testname) { - if (result != not_expected_result) { - fprintf(stderr, "%s Test " COL_GREEN "PASSED\n" COL_STOP, testname); +int test_neq(int result, int not_expected, + const char *preamble, const char *desc, const char *comment) +{ + if (result != not_expected) { + fprintf(stderr, "%s: %s, %s ... " COL_GREEN "PASSED\n" COL_STOP, + preamble, desc, comment); return 1; } else { - fprintf(stderr, "%s Test " COL_RED "FAILED\n" COL_STOP, testname); + fprintf(stderr, "%s: %s, %s ... " COL_RED "FAILED\n" COL_STOP, + preamble, desc, comment); fprintf(stderr, " Didn't expect 0x%x (%d), but got it.\n", - not_expected_result, not_expected_result); + not_expected, not_expected); gTestSuccess = 0; return 0; } } -int TEST_PTR_EQ(const void* result, const void* expected_result, - const char* testname) { - if (result == expected_result) { - fprintf(stderr, "%s Test " COL_GREEN "PASSED\n" COL_STOP, testname); +int test_ptr_eq(const void* result, const void* expected, + const char *preamble, const char *desc, const char *comment) +{ + if (result == expected) { + fprintf(stderr, "%s: %s, %s ... " COL_GREEN "PASSED\n" COL_STOP, + preamble, desc, comment); return 1; } else { - fprintf(stderr, "%s Test " COL_RED "FAILED\n" COL_STOP, testname); - fprintf(stderr, " Expected: 0x%lx, got: 0x%lx\n", (long)expected_result, + fprintf(stderr, "%s: %s, %s ... " COL_RED "FAILED\n" COL_STOP, + preamble, desc, comment); + fprintf(stderr, " Expected: 0x%lx, got: 0x%lx\n", (long)expected, (long)result); gTestSuccess = 0; return 0; } } -int TEST_PTR_NEQ(const void* result, const void* not_expected_result, - const char* testname) { - if (result != not_expected_result) { - fprintf(stderr, "%s Test " COL_GREEN "PASSED\n" COL_STOP, testname); +int test_ptr_neq(const void* result, const void* not_expected, + const char *preamble, const char *desc, const char *comment) +{ + if (result != not_expected) { + fprintf(stderr, "%s: %s, %s ... " COL_GREEN "PASSED\n" COL_STOP, + preamble, desc, comment); return 1; } else { - fprintf(stderr, "%s Test " COL_RED "FAILED\n" COL_STOP, testname); + fprintf(stderr, "%s: %s, %s ... " COL_RED "FAILED\n" COL_STOP, + preamble, desc, comment); fprintf(stderr, " Didn't expect 0x%lx, but got it\n", - (long)not_expected_result); + (long)not_expected); gTestSuccess = 0; return 0; } } -int TEST_STR_EQ(const char* result, const char* expected_result, - const char* testname) { - - if (!result || !expected_result) { - fprintf(stderr, "%s Test " COL_RED "FAILED\n" COL_STOP, testname); +int test_str_eq(const char* result, const char* expected, + const char *preamble, const char *desc, const char *comment) +{ + if (!result || !expected) { + fprintf(stderr, "%s: %s, %s ... " COL_RED "FAILED\n" COL_STOP, + preamble, desc, comment); fprintf(stderr, " String compare with NULL\n"); gTestSuccess = 0; return 0; - } else if (!strcmp(result, expected_result)) { - fprintf(stderr, "%s Test " COL_GREEN "PASSED\n" COL_STOP, testname); + } else if (!strcmp(result, expected)) { + fprintf(stderr, "%s: %s, %s ... " COL_GREEN "PASSED\n" COL_STOP, + preamble, desc, comment); return 1; } else { - fprintf(stderr, "%s Test " COL_RED "FAILED\n" COL_STOP, testname); - fprintf(stderr, " Expected: \"%s\", got: \"%s\"\n", expected_result, + fprintf(stderr, "%s " COL_RED "FAILED\n" COL_STOP, comment); + fprintf(stderr, " Expected: \"%s\", got: \"%s\"\n", expected, result); gTestSuccess = 0; return 0; } - } -int TEST_STR_NEQ(const char* result, const char* not_expected, - const char* testname) { - +int test_str_neq(const char* result, const char* not_expected, + const char *preamble, const char *desc, const char *comment) +{ if (!result || !not_expected) { - fprintf(stderr, "%s Test " COL_RED "FAILED\n" COL_STOP, testname); + fprintf(stderr, "%s: %s, %s ... " COL_RED "FAILED\n" COL_STOP, + preamble, desc, comment); fprintf(stderr, " String compare with NULL\n"); gTestSuccess = 0; return 0; } else if (strcmp(result, not_expected)) { - fprintf(stderr, "%s Test " COL_GREEN "PASSED\n" COL_STOP, testname); + fprintf(stderr, "%s: %s, %s ... " COL_GREEN "PASSED\n" COL_STOP, + preamble, desc, comment); return 1; } else { - fprintf(stderr, "%s Test " COL_RED "FAILED\n" COL_STOP, testname); + fprintf(stderr, "%s: %s, %s ... " COL_RED "FAILED\n" COL_STOP, + preamble, desc, comment); fprintf(stderr, " Didn't expect: \"%s\", but got it\n", not_expected); gTestSuccess = 0; return 0; } - } -int TEST_SUCC(int result, const char* testname) { +int test_succ(int result, + const char *preamble, const char *desc, const char *comment) +{ if (result == 0) { - fprintf(stderr, "%s Test " COL_GREEN "PASSED\n" COL_STOP, testname); + fprintf(stderr, "%s: %s, %s ... " COL_GREEN "PASSED\n" COL_STOP, + preamble, desc, comment); } else { - fprintf(stderr, "%s Test " COL_RED "FAILED\n" COL_STOP, testname); + fprintf(stderr, "%s: %s, %s ... " COL_RED "FAILED\n" COL_STOP, + preamble, desc, comment); fprintf(stderr, " Expected SUCCESS, got: 0x%lx\n", (long)result); gTestSuccess = 0; } return !result; } -int TEST_TRUE(int result, const char* testname) { +int test_true(int result, + const char *preamble, const char *desc, const char *comment) +{ if (result) { - fprintf(stderr, "%s Test " COL_GREEN "PASSED\n" COL_STOP, testname); + fprintf(stderr, "%s: %s, %s ... " COL_GREEN "PASSED\n" COL_STOP, + preamble, desc, comment); } else { - fprintf(stderr, "%s Test " COL_RED "FAILED\n" COL_STOP, testname); + fprintf(stderr, "%s: %s, %s ... " COL_RED "FAILED\n" COL_STOP, + preamble, desc, comment); fprintf(stderr, " Expected TRUE, got 0\n"); gTestSuccess = 0; } return result; } -int TEST_FALSE(int result, const char* testname) { +int test_false(int result, + const char *preamble, const char *desc, const char *comment) +{ if (!result) { - fprintf(stderr, "%s Test " COL_GREEN "PASSED\n" COL_STOP, testname); + fprintf(stderr, "%s: %s, %s ... " COL_GREEN "PASSED\n" COL_STOP, + preamble, desc, comment); } else { - fprintf(stderr, "%s Test " COL_RED "FAILED\n" COL_STOP, testname); + fprintf(stderr, "%s: %s, %s ... " COL_RED "FAILED\n" COL_STOP, + preamble, desc, comment); fprintf(stderr, " Expected FALSE, got: 0x%lx\n", (long)result); gTestSuccess = 0; } diff --git a/tests/test_common.h b/tests/test_common.h index ef21c3b5..0e2c8d6c 100644 --- a/tests/test_common.h +++ b/tests/test_common.h @@ -7,49 +7,116 @@ #ifndef VBOOT_REFERENCE_TEST_COMMON_H_ #define VBOOT_REFERENCE_TEST_COMMON_H_ +#include <stdio.h> + +/* Used to get a line number as a constant string. Need to stringify it twice */ +#define STRINGIFY(x) #x +#define TOSTRING(x) STRINGIFY(x) + extern int gTestSuccess; /* Return 1 if result is equal to expected_result, else return 0. * Also update the global gTestSuccess flag if test fails. */ -int TEST_EQ(int result, int expected_result, const char* testname); +int test_eq(int result, int expected, + const char *preamble, const char *desc, const char *comment); + +#define TEST_EQ(result, expected, comment) \ + test_eq(result, expected, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " == " #expected, \ + comment) + +#define TEST_EQ_S(result, expected) TEST_EQ(result, expected, NULL); /* Return 0 if result is equal to not_expected_result, else return 1. * Also update the global gTestSuccess flag if test fails. */ -int TEST_NEQ(int result, int not_expected_result, const char* testname); +int test_neq(int result, int not_expected, + const char *preamble, const char *desc, const char *comment); + +#define TEST_NEQ(result, not_expected, comment) \ + test_neq(result, not_expected, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " != " #not_expected, \ + comment) /* Return 1 if result pointer is equal to expected_result pointer, * else return 0. Does not check pointer contents, only the pointer * itself. Also update the global gTestSuccess flag if test fails. */ -int TEST_PTR_EQ(const void* result, const void* expected_result, - const char* testname); +int test_ptr_eq(const void* result, const void* expected, + const char *preamble, const char *desc, const char *comment); + +#define TEST_PTR_EQ(result, expected, comment) \ + test_ptr_eq(result, expected, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " == " #expected, \ + comment) /* Return 1 if result pointer is not equal to expected_result pointer, * else return 0. Does not check pointer contents, only the pointer * itself. Also update the global gTestSuccess flag if test fails. */ -int TEST_PTR_NEQ(const void* result, const void* expected_result, - const char* testname); +int test_ptr_neq(const void* result, const void* not_expected, + const char *preamble, const char *desc, const char *comment); + +#define TEST_PTR_NEQ(result, not_expected, comment) \ + test_ptr_neq(result, not_expected, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " != " #not_expected, \ + comment) /* Return 1 if result string is equal to expected_result string, * else return 0. Also update the global gTestSuccess flag if test fails. */ -int TEST_STR_EQ(const char* result, const char* expected_result, - const char* testname); +int test_str_eq(const char* result, const char* expected, + const char *preamble, const char *desc, const char *comment); + +#define TEST_STR_EQ(result, expected, comment) \ + test_str_eq(result, expected, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " == " #expected, \ + comment) -/* Return 1 if result string is not equal to not_expected_result string, +/* Return 1 if result string is not equal to not_expected string, * else return 0. Also update the global gTestSuccess flag if test fails. */ -int TEST_STR_NEQ(const char* result, const char* not_expected_result, - const char* testname); +int test_str_neq(const char* result, const char* not_expected, + const char *preamble, const char *desc, const char *comment); + +#define TEST_STR_NEQ(result, not_expected, comment) \ + test_str_neq(result, not_expected, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " != " #not_expected, \ + comment) /* Return 1 if the result is true, else return 0. * Also update the global gTestSuccess flag if test fails. */ -int TEST_TRUE(int result, const char* testname); +int test_true(int result, + const char *preamble, const char *desc, const char *comment); + +#define TEST_TRUE(result, comment) \ + test_true(result, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " == true", \ + comment) /* Return 1 if the result is false, else return 0. * Also update the global gTestSuccess flag if test fails. */ -int TEST_FALSE(int result, const char* testname); +int test_false(int result, + const char *preamble, const char *desc, const char *comment); + +#define TEST_FALSE(result, comment) \ + test_false(result, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " == false", \ + comment) /* Return 1 if result is 0 (VB_ERROR_SUCCESS / VB2_SUCCESS), else return 0. * Also update the global gTestSuccess flag if test fails. */ -int TEST_SUCC(int result, const char* testname); +int test_succ(int result, + const char *preamble, const char *desc, const char *comment); + +#define TEST_SUCC(result, comment) \ + test_succ(result, \ + __FILE__ ":" TOSTRING(__LINE__), \ + #result " == 0", \ + comment) /* ANSI Color coding sequences. * |