4511
Blocked * blocked = NULL;
4514
char utmpname[PATH_MAX];
4515
struct utmpx utmp, *utmptr;
4518
TEST_FUNCTION ("job_process_handler");
4519
program_name = "test";
4521
class = job_class_new (NULL, "test");
4522
class->process[PROCESS_MAIN] = process_new (class);
4523
class->process[PROCESS_MAIN]->command = "echo";
4525
class->start_on = event_operator_new (class, EVENT_MATCH,
4527
class->stop_on = event_operator_new (class, EVENT_MATCH,
4529
nih_hash_add (job_classes, &class->entry);
4531
event = event_new (NULL, "foo", NULL);
4533
TEST_FILENAME(utmpname);
4535
/* Check that utmp record for the running task of the job terminating
4536
* is properly changed to DEAD_PROCESS
4538
TEST_FEATURE ("with LOGIN_PROCESS utmp entry");
4541
job = job_new (class, "");
4543
blocked = blocked_new (job, BLOCKED_EVENT, event);
4544
event_block (event);
4545
nih_list_add (&job->blocking, &blocked->entry);
4548
job->goal = JOB_START;
4549
job->state = JOB_RUNNING;
4550
job->pid[PROCESS_MAIN] = 1;
4552
TEST_FREE_TAG (blocked);
4554
job->blocker = NULL;
4555
event->failed = FALSE;
4557
job->failed = FALSE;
4558
job->failed_process = -1;
4559
job->exit_status = 0;
4561
output = fopen (utmpname, "w");
4565
utmpxname(utmpname);
4567
/* set up utmp entries */
4568
memset (&utmp, 0, sizeof utmp);
4570
strcpy(utmp.ut_id, "2");
4571
utmp.ut_type = LOGIN_PROCESS;
4574
gettimeofday(&tv, NULL);
4575
utmp.ut_tv.tv_sec = tv.tv_sec;
4576
utmp.ut_tv.tv_usec = tv.tv_usec;
4581
strcpy(utmp.ut_id, "1");
4587
job_process_handler (NULL, 1, NIH_CHILD_EXITED, 0);
4591
utmptr = getutxent();
4592
TEST_NE_P(utmptr, NULL);
4593
TEST_EQ(utmptr->ut_pid, 2);
4594
TEST_EQ(utmptr->ut_type, LOGIN_PROCESS);
4596
utmptr = getutxent();
4597
TEST_NE_P(utmptr, NULL);
4598
TEST_EQ(utmptr->ut_pid, 1);
4599
TEST_EQ(utmptr->ut_type, DEAD_PROCESS);
4603
TEST_FEATURE ("with USER_PROCESS utmp entry");
4606
job = job_new (class, "");
4608
blocked = blocked_new (job, BLOCKED_EVENT, event);
4609
event_block (event);
4610
nih_list_add (&job->blocking, &blocked->entry);
4613
job->goal = JOB_START;
4614
job->state = JOB_RUNNING;
4615
job->pid[PROCESS_MAIN] = 1;
4617
TEST_FREE_TAG (blocked);
4619
job->blocker = NULL;
4620
event->failed = FALSE;
4622
job->failed = FALSE;
4623
job->failed_process = -1;
4624
job->exit_status = 0;
4626
output = fopen (utmpname, "w");
4630
utmpxname(utmpname);
4632
/* set up utmp entries */
4633
memset (&utmp, 0, sizeof utmp);
4635
strcpy(utmp.ut_id, "2");
4636
utmp.ut_type = USER_PROCESS;
4639
gettimeofday(&tv, NULL);
4640
utmp.ut_tv.tv_sec = tv.tv_sec;
4641
utmp.ut_tv.tv_usec = tv.tv_usec;
4646
strcpy(utmp.ut_id, "1");
4652
job_process_handler (NULL, 1, NIH_CHILD_EXITED, 0);
4656
utmptr = getutxent();
4657
TEST_NE_P(utmptr, NULL);
4658
TEST_EQ(utmptr->ut_pid, 2);
4659
TEST_EQ(utmptr->ut_type, USER_PROCESS);
4661
utmptr = getutxent();
4662
TEST_NE_P(utmptr, NULL);
4663
TEST_EQ(utmptr->ut_pid, 1);
4664
TEST_EQ(utmptr->ut_type, DEAD_PROCESS);
4505
4672
main (int argc,