Integrate unit tests in ci script

This commit is contained in:
o9000 2017-12-28 19:28:57 +01:00
parent 8e0bdcaedd
commit c41d75e54e
5 changed files with 52 additions and 4 deletions

View file

@ -50,7 +50,10 @@ void handle_cli_arguments(int argc, char **argv)
fprintf(stdout, "tint2 version %s\n", VERSION_STRING);
exit(0);
} else if (strcmp(argv[i], "--test") == 0) {
run_all_tests();
run_all_tests(false);
exit(0);
} else if (strcmp(argv[i], "--test-verbose") == 0) {
run_all_tests(true);
exit(0);
} else if (strcmp(argv[i], "-c") == 0) {
if (i + 1 < argc) {

View file

@ -123,7 +123,7 @@ static Status run_test(TestListItem *item)
return run_test_parent(item, pid);
}
void run_all_tests()
void run_all_tests(bool verbose)
{
fprintf(stdout, BLUE "tint2: Running %d tests..." RESET "\n", g_list_length(all_tests));
size_t count = 0, succeeded = 0, failed = 0;
@ -138,6 +138,19 @@ void run_all_tests()
} else {
fprintf(stdout, RED "failed" RESET "\n");
failed++;
if (verbose) {
char *log_name = test_log_name_from_test_name(item->name);
FILE *log = fopen(log_name, "rt");
if (log) {
char buffer[4096];
size_t num_read;
while ((num_read = fread(buffer, 1, sizeof(buffer), log)) > 0) {
fwrite(buffer, 1, num_read, stdout);
}
fclose(log);
}
free(log_name);
}
}
}
if (failed == 0)

View file

@ -16,7 +16,7 @@ void register_test_(Test *test, const char *name);
} \
void test_##name(Status *test_result_)
void run_all_tests();
void run_all_tests(bool verbose);
#define FAIL_TEST_ \
*test_result_ = FAILURE; \

View file

@ -1665,7 +1665,7 @@ TEST(get_next_timeout_simple_multi) {
set_mock_time_ms(origin + 0);
timeout *t1 = add_timeout(100, 0, trigger_callback, &triggered, NULL);
timeout *t2 = add_timeout(200, 50, trigger_callback, &triggered, NULL);
add_timeout(200, 50, trigger_callback, &triggered, NULL);
handle_expired_timers();
ASSERT_EQUAL(triggered, 0);
ASSERT_EQUAL(timeval_to_ms(get_next_timeout()), 100);

View file

@ -222,6 +222,37 @@ def test(tint2path, config, use_asan):
stop_xvfb()
def run_unit_tests(tint2path, use_asan):
print("# Unit tests", "(ASAN on)" if use_asan else "")
start_xvfb()
sleep(1)
start_xsettings()
start_wm()
sleep(1)
compton = start_compositor()
sleep(1)
os.environ["DEBUG_FPS"] = "1"
os.environ["ASAN_OPTIONS"] = "detect_leaks=1:exitcode=0"
tint2 = run([tint2path, "--test-verbose"], True)
if tint2.poll() != None:
raise RuntimeError("tint2 failed to start")
stop(tint2)
out, _ = tint2.communicate()
exitcode = tint2.returncode
if exitcode != 0 and exitcode != 23:
print("tint2 crashed with exit code {0}!".format(exitcode))
print("Output:")
print("```\n" + out.strip() + "\n```")
return
if "tests succeeded" in out:
num_tests = [line for line in out.split("\n") if "tint2: Running" in line][0]
print "All {0} tests succeeded.".format(num_tests)
return
if "tests failed" in out:
print out
stop_xvfb()
def show_timestamp():
utc_datetime = datetime.datetime.utcnow()
print("Last updated:", utc_datetime.strftime("%Y-%m-%d %H:%M UTC"))
@ -377,6 +408,7 @@ def main():
compile_remotely_and_report("OpenBSD")
for use_asan in [True, False]:
compile_and_report(args.src_dir, use_asan)
run_unit_tests("./build/tint2", use_asan)
run_tests(use_asan)