cvs: php-src(PHP_5_2) /ext/standard/tests/http bug38802.phpt ignore_errors.phpt server.inc

From: Date: Thu, 28 May 2009 13:26:52 +0000
Subject: cvs: php-src(PHP_5_2) /ext/standard/tests/http bug38802.phpt ignore_errors.phpt server.inc
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-58334@lists.php.net to get a copy of this message
lbarnaud Thu May 28 13:26:52 2009 UTC Added files: (Branch: PHP_5_2) /php-src/ext/standard/tests/http bug38802.phpt ignore_errors.phpt server.inc Log: MFH: New tests

http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/http/bug38802.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/http/bug38802.phpt +++ php-src/ext/standard/tests/http/bug38802.phpt --TEST-- Bug #38802 (ignore_errors and max_redirects) --SKIPIF-- <?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?> --FILE-- <?php require 'server.inc'; function do_test($context_options) { $context = stream_context_create(array('http' => $context_options)); $responses = array( "data://text/plain,HTTP/1.0 302 Moved Temporarily\r\nLocation: http://127.0.0.1:12342/foo/bar2\r\n\r\n1", "data://text/plain,HTTP/1.0 301 Moved Permanently\r\nLocation: http://127.0.0.1:12342/foo/bar3\r\n\r\n", "data://text/plain,HTTP/1.0 302 Moved Temporarily\r\nLocation: http://127.0.0.1:12342/foo/bar4\r\n\r\n3", "data://text/plain,HTTP/1.0 200 OK\r\n\r\ndone.", ); $pid = http_server("tcp://127.0.0.1:12342", $responses, $output); $fd = fopen('http://127.0.0.1:12342/foo/bar', 'rb', false, $context); var_dump($fd); if ($fd) { $meta_data = stream_get_meta_data($fd); var_dump($meta_data['wrapper_data']); var_dump(stream_get_contents($fd)); } fseek($output, 0, SEEK_SET); var_dump(stream_get_contents($output)); http_server_kill($pid); } echo "-- Test: follow all redirections --\n"; do_test(array(), 4); echo "-- Test: fail after 2 redirections --\n"; do_test(array('max_redirects' => 2), 2); echo "-- Test: fail at first redirection --\n"; do_test(array('max_redirects' => 0), 1); echo "-- Test: fail at first redirection (2) --\n"; do_test(array('max_redirects' => 1), 1); echo "-- Test: return at first redirection --\n"; do_test(array('max_redirects' => 0, 'ignore_errors' => 1), 1); echo "-- Test: return at first redirection (2) --\n"; do_test(array('max_redirects' => 1, 'ignore_errors' => 1), 1); echo "-- Test: return at second redirection --\n"; do_test(array('max_redirects' => 2, 'ignore_errors' => 1), 2); ?> --EXPECTF-- -- Test: follow all redirections -- resource(%d) of type (stream) array(7) { [0]=> string(30) "HTTP/1.0 302 Moved Temporarily" [1]=> string(41) "Location: http://127.0.0.1:12342/foo/bar2" [2]=> string(30) "HTTP/1.0 301 Moved Permanently" [3]=> string(41) "Location: http://127.0.0.1:12342/foo/bar3" [4]=> string(30) "HTTP/1.0 302 Moved Temporarily" [5]=> string(41) "Location: http://127.0.0.1:12342/foo/bar4" [6]=> string(15) "HTTP/1.0 200 OK" } string(5) "done." string(195) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 GET /foo/bar2 HTTP/1.0 Host: 127.0.0.1:12342 GET /foo/bar3 HTTP/1.0 Host: 127.0.0.1:12342 GET /foo/bar4 HTTP/1.0 Host: 127.0.0.1:12342 " -- Test: fail after 2 redirections -- Warning: fopen(http://127.0.0.1:12342/foo/bar): failed to open stream: Redirection limit reached, aborting in %s bool(false) string(97) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 GET /foo/bar2 HTTP/1.0 Host: 127.0.0.1:12342 " -- Test: fail at first redirection -- Warning: fopen(http://127.0.0.1:12342/foo/bar): failed to open stream: Redirection limit reached, aborting in %s bool(false) string(48) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 " -- Test: fail at first redirection (2) -- Warning: fopen(http://127.0.0.1:12342/foo/bar): failed to open stream: Redirection limit reached, aborting in %s bool(false) string(48) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 " -- Test: return at first redirection -- resource(%d) of type (stream) array(2) { [0]=> string(30) "HTTP/1.0 302 Moved Temporarily" [1]=> string(41) "Location: http://127.0.0.1:12342/foo/bar2" } string(1) "1" string(48) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 " -- Test: return at first redirection (2) -- resource(%d) of type (stream) array(2) { [0]=> string(30) "HTTP/1.0 302 Moved Temporarily" [1]=> string(41) "Location: http://127.0.0.1:12342/foo/bar2" } string(1) "1" string(48) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 " -- Test: return at second redirection -- resource(%d) of type (stream) array(4) { [0]=> string(30) "HTTP/1.0 302 Moved Temporarily" [1]=> string(41) "Location: http://127.0.0.1:12342/foo/bar2" [2]=> string(30) "HTTP/1.0 301 Moved Permanently" [3]=> string(41) "Location: http://127.0.0.1:12342/foo/bar3" } string(0) "" string(97) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 GET /foo/bar2 HTTP/1.0 Host: 127.0.0.1:12342 " http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/http/ignore_errors.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/http/ignore_errors.phpt +++ php-src/ext/standard/tests/http/ignore_errors.phpt --TEST-- http:// and ignore_errors --SKIPIF-- <?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?> --FILE-- <?php require 'server.inc'; function do_test($context_options) { $context = stream_context_create(array('http' => $context_options)); $responses = array( "data://text/plain,HTTP/1.0 200 Ok\r\nX-Foo: bar\r\n\r\n1", "data://text/plain,HTTP/1.0 404 Not found\r\nX-bar: baz\r\n\r\n2", ); $pid = http_server("tcp://127.0.0.1:12342", $responses, $output); foreach($responses as $r) { $fd = fopen('http://127.0.0.1:12342/foo/bar', 'rb', false, $context); var_dump($fd); if ($fd) { $meta_data = stream_get_meta_data($fd); var_dump($meta_data['wrapper_data']); var_dump(stream_get_contents($fd)); } fseek($output, 0, SEEK_SET); var_dump(stream_get_contents($output)); fseek($output, 0, SEEK_SET); } http_server_kill($pid); } echo "-- Test: requests without ignore_errors --\n"; do_test(array()); echo "-- Test: requests with ignore_errors --\n"; do_test(array('ignore_errors' => true)); echo "-- Test: requests with ignore_errors (2) --\n"; do_test(array('ignore_errors' => 1)); ?> --EXPECTF-- -- Test: requests without ignore_errors -- resource(%d) of type (stream) array(2) { [0]=> string(15) "HTTP/1.0 200 Ok" [1]=> string(10) "X-Foo: bar" } string(1) "1" string(48) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 " Warning: fopen(http://127.0.0.1:12342/foo/bar): failed to open stream: HTTP request failed! HTTP/1.0 404 Not found in %s on line %d bool(false) string(48) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 " -- Test: requests with ignore_errors -- resource(%d) of type (stream) array(2) { [0]=> string(15) "HTTP/1.0 200 Ok" [1]=> string(10) "X-Foo: bar" } string(1) "1" string(48) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 " resource(%d) of type (stream) array(2) { [0]=> string(22) "HTTP/1.0 404 Not found" [1]=> string(10) "X-bar: baz" } string(1) "2" string(48) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 " -- Test: requests with ignore_errors (2) -- resource(%d) of type (stream) array(2) { [0]=> string(15) "HTTP/1.0 200 Ok" [1]=> string(10) "X-Foo: bar" } string(1) "1" string(48) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 " resource(%d) of type (stream) array(2) { [0]=> string(22) "HTTP/1.0 404 Not found" [1]=> string(10) "X-bar: baz" } string(1) "2" string(48) "GET /foo/bar HTTP/1.0 Host: 127.0.0.1:12342 " http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/http/server.inc?view=markup&rev=1.1 Index: php-src/ext/standard/tests/http/server.inc +++ php-src/ext/standard/tests/http/server.inc <?php function http_server_skipif($socket_string) { if (!function_exists('pcntl_fork')) die('skip pcntl_fork() not available'); if (!function_exists('posix_kill')) die('skip posix_kill() not available'); if (!stream_socket_server($socket_string)) die('skip stream_socket_server() failed'); } /* Minimal HTTP server with predefined responses. * * $socket_string is the socket to create and listen on (e.g. tcp://127.0.0.1:1234) * $files is an array of files containing N responses for N expected requests. Server dies after N requests. * $output is a stream on which everything sent by clients is written to */ function http_server($socket_string, array $files, &$output = null) { pcntl_alarm(60); $server = stream_socket_server($socket_string, $errno, $errstr); if (!$server) { return false; } if ($output === null) { $output = tmpfile(); if ($output === false) { return false; } } $pid = pcntl_fork(); if ($pid == -1) { die('could not fork'); } else if ($pid) { return $pid; } foreach($files as $file) { $sock = stream_socket_accept($server); if (!$sock) { exit(1); } // read headers $content_length = 0; stream_set_blocking($sock, 0); while (!feof($sock)) { list($r, $w, $e) = array(array($sock), null, null); if (!stream_select($r, $w, $e, 1)) continue; $line = stream_get_line($sock, 8192, "\r\n"); if ($line === b'') { fwrite($output, b"\r\n"); break; } else if ($line !== false) { fwrite($output, b"$line\r\n"); if (preg_match(b'#^Content-Length\s*:\s*([[:digit:]]+)\s*$#i', $line, $matches)) { $content_length = (int) $matches[1]; } } } stream_set_blocking($sock, 1); // read content if ($content_length > 0) { stream_copy_to_stream($sock, $output, $content_length); } // send response $fd = fopen($file, 'rb'); stream_copy_to_stream($fd, $sock); fclose($sock); } exit(0); } function http_server_kill($pid) { posix_kill($pid, SIGTERM); pcntl_waitpid($pid, $status); } ?>
« previous php.cvs (#58334) next »