X-Git-Url: https://rtime.felk.cvut.cz/gitweb/hercules2020/jailhouse-build.git/blobdiff_plain/88c04a4a2fe959b866fffb5f50f8dde145f769dd..8c66dceb13bf3eb4265e60b6fb6c6e0d0d962bed:/test/memguard-test.c diff --git a/test/memguard-test.c b/test/memguard-test.c index 1a88f88..934e1bf 100644 --- a/test/memguard-test.c +++ b/test/memguard-test.c @@ -143,16 +143,21 @@ static void print_test_info(uint64_t timeout_us, uint64_t mem_budget, uint64_t f WVPASS((retval & MGRET_ERROR_MASK) == 0); } -#define MGTEST(timeout_us, mem_budget, flags, code) \ +pthread_mutex_t wvtest_lock = PTHREAD_MUTEX_INITIALIZER; + +#define MGTEST(timeout_us, mem_budget, flags, code) \ ({ \ long retval; \ retval = memguard(timeout_us, mem_budget, flags); \ code; \ retval = memguard(0, 0, 0); \ + pthread_mutex_lock(&wvtest_lock); \ print_test_info(timeout_us, mem_budget, flags, retval, #code); \ mgret(retval); \ }) +#define MGTESTEND() pthread_mutex_unlock(&wvtest_lock) + void *test_thread(void *ptr) { cpu_set_t set; @@ -176,69 +181,85 @@ void *test_thread(void *ptr) r = MGTEST(5000, 10000, flags, compute_kernel(1000)); WVPASS(!r.time_ovf); WVPASS(r.time > 900); + MGTESTEND(); r = MGTEST(500, 10000, flags, compute_kernel(1000)); WVPASS(r.time_ovf); WVPASS(r.time > 900); + MGTESTEND(); r = MGTEST(5000, 10000, flags, compute_kernel(2000)); WVPASS(!r.time_ovf); WVPASS(r.time > 1900); + MGTESTEND(); r = MGTEST(500, 10000, flags, compute_kernel(2000)); WVPASS(r.time_ovf); WVPASS(r.time > 1900); + MGTESTEND(); /////////////////////////////////////////////////////// r = MGTEST(100000, 500000, flags, read_memory(100000)); WVPASS(!r.mem_ovf); WVPASS(r.mem >= 90000); + MGTESTEND(); r = MGTEST(100000, 50000, flags, read_memory(100000)); WVPASS(r.mem_ovf); WVPASS(r.mem >= 90000); + MGTESTEND(); r = MGTEST(100000, 500000, flags, read_memory_rnd(100000)); WVPASS(!r.mem_ovf); WVPASS(r.mem >= 90000); + MGTESTEND(); r = MGTEST(100000, 50000, flags, read_memory_rnd(100000)); WVPASS(r.mem_ovf); WVPASS(r.mem >= 90000); + MGTESTEND(); r = MGTEST(100000, 500000, flags, write_memory(100000)); WVPASS(!r.mem_ovf); WVPASS(r.mem >= 90000); + MGTESTEND(); r = MGTEST(100000, 50000, flags, write_memory(100000)); WVPASS(r.mem_ovf); WVPASS(r.mem >= 90000); + MGTESTEND(); /////////////////////////////////////////////////////// r = MGTEST(100000, 5000000, flags, read_memory(1000000)); WVPASS(!r.mem_ovf); WVPASS(r.mem >= 900000); + MGTESTEND(); r = MGTEST(100000, 500000, flags, read_memory(1000000)); WVPASS(r.mem_ovf); WVPASS(r.mem >= 900000); + MGTESTEND(); r = MGTEST(100000, 5000000, flags, read_memory_rnd(1000000)); WVPASS(!r.mem_ovf); WVPASS(r.mem >= 900000); + MGTESTEND(); r = MGTEST(100000, 500000, flags, read_memory_rnd(1000000)); WVPASS(r.mem_ovf); WVPASS(r.mem >= 900000); + MGTESTEND(); r = MGTEST(100000, 5000000, flags, write_memory(1000000)); WVPASS(!r.mem_ovf); WVPASS(r.mem >= 900000); + MGTESTEND(); r = MGTEST(100000, 500000, flags, write_memory(1000000)); WVPASS(r.mem_ovf); WVPASS(r.mem >= 900000); + MGTESTEND(); printf("\n"); } @@ -247,10 +268,15 @@ void *test_thread(void *ptr) struct mg_ret r1, r2, r3; r1 = MGTEST(10000, 9000, MGF_PERIODIC | MGF_MASK_INT, read_memory(100000)); WVPASS(r1.time > 100*1000); + MGTESTEND(); + r2 = MGTEST(10000, 3000, MGF_PERIODIC | MGF_MASK_INT, read_memory(100000)); WVPASS(r2.time > 2 * r1.time); + MGTESTEND(); + r3 = MGTEST(10000, 1000, MGF_PERIODIC | MGF_MASK_INT, read_memory(100000)); WVPASS(r3.time > 2 * r2.time); + MGTESTEND(); return NULL; }