Skip to content

Commit d24f3e7

Browse files
committed
test: add test_exec and check memory leaks
re_fhs_flush is used to cleanup OOM tests
1 parent f88cc44 commit d24f3e7

File tree

1 file changed

+36
-7
lines changed

1 file changed

+36
-7
lines changed

test/test.c

+36-7
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,35 @@ static const struct test *find_test_int(const char *name)
387387
}
388388

389389

390+
static int test_exec(const struct test *test)
391+
{
392+
if (!test)
393+
return EINVAL;
394+
395+
struct memstat mstat_before;
396+
struct memstat mstat_after;
397+
398+
mem_get_stat(&mstat_before);
399+
400+
int err = test->exec();
401+
re_fhs_flush();
402+
403+
mem_get_stat(&mstat_after);
404+
405+
if (mstat_before.blocks_cur != mstat_after.blocks_cur) {
406+
mem_debug();
407+
re_assert(false && "Test leaks memory blocks");
408+
}
409+
410+
if (mstat_before.bytes_cur != mstat_after.bytes_cur) {
411+
mem_debug();
412+
re_assert(false && "Test leaks memory bytes");
413+
}
414+
415+
return err;
416+
}
417+
418+
390419
/**
391420
* Run a single testcase in OOM (Out-of-memory) mode.
392421
*
@@ -418,7 +447,7 @@ static int testcase_oom(const struct test *test, int levels, bool verbose)
418447

419448
mem_threshold_set(i);
420449

421-
err = test->exec();
450+
err = test_exec(test);
422451
if (err == 0) {
423452
/* success, stop now */
424453
break;
@@ -522,7 +551,7 @@ static int test_unit(const char *name, bool verbose)
522551
goto out;
523552
}
524553

525-
err = test->exec();
554+
err = test_exec(test);
526555
if (err) {
527556
DEBUG_WARNING("%s: test failed (%m)\n", name, err);
528557
goto out;
@@ -595,7 +624,7 @@ static int testcase_perf(const struct test *test, double *usec_avgp)
595624
usec_start = tmr_jiffies_usec();
596625
for (i = 1; i <= DRYRUN_MAX; i++) {
597626

598-
err = test->exec();
627+
err = test_exec(test);
599628
if (err)
600629
return err;
601630

@@ -613,7 +642,7 @@ static int testcase_perf(const struct test *test, double *usec_avgp)
613642
/* now for the real measurement */
614643
usec_start = tmr_jiffies_usec();
615644
for (i=0; i<n; i++) {
616-
err = test->exec();
645+
err = test_exec(test);
617646
if (err)
618647
return err;
619648
}
@@ -786,7 +815,7 @@ static int thread_handler(void *arg)
786815
return 0;
787816
}
788817

789-
err = thr->test->exec();
818+
err = test_exec(thr->test);
790819
if (err) {
791820
if (err == ESKIPPED) {
792821
err = 0;
@@ -1100,7 +1129,7 @@ int test_integration(const char *name, bool verbose)
11001129
(void)re_fprintf(stderr, " %-24s: ", test->name);
11011130

11021131
if (test->exec)
1103-
err = test->exec();
1132+
err = test_exec(test);
11041133

11051134
if (err)
11061135
DEBUG_WARNING(" %-24s: NOK: %m\n", test->name, err);
@@ -1119,7 +1148,7 @@ int test_integration(const char *name, bool verbose)
11191148
(void)re_fprintf(stderr, " %-32s: ", test->name);
11201149

11211150
if (test->exec)
1122-
err = test->exec();
1151+
err = test_exec(test);
11231152

11241153
if (err) {
11251154
DEBUG_WARNING(" %-24s: NOK: %m\n", test->name, err);

0 commit comments

Comments
 (0)