9int main(
int argc,
char** argv) {
10 setvbuf(stdout, NULL, _IONBF, 0);
11 if (argc > 1 && !strcmp(argv[1],
"schedule-exec"))
12 return sc_exec(argc, argv);
13 if (argc > 3 || sc_init(argc == 3 ? atoi(argv[2]) : 0))
18 } families[] = {{
"api-policy", sc_api}, {
"placement", sc_placement},
19 {
"wakeups", sc_wakeups}, {
"affinity-races", sc_affinity_races},
20 {
"lifecycle", sc_lifecycle}, {
"permissions", sc_permissions}};
22 for (
size_t i = 0; i <
sizeof(families) /
sizeof(families[0]); ++i) {
23 if (argc >= 2 && strcmp(argv[1],
"all") && strcmp(argv[1], families[i].name))
26 printf(
"SCHEDULING-CONTRACT: BEGIN %s\n", families[i].name);
30 int result = families[i].run();
32 _exit(result ? 1 : 0);
34 int status = pid < 0 ? -1 : sc_reap(pid, 60000);
36 if (sched_getaffinity(0,
sizeof(current), ¤t) || !CPU_EQUAL(¤t, &sc_allowed)) {
37 fputs(
"supervisor affinity changed\n", stderr);
40 printf(
"SCHEDULING-CONTRACT: %s %s status=%d\n", status ?
"FAIL" :
"PASS", families[i].name,
47 puts(
"SCHEDULING-CONTRACT: END PASS");