From: <dg...@su...> - 2009-01-11 04:22:29
|
Author: dgollub Date: Sun Jan 11 05:21:39 2009 New Revision: 5093 URL: http://www.opensync.org/changeset/5093 Log: Introduce unittest macros: OSYNC_TESTCASE_START(unitname) OSYNC_TESTCASE_ADD(testcase) OSYNC_TESTCASE_END Those macros wrap the entire check-instrumentation. testcase function name needs to be added with OSYNC_TESTCASE_ADD, without string-quote. Those macros also introduce powerful test parameter handling. Calling the test-binary without parameter calls all testcases. Adding as parameter a "vaild" testcase name, just run this testcase. Example(s): ./engine engine_sync_stress Just runs the engine_sync_stress. ./engine engine_sync_stress engine_new Runs first sync_stress then the _new testcase. argv[0] is also handled. So calling symlinks is also possible: $ ln -s engine engine_sync_stress $ PATH=$PATH:. engine_sync_stress ./engine_sync_stress doesn't work yet, due to "./" Purpose of those marcros: faster debugging for single testcases. Running continous buildtests with all check-testcases as seperated CTest testcase. This requires a new CMake macro which also creates the corresponding sym-link. Modified: trunk/tests/engine-tests/check_engine.c trunk/tests/support.c trunk/tests/support.h Modified: trunk/tests/engine-tests/check_engine.c ============================================================================== --- trunk/tests/engine-tests/check_engine.c Sun Jan 11 03:48:10 2009 (r5092) +++ trunk/tests/engine-tests/check_engine.c Sun Jan 11 05:21:39 2009 (r5093) @@ -2003,45 +2003,26 @@ } END_TEST -Suite *engine_suite(void) -{ - Suite *s = suite_create("Engine"); -// Suite *s2 = suite_create("Engine"); - - create_case(s, "engine_new", engine_new); - create_case(s, "engine_init", engine_init); - create_case(s, "engine_sync", engine_sync); - create_case(s, "engine_sync_multi_obj", engine_sync_multi_obj); - create_case(s, "engine_sync_out_of_order", engine_sync_out_of_order); - create_case(s, "engine_sync_reuse", engine_sync_reuse); - create_case(s, "engine_sync_stress", engine_sync_stress); - - /* Disabled due to randomly failing - #994 - create_case(s, "engine_sync_read_write_stress", engine_sync_read_write_stress); - */ - - create_case(s, "engine_sync_read_write", engine_sync_read_write); - create_case(s, "engine_sync_read_write_stress2", engine_sync_read_write_stress2); - - //batch commit - //connect problem - //get_changes problem - - return s; -} +OSYNC_TESTCASE_START(engine) + +OSYNC_TESTCASE_ADD(engine_new) +OSYNC_TESTCASE_ADD(engine_init) +OSYNC_TESTCASE_ADD(engine_sync) +OSYNC_TESTCASE_ADD(engine_sync_multi_obj) +OSYNC_TESTCASE_ADD(engine_sync_out_of_order) +OSYNC_TESTCASE_ADD(engine_sync_reuse) +OSYNC_TESTCASE_ADD(engine_sync_stress) + +/* Disabled due to randomly failing - #994 +OSYNC_TESTCASE_ADD(engine_sync_read_write_stress) +*/ + +OSYNC_TESTCASE_ADD(engine_sync_read_write) +OSYNC_TESTCASE_ADD(engine_sync_read_write_stress2) + +//batch commit +//connect problem +//get_changes problem + +OSYNC_TESTCASE_END -int main(void) -{ - int nf; - - check_env(); - - Suite *s = engine_suite(); - - SRunner *sr; - sr = srunner_create(s); - srunner_run_all(sr, CK_VERBOSE); - nf = srunner_ntests_failed(sr); - srunner_free(sr); - return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; -} Modified: trunk/tests/support.c ============================================================================== --- trunk/tests/support.c Sun Jan 11 03:48:10 2009 (r5092) +++ trunk/tests/support.c Sun Jan 11 05:21:39 2009 (r5093) @@ -7,6 +7,51 @@ char *olddir = NULL; + +void osync_testsuite_all(Suite *s, struct osync_testcase_s *tc) +{ + unsigned int i; + for (i=0; tc[i].name; i++) + create_case(s, tc[i].name, tc[i].func); +} + +unsigned int osync_testsuite_selected(Suite *s, int argc, char **argv, + struct osync_testcase_s *tc) +{ + unsigned int i, j, n=0; + /* Also argv[0]! for symlink-ed calls */ + for (i=0; argc > i; i++) { + for (j=0; tc[j].name; j++) { + if (strcmp(argv[i], tc[j].name)) + continue; + + create_case(s, tc[j].name, tc[j].func); + n++; + } + } + + return n; +} + +int osync_testsuite(int argc, char **argv, const char *unittest, + struct osync_testcase_s *tc) +{ + int nf; + Suite *s = suite_create(unittest); + SRunner *sr; + + check_env(); + + if (!osync_testsuite_selected(s, argc, argv, tc)) + osync_testsuite_all(s, tc); + + sr = srunner_create(s); + srunner_run_all(sr, CK_VERBOSE); + nf = srunner_ntests_failed(sr); + srunner_free(sr); + return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} + static void reset_env(void) { g_unsetenv("CONNECT_ERROR"); Modified: trunk/tests/support.h ============================================================================== --- trunk/tests/support.h Sun Jan 11 03:48:10 2009 (r5092) +++ trunk/tests/support.h Sun Jan 11 05:21:39 2009 (r5093) @@ -1,3 +1,6 @@ +#ifndef OSYNC_TEST_SUPPORT +#define OSYNC_TEST_SUPPORT + #include <check.h> #include <opensync/opensync.h> @@ -13,6 +16,30 @@ #include "config.h" +#define OSYNC_TESTCASE_START(x) \ + const char *_unittest = (#x); \ + struct osync_testcase_s osync_testcase[] = { + +#define OSYNC_TESTCASE_ADD(x) { (#x), x }, + +#define OSYNC_TESTCASE_END \ + { NULL, NULL } \ + }; \ + \ +int main(int argc, char **argv) \ +{ \ + return osync_testsuite(argc, argv, _unittest, osync_testcase); \ +} + +struct osync_testcase_s { + const char *name; + void *func; +}; + + +int osync_testsuite(int argc, char **argv, const char *unittest, + struct osync_testcase_s *tc); + int num_client_connected; int num_client_main_connected; @@ -120,3 +147,5 @@ /* System Env helper */ void osync_testing_system_abort(const char *command); +#endif /* OSYNC_TEST_SUPPORT */ + |