2008-05-30 11:40:08 +00:00
< ? php
/**
2009-03-18 17:55:58 +00:00
* HttpSocketTest file
2008-05-30 11:40:08 +00:00
*
2010-10-03 16:31:21 +00:00
* PHP 5
2008-05-30 11:40:08 +00:00
*
2010-05-19 01:15:13 +00:00
* CakePHP ( tm ) Tests < http :// book . cakephp . org / view / 1196 / Testing >
2011-05-29 21:31:39 +00:00
* Copyright 2005 - 2011 , Cake Software Foundation , Inc . ( http :// cakefoundation . org )
2008-05-30 11:40:08 +00:00
*
2010-10-03 16:31:21 +00:00
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice
2008-05-30 11:40:08 +00:00
*
2011-05-29 21:31:39 +00:00
* @ copyright Copyright 2005 - 2011 , Cake Software Foundation , Inc . ( http :// cakefoundation . org )
2010-05-19 01:15:13 +00:00
* @ link http :// book . cakephp . org / view / 1196 / Testing CakePHP ( tm ) Tests
2011-07-26 06:16:14 +00:00
* @ package Cake . Test . Case . Network . Http
2008-10-30 17:30:26 +00:00
* @ since CakePHP ( tm ) v 1.2 . 0.4206
2010-10-03 16:27:27 +00:00
* @ license MIT License ( http :// www . opensource . org / licenses / mit - license . php )
2008-05-30 11:40:08 +00:00
*/
2010-12-09 05:55:24 +00:00
2011-01-09 03:27:27 +00:00
App :: uses ( 'HttpSocket' , 'Network/Http' );
App :: uses ( 'HttpResponse' , 'Network/Http' );
2009-05-07 18:49:21 +00:00
2010-12-01 15:46:13 +00:00
/**
* TestAuthentication class
*
2011-07-26 06:16:14 +00:00
* @ package Cake . Test . Case . Network . Http
* @ package Cake . Test . Case . Network . Http
2010-12-01 15:46:13 +00:00
*/
class TestAuthentication {
2009-07-24 19:18:37 +00:00
2009-05-07 18:49:21 +00:00
/**
2010-12-01 15:46:13 +00:00
* authentication method
2009-05-07 18:49:21 +00:00
*
2010-12-01 15:46:13 +00:00
* @ param HttpSocket $http
2010-12-03 02:46:11 +00:00
* @ param array $authInfo
2010-12-01 15:46:13 +00:00
* @ return void
2009-05-07 18:49:21 +00:00
*/
2010-12-03 02:46:11 +00:00
public static function authentication ( HttpSocket $http , & $authInfo ) {
$http -> request [ 'header' ][ 'Authorization' ] = 'Test ' . $authInfo [ 'user' ] . '.' . $authInfo [ 'pass' ];
2009-05-07 18:49:21 +00:00
}
2009-07-24 19:18:37 +00:00
2009-05-07 18:49:21 +00:00
/**
2010-12-01 15:46:13 +00:00
* proxyAuthentication method
2009-05-07 18:49:21 +00:00
*
2010-12-01 15:46:13 +00:00
* @ param HttpSocket $http
2010-12-04 01:10:07 +00:00
* @ param array $proxyInfo
2010-12-01 15:46:13 +00:00
* @ return void
2009-05-07 18:49:21 +00:00
*/
2010-12-04 01:10:07 +00:00
public static function proxyAuthentication ( HttpSocket $http , & $proxyInfo ) {
$http -> request [ 'header' ][ 'Proxy-Authorization' ] = 'Test ' . $proxyInfo [ 'user' ] . '.' . $proxyInfo [ 'pass' ];
2009-05-07 18:49:21 +00:00
}
2009-07-24 19:18:37 +00:00
2010-12-01 15:46:13 +00:00
}
2009-05-07 18:49:21 +00:00
/**
2010-12-14 04:46:31 +00:00
* CustomResponse
2009-05-07 18:49:21 +00:00
*
*/
2010-12-14 04:46:31 +00:00
class CustomResponse {
2009-07-24 19:18:37 +00:00
2009-05-07 18:49:21 +00:00
/**
2010-12-14 04:46:31 +00:00
* First 10 chars
2009-05-07 18:49:21 +00:00
*
2010-12-14 04:46:31 +00:00
* @ var string
2009-05-07 18:49:21 +00:00
*/
2010-12-14 04:46:31 +00:00
public $first10 ;
/**
* Constructor
*
*/
public function __construct ( $message ) {
$this -> first10 = substr ( $message , 0 , 10 );
2009-05-07 18:49:21 +00:00
}
2010-12-14 04:46:31 +00:00
}
2010-12-04 03:23:07 +00:00
/**
* TestHttpSocket
*
*/
2009-05-07 18:49:21 +00:00
class TestHttpSocket extends HttpSocket {
2009-07-24 19:18:37 +00:00
2009-05-07 18:49:21 +00:00
/**
* Convenience method for testing protected method
*
* @ param mixed $uri URI ( see { @ link _parseUri ()})
* @ return array Current configuration settings
*/
2010-12-04 03:23:07 +00:00
public function configUri ( $uri = null ) {
2009-05-07 18:49:21 +00:00
return parent :: _configUri ( $uri );
}
2009-07-24 19:18:37 +00:00
2009-05-07 18:49:21 +00:00
/**
* Convenience method for testing protected method
*
* @ param string $uri URI to parse
* @ param mixed $base If true use default URI config , otherwise indexed array to set 'scheme' , 'host' , 'port' , etc .
* @ return array Parsed URI
*/
2010-12-04 03:23:07 +00:00
public function parseUri ( $uri = null , $base = array ()) {
2009-05-07 18:49:21 +00:00
return parent :: _parseUri ( $uri , $base );
}
2009-07-24 19:18:37 +00:00
2009-05-07 18:49:21 +00:00
/**
* Convenience method for testing protected method
*
* @ param array $uri A $uri array , or uses $this -> config if left empty
* @ param string $uriTemplate The Uri template / format to use
* @ return string A fully qualified URL formated according to $uriTemplate
*/
2010-12-04 03:23:07 +00:00
public function buildUri ( $uri = array (), $uriTemplate = '%scheme://%user:%pass@%host:%port/%path?%query#%fragment' ) {
2009-05-07 18:49:21 +00:00
return parent :: _buildUri ( $uri , $uriTemplate );
}
2009-07-24 19:18:37 +00:00
2009-05-07 18:49:21 +00:00
/**
* Convenience method for testing protected method
*
* @ param array $header Header to build
* @ return string Header built from array
*/
2010-12-04 03:23:07 +00:00
public function buildHeader ( $header , $mode = 'standard' ) {
2009-05-07 18:49:21 +00:00
return parent :: _buildHeader ( $header , $mode );
}
2009-07-24 19:18:37 +00:00
2009-05-07 18:49:21 +00:00
/**
* Convenience method for testing protected method
*
* @ param mixed $query A query string to parse into an array or an array to return directly " as is "
* @ return array The $query parsed into a possibly multi - level array . If an empty $query is given , an empty array is returned .
*/
2010-12-04 03:23:07 +00:00
public function parseQuery ( $query ) {
2009-05-07 18:49:21 +00:00
return parent :: _parseQuery ( $query );
}
2009-07-24 19:18:37 +00:00
2009-05-07 18:49:21 +00:00
/**
* Convenience method for testing protected method
*
* @ param array $request Needs to contain a 'uri' key . Should also contain a 'method' key , otherwise defaults to GET .
* @ param string $versionToken The version token to use , defaults to HTTP / 1.1
* @ return string Request line
*/
2010-12-04 03:23:07 +00:00
public function buildRequestLine ( $request = array (), $versionToken = 'HTTP/1.1' ) {
2009-05-07 18:49:21 +00:00
return parent :: _buildRequestLine ( $request , $versionToken );
}
2009-07-24 19:18:37 +00:00
2009-05-07 18:49:21 +00:00
/**
* Convenience method for testing protected method
*
* @ param boolean $hex true to get them as HEX values , false otherwise
* @ return array Escape chars
*/
2010-12-04 03:23:07 +00:00
public function tokenEscapeChars ( $hex = true , $chars = null ) {
2009-05-07 18:49:21 +00:00
return parent :: _tokenEscapeChars ( $hex , $chars );
}
2009-07-24 19:18:37 +00:00
2009-05-07 18:49:21 +00:00
/**
* Convenience method for testing protected method
*
* @ param string $token Token to escape
* @ return string Escaped token
*/
2010-12-04 03:23:07 +00:00
public function EscapeToken ( $token , $chars = null ) {
2009-05-07 18:49:21 +00:00
return parent :: _escapeToken ( $token , $chars );
}
2009-07-24 19:18:37 +00:00
2009-05-07 18:49:21 +00:00
}
2008-05-30 11:40:08 +00:00
/**
2009-03-18 17:55:58 +00:00
* HttpSocketTest class
2008-05-30 11:40:08 +00:00
*
2011-07-26 06:16:14 +00:00
* @ package Cake . Test . Case . Network . Http
2008-05-30 11:40:08 +00:00
*/
2008-07-21 02:40:58 +00:00
class HttpSocketTest extends CakeTestCase {
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* Socket property
2008-07-05 14:31:22 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var mixed null
*/
2010-04-04 07:14:00 +00:00
public $Socket = null ;
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* RequestSocket property
2008-07-05 14:31:22 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var mixed null
*/
2010-04-04 07:14:00 +00:00
public $RequestSocket = null ;
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
* This function sets up a TestHttpSocket instance we are going to use for testing
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function setUp () {
2009-05-07 18:49:21 +00:00
if ( ! class_exists ( 'MockHttpSocket' )) {
2010-06-01 02:34:10 +00:00
$this -> getMock ( 'TestHttpSocket' , array ( 'read' , 'write' , 'connect' ), array (), 'MockHttpSocket' );
$this -> getMock ( 'TestHttpSocket' , array ( 'read' , 'write' , 'connect' , 'request' ), array (), 'MockHttpSocketRequests' );
2008-05-30 11:40:08 +00:00
}
2010-06-01 02:34:10 +00:00
$this -> Socket = new MockHttpSocket ();
$this -> RequestSocket = new MockHttpSocketRequests ();
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
* We use this function to clean up after the test case was executed
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function tearDown () {
2008-05-30 11:40:08 +00:00
unset ( $this -> Socket , $this -> RequestSocket );
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
* Test that HttpSocket :: __construct does what one would expect it to do
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function testConstruct () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$baseConfig = $this -> Socket -> config ;
2010-06-01 02:34:10 +00:00
$this -> Socket -> expects ( $this -> never ()) -> method ( 'connect' );
2008-05-30 11:40:08 +00:00
$this -> Socket -> __construct ( array ( 'host' => 'foo-bar' ));
$baseConfig [ 'host' ] = 'foo-bar' ;
$baseConfig [ 'protocol' ] = getprotobyname ( $baseConfig [ 'protocol' ]);
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> config , $baseConfig );
2010-12-06 14:03:22 +00:00
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$baseConfig = $this -> Socket -> config ;
$this -> Socket -> __construct ( 'http://www.cakephp.org:23/' );
2010-12-06 14:03:22 +00:00
$baseConfig [ 'host' ] = $baseConfig [ 'request' ][ 'uri' ][ 'host' ] = 'www.cakephp.org' ;
$baseConfig [ 'port' ] = $baseConfig [ 'request' ][ 'uri' ][ 'port' ] = 23 ;
2008-05-30 11:40:08 +00:00
$baseConfig [ 'protocol' ] = getprotobyname ( $baseConfig [ 'protocol' ]);
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> config , $baseConfig );
2008-07-05 14:31:22 +00:00
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$this -> Socket -> __construct ( array ( 'request' => array ( 'uri' => 'http://www.cakephp.org:23/' )));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> config , $baseConfig );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
* Test that HttpSocket :: configUri works properly with different types of arguments
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function testConfigUri () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$r = $this -> Socket -> configUri ( 'https://bob:secret@www.cakephp.org:23/?query=foo' );
$expected = array (
'persistent' => false ,
2010-12-04 03:23:07 +00:00
'host' => 'www.cakephp.org' ,
'protocol' => 'tcp' ,
'port' => 23 ,
'timeout' => 30 ,
2008-05-30 11:40:08 +00:00
'request' => array (
'uri' => array (
2010-12-04 03:23:07 +00:00
'scheme' => 'https' ,
'host' => 'www.cakephp.org' ,
'port' => 23
2008-05-30 11:40:08 +00:00
),
2010-12-04 03:23:07 +00:00
'cookies' => array ()
2008-05-30 11:40:08 +00:00
)
);
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> config , $expected );
2010-12-06 06:02:23 +00:00
$this -> assertTrue ( $r );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> configUri ( array ( 'host' => 'www.foo-bar.org' ));
$expected [ 'host' ] = 'www.foo-bar.org' ;
$expected [ 'request' ][ 'uri' ][ 'host' ] = 'www.foo-bar.org' ;
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> config , $expected );
2010-12-06 06:02:23 +00:00
$this -> assertTrue ( $r );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> configUri ( 'http://www.foo.com' );
$expected = array (
'persistent' => false ,
2010-12-04 03:23:07 +00:00
'host' => 'www.foo.com' ,
'protocol' => 'tcp' ,
'port' => 80 ,
'timeout' => 30 ,
2008-05-30 11:40:08 +00:00
'request' => array (
'uri' => array (
2010-12-04 03:23:07 +00:00
'scheme' => 'http' ,
'host' => 'www.foo.com' ,
'port' => 80
2008-05-30 11:40:08 +00:00
),
'cookies' => array ()
)
);
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> config , $expected );
2010-12-06 06:02:23 +00:00
$this -> assertTrue ( $r );
2008-09-28 23:55:40 +00:00
$r = $this -> Socket -> configUri ( '/this-is-broken' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> config , $expected );
2010-12-06 06:02:23 +00:00
$this -> assertFalse ( $r );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> configUri ( false );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> config , $expected );
2010-12-06 06:02:23 +00:00
$this -> assertFalse ( $r );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
* Tests that HttpSocket :: request ( the heart of the HttpSocket ) is working properly .
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function testRequest () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$response = $this -> Socket -> request ( true );
$this -> assertFalse ( $response );
$tests = array (
2010-12-04 03:23:07 +00:00
array (
'request' => 'http://www.cakephp.org/?foo=bar' ,
'expectation' => array (
2008-05-30 11:40:08 +00:00
'config' => array (
2010-12-04 03:23:07 +00:00
'persistent' => false ,
'host' => 'www.cakephp.org' ,
'protocol' => 'tcp' ,
'port' => 80 ,
'timeout' => 30 ,
'request' => array (
2008-05-30 11:40:08 +00:00
'uri' => array (
2010-12-04 03:23:07 +00:00
'scheme' => 'http' ,
'host' => 'www.cakephp.org' ,
'port' => 80
2008-05-30 11:40:08 +00:00
),
'cookies' => array (),
)
2010-12-04 03:23:07 +00:00
),
'request' => array (
'method' => 'GET' ,
'uri' => array (
'scheme' => 'http' ,
'host' => 'www.cakephp.org' ,
'port' => 80 ,
'user' => null ,
'pass' => null ,
'path' => '/' ,
'query' => array ( 'foo' => 'bar' ),
'fragment' => null
),
'version' => '1.1' ,
'body' => '' ,
'line' => " GET /?foo=bar HTTP/1.1 \r \n " ,
'header' => " Host: www.cakephp.org \r \n Connection: close \r \n User-Agent: CakePHP \r \n " ,
'raw' => " " ,
2010-12-10 12:38:49 +00:00
'cookies' => array (),
'proxy' => array (),
'auth' => array ()
2008-05-30 11:40:08 +00:00
)
)
2010-12-04 03:23:07 +00:00
),
array (
2008-05-30 11:40:08 +00:00
'request' => array (
'uri' => array (
2010-12-04 03:23:07 +00:00
'host' => 'www.cakephp.org' ,
'query' => '?foo=bar'
2008-05-30 11:40:08 +00:00
)
)
2010-12-04 03:23:07 +00:00
),
array (
2008-05-30 11:40:08 +00:00
'request' => 'www.cakephp.org/?foo=bar'
2010-12-04 03:23:07 +00:00
),
array (
'request' => array (
'host' => '192.168.0.1' ,
'uri' => 'http://www.cakephp.org/?foo=bar'
),
'expectation' => array (
2008-05-30 11:40:08 +00:00
'request' => array (
'uri' => array ( 'host' => 'www.cakephp.org' )
2010-12-04 03:23:07 +00:00
),
'config' => array (
2008-05-30 11:40:08 +00:00
'request' => array (
'uri' => array ( 'host' => 'www.cakephp.org' )
2010-12-04 03:23:07 +00:00
),
'host' => '192.168.0.1'
2008-05-30 11:40:08 +00:00
)
)
2010-12-04 03:23:07 +00:00
),
'reset4' => array (
2008-05-30 11:40:08 +00:00
'request.uri.query' => array ()
2010-12-04 03:23:07 +00:00
),
array (
'request' => array (
'header' => array ( 'Foo@woo' => 'bar-value' )
),
'expectation' => array (
2008-05-30 11:40:08 +00:00
'request' => array (
2010-12-04 03:23:07 +00:00
'header' => " Host: www.cakephp.org \r \n Connection: close \r \n User-Agent: CakePHP \r \n Foo \" @ \" woo: bar-value \r \n " ,
'line' => " GET / HTTP/1.1 \r \n "
2008-05-30 11:40:08 +00:00
)
)
2010-12-04 03:23:07 +00:00
),
array (
'request' => array ( 'header' => array ( 'Foo@woo' => 'bar-value' , 'host' => 'foo.com' ), 'uri' => 'http://www.cakephp.org/' ),
'expectation' => array (
2008-05-30 11:40:08 +00:00
'request' => array (
'header' => " Host: foo.com \r \n Connection: close \r \n User-Agent: CakePHP \r \n Foo \" @ \" woo: bar-value \r \n "
2010-12-04 03:23:07 +00:00
),
'config' => array (
2008-05-30 11:40:08 +00:00
'host' => 'www.cakephp.org'
)
)
2010-12-04 03:23:07 +00:00
),
array (
'request' => array ( 'header' => " Foo: bar \r \n " ),
'expectation' => array (
2008-05-30 11:40:08 +00:00
'request' => array (
'header' => " Foo: bar \r \n "
)
)
2010-12-04 03:23:07 +00:00
),
array (
'request' => array ( 'header' => " Foo: bar \r \n " , 'uri' => 'http://www.cakephp.org/search?q=http_socket#ignore-me' ),
'expectation' => array (
2008-05-30 11:40:08 +00:00
'request' => array (
'uri' => array (
2010-12-04 03:23:07 +00:00
'path' => '/search' ,
'query' => array ( 'q' => 'http_socket' ),
'fragment' => 'ignore-me'
),
'line' => " GET /search?q=http_socket HTTP/1.1 \r \n "
2008-05-30 11:40:08 +00:00
)
)
2010-12-04 03:23:07 +00:00
),
'reset8' => array (
2008-05-30 11:40:08 +00:00
'request.uri.query' => array ()
2010-12-04 03:23:07 +00:00
),
array (
'request' => array (
'method' => 'POST' ,
'uri' => 'http://www.cakephp.org/posts/add' ,
'body' => array (
'name' => 'HttpSocket-is-released' ,
'date' => 'today'
)
),
'expectation' => array (
2008-05-30 11:40:08 +00:00
'request' => array (
2010-12-04 03:23:07 +00:00
'method' => 'POST' ,
'uri' => array (
'path' => '/posts/add' ,
'fragment' => null
),
'body' => " name=HttpSocket-is-released&date=today " ,
'line' => " POST /posts/add HTTP/1.1 \r \n " ,
'header' => " Host: www.cakephp.org \r \n Connection: close \r \n User-Agent: CakePHP \r \n Content-Type: application/x-www-form-urlencoded \r \n Content-Length: 38 \r \n " ,
'raw' => " name=HttpSocket-is-released&date=today "
2008-05-30 11:40:08 +00:00
)
)
2010-12-04 03:23:07 +00:00
),
array (
'request' => array (
'method' => 'POST' ,
'uri' => 'http://www.cakephp.org:8080/posts/add' ,
'body' => array (
'name' => 'HttpSocket-is-released' ,
'date' => 'today'
)
),
'expectation' => array (
2010-07-23 03:13:19 +00:00
'config' => array (
2010-12-04 03:23:07 +00:00
'port' => 8080 ,
'request' => array (
2010-07-23 03:13:19 +00:00
'uri' => array (
'port' => 8080
)
)
2010-12-04 03:23:07 +00:00
),
'request' => array (
2010-07-23 03:13:19 +00:00
'uri' => array (
'port' => 8080
2010-12-04 03:23:07 +00:00
),
'header' => " Host: www.cakephp.org:8080 \r \n Connection: close \r \n User-Agent: CakePHP \r \n Content-Type: application/x-www-form-urlencoded \r \n Content-Length: 38 \r \n "
2010-07-23 03:13:19 +00:00
)
)
2010-12-04 03:23:07 +00:00
),
array (
'request' => array (
'method' => 'POST' ,
'uri' => 'https://www.cakephp.org/posts/add' ,
'body' => array (
'name' => 'HttpSocket-is-released' ,
'date' => 'today'
)
),
'expectation' => array (
2008-05-30 11:40:08 +00:00
'config' => array (
2010-12-04 03:23:07 +00:00
'port' => 443 ,
'request' => array (
2008-05-30 11:40:08 +00:00
'uri' => array (
2010-12-04 03:23:07 +00:00
'scheme' => 'https' ,
'port' => 443
2008-05-30 11:40:08 +00:00
)
)
2010-12-04 03:23:07 +00:00
),
'request' => array (
2008-05-30 11:40:08 +00:00
'uri' => array (
2010-12-04 03:23:07 +00:00
'scheme' => 'https' ,
'port' => 443
),
'header' => " Host: www.cakephp.org \r \n Connection: close \r \n User-Agent: CakePHP \r \n Content-Type: application/x-www-form-urlencoded \r \n Content-Length: 38 \r \n "
2008-05-30 11:40:08 +00:00
)
)
2010-12-04 03:23:07 +00:00
),
array (
2008-05-30 11:40:08 +00:00
'request' => array (
2010-12-04 03:23:07 +00:00
'method' => 'POST' ,
'uri' => 'https://www.cakephp.org/posts/add' ,
'body' => array ( 'name' => 'HttpSocket-is-released' , 'date' => 'today' ),
'cookies' => array ( 'foo' => array ( 'value' => 'bar' ))
),
'expectation' => array (
2008-05-30 11:40:08 +00:00
'request' => array (
'header' => " Host: www.cakephp.org \r \n Connection: close \r \n User-Agent: CakePHP \r \n Content-Type: application/x-www-form-urlencoded \r \n Content-Length: 38 \r \n Cookie: foo=bar \r \n " ,
'cookies' => array (
'foo' => array ( 'value' => 'bar' ),
)
)
)
)
);
$expectation = array ();
foreach ( $tests as $i => $test ) {
if ( strpos ( $i , 'reset' ) === 0 ) {
foreach ( $test as $path => $val ) {
$expectation = Set :: insert ( $expectation , $path , $val );
}
continue ;
}
if ( isset ( $test [ 'expectation' ])) {
$expectation = Set :: merge ( $expectation , $test [ 'expectation' ]);
}
$this -> Socket -> request ( $test [ 'request' ]);
$raw = $expectation [ 'request' ][ 'raw' ];
2010-12-04 03:23:07 +00:00
$expectation [ 'request' ][ 'raw' ] = $expectation [ 'request' ][ 'line' ] . $expectation [ 'request' ][ 'header' ] . " \r \n " . $raw ;
2008-05-30 11:40:08 +00:00
$r = array ( 'config' => $this -> Socket -> config , 'request' => $this -> Socket -> request );
2010-12-04 03:23:07 +00:00
$v = $this -> assertEquals ( $r , $expectation , 'Failed test #' . $i . ' ' );
2008-05-30 11:40:08 +00:00
$expectation [ 'request' ][ 'raw' ] = $raw ;
}
$this -> Socket -> reset ();
$request = array ( 'method' => 'POST' , 'uri' => 'http://www.cakephp.org/posts/add' , 'body' => array ( 'name' => 'HttpSocket-is-released' , 'date' => 'today' ));
$response = $this -> Socket -> request ( $request );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> request [ 'body' ], " name=HttpSocket-is-released&date=today " );
2011-09-10 16:23:28 +00:00
}
2008-05-30 11:40:08 +00:00
2011-09-10 16:23:28 +00:00
/**
* The " * " asterisk character is only allowed for the following methods : OPTIONS .
*
* @ expectedException SocketException
* @ return void
*/
public function testRequestNotAllowedUri () {
$this -> Socket -> reset ();
2008-05-30 11:40:08 +00:00
$request = array ( 'uri' => '*' , 'method' => 'GET' );
$response = $this -> Socket -> request ( $request );
2010-06-01 02:34:10 +00:00
}
2008-05-30 11:40:08 +00:00
2010-06-01 02:34:10 +00:00
/**
* testRequest2 method
*
* @ return void
*/
2010-12-04 03:23:07 +00:00
public function testRequest2 () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$request = array ( 'uri' => 'htpp://www.cakephp.org/' );
2008-07-05 14:31:22 +00:00
$number = mt_rand ( 0 , 9999999 );
2010-06-01 02:34:10 +00:00
$this -> Socket -> expects ( $this -> once ()) -> method ( 'connect' ) -> will ( $this -> returnValue ( true ));
2009-07-28 20:01:42 +00:00
$serverResponse = " HTTP/1.x 200 OK \r \n Date: Mon, 16 Apr 2007 04:14:16 GMT \r \n Server: CakeHttp Server \r \n Content-Type: text/html \r \n \r \n <h1>Hello, your lucky number is " . $number . " </h1> " ;
2010-06-01 02:34:10 +00:00
$this -> Socket -> expects ( $this -> at ( 0 )) -> method ( 'read' ) -> will ( $this -> returnValue ( false ));
$this -> Socket -> expects ( $this -> at ( 1 )) -> method ( 'read' ) -> will ( $this -> returnValue ( $serverResponse ));
$this -> Socket -> expects ( $this -> once ()) -> method ( 'write' )
-> with ( " GET / HTTP/1.1 \r \n Host: www.cakephp.org \r \n Connection: close \r \n User-Agent: CakePHP \r \n \r \n " );
2010-12-14 03:07:25 +00:00
$response = ( string ) $this -> Socket -> request ( $request );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $response , " <h1>Hello, your lucky number is " . $number . " </h1> " );
}
2008-05-30 11:40:08 +00:00
2010-06-01 02:34:10 +00:00
/**
* testRequest3 method
*
* @ return void
*/
2010-12-04 03:23:07 +00:00
public function testRequest3 () {
2010-06-01 02:34:10 +00:00
$request = array ( 'uri' => 'htpp://www.cakephp.org/' );
2008-05-30 11:40:08 +00:00
$serverResponse = " HTTP/1.x 200 OK \r \n Set-Cookie: foo=bar \r \n Date: Mon, 16 Apr 2007 04:14:16 GMT \r \n Server: CakeHttp Server \r \n Content-Type: text/html \r \n \r \n <h1>This is a cookie test!</h1> " ;
2010-06-01 02:34:10 +00:00
$this -> Socket -> expects ( $this -> at ( 1 )) -> method ( 'read' ) -> will ( $this -> returnValue ( $serverResponse ));
2008-05-30 11:40:08 +00:00
$this -> Socket -> connected = true ;
$this -> Socket -> request ( $request );
$result = $this -> Socket -> response [ 'cookies' ];
$expect = array (
'foo' => array (
'value' => 'bar'
)
);
$this -> assertEqual ( $result , $expect );
2010-12-11 18:49:19 +00:00
$this -> assertEqual ( $this -> Socket -> config [ 'request' ][ 'cookies' ][ 'www.cakephp.org' ], $expect );
2008-05-30 11:40:08 +00:00
$this -> assertFalse ( $this -> Socket -> connected );
}
2009-07-24 19:18:37 +00:00
2011-04-27 02:10:24 +00:00
/**
* testRequestWithConstructor method
*
* @ return void
*/
public function testRequestWithConstructor () {
$request = array (
'request' => array (
'uri' => array (
'scheme' => 'http' ,
'host' => 'localhost' ,
'port' => '5984' ,
'user' => null ,
'pass' => null
)
)
);
$http = new MockHttpSocketRequests ( $request );
$expected = array ( 'method' => 'GET' , 'uri' => '/_test' );
$http -> expects ( $this -> at ( 0 )) -> method ( 'request' ) -> with ( $expected );
$http -> get ( '/_test' );
$expected = array ( 'method' => 'GET' , 'uri' => 'http://localhost:5984/_test?count=4' );
$http -> expects ( $this -> at ( 0 )) -> method ( 'request' ) -> with ( $expected );
$http -> get ( '/_test' , array ( 'count' => 4 ));
}
2010-12-10 14:08:49 +00:00
/**
* testRequestWithResource
*
* @ return void
*/
public function testRequestWithResource () {
$serverResponse = " HTTP/1.x 200 OK \r \n Date: Mon, 16 Apr 2007 04:14:16 GMT \r \n Server: CakeHttp Server \r \n Content-Type: text/html \r \n \r \n <h1>This is a test!</h1> " ;
$this -> Socket -> expects ( $this -> at ( 1 )) -> method ( 'read' ) -> will ( $this -> returnValue ( $serverResponse ));
$this -> Socket -> expects ( $this -> at ( 2 )) -> method ( 'read' ) -> will ( $this -> returnValue ( false ));
$this -> Socket -> expects ( $this -> at ( 4 )) -> method ( 'read' ) -> will ( $this -> returnValue ( $serverResponse ));
$this -> Socket -> connected = true ;
$f = fopen ( TMP . 'download.txt' , 'w' );
$this -> skipUnless ( $f , 'Can not write in TMP directory.' );
$this -> Socket -> setContentResource ( $f );
2010-12-14 03:07:25 +00:00
$result = ( string ) $this -> Socket -> request ( 'http://www.cakephp.org/' );
2010-12-10 14:08:49 +00:00
$this -> assertEqual ( $result , '' );
$this -> assertEqual ( $this -> Socket -> response [ 'header' ][ 'Server' ], 'CakeHttp Server' );
fclose ( $f );
$this -> assertEqual ( file_get_contents ( TMP . 'download.txt' ), '<h1>This is a test!</h1>' );
unlink ( TMP . 'download.txt' );
$this -> Socket -> setContentResource ( false );
2010-12-14 03:07:25 +00:00
$result = ( string ) $this -> Socket -> request ( 'http://www.cakephp.org/' );
2010-12-10 14:08:49 +00:00
$this -> assertEqual ( $result , '<h1>This is a test!</h1>' );
}
2010-12-11 18:49:19 +00:00
/**
* testRequestWithCrossCookie
*
* @ return void
*/
public function testRequestWithCrossCookie () {
$this -> Socket -> connected = true ;
$this -> Socket -> config [ 'request' ][ 'cookies' ] = array ();
$serverResponse = " HTTP/1.x 200 OK \r \n Set-Cookie: foo=bar \r \n Date: Mon, 16 Apr 2007 04:14:16 GMT \r \n Server: CakeHttp Server \r \n Content-Type: text/html \r \n \r \n <h1>This is a test!</h1> " ;
$this -> Socket -> expects ( $this -> at ( 1 )) -> method ( 'read' ) -> will ( $this -> returnValue ( $serverResponse ));
$this -> Socket -> expects ( $this -> at ( 2 )) -> method ( 'read' ) -> will ( $this -> returnValue ( false ));
$expected = array ( 'www.cakephp.org' => array ( 'foo' => array ( 'value' => 'bar' )));
$this -> Socket -> request ( 'http://www.cakephp.org/' );
$this -> assertEqual ( $this -> Socket -> config [ 'request' ][ 'cookies' ], $expected );
$serverResponse = " HTTP/1.x 200 OK \r \n Set-Cookie: bar=foo \r \n Date: Mon, 16 Apr 2007 04:14:16 GMT \r \n Server: CakeHttp Server \r \n Content-Type: text/html \r \n \r \n <h1>This is a test!</h1> " ;
$this -> Socket -> expects ( $this -> at ( 1 )) -> method ( 'read' ) -> will ( $this -> returnValue ( $serverResponse ));
$this -> Socket -> expects ( $this -> at ( 2 )) -> method ( 'read' ) -> will ( $this -> returnValue ( false ));
$this -> Socket -> request ( 'http://www.cakephp.org/other' );
$this -> assertEqual ( $this -> Socket -> request [ 'cookies' ], array ( 'foo' => array ( 'value' => 'bar' )));
$expected [ 'www.cakephp.org' ] += array ( 'bar' => array ( 'value' => 'foo' ));
$this -> assertEqual ( $this -> Socket -> config [ 'request' ][ 'cookies' ], $expected );
$serverResponse = " HTTP/1.x 200 OK \r \n Date: Mon, 16 Apr 2007 04:14:16 GMT \r \n Server: CakeHttp Server \r \n Content-Type: text/html \r \n \r \n <h1>This is a test!</h1> " ;
$this -> Socket -> expects ( $this -> at ( 1 )) -> method ( 'read' ) -> will ( $this -> returnValue ( $serverResponse ));
$this -> Socket -> expects ( $this -> at ( 2 )) -> method ( 'read' ) -> will ( $this -> returnValue ( false ));
$this -> Socket -> request ( '/other2' );
$this -> assertEqual ( $this -> Socket -> config [ 'request' ][ 'cookies' ], $expected );
$serverResponse = " HTTP/1.x 200 OK \r \n Set-Cookie: foobar=ok \r \n Date: Mon, 16 Apr 2007 04:14:16 GMT \r \n Server: CakeHttp Server \r \n Content-Type: text/html \r \n \r \n <h1>This is a test!</h1> " ;
$this -> Socket -> expects ( $this -> at ( 1 )) -> method ( 'read' ) -> will ( $this -> returnValue ( $serverResponse ));
$this -> Socket -> expects ( $this -> at ( 2 )) -> method ( 'read' ) -> will ( $this -> returnValue ( false ));
$this -> Socket -> request ( 'http://www.cake.com' );
$this -> assertTrue ( empty ( $this -> Socket -> request [ 'cookies' ]));
$expected [ 'www.cake.com' ] = array ( 'foobar' => array ( 'value' => 'ok' ));
$this -> assertEqual ( $this -> Socket -> config [ 'request' ][ 'cookies' ], $expected );
}
2010-12-14 04:46:31 +00:00
/**
* testRequestCustomResponse
*
* @ return void
*/
public function testRequestCustomResponse () {
$this -> Socket -> connected = true ;
$serverResponse = " HTTP/1.x 200 OK \r \n Date: Mon, 16 Apr 2007 04:14:16 GMT \r \n Server: CakeHttp Server \r \n Content-Type: text/html \r \n \r \n <h1>This is a test!</h1> " ;
$this -> Socket -> expects ( $this -> at ( 1 )) -> method ( 'read' ) -> will ( $this -> returnValue ( $serverResponse ));
$this -> Socket -> expects ( $this -> at ( 2 )) -> method ( 'read' ) -> will ( $this -> returnValue ( false ));
$this -> Socket -> responseClass = 'CustomResponse' ;
$response = $this -> Socket -> request ( 'http://www.cakephp.org/' );
$this -> assertIsA ( $response , 'CustomResponse' );
$this -> assertEqual ( $response -> first10 , 'HTTP/1.x 2' );
}
2010-12-01 15:46:13 +00:00
/**
* testProxy method
*
* @ return void
*/
2010-12-04 03:23:07 +00:00
public function testProxy () {
2010-12-01 15:46:13 +00:00
$this -> Socket -> reset ();
$this -> Socket -> expects ( $this -> any ()) -> method ( 'connect' ) -> will ( $this -> returnValue ( true ));
$this -> Socket -> expects ( $this -> any ()) -> method ( 'read' ) -> will ( $this -> returnValue ( false ));
2010-12-04 01:10:07 +00:00
2010-12-13 01:48:04 +00:00
$this -> Socket -> configProxy ( 'proxy.server' , 123 );
2010-12-01 15:46:13 +00:00
$expected = " GET http://www.cakephp.org/ HTTP/1.1 \r \n Host: www.cakephp.org \r \n Connection: close \r \n User-Agent: CakePHP \r \n \r \n " ;
2010-12-04 01:10:07 +00:00
$this -> Socket -> request ( 'http://www.cakephp.org/' );
2010-12-01 15:46:13 +00:00
$this -> assertEqual ( $this -> Socket -> request [ 'raw' ], $expected );
$this -> assertEqual ( $this -> Socket -> config [ 'host' ], 'proxy.server' );
$this -> assertEqual ( $this -> Socket -> config [ 'port' ], 123 );
2010-12-10 12:38:49 +00:00
$expected = array (
'host' => 'proxy.server' ,
'port' => 123 ,
'method' => null ,
'user' => null ,
'pass' => null
);
$this -> assertEqual ( $this -> Socket -> request [ 'proxy' ], $expected );
$expected = " GET http://www.cakephp.org/bakery HTTP/1.1 \r \n Host: www.cakephp.org \r \n Connection: close \r \n User-Agent: CakePHP \r \n \r \n " ;
$this -> Socket -> request ( '/bakery' );
$this -> assertEqual ( $this -> Socket -> request [ 'raw' ], $expected );
$this -> assertEqual ( $this -> Socket -> config [ 'host' ], 'proxy.server' );
$this -> assertEqual ( $this -> Socket -> config [ 'port' ], 123 );
$expected = array (
'host' => 'proxy.server' ,
'port' => 123 ,
'method' => null ,
'user' => null ,
'pass' => null
);
$this -> assertEqual ( $this -> Socket -> request [ 'proxy' ], $expected );
2010-12-01 15:46:13 +00:00
$expected = " GET http://www.cakephp.org/ HTTP/1.1 \r \n Host: www.cakephp.org \r \n Connection: close \r \n User-Agent: CakePHP \r \n Proxy-Authorization: Test mark.secret \r \n \r \n " ;
2010-12-13 01:48:04 +00:00
$this -> Socket -> configProxy ( 'proxy.server' , 123 , 'Test' , 'mark' , 'secret' );
2010-12-04 01:10:07 +00:00
$this -> Socket -> request ( 'http://www.cakephp.org/' );
2010-12-01 15:46:13 +00:00
$this -> assertEqual ( $this -> Socket -> request [ 'raw' ], $expected );
$this -> assertEqual ( $this -> Socket -> config [ 'host' ], 'proxy.server' );
$this -> assertEqual ( $this -> Socket -> config [ 'port' ], 123 );
2010-12-10 12:38:49 +00:00
$expected = array (
'host' => 'proxy.server' ,
'port' => 123 ,
'method' => 'Test' ,
'user' => 'mark' ,
'pass' => 'secret'
);
$this -> assertEqual ( $this -> Socket -> request [ 'proxy' ], $expected );
2010-12-01 15:46:13 +00:00
2010-12-13 01:48:04 +00:00
$this -> Socket -> configAuth ( 'Test' , 'login' , 'passwd' );
2010-12-06 13:28:40 +00:00
$expected = " GET http://www.cakephp.org/ HTTP/1.1 \r \n Host: www.cakephp.org \r \n Connection: close \r \n User-Agent: CakePHP \r \n Proxy-Authorization: Test mark.secret \r \n Authorization: Test login.passwd \r \n \r \n " ;
2010-12-04 01:10:07 +00:00
$this -> Socket -> request ( 'http://www.cakephp.org/' );
2010-12-01 15:46:13 +00:00
$this -> assertEqual ( $this -> Socket -> request [ 'raw' ], $expected );
2010-12-10 12:38:49 +00:00
$expected = array (
'host' => 'proxy.server' ,
'port' => 123 ,
'method' => 'Test' ,
'user' => 'mark' ,
'pass' => 'secret'
);
$this -> assertEqual ( $this -> Socket -> request [ 'proxy' ], $expected );
$expected = array (
'Test' => array (
'user' => 'login' ,
'pass' => 'passwd'
)
);
$this -> assertEqual ( $this -> Socket -> request [ 'auth' ], $expected );
2010-12-01 15:46:13 +00:00
}
2008-06-02 19:22:55 +00:00
/**
* testUrl method
2008-07-05 14:31:22 +00:00
*
2008-06-02 19:22:55 +00:00
* @ return void
*/
2010-12-04 03:23:07 +00:00
public function testUrl () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ( true );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> url ( true ), false );
2008-05-30 11:40:08 +00:00
$url = $this -> Socket -> url ( 'www.cakephp.org' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $url , 'http://www.cakephp.org/' );
2008-05-30 11:40:08 +00:00
$url = $this -> Socket -> url ( 'https://www.cakephp.org/posts/add' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $url , 'https://www.cakephp.org/posts/add' );
2008-05-30 11:40:08 +00:00
$url = $this -> Socket -> url ( 'http://www.cakephp/search?q=socket' , '/%path?%query' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $url , '/search?q=socket' );
2008-05-30 11:40:08 +00:00
$this -> Socket -> config [ 'request' ][ 'uri' ][ 'host' ] = 'bakery.cakephp.org' ;
$url = $this -> Socket -> url ();
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $url , 'http://bakery.cakephp.org/' );
2008-05-30 11:40:08 +00:00
$this -> Socket -> configUri ( 'http://www.cakephp.org' );
$url = $this -> Socket -> url ( '/search?q=bar' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $url , 'http://www.cakephp.org/search?q=bar' );
2008-05-30 11:40:08 +00:00
$url = $this -> Socket -> url ( array ( 'host' => 'www.foobar.org' , 'query' => array ( 'q' => 'bar' )));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $url , 'http://www.foobar.org/?q=bar' );
2008-05-30 11:40:08 +00:00
$url = $this -> Socket -> url ( array ( 'path' => '/supersearch' , 'query' => array ( 'q' => 'bar' )));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $url , 'http://www.cakephp.org/supersearch?q=bar' );
2008-05-30 11:40:08 +00:00
$this -> Socket -> configUri ( 'http://www.google.com' );
$url = $this -> Socket -> url ( '/search?q=socket' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $url , 'http://www.google.com/search?q=socket' );
2008-05-30 11:40:08 +00:00
$url = $this -> Socket -> url ();
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $url , 'http://www.google.com/' );
2008-05-30 11:40:08 +00:00
$this -> Socket -> configUri ( 'https://www.google.com' );
$url = $this -> Socket -> url ( '/search?q=socket' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $url , 'https://www.google.com/search?q=socket' );
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$this -> Socket -> configUri ( 'www.google.com:443' );
$url = $this -> Socket -> url ( '/search?q=socket' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $url , 'https://www.google.com/search?q=socket' );
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$this -> Socket -> configUri ( 'www.google.com:8080' );
$url = $this -> Socket -> url ( '/search?q=socket' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $url , 'http://www.google.com:8080/search?q=socket' );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testGet method
2008-07-05 14:31:22 +00:00
*
2008-06-02 19:22:55 +00:00
* @ return void
*/
2010-12-04 03:23:07 +00:00
public function testGet () {
2008-05-30 11:40:08 +00:00
$this -> RequestSocket -> reset ();
2010-06-01 02:34:10 +00:00
$this -> RequestSocket -> expects ( $this -> at ( 0 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'GET' , 'uri' => 'http://www.google.com/' ));
2008-05-30 11:40:08 +00:00
2010-06-01 02:34:10 +00:00
$this -> RequestSocket -> expects ( $this -> at ( 1 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'GET' , 'uri' => 'http://www.google.com/?foo=bar' ));
2010-12-04 03:23:07 +00:00
2010-06-01 02:34:10 +00:00
$this -> RequestSocket -> expects ( $this -> at ( 2 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'GET' , 'uri' => 'http://www.google.com/?foo=bar' ));
2008-05-30 11:40:08 +00:00
2010-06-01 02:34:10 +00:00
$this -> RequestSocket -> expects ( $this -> at ( 3 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'GET' , 'uri' => 'http://www.google.com/?foo=23&foobar=42' ));
2008-05-30 11:40:08 +00:00
2010-06-01 02:34:10 +00:00
$this -> RequestSocket -> expects ( $this -> at ( 4 ))
-> method ( 'request' )
2010-12-04 03:41:45 +00:00
-> with ( array ( 'method' => 'GET' , 'uri' => 'http://www.google.com/' , 'version' => '1.0' ));
2008-05-30 11:40:08 +00:00
2010-06-01 02:34:10 +00:00
$this -> RequestSocket -> get ( 'http://www.google.com/' );
$this -> RequestSocket -> get ( 'http://www.google.com/' , array ( 'foo' => 'bar' ));
$this -> RequestSocket -> get ( 'http://www.google.com/' , 'foo=bar' );
$this -> RequestSocket -> get ( 'http://www.google.com/?foo=bar' , array ( 'foobar' => '42' , 'foo' => '23' ));
2010-12-04 03:41:45 +00:00
$this -> RequestSocket -> get ( 'http://www.google.com/' , null , array ( 'version' => '1.0' ));
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2010-12-03 03:30:03 +00:00
/**
* Test authentication
*
* @ return void
*/
public function testAuth () {
$socket = new MockHttpSocket ();
$socket -> get ( 'http://mark:secret@example.com/test' );
$this -> assertTrue ( strpos ( $socket -> request [ 'header' ], 'Authorization: Basic bWFyazpzZWNyZXQ=' ) !== false );
2010-12-13 01:48:04 +00:00
$socket -> configAuth ( false );
2010-12-03 03:30:03 +00:00
$socket -> get ( 'http://example.com/test' );
$this -> assertFalse ( strpos ( $socket -> request [ 'header' ], 'Authorization:' ));
2010-12-13 01:48:04 +00:00
$socket -> configAuth ( 'Test' , 'mark' , 'passwd' );
2010-12-03 03:30:03 +00:00
$socket -> get ( 'http://example.com/test' );
$this -> assertTrue ( strpos ( $socket -> request [ 'header' ], 'Authorization: Test mark.passwd' ) !== false );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2010-07-07 02:30:48 +00:00
/**
* test that two consecutive get () calls reset the authentication credentials .
*
* @ return void
*/
2010-12-04 03:23:07 +00:00
public function testConsecutiveGetResetsAuthCredentials () {
2010-07-07 02:30:48 +00:00
$socket = new MockHttpSocket ();
$socket -> get ( 'http://mark:secret@example.com/test' );
$this -> assertEqual ( $socket -> request [ 'uri' ][ 'user' ], 'mark' );
$this -> assertEqual ( $socket -> request [ 'uri' ][ 'pass' ], 'secret' );
2010-11-10 01:03:43 +00:00
$this -> assertTrue ( strpos ( $socket -> request [ 'header' ], 'Authorization: Basic bWFyazpzZWNyZXQ=' ) !== false );
2010-07-07 02:30:48 +00:00
$socket -> get ( '/test2' );
2010-11-10 01:03:43 +00:00
$this -> assertTrue ( strpos ( $socket -> request [ 'header' ], 'Authorization: Basic bWFyazpzZWNyZXQ=' ) !== false );
2010-07-07 02:30:48 +00:00
$socket -> get ( '/test3' );
2010-11-10 01:03:43 +00:00
$this -> assertTrue ( strpos ( $socket -> request [ 'header' ], 'Authorization: Basic bWFyazpzZWNyZXQ=' ) !== false );
2010-07-07 02:30:48 +00:00
}
2008-06-02 19:22:55 +00:00
/**
* testPostPutDelete method
2008-07-05 14:31:22 +00:00
*
2008-06-02 19:22:55 +00:00
* @ return void
*/
2010-12-04 03:23:07 +00:00
public function testPost () {
2008-05-30 11:40:08 +00:00
$this -> RequestSocket -> reset ();
2010-06-01 02:34:10 +00:00
$this -> RequestSocket -> expects ( $this -> at ( 0 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'POST' , 'uri' => 'http://www.google.com/' , 'body' => array ()));
2008-05-30 11:40:08 +00:00
2010-06-01 02:34:10 +00:00
$this -> RequestSocket -> expects ( $this -> at ( 1 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'POST' , 'uri' => 'http://www.google.com/' , 'body' => array ( 'Foo' => 'bar' )));
$this -> RequestSocket -> expects ( $this -> at ( 2 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'POST' , 'uri' => 'http://www.google.com/' , 'body' => null , 'line' => 'Hey Server' ));
$this -> RequestSocket -> post ( 'http://www.google.com/' );
$this -> RequestSocket -> post ( 'http://www.google.com/' , array ( 'Foo' => 'bar' ));
$this -> RequestSocket -> post ( 'http://www.google.com/' , null , array ( 'line' => 'Hey Server' ));
}
2010-12-04 03:23:07 +00:00
/**
* testPut
*
* @ return void
*/
public function testPut () {
2010-06-01 02:34:10 +00:00
$this -> RequestSocket -> reset ();
$this -> RequestSocket -> expects ( $this -> at ( 0 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'PUT' , 'uri' => 'http://www.google.com/' , 'body' => array ()));
$this -> RequestSocket -> expects ( $this -> at ( 1 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'PUT' , 'uri' => 'http://www.google.com/' , 'body' => array ( 'Foo' => 'bar' )));
$this -> RequestSocket -> expects ( $this -> at ( 2 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'PUT' , 'uri' => 'http://www.google.com/' , 'body' => null , 'line' => 'Hey Server' ));
$this -> RequestSocket -> put ( 'http://www.google.com/' );
$this -> RequestSocket -> put ( 'http://www.google.com/' , array ( 'Foo' => 'bar' ));
$this -> RequestSocket -> put ( 'http://www.google.com/' , null , array ( 'line' => 'Hey Server' ));
}
2010-12-04 03:23:07 +00:00
/**
* testDelete
*
* @ return void
*/
public function testDelete () {
2010-06-01 02:34:10 +00:00
$this -> RequestSocket -> reset ();
$this -> RequestSocket -> expects ( $this -> at ( 0 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'DELETE' , 'uri' => 'http://www.google.com/' , 'body' => array ()));
$this -> RequestSocket -> expects ( $this -> at ( 1 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'DELETE' , 'uri' => 'http://www.google.com/' , 'body' => array ( 'Foo' => 'bar' )));
$this -> RequestSocket -> expects ( $this -> at ( 2 ))
-> method ( 'request' )
-> with ( array ( 'method' => 'DELETE' , 'uri' => 'http://www.google.com/' , 'body' => null , 'line' => 'Hey Server' ));
$this -> RequestSocket -> delete ( 'http://www.google.com/' );
$this -> RequestSocket -> delete ( 'http://www.google.com/' , array ( 'Foo' => 'bar' ));
$this -> RequestSocket -> delete ( 'http://www.google.com/' , null , array ( 'line' => 'Hey Server' ));
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testBuildRequestLine method
2008-07-05 14:31:22 +00:00
*
2008-06-02 19:22:55 +00:00
* @ return void
*/
2010-12-04 03:23:07 +00:00
public function testBuildRequestLine () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$this -> Socket -> quirksMode = true ;
$r = $this -> Socket -> buildRequestLine ( 'Foo' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'Foo' );
2008-05-30 11:40:08 +00:00
$this -> Socket -> quirksMode = false ;
$r = $this -> Socket -> buildRequestLine ( true );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , false );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildRequestLine ( array ( 'foo' => 'bar' , 'method' => 'foo' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , false );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildRequestLine ( array ( 'method' => 'GET' , 'uri' => 'http://www.cakephp.org/search?q=socket' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " GET /search?q=socket HTTP/1.1 \r \n " );
2008-05-30 11:40:08 +00:00
$request = array (
'method' => 'GET' ,
'uri' => array (
'path' => '/search' ,
'query' => array ( 'q' => 'socket' )
)
);
$r = $this -> Socket -> buildRequestLine ( $request );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " GET /search?q=socket HTTP/1.1 \r \n " );
2008-05-30 11:40:08 +00:00
unset ( $request [ 'method' ]);
$r = $this -> Socket -> buildRequestLine ( $request );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " GET /search?q=socket HTTP/1.1 \r \n " );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildRequestLine ( $request , 'CAKE-HTTP/0.1' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " GET /search?q=socket CAKE-HTTP/0.1 \r \n " );
2008-05-30 11:40:08 +00:00
$request = array ( 'method' => 'OPTIONS' , 'uri' => '*' );
$r = $this -> Socket -> buildRequestLine ( $request );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " OPTIONS * HTTP/1.1 \r \n " );
2008-05-30 11:40:08 +00:00
$request [ 'method' ] = 'GET' ;
2010-06-01 02:34:10 +00:00
$this -> Socket -> quirksMode = true ;
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildRequestLine ( $request );
2010-12-04 03:23:07 +00:00
$this -> assertEquals ( $r , " GET * HTTP/1.1 \r \n " );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildRequestLine ( " GET * HTTP/1.1 \r \n " );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " GET * HTTP/1.1 \r \n " );
}
2008-05-30 11:40:08 +00:00
2010-06-01 02:34:10 +00:00
/**
* testBadBuildRequestLine method
*
2011-09-10 16:23:28 +00:00
* @ expectedException SocketException
2010-06-01 02:34:10 +00:00
* @ return void
*/
2010-12-04 03:23:07 +00:00
public function testBadBuildRequestLine () {
2010-06-01 02:34:10 +00:00
$r = $this -> Socket -> buildRequestLine ( 'Foo' );
}
2008-05-30 11:40:08 +00:00
2010-06-01 02:34:10 +00:00
/**
* testBadBuildRequestLine2 method
*
2011-09-10 16:23:28 +00:00
* @ expectedException SocketException
2010-06-01 02:34:10 +00:00
* @ return void
*/
2010-12-04 03:23:07 +00:00
public function testBadBuildRequestLine2 () {
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildRequestLine ( " GET * HTTP/1.1 \r \n " );
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
* Asserts that HttpSocket :: parseUri is working properly
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function testParseUri () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$uri = $this -> Socket -> parseUri ( array ( 'invalid' => 'uri-string' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , false );
2008-05-30 11:40:08 +00:00
$uri = $this -> Socket -> parseUri ( array ( 'invalid' => 'uri-string' ), array ( 'host' => 'somehost' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array ( 'host' => 'somehost' , 'invalid' => 'uri-string' ));
2008-05-30 11:40:08 +00:00
$uri = $this -> Socket -> parseUri ( false );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , false );
2008-05-30 11:40:08 +00:00
$uri = $this -> Socket -> parseUri ( '/my-cool-path' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array ( 'path' => '/my-cool-path' ));
2008-05-30 11:40:08 +00:00
$uri = $this -> Socket -> parseUri ( 'http://bob:foo123@www.cakephp.org:40/search?q=dessert#results' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array (
2008-05-30 11:40:08 +00:00
'scheme' => 'http' ,
'host' => 'www.cakephp.org' ,
'port' => 40 ,
'user' => 'bob' ,
'pass' => 'foo123' ,
'path' => '/search' ,
'query' => array ( 'q' => 'dessert' ),
'fragment' => 'results'
));
$uri = $this -> Socket -> parseUri ( 'http://www.cakephp.org/' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array (
2008-05-30 11:40:08 +00:00
'scheme' => 'http' ,
'host' => 'www.cakephp.org' ,
2010-12-04 03:23:07 +00:00
'path' => '/'
2008-05-30 11:40:08 +00:00
));
$uri = $this -> Socket -> parseUri ( 'http://www.cakephp.org' , true );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array (
2008-05-30 11:40:08 +00:00
'scheme' => 'http' ,
'host' => 'www.cakephp.org' ,
'port' => 80 ,
'user' => null ,
'pass' => null ,
'path' => '/' ,
'query' => array (),
'fragment' => null
));
$uri = $this -> Socket -> parseUri ( 'https://www.cakephp.org' , true );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array (
2008-05-30 11:40:08 +00:00
'scheme' => 'https' ,
'host' => 'www.cakephp.org' ,
'port' => 443 ,
'user' => null ,
'pass' => null ,
'path' => '/' ,
'query' => array (),
'fragment' => null
));
$uri = $this -> Socket -> parseUri ( 'www.cakephp.org:443/query?foo' , true );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array (
2008-05-30 11:40:08 +00:00
'scheme' => 'https' ,
'host' => 'www.cakephp.org' ,
'port' => 443 ,
'user' => null ,
'pass' => null ,
'path' => '/query' ,
'query' => array ( 'foo' => " " ),
'fragment' => null
));
$uri = $this -> Socket -> parseUri ( 'http://www.cakephp.org' , array ( 'host' => 'piephp.org' , 'user' => 'bob' , 'fragment' => 'results' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array (
2008-05-30 11:40:08 +00:00
'host' => 'www.cakephp.org' ,
'user' => 'bob' ,
'fragment' => 'results' ,
'scheme' => 'http'
));
$uri = $this -> Socket -> parseUri ( 'https://www.cakephp.org' , array ( 'scheme' => 'http' , 'port' => 23 ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array (
2008-05-30 11:40:08 +00:00
'scheme' => 'https' ,
'port' => 23 ,
'host' => 'www.cakephp.org'
));
$uri = $this -> Socket -> parseUri ( 'www.cakephp.org:59' , array ( 'scheme' => array ( 'http' , 'https' ), 'port' => 80 ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array (
2008-05-30 11:40:08 +00:00
'scheme' => 'http' ,
'port' => 59 ,
'host' => 'www.cakephp.org'
));
$uri = $this -> Socket -> parseUri ( array ( 'scheme' => 'http' , 'host' => 'www.google.com' , 'port' => 8080 ), array ( 'scheme' => array ( 'http' , 'https' ), 'host' => 'www.google.com' , 'port' => array ( 80 , 443 )));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array (
2008-05-30 11:40:08 +00:00
'scheme' => 'http' ,
'host' => 'www.google.com' ,
2010-12-04 03:23:07 +00:00
'port' => 8080
2008-05-30 11:40:08 +00:00
));
2009-10-30 00:14:36 +00:00
$uri = $this -> Socket -> parseUri ( 'http://www.cakephp.org/?param1=value1¶m2=value2%3Dvalue3' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array (
2009-10-30 00:14:36 +00:00
'scheme' => 'http' ,
'host' => 'www.cakephp.org' ,
'path' => '/' ,
'query' => array (
'param1' => 'value1' ,
'param2' => 'value2=value3'
)
));
$uri = $this -> Socket -> parseUri ( 'http://www.cakephp.org/?param1=value1¶m2=value2=value3' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $uri , array (
2009-10-30 00:14:36 +00:00
'scheme' => 'http' ,
'host' => 'www.cakephp.org' ,
'path' => '/' ,
'query' => array (
'param1' => 'value1' ,
'param2' => 'value2=value3'
)
));
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
* Tests that HttpSocket :: buildUri can turn all kinds of uri arrays ( and strings ) into fully or partially qualified URI ' s
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function testBuildUri () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$r = $this -> Socket -> buildUri ( true );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , false );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( 'foo.com' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'http://foo.com/' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array ( 'host' => 'www.cakephp.org' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'http://www.cakephp.org/' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array ( 'host' => 'www.cakephp.org' , 'scheme' => 'https' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'https://www.cakephp.org/' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array ( 'host' => 'www.cakephp.org' , 'port' => 23 ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'http://www.cakephp.org:23/' );
2008-05-30 11:40:08 +00:00
2009-11-13 19:42:40 +00:00
$r = $this -> Socket -> buildUri ( array ( 'path' => 'www.google.com/search' , 'query' => 'q=cakephp' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'http://www.google.com/search?q=cakephp' );
2009-11-13 19:42:40 +00:00
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array ( 'host' => 'www.cakephp.org' , 'scheme' => 'https' , 'port' => 79 ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'https://www.cakephp.org:79/' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array ( 'host' => 'www.cakephp.org' , 'path' => 'foo' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'http://www.cakephp.org/foo' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array ( 'host' => 'www.cakephp.org' , 'path' => '/foo' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'http://www.cakephp.org/foo' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array ( 'host' => 'www.cakephp.org' , 'path' => '/search' , 'query' => array ( 'q' => 'HttpSocket' )));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'http://www.cakephp.org/search?q=HttpSocket' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array ( 'host' => 'www.cakephp.org' , 'fragment' => 'bar' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'http://www.cakephp.org/#bar' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array (
'scheme' => 'https' ,
'host' => 'www.cakephp.org' ,
'port' => 25 ,
'user' => 'bob' ,
'pass' => 'secret' ,
'path' => '/cool' ,
'query' => array ( 'foo' => 'bar' ),
'fragment' => 'comment'
));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'https://bob:secret@www.cakephp.org:25/cool?foo=bar#comment' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array ( 'host' => 'www.cakephp.org' , 'fragment' => 'bar' ), '%fragment?%host' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'bar?www.cakephp.org' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array ( 'host' => 'www.cakephp.org' ), '%fragment???%host' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , '???www.cakephp.org' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array ( 'path' => '*' ), '/%path?%query' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , '*' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildUri ( array ( 'scheme' => 'foo' , 'host' => 'www.cakephp.org' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'foo://www.cakephp.org:80/' );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
* Asserts that HttpSocket :: parseQuery is working properly
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function testParseQuery () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$query = $this -> Socket -> parseQuery ( array ( 'framework' => 'cakephp' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , array ( 'framework' => 'cakephp' ));
2008-05-30 11:40:08 +00:00
$query = $this -> Socket -> parseQuery ( '' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , array ());
2008-05-30 11:40:08 +00:00
$query = $this -> Socket -> parseQuery ( 'framework=cakephp' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , array ( 'framework' => 'cakephp' ));
2008-05-30 11:40:08 +00:00
$query = $this -> Socket -> parseQuery ( '?framework=cakephp' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , array ( 'framework' => 'cakephp' ));
2008-05-30 11:40:08 +00:00
$query = $this -> Socket -> parseQuery ( 'a&b&c' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , array ( 'a' => '' , 'b' => '' , 'c' => '' ));
2008-05-30 11:40:08 +00:00
$query = $this -> Socket -> parseQuery ( 'value=12345' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , array ( 'value' => '12345' ));
2008-05-30 11:40:08 +00:00
$query = $this -> Socket -> parseQuery ( 'a[0]=foo&a[1]=bar&a[2]=cake' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , array ( 'a' => array ( 0 => 'foo' , 1 => 'bar' , 2 => 'cake' )));
2008-05-30 11:40:08 +00:00
$query = $this -> Socket -> parseQuery ( 'a[]=foo&a[]=bar&a[]=cake' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , array ( 'a' => array ( 0 => 'foo' , 1 => 'bar' , 2 => 'cake' )));
2008-05-30 11:40:08 +00:00
$query = $this -> Socket -> parseQuery ( 'a]][[=foo&[]=bar&]]][]=cake' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , array ( 'a]][[' => 'foo' , 0 => 'bar' , ']]]' => array ( 'cake' )));
2008-05-30 11:40:08 +00:00
$query = $this -> Socket -> parseQuery ( 'a[][]=foo&a[][]=bar&a[][]=cake' );
$expectedQuery = array (
'a' => array (
0 => array (
0 => 'foo'
),
1 => array (
0 => 'bar'
),
array (
0 => 'cake'
)
)
);
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , $expectedQuery );
2008-05-30 11:40:08 +00:00
$query = $this -> Socket -> parseQuery ( 'a[][]=foo&a[bar]=php&a[][]=bar&a[][]=cake' );
$expectedQuery = array (
'a' => array (
2010-12-04 03:23:07 +00:00
array ( 'foo' ),
2008-05-30 11:40:08 +00:00
'bar' => 'php' ,
2010-12-04 03:23:07 +00:00
array ( 'bar' ),
array ( 'cake' )
2008-05-30 11:40:08 +00:00
)
);
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , $expectedQuery );
2008-05-30 11:40:08 +00:00
$query = $this -> Socket -> parseQuery ( 'user[]=jim&user[3]=tom&user[]=bob' );
$expectedQuery = array (
'user' => array (
0 => 'jim' ,
3 => 'tom' ,
4 => 'bob'
)
);
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , $expectedQuery );
2008-05-30 11:40:08 +00:00
$queryStr = 'user[0]=foo&user[0][items][]=foo&user[0][items][]=bar&user[][name]=jim&user[1][items][personal][]=book&user[1][items][personal][]=pen&user[1][items][]=ball&user[count]=2&empty' ;
$query = $this -> Socket -> parseQuery ( $queryStr );
$expectedQuery = array (
'user' => array (
0 => array (
'items' => array (
'foo' ,
'bar'
)
),
1 => array (
'name' => 'jim' ,
'items' => array (
'personal' => array (
'book'
, 'pen'
),
'ball'
)
),
'count' => '2'
),
'empty' => ''
);
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $query , $expectedQuery );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
* Tests that HttpSocket :: buildHeader can turn a given $header array into a proper header string according to
* HTTP 1.1 specs .
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function testBuildHeader () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$r = $this -> Socket -> buildHeader ( true );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , false );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildHeader ( 'My raw header' );
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , 'My raw header' );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildHeader ( array ( 'Host' => 'www.cakephp.org' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " Host: www.cakephp.org \r \n " );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildHeader ( array ( 'Host' => 'www.cakephp.org' , 'Connection' => 'Close' ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " Host: www.cakephp.org \r \n Connection: Close \r \n " );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildHeader ( array ( 'People' => array ( 'Bob' , 'Jim' , 'John' )));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " People: Bob,Jim,John \r \n " );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildHeader ( array ( 'Multi-Line-Field' => " This is my \r \n Multi Line field " ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " Multi-Line-Field: This is my \r \n Multi Line field \r \n " );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildHeader ( array ( 'Multi-Line-Field' => " This is my \r \n Multi Line field " ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " Multi-Line-Field: This is my \r \n Multi Line field \r \n " );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildHeader ( array ( 'Multi-Line-Field' => " This is my \r \n \t Multi Line field " ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " Multi-Line-Field: This is my \r \n \t Multi Line field \r \n " );
2008-05-30 11:40:08 +00:00
$r = $this -> Socket -> buildHeader ( array ( 'Test@Field' => " My value " ));
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $r , " Test \" @ \" Field: My value \r \n " );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
2009-03-18 17:55:58 +00:00
* testBuildCookies method
2008-05-30 11:40:08 +00:00
*
* @ return void
* @ todo Test more scenarios
*/
2010-12-04 03:23:07 +00:00
public function testBuildCookies () {
2008-05-30 11:40:08 +00:00
$cookies = array (
'foo' => array (
'value' => 'bar'
),
'people' => array (
'value' => 'jim,jack,johnny;' ,
'path' => '/accounts'
)
);
2010-06-23 03:10:21 +00:00
$expect = " Cookie: foo=bar; people=jim,jack,johnny \" ; \" \r \n " ;
2008-05-30 11:40:08 +00:00
$result = $this -> Socket -> buildCookies ( $cookies );
$this -> assertEqual ( $result , $expect );
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
2009-05-07 18:49:21 +00:00
* Tests that HttpSocket :: _tokenEscapeChars () returns the right characters .
2008-05-30 11:40:08 +00:00
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function testTokenEscapeChars () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
2008-06-20 20:17:23 +00:00
$expected = array (
'\x22' , '\x28' , '\x29' , '\x3c' , '\x3e' , '\x40' , '\x2c' , '\x3b' , '\x3a' , '\x5c' , '\x2f' , '\x5b' , '\x5d' , '\x3f' , '\x3d' , '\x7b' ,
'\x7d' , '\x20' , '\x00' , '\x01' , '\x02' , '\x03' , '\x04' , '\x05' , '\x06' , '\x07' , '\x08' , '\x09' , '\x0a' , '\x0b' , '\x0c' , '\x0d' ,
'\x0e' , '\x0f' , '\x10' , '\x11' , '\x12' , '\x13' , '\x14' , '\x15' , '\x16' , '\x17' , '\x18' , '\x19' , '\x1a' , '\x1b' , '\x1c' , '\x1d' ,
'\x1e' , '\x1f' , '\x7f'
);
2009-05-07 18:49:21 +00:00
$r = $this -> Socket -> tokenEscapeChars ();
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $r , $expected );
foreach ( $expected as $key => $char ) {
$expected [ $key ] = chr ( hexdec ( substr ( $char , 2 )));
}
2009-05-07 18:49:21 +00:00
$r = $this -> Socket -> tokenEscapeChars ( false );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $r , $expected );
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
* Test that HttpSocket :: escapeToken is escaping all characters as descriped in RFC 2616 ( HTTP 1.1 specs )
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function testEscapeToken () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> escapeToken ( 'Foo' ), 'Foo' );
2008-05-30 11:40:08 +00:00
2009-05-07 18:49:21 +00:00
$escape = $this -> Socket -> tokenEscapeChars ( false );
2008-05-30 11:40:08 +00:00
foreach ( $escape as $char ) {
2010-12-04 03:23:07 +00:00
$token = 'My-special-' . $char . '-Token' ;
2008-05-30 11:40:08 +00:00
$escapedToken = $this -> Socket -> escapeToken ( $token );
2010-12-04 03:23:07 +00:00
$expectedToken = 'My-special-"' . $char . '"-Token' ;
2008-05-30 11:40:08 +00:00
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $escapedToken , $expectedToken , 'Test token escaping for ASCII ' . ord ( $char ));
2008-05-30 11:40:08 +00:00
}
$token = 'Extreme-:Token- -"@-test' ;
$escapedToken = $this -> Socket -> escapeToken ( $token );
$expectedToken = 'Extreme-":"Token-" "-""""@"-test' ;
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $expectedToken , $escapedToken );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
* This tests asserts HttpSocket :: reset () resets a HttpSocket instance to it ' s initial state ( before Object :: __construct
* got executed )
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function testReset () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$initialState = get_class_vars ( 'HttpSocket' );
foreach ( $initialState as $property => $value ) {
$this -> Socket -> { $property } = 'Overwritten' ;
}
$return = $this -> Socket -> reset ();
foreach ( $initialState as $property => $value ) {
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> { $property }, $value );
2008-05-30 11:40:08 +00:00
}
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $return , true );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
* This tests asserts HttpSocket :: reset ( false ) resets certain HttpSocket properties to their initial state ( before
* Object :: __construct got executed ) .
*
2009-03-18 17:55:58 +00:00
* @ return void
2008-05-30 11:40:08 +00:00
*/
2010-12-04 03:23:07 +00:00
public function testPartialReset () {
2008-05-30 11:40:08 +00:00
$this -> Socket -> reset ();
$partialResetProperties = array ( 'request' , 'response' );
$initialState = get_class_vars ( 'HttpSocket' );
foreach ( $initialState as $property => $value ) {
$this -> Socket -> { $property } = 'Overwritten' ;
}
$return = $this -> Socket -> reset ( false );
foreach ( $initialState as $property => $originalValue ) {
if ( in_array ( $property , $partialResetProperties )) {
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> { $property }, $originalValue );
2008-05-30 11:40:08 +00:00
} else {
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $this -> Socket -> { $property }, 'Overwritten' );
2008-05-30 11:40:08 +00:00
}
}
2010-06-01 02:34:10 +00:00
$this -> assertEquals ( $return , true );
2008-05-30 11:40:08 +00:00
}
}