#include #include #include #include "ttail.h" #include "ttail_init.h" #include "ttail_search.h" ttail_t *ttail; char *samples[5] = { "./samples/1.log", "./samples/2.log", "./samples/3.log",\ "./samples/4.log", "./samples/5.log"}; off_t samples_sz[5] = { 442, 0, 893, 2587, 2310 }; FILE *fpl; void setup_file_line(void) { fpl = fopen(samples[0], "r"); if(!fpl) { perror("Unable to open file for testing :"); ck_abort(); } } void teardown_file_line(void) { fclose(fpl); } void teardown_closest(void) { ttail_free(ttail); } void setup_closest(void) { ttail = ttail_init(1, (char**)&"foo"); } void setup_closest_fileinit(void) { size_t i; setup_closest(); for(i=0; i<5; i++) { ttail_add_logfile(ttail, samples[i]); } } void teardown_closest_fileinit(void) { _ttail_search_file_free(ttail); teardown_closest(); } START_TEST (test_search_closest_init) { int ret; ret = _ttail_search_closest_files_init(ttail); ck_assert_int_eq(ret,0); ck_assert(ttail->session->file.vpos == 0); #ifdef HUGEFILE ck_assert_int_eq(ttail->session->file.sz_div,0); #endif } END_TEST START_TEST (test_search_closest_init_filesz) { size_t i; _ttail_search_closest_files_init(ttail); for(i=0;i<5;i++) { ck_assert(samples_sz[i] == ttail->session->file.file_sz[i]); } } END_TEST START_TEST (test_search_closest_init_vfile) { size_t i; off_t full_sz; _ttail_search_closest_files_init(ttail); full_sz = 0; for(i=0;i<5;i++) { ck_assert(full_sz == ttail->session->file.vfile[i]); full_sz += samples_sz[i]; } ck_assert(full_sz == ttail->session->file.vsz); } END_TEST /* * _ttail_file_next_line() & _ttail_file_line_start() tests */ START_TEST (test_file_line_next) { long res; res = _ttail_file_next_line(fpl); ck_assert(res == 77); res = _ttail_file_next_line(fpl); ck_assert(res == 136); res = _ttail_file_next_line(fpl); ck_assert(res == 221); res = _ttail_file_next_line(fpl); ck_assert(res == 298); res = _ttail_file_next_line(fpl); ck_assert(res == 357); res = _ttail_file_next_line(fpl); ck_assert(res == 0); res = _ttail_file_next_line(fpl); ck_assert(res == -1); } END_TEST START_TEST (test_file_line_start) { long res; fseek(fpl, -1, SEEK_END); res = _ttail_file_start_line(fpl); ck_assert(res == 357); res = _ttail_file_start_line(fpl); ck_assert(res == 357); fseek(fpl, -1, SEEK_CUR); res = _ttail_file_start_line(fpl); ck_assert(res == 298); fseek(fpl, -1, SEEK_CUR); res = _ttail_file_start_line(fpl); ck_assert(res == 221); fseek(fpl, -1, SEEK_CUR); res = _ttail_file_start_line(fpl); ck_assert(res == 136); fseek(fpl, -1, SEEK_CUR); res = _ttail_file_start_line(fpl); ck_assert(res == 77); fseek(fpl, -1, SEEK_CUR); res = _ttail_file_start_line(fpl); ck_assert(res == 0); } END_TEST /* TODO : complete the test + debug */ START_TEST (test_file_minmax1) { int r; struct tm tm[2]; printf("%ld\n", ttail->logfile_sz); ttail->flag |= TTAIL_FLAG_PREFIX; ttail->prefix_sz = 0; ttail_set_fmt(ttail, "%b%n%d %H:%M"); r = _ttail_search_closest_files_init(ttail); ck_assert_int_eq(r, 0); r = _ttail_file_minmax(ttail, 0, tm); ck_assert_int_eq(r, 0); ck_assert_int_eq(tm[0].tm_mon, 2); ck_assert_int_eq(tm[0].tm_mday, 6); ck_assert_int_eq(tm[0].tm_hour, 0); ck_assert_int_eq(tm[0].tm_min, 1); ck_assert_int_eq(tm[1].tm_mon, 2); ck_assert_int_eq(tm[1].tm_mday, 6); ck_assert_int_eq(tm[1].tm_hour, 0); ck_assert_int_eq(tm[1].tm_min, 29); } END_TEST START_TEST (test_search_subst_const1) { char expl[] = "Hello world !"; const char *res; ttail->flag |= TTAIL_FLAG_PREFIX; ttail->prefix_sz = 4; res = ttail_logline_subst(ttail, expl); ck_assert(res != NULL); ck_assert(res == expl+4); } END_TEST START_TEST (test_search_subst_const2) { char expl[] = "Hello world !"; const char *res; ttail->flag |= TTAIL_FLAG_PREFIX; ttail->prefix_sz = 0; res = ttail_logline_subst(ttail, expl); ck_assert(res != NULL); ck_assert(res == expl); } END_TEST START_TEST (test_search_subst_re1) { char expl[] = "1337 Foo Bar - Hello world !"; char re[] = "^1337 Fo* Bar - "; const char *res; int ret; ret = ttail_set_prefix(ttail, re); ck_assert_int_eq(ret,0); res = ttail_logline_subst(ttail, expl); ck_assert(res != NULL); ck_assert_str_eq(res, "Hello world !"); } END_TEST START_TEST (test_search_subst_re2) { char expl[] = "1337 Foo Bar - Hello world !"; char re[] = "^[0-9]+ Fo{2} Bar - "; const char *res; int ret; ttail->flag |= TTAIL_FLAG_EXTENDED_RE; ret = ttail_set_prefix(ttail, re); ck_assert_int_eq(ret,0); res = ttail_logline_subst(ttail, expl); ck_assert(res != NULL); ck_assert_str_eq(res, "Hello world !"); } END_TEST START_TEST (test_search_subst_re_nomatch) { char expl[] = "1337 Foo Bar - Hello world !"; char re[] = "Never match m*"; const char *res; int ret; ret = ttail_set_prefix(ttail, re); ck_assert_int_eq(ret,0); res = ttail_logline_subst(ttail, expl); ck_assert(res == NULL); } END_TEST Suite * ttail_search_files_suite(void) { Suite *s; TCase *tc_search_subst; TCase *tc_search_closest_fileinit, *tc_file_line, *tc_file_minmax; s = suite_create("ttail search_files checks"); tc_search_closest_fileinit = tcase_create("\ ttail_logline_closest_files_init() checks"); tcase_add_checked_fixture(tc_search_closest_fileinit, setup_closest_fileinit, teardown_closest_fileinit); tcase_add_test(tc_search_closest_fileinit, test_search_closest_init); tcase_add_test(tc_search_closest_fileinit, test_search_closest_init_filesz); tcase_add_test(tc_search_closest_fileinit, test_search_closest_init_vfile); tc_file_line = tcase_create("ttail_file_*line*() checks"); tcase_add_checked_fixture(tc_file_line, setup_file_line, teardown_file_line); tcase_add_test(tc_file_line, test_file_line_next); tcase_add_test(tc_file_line, test_file_line_start); tc_file_minmax = tcase_create("ttail_file_minmax() checks"); tcase_add_checked_fixture(tc_file_minmax, setup_closest_fileinit, teardown_closest_fileinit); tcase_add_test(tc_file_minmax, test_file_minmax1); tc_search_subst = tcase_create("ttail_logline_subst() checks"); tcase_add_checked_fixture(tc_search_subst, setup_closest_fileinit, teardown_closest_fileinit); tcase_add_test(tc_search_subst, test_search_subst_const1); tcase_add_test(tc_search_subst, test_search_subst_const2); tcase_add_test(tc_search_subst, test_search_subst_re1); tcase_add_test(tc_search_subst, test_search_subst_re2); tcase_add_test(tc_search_subst, test_search_subst_re_nomatch); suite_add_tcase(s, tc_search_subst); suite_add_tcase(s, tc_search_closest_fileinit); suite_add_tcase(s, tc_file_line); suite_add_tcase(s, tc_file_minmax); return s; } int main(int argc, char **argv) { int number_failed = 0; SRunner *sr; chdir(dirname(argv[0])); /* move in ./tests dir */ sr = srunner_create(ttail_search_files_suite()); srunner_set_fork_status(sr, CK_FORK); srunner_run_all(sr,CK_VERBOSE); number_failed = srunner_ntests_failed(sr); srunner_free(sr); return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; }