#include #include "test.h" #include "tests.h" typedef struct priv PRIV; struct priv { int afd; int bfd; } ; static void run_dummy_a(void *pv) { PRIV *p; pid_t mypid; char c; p = pv; mypid = getpid(); printf("dummy: a is %d\n",(int)mypid); sleep(1); printf("dummy: a sending PID to b\n"); sleep(1); mustwrite(p->afd,&mypid,sizeof(pid_t)); sleep(1); printf("dummy: a reading interlock\n"); sleep(1); mustread(p->afd,&c,1); sleep(1); printf("dummy: a done\n"); } static void run_dummy_b(void *pv) { PRIV *p; pid_t apid; p = pv; printf("dummy: b is %d\n",(int)getpid()); sleep(1); printf("dummy: b reading PID from a\n"); sleep(1); mustread(p->bfd,&apid,sizeof(pid_t)); sleep(1); printf("dummy: got PID %d\n",(int)apid); sleep(1); printf("dummy: b writing interlock to a\n"); sleep(1); mustwrite(p->bfd,"",1); sleep(1); printf("dummy: b done\n"); } static void run_dummy(void) { PRIV p; KID *ka; KID *kb; local_socketpair(&p.afd,&p.bfd); ka = fork_kid(&run_dummy_a,&p); kb = fork_kid(&run_dummy_b,&p); close(p.afd); close(p.bfd); reap_kid(ka); reap_kid(kb); printf("dummy: done\n"); } const TEST test_dummy = { &run_dummy };