Server IP : 127.0.0.2 / Your IP : 3.137.203.53 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/html/vendor/guzzlehttp/ringphp/tests/Client/ |
Upload File : |
<?php namespace GuzzleHttp\Tests\Ring\Client; use GuzzleHttp\Ring\Client\StreamHandler; use GuzzleHttp\Ring\Core; /** * Class uses to control the test webserver. * * Queued responses will be served to requests using a FIFO order. All requests * received by the server are stored on the node.js server and can be retrieved * by calling {@see Server::received()}. * * Mock responses that don't require data to be transmitted over HTTP a great * for testing. Mock response, however, cannot test the actual sending of an * HTTP request using cURL. This test server allows the simulation of any * number of HTTP request response transactions to test the actual sending of * requests over the wire without having to leave an internal network. */ class Server { public static $started; public static $url = 'http://127.0.0.1:8125/'; public static $host = '127.0.0.1:8125'; public static $port = 8125; /** * Flush the received requests from the server * @throws \RuntimeException */ public static function flush() { self::send('DELETE', '/guzzle-server/requests'); } /** * Queue an array of responses or a single response on the server. * * Any currently queued responses will be overwritten. Subsequent requests * on the server will return queued responses in FIFO order. * * @param array $responses An array of responses. The shape of a response * is the shape described in the RingPHP spec. * @throws \Exception */ public static function enqueue(array $responses) { $data = []; foreach ($responses as $response) { if (!is_array($response)) { throw new \Exception('Each response must be an array'); } if (isset($response['body'])) { $response['body'] = base64_encode($response['body']); } $response += ['headers' => [], 'reason' => '', 'body' => '']; $data[] = $response; } self::send('PUT', '/guzzle-server/responses', json_encode($data)); } /** * Get all of the received requests as a RingPHP request structure. * * @return array * @throws \RuntimeException */ public static function received() { if (!self::$started) { return []; } $response = self::send('GET', '/guzzle-server/requests'); $body = Core::body($response); $result = json_decode($body, true); if ($result === false) { throw new \RuntimeException('Error decoding response: ' . json_last_error()); } foreach ($result as &$res) { if (isset($res['uri'])) { $res['resource'] = $res['uri']; } if (isset($res['query_string'])) { $res['resource'] .= '?' . $res['query_string']; } if (!isset($res['resource'])) { $res['resource'] = ''; } // Ensure that headers are all arrays if (isset($res['headers'])) { foreach ($res['headers'] as &$h) { $h = (array) $h; } unset($h); } } unset($res); return $result; } /** * Stop running the node.js server */ public static function stop() { if (self::$started) { self::send('DELETE', '/guzzle-server'); } self::$started = false; } public static function wait($maxTries = 20) { $tries = 0; while (!self::isListening() && ++$tries < $maxTries) { usleep(100000); } if (!self::isListening()) { throw new \RuntimeException('Unable to contact node.js server'); } } public static function start() { if (self::$started) { return; } try { self::wait(); } catch (\Exception $e) { exec('node ' . __DIR__ . \DIRECTORY_SEPARATOR . 'server.js ' . self::$port . ' >> /tmp/server.log 2>&1 &'); self::wait(); } self::$started = true; } private static function isListening() { $response = self::send('GET', '/guzzle-server/perf', null, [ 'connect_timeout' => 1, 'timeout' => 1 ]); return !isset($response['error']); } private static function send( $method, $path, $body = null, array $client = [] ) { $handler = new StreamHandler(); $request = [ 'http_method' => $method, 'uri' => $path, 'request_port' => 8125, 'headers' => ['host' => ['127.0.0.1:8125']], 'body' => $body, 'client' => $client, ]; if ($body) { $request['headers']['content-length'] = [strlen($body)]; } return $handler($request); } }