147
150
static int get_available_pty_count (void) __attribute__((unused));
148
151
static void close_all_files (void);
152
* @fd: file descriptor.
154
* Return 1 if @fd is valid, else 0.
165
flags = fcntl (fd, F_GETFL);
170
/* redundant really */
178
154
child (enum child_tests test,
179
155
const char *filename)
894
861
job->state = JOB_SPAWNED;
897
ret = job_process_run (job, PROCESS_MAIN);
864
job_process_start (job, PROCESS_MAIN);
900
866
TEST_NE (job->pid[PROCESS_MAIN], 0);
902
/* Loop until we've fed all of the data. */
905
fd_set readfds, writefds, exceptfds;
911
FD_ZERO (&exceptfds);
913
nih_io_select_fds (&nfds, &readfds,
914
&writefds, &exceptfds);
917
TEST_FAILED ("expected to have "
923
select (nfds, &readfds, &writefds, &exceptfds, NULL);
925
nih_io_handle_fds (&readfds, &writefds, &exceptfds);
928
870
waitpid (job->pid[PROCESS_MAIN], &status, 0);
929
871
TEST_TRUE (WIFEXITED (status));
962
904
job->trace_state = TRACE_NORMAL;
965
ret = job_process_run (job, PROCESS_MAIN);
907
job_process_start (job, PROCESS_MAIN);
968
909
TEST_EQ (job->trace_forks, 0);
969
910
TEST_EQ (job->trace_state, TRACE_NONE);
1002
943
job->trace_state = TRACE_NORMAL;
1005
ret = job_process_run (job, PROCESS_PRE_START);
946
job_process_start (job, PROCESS_PRE_START);
1008
948
TEST_EQ (job->trace_forks, 0);
1009
949
TEST_EQ (job->trace_state, TRACE_NONE);
1044
984
job->trace_state = TRACE_NORMAL;
1047
ret = job_process_run (job, PROCESS_MAIN);
987
job_process_start (job, PROCESS_MAIN);
1050
989
TEST_EQ (job->trace_forks, 0);
1051
990
TEST_EQ (job->trace_state, TRACE_NEW);
1095
1034
job->trace_state = TRACE_NORMAL;
1098
ret = job_process_run (job, PROCESS_MAIN);
1037
job_process_start (job, PROCESS_MAIN);
1101
1039
TEST_EQ (job->trace_forks, 0);
1102
1040
TEST_EQ (job->trace_state, TRACE_NEW);
1146
1084
TEST_DIVERT_STDERR (output) {
1147
ret = job_process_run (job, PROCESS_MAIN);
1085
job_process_start (job, PROCESS_MAIN);
1149
1089
rewind (output);
1152
1091
TEST_EQ (job->pid[PROCESS_MAIN], 0);
1154
1093
TEST_FILE_EQ (output, ("test: Failed to spawn test (foo) main "
1583
1515
job->goal = JOB_START;
1584
1516
job->state = JOB_SPAWNED;
1586
ret = job_process_run (job, PROCESS_MAIN);
1518
job_process_start (job, PROCESS_MAIN);
1589
1520
TEST_NE (job->pid[PROCESS_MAIN], 0);
1522
/* XXX: call 0: async process setup */
1523
TEST_WATCH_UPDATE ();
1591
1525
/* XXX: call 1: wait for script write to child shell */
1592
1526
TEST_WATCH_UPDATE ();
1614
1548
/* Note we can't use TEST_ALLOC_FAIL() for this test since on
1615
1549
* the ENOMEM loop all we could do is discard the error and
1616
* continue since job_process_run() calls job_process_spawn()
1550
* continue since job_process_start() calls job_process_spawn()
1617
1551
* repeatedly until it works, but the alloc fails in log_new()
1618
1552
* invoked by job_process_spawn() such that when we've left
1619
* job_process_run(), it's too late.
1553
* job_process_start(), it's too late.
1621
1555
* However, we test this scenario in test_spawn() so all is not
1695
1628
job->goal = JOB_START;
1696
1629
job->state = JOB_SPAWNED;
1698
ret = job_process_run (job, PROCESS_MAIN);
1631
job_process_start (job, PROCESS_MAIN);
1701
1633
TEST_NE (job->pid[PROCESS_MAIN], 0);
1635
/* wait for process to setup */
1636
TEST_WATCH_UPDATE ();
1703
1638
/* wait for read from pty allowing logger to write to log file */
1704
1639
TEST_WATCH_UPDATE ();
1779
1714
job->goal = JOB_START;
1780
1715
job->state = JOB_SPAWNED;
1782
ret = job_process_run (job, PROCESS_MAIN);
1717
job_process_start (job, PROCESS_MAIN);
1785
1719
TEST_NE (job->pid[PROCESS_MAIN], 0);
1721
/* wait for process to setup */
1722
TEST_WATCH_UPDATE ();
1787
1724
/* wait for read from pty allowing logger to write to log file */
1788
1725
TEST_WATCH_UPDATE ();
1862
1799
/* Note we can't use TEST_ALLOC_FAIL() for this test since on
1863
1800
* the ENOMEM loop all we could do is discard the error and
1864
* continue since job_process_run() calls job_process_spawn()
1801
* continue since job_process_start() calls job_process_spawn()
1865
1802
* repeatedly until it works, but the alloc fails in log_new()
1866
1803
* invoked by job_process_spawn() such that when we've left
1867
* job_process_run(), it's too late.
1804
* job_process_start(), it's too late.
1869
1806
* However, we test this scenario in test_spawn() so all is not
1885
1822
job->goal = JOB_START;
1886
1823
job->state = JOB_SPAWNED;
1888
ret = job_process_run (job, PROCESS_MAIN);
1825
job_process_start (job, PROCESS_MAIN);
1891
1827
TEST_NE (job->pid[PROCESS_MAIN], 0);
1829
/* wait for process to setup */
1830
TEST_WATCH_UPDATE ();
1893
1832
/* XXX: call 1: wait for script write to child shell */
1894
1833
TEST_WATCH_UPDATE ();
1948
1887
job->goal = JOB_START;
1949
1888
job->state = JOB_SPAWNED;
1951
ret = job_process_run (job, PROCESS_MAIN);
1890
job_process_start (job, PROCESS_MAIN);
1954
1892
TEST_NE (job->pid[PROCESS_MAIN], 0);
1894
/* wait for process to setup */
1895
TEST_WATCH_UPDATE ();
1956
1897
/* wait for read from pty allowing logger to write to log file */
1957
1898
TEST_WATCH_UPDATE ();
2017
1958
job->goal = JOB_START;
2018
1959
job->state = JOB_SPAWNED;
2020
ret = job_process_run (job, PROCESS_MAIN);
1961
job_process_start (job, PROCESS_MAIN);
2023
1963
TEST_NE (job->pid[PROCESS_MAIN], 0);
1965
/* wait for process to setup */
1966
TEST_WATCH_UPDATE ();
2025
1968
/* XXX: call 1: wait for script write to child shell */
2026
1969
TEST_WATCH_UPDATE ();
2065
2008
/* Note we can't use TEST_ALLOC_FAIL() for this test since on
2066
2009
* the ENOMEM loop all we could do is discard the error and
2067
* continue since job_process_run() calls job_process_spawn()
2010
* continue since job_process_start() calls job_process_spawn()
2068
2011
* repeatedly until it works, but the alloc fails in log_new()
2069
2012
* invoked by job_process_spawn() such that when we've left
2070
* job_process_run(), it's too late.
2013
* job_process_start(), it's too late.
2072
2015
* However, we test this scenario in test_spawn() so all is not
2135
2077
* XXX: TEST_WATCH_UPDATE() *TWICE* to ensure select(2) is
2136
2078
* XXX: called twice.
2138
* This is required since job_process_run() uses an NihIo object
2080
* This is required since job_process_start() uses an NihIo object
2139
2081
* to squirt the script to the shell sub-process and this
2140
2082
* triggers select to return when the data is written to the shell.
2141
2083
* However, we don't care about that directly - we care more about
2165
2107
job->goal = JOB_START;
2166
2108
job->state = JOB_SPAWNED;
2168
ret = job_process_run (job, PROCESS_MAIN);
2110
job_process_start (job, PROCESS_MAIN);
2171
2112
TEST_NE (job->pid[PROCESS_MAIN], 0);
2114
/* wait for process to setup */
2115
TEST_WATCH_UPDATE ();
2173
2117
/* XXX: call 1: wait for script write to child shell */
2174
2118
TEST_WATCH_UPDATE ();
2414
2355
job->goal = JOB_START;
2415
2356
job->state = JOB_SPAWNED;
2417
ret = job_process_run (job, PROCESS_MAIN);
2358
job_process_start (job, PROCESS_MAIN);
2420
2360
TEST_NE (job->pid[PROCESS_MAIN], 0);
2422
2362
TEST_WATCH_UPDATE ();
2363
TEST_WATCH_UPDATE ();
2423
2364
waitpid (job->pid[PROCESS_MAIN], &status, 0);
2424
2365
TEST_TRUE (WIFEXITED (status));
2425
2366
TEST_EQ (WEXITSTATUS (status), 0);
2597
2536
job->goal = JOB_START;
2598
2537
job->state = JOB_SPAWNED;
2600
ret = job_process_run (job, PROCESS_MAIN);
2539
job_process_start (job, PROCESS_MAIN);
2603
2541
TEST_NE (job->pid[PROCESS_MAIN], 0);
2605
2543
TEST_WATCH_UPDATE ();
2544
TEST_WATCH_UPDATE ();
2607
2546
waitpid (job->pid[PROCESS_MAIN], &status, 0);
2608
2547
TEST_TRUE (WIFEXITED (status));
2787
2724
job->goal = JOB_START;
2788
2725
job->state = JOB_SPAWNED;
2790
ret = job_process_run (job, PROCESS_MAIN);
2727
job_process_start (job, PROCESS_MAIN);
2793
2729
TEST_NE (job->pid[PROCESS_MAIN], 0);
2795
2731
TEST_WATCH_UPDATE ();
2732
TEST_WATCH_UPDATE ();
2797
2734
waitpid (job->pid[PROCESS_MAIN], &status, 0);
2798
2735
TEST_TRUE (WIFEXITED (status));
3161
3095
job->goal = JOB_START;
3162
3096
job->state = JOB_SPAWNED;
3164
ret = job_process_run (job, PROCESS_MAIN);
3098
job_process_start (job, PROCESS_MAIN);
3099
TEST_WATCH_UPDATE ();
3167
3101
/* We don't expect a logfile to be written since there is no
3168
3102
* accompanying shell to write the error.
3173
3107
job->goal = JOB_STOP;
3174
3108
job->state = JOB_POST_STOP;
3176
ret = job_process_run (job, PROCESS_POST_STOP);
3110
job_process_start (job, PROCESS_POST_STOP);
3179
3112
TEST_NE (job->pid[PROCESS_POST_STOP], 0);
3113
TEST_WATCH_UPDATE ();
3181
3115
/* Flush the io so that the shell on the client side
3182
3116
* gets the data (the script to execute).
3241
3178
job->goal = JOB_START;
3242
3179
job->state = JOB_SPAWNED;
3244
ret = job_process_run (job, PROCESS_MAIN);
3181
job_process_start (job, PROCESS_MAIN);
3182
TEST_WATCH_UPDATE ();
3183
TEST_WATCH_UPDATE ();
3247
3185
/* We don't expect a logfile to be written since there is no
3248
3186
* accompanying shell to write the error.
3325
3264
job->goal = JOB_START;
3326
3265
job->state = JOB_SPAWNED;
3328
ret = job_process_run (job, PROCESS_MAIN);
3267
job_process_start (job, PROCESS_MAIN);
3268
TEST_WATCH_UPDATE ();
3331
3270
/* We don't expect a logfile to be written since there is no
3332
3271
* accompanying shell to write the error.
3405
3347
job->goal = JOB_START;
3406
3348
job->state = JOB_SPAWNED;
3408
ret = job_process_run (job, PROCESS_MAIN);
3350
job_process_start (job, PROCESS_MAIN);
3351
TEST_WATCH_UPDATE ();
3411
3353
/* We don't expect a logfile to be written since there is no
3412
3354
* accompanying shell to write the error.
3417
3359
job->goal = JOB_STOP;
3418
3360
job->state = JOB_POST_STOP;
3420
ret = job_process_run (job, PROCESS_POST_STOP);
3362
job_process_start (job, PROCESS_POST_STOP);
3363
TEST_WATCH_UPDATE ();
3423
3365
/* Again, no file expected */
3424
3366
TEST_EQ (stat (filename, &statbuf), -1);
3425
3367
TEST_EQ (errno, ENOENT);
3427
3370
fclose (output);
3428
3371
nih_free (class);
4066
4007
TEST_DIVERT_STDERR (output) {
4067
ret = job_process_run (job, PROCESS_MAIN);
4068
if (geteuid() == 0 || getuid() == pwd->pw_uid) {
4008
job_process_start (job, PROCESS_MAIN);
4009
TEST_WATCH_UPDATE ();
4076
4012
if (geteuid() == 0 || getuid() == pwd->pw_uid) {
4083
4019
TEST_EQ (stat (filename, &statbuf), -1);
4086
4023
unlink (filename);
4087
4024
nih_free (class);
4027
/* FIXME with async spawn this test is racy */
4091
4029
/************************************************************/
4092
4030
TEST_FEATURE ("with multiple processes and log");
4093
4031
TEST_HASH_EMPTY (job_classes);
4128
4066
job->goal = JOB_START;
4129
4067
job->state = JOB_SPAWNED;
4131
ret = job_process_run (job, PROCESS_MAIN);
4069
job_process_start (job, PROCESS_MAIN);
4070
while (stat (filename, &statbuf) != 0) {
4071
TEST_WATCH_UPDATE ();
4134
4073
pid = job->pid[PROCESS_MAIN];
4135
4074
TEST_GT (pid, 0);
4137
TEST_WATCH_UPDATE ();
4139
4076
TEST_EQ (stat (filename, &statbuf), 0);
4141
4078
output = fopen (filename, "r");
4278
4217
class->console = CONSOLE_NONE;
4279
4218
job = job_new (class, "");
4281
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
4220
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4282
4221
TEST_GT (pid, 0);
4284
4223
waitpid (pid, NULL, 0);
4319
4258
class->console = CONSOLE_NONE;
4320
4259
job = job_new (class, "");
4322
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
4261
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4323
4262
TEST_GT (pid, 0);
4325
4264
waitpid (pid, NULL, 0);
4351
4290
class->console = CONSOLE_LOG;
4352
4291
job = job_new (class, "");
4354
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
4293
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4355
4294
TEST_GT (pid, 0);
4357
4296
waitpid (pid, NULL, 0);
4398
4337
class->chdir = "/tmp";
4399
4338
job = job_new (class, "");
4401
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
4340
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4402
4341
TEST_GT (pid, 0);
4404
4343
waitpid (pid, NULL, 0);
4430
4369
class->console = CONSOLE_NONE;
4431
4370
job = job_new (class, "");
4433
pid = job_process_spawn (job, args, env, FALSE, -1, PROCESS_MAIN);
4372
pid = job_process_spawn_with_fd (job, args, env, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4434
4373
TEST_GT (pid, 0);
4436
4375
waitpid (pid, NULL, 0);
4460
4399
class->console = CONSOLE_NONE;
4461
4400
job = job_new (class, "");
4463
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
4402
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4464
4403
TEST_GT (pid, 0);
4466
4405
assert0 (waitid (P_PID, pid, &info, WEXITED | WSTOPPED | WCONTINUED));
4483
4422
class = job_class_new (NULL, "test", NULL);
4484
4423
job = job_new (class, "");
4485
4424
class->console = CONSOLE_NONE;
4486
pid = job_process_spawn (job, args, NULL, TRUE, -1, PROCESS_MAIN);
4425
pid = job_process_spawn_with_fd (job, args, NULL, TRUE, -1, PROCESS_MAIN, &job_process_fd);
4487
4426
TEST_GT (pid, 0);
4489
4428
assert0 (waitid (P_PID, pid, &info, WEXITED | WSTOPPED | WCONTINUED));
4516
4455
class->console = CONSOLE_NONE;
4517
4456
job = job_new (class, "");
4519
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
4458
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4461
buffer = read_from_fd (NULL, job_process_fd);
4462
TEST_NE_P (buffer, NULL);
4463
job_process_error_handler (buffer->buf, buffer->len);
4522
4465
err = nih_error_get ();
4523
4466
TEST_EQ (err->number, JOB_PROCESS_ERROR);
4539
4483
class = job_class_new (NULL, "test", NULL);
4540
4484
class->console = CONSOLE_LOG;
4541
4485
job = job_new (class, "");
4486
job->goal = JOB_START;
4487
job->state = JOB_SPAWNED;
4543
4489
TEST_NE_P (job->log, NULL);
4544
4490
TEST_EQ_P (job->log[PROCESS_MAIN], NULL);
4545
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
4491
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4492
job->process_data[PROCESS_MAIN] = NIH_MUST (
4493
job_process_data_new (job->process_data, job, PROCESS_MAIN, job_process_fd));
4494
TEST_WATCH_UPDATE ();
4548
4497
TEST_GT (waitpid (-1, NULL, 0), 0);
4499
NihIo *io = nih_io_reopen (job, job_process_fd, NIH_IO_STREAM, NULL, NULL, NULL, NULL);
4500
TEST_NE_P (io, NULL);
4501
buffer = read_from_fd (NULL, job_process_fd);
4502
TEST_NE_P (buffer, NULL);
4503
TEST_NE_P (job->process_data[PROCESS_MAIN], NULL);
4504
TEST_TRUE (job->process_data[PROCESS_MAIN]->valid);
4507
TEST_NE_P (job->log[PROCESS_MAIN], NULL);
4509
job_process_child_reader (job->process_data[PROCESS_MAIN], io, buffer->buf, buffer->len);
4550
4511
/* The log should have been allocated in job_process_spawn,
4551
4512
* but then freed on error.
4553
4514
TEST_EQ_P (job->log[PROCESS_MAIN], NULL);
4555
err = nih_error_get ();
4556
TEST_EQ (err->number, JOB_PROCESS_ERROR);
4557
TEST_ALLOC_SIZE (err, sizeof (JobProcessError));
4559
perr = (JobProcessError *)err;
4560
TEST_EQ (perr->type, JOB_PROCESS_ERROR_EXEC);
4561
TEST_EQ (perr->arg, 0);
4562
TEST_EQ (perr->errnum, ENOENT);
4565
4516
/* Check that we can spawn a job and pause it
4567
4518
TEST_FEATURE ("with debug enabled");
4577
4528
args[1] = function;
4578
4529
args[2] = NULL;
4580
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
4531
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4581
4532
TEST_GT (pid, 0);
4583
4534
/* Ensure process is still running after some period of time.
4614
4565
class->console = CONSOLE_NONE;
4615
4566
job = job_new (class, "");
4617
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
4568
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4618
4569
TEST_GT (pid, 0);
4620
4571
waitpid (pid, NULL, 0);
4669
4620
class->console = CONSOLE_LOG;
4670
4621
job = job_new (class, "");
4672
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
4623
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4673
4624
TEST_GT (pid, 0);
4675
4626
waitpid (pid, NULL, 0);
4742
4693
args[2] = filebuf;
4743
4694
args[3] = NULL;
4745
job->pid[PROCESS_MAIN] = job_process_spawn (job, args, NULL,
4746
FALSE, -1, PROCESS_MAIN);
4696
job->pid[PROCESS_MAIN] = job_process_spawn_with_fd (job, args, NULL,
4697
FALSE, -1, PROCESS_MAIN, &job_process_fd);
4747
4698
pid = job->pid[PROCESS_MAIN];
4748
4699
TEST_GT (pid, 0);
4769
4720
args[2] = filebuf;
4770
4721
args[3] = NULL;
4772
job->pid[PROCESS_POST_START] = job_process_spawn (job, args, NULL,
4773
FALSE, -1, PROCESS_POST_START);
4723
job->pid[PROCESS_POST_START] = job_process_spawn_with_fd (job, args, NULL,
4724
FALSE, -1, PROCESS_POST_START, &job_process_fd);
4774
4725
pid = job->pid[PROCESS_POST_START];
4775
4726
TEST_GT (pid, 0);
4867
4818
NIH_MUST (nih_str_array_add (&args_array, NULL, &argc, script));
4870
pid = job_process_spawn (job, args_array, NULL, FALSE, -1, PROCESS_MAIN);
4821
pid = job_process_spawn_with_fd (job, args_array, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4872
4823
if (test_alloc_failed) {
4873
4824
TEST_LT (pid, 0);
4934
4885
NIH_MUST (nih_str_array_add (&args_array, NULL, &argc, TEST_SHELL_ARG));
4935
4886
NIH_MUST (nih_str_array_add (&args_array, NULL, &argc, script));
4937
pid = job_process_spawn (job, args_array, NULL, FALSE, -1, PROCESS_MAIN);
4888
pid = job_process_spawn_with_fd (job, args_array, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4938
4889
TEST_GT (pid, 0);
4940
4891
TEST_EQ (waitpid (pid, &status, 0), pid);
4990
4941
NIH_MUST (nih_str_array_add (&args_array, NULL, &argc, TEST_SHELL_ARG));
4991
4942
NIH_MUST (nih_str_array_add (&args_array, NULL, &argc, script));
4993
pid = job_process_spawn (job, args_array, NULL, FALSE, -1, PROCESS_MAIN);
4944
pid = job_process_spawn_with_fd (job, args_array, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
4994
4945
TEST_GT (pid, 0);
4996
4947
TEST_EQ (waitpid (pid, &status, 0), pid);
5043
4994
NIH_MUST (nih_str_array_add (&args_array, NULL, &argc, "-en"));
5044
4995
NIH_MUST (nih_str_array_add (&args_array, NULL, &argc, "\\000"));
5046
pid = job_process_spawn (job, args_array, NULL, FALSE, -1, PROCESS_MAIN);
4997
pid = job_process_spawn_with_fd (job, args_array, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
5047
4998
TEST_GT (pid, 0);
5049
5000
TEST_EQ (waitpid (pid, &status, 0), pid);
5098
5049
args[3] = filebuf;
5099
5050
args[4] = NULL;
5101
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
5052
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
5102
5053
TEST_GT (pid, 0);
5104
5055
TEST_NE (waitpid (pid, &status, 0), -1);
5161
5112
args[3] = filebuf;
5162
5113
args[4] = NULL;
5164
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
5115
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
5165
5116
TEST_GT (pid, 0);
5167
5118
TEST_WATCH_UPDATE ();
5246
pid = job_process_spawn (job, args, NULL, FALSE, -1, PROCESS_MAIN);
5197
pid = job_process_spawn_with_fd (job, args, NULL, FALSE, -1, PROCESS_MAIN, &job_process_fd);
5198
TEST_WATCH_UPDATE ();
5201
buffer = read_from_fd (NULL, job_process_fd);
5202
TEST_NE_P (buffer, NULL);
5203
job_process_error_handler (buffer->buf, buffer->len);
5249
5205
/* Ensure logging disabled in failure scenarios */
5250
5206
TEST_EQ (class->console, CONSOLE_NONE);
5830
5786
job->exit_status = 0;
5832
5788
job_process_handler (NULL, 1, NIH_CHILD_EXITED, 0);
5789
TEST_EQ (job->state, JOB_SPAWNED);
5790
job_change_state (job, job_next_state(job));
5834
5792
TEST_EQ (job->goal, JOB_START);
5835
5793
TEST_EQ (job->state, JOB_RUNNING);