Annotation of embedaddon/php/ext/pcntl/tests/002.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: pcntl: pcntl_sigprocmask(), pcntl_sigwaitinfo(), pcntl_sigtimedwait()
                      3: --SKIPIF--
                      4: <?php
                      5:        if (!extension_loaded('pcntl')) die('skip pcntl extension not available');
                      6:        elseif (!extension_loaded('posix')) die('skip posix extension not available');
                      7:        elseif (!function_exists('pcntl_sigwaitinfo') or !function_exists('pcntl_sigtimedwait')) die('skip required functionality is not available');
                      8:        elseif (!defined('CLD_EXITED')) die('skip CLD_EXITED not defined');
                      9: ?>
                     10: --FILE--
                     11: <?php
                     12: 
                     13: $pid = pcntl_fork();
                     14: if ($pid == -1) {
                     15:        die('failed');
                     16: } else if ($pid) {
                     17:        pcntl_sigprocmask(SIG_BLOCK, array(SIGCHLD,(string)SIGTERM));
                     18:        $oldset = array();
                     19:        pcntl_sigprocmask(SIG_BLOCK, array(), $oldset);
                     20:        var_dump(in_array(SIGCHLD, $oldset));
                     21:        var_dump(in_array(SIGTERM, $oldset));
                     22: 
                     23:        posix_kill(posix_getpid(), SIGTERM);
                     24:        $signo = pcntl_sigwaitinfo(array(SIGTERM), $siginfo);
                     25:        echo "signo == SIGTERM\n";
                     26:        var_dump($signo === SIGTERM && $signo === $siginfo['signo']);
                     27:        echo "code === SI_USER || SI_NOINFO\n";
                     28:        if (defined('SI_NOINFO')) {
                     29:                var_dump(($siginfo['code'] === SI_USER) || ($siginfo['code'] === SI_NOINFO));
                     30:        } else {
                     31:                var_dump($siginfo['code'] === SI_USER);
                     32:        }
                     33: 
                     34:        pcntl_signal(SIGCHLD, function($signo){});
                     35:        posix_kill($pid, SIGTERM);
                     36:        $signo = pcntl_sigwaitinfo(array((string)SIGCHLD), $siginfo);
                     37:        echo "signo == SIGCHLD\n";
                     38:        var_dump($signo === SIGCHLD && $signo === $siginfo['signo']);
                     39:        echo "code === CLD_KILLED\n";
                     40:        var_dump($siginfo['code'] === CLD_KILLED);
                     41:        echo "signo === SIGCHLD\n";
                     42:        var_dump($siginfo['signo'] === SIGCHLD);
                     43:        echo "signo === uid\n";
                     44:        var_dump($siginfo['uid'] === posix_getuid());
                     45:        echo "signo === pid\n";
                     46:        var_dump($siginfo['pid'] === $pid);
                     47:        pcntl_waitpid($pid, $status);
                     48: 
                     49:        set_error_handler(function($errno, $errstr) { echo "Error triggered\n"; }, E_WARNING);
                     50: 
                     51:        echo "sigprocmask with invalid arguments\n";
                     52: 
                     53:        /* Valgrind expectedly complains about this:
                     54:          * "sigprocmask: unknown 'how' field 2147483647"
                     55:         * Skip */
                     56:        if (getenv("USE_ZEND_ALLOC") !== '0') {
                     57:                var_dump(pcntl_sigprocmask(PHP_INT_MAX, array(SIGTERM)));
                     58:        } else {
                     59:                echo "Error triggered\n";
                     60:                echo "bool(false)\n";
                     61:        }
                     62:        var_dump(pcntl_sigprocmask(SIG_SETMASK, array(0)));
                     63: 
                     64:        echo "sigwaitinfo with invalid arguments\n";
                     65:        var_dump(pcntl_sigwaitinfo(array(0)));
                     66: 
                     67:        echo "sigtimedwait with invalid arguments\n";
                     68:        var_dump(pcntl_sigtimedwait(array(SIGTERM), $signo, PHP_INT_MAX, PHP_INT_MAX));
                     69: } else {
                     70:        $siginfo = NULL;
                     71:        pcntl_sigtimedwait(array(SIGINT), $siginfo, 3600, 0);
                     72:        exit;
                     73: }
                     74: 
                     75: ?>
                     76: --EXPECTF--
                     77: bool(true)
                     78: bool(true)
                     79: signo == SIGTERM
                     80: bool(true)
                     81: code === SI_USER || SI_NOINFO
                     82: bool(true)
                     83: signo == SIGCHLD
                     84: bool(true)
                     85: code === CLD_KILLED
                     86: bool(true)
                     87: signo === SIGCHLD
                     88: bool(true)
                     89: signo === uid
                     90: bool(true)
                     91: signo === pid
                     92: bool(true)
                     93: sigprocmask with invalid arguments
                     94: Error triggered
                     95: bool(false)
                     96: Error triggered
                     97: bool(false)
                     98: sigwaitinfo with invalid arguments
                     99: Error triggered
                    100: bool(false)
                    101: sigtimedwait with invalid arguments
                    102: Error triggered
                    103: int(-1)

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>