diff options
Diffstat (limited to 'vendors/simpletest/test/http_test.php')
| -rw-r--r-- | vendors/simpletest/test/http_test.php | 427 | 
1 files changed, 427 insertions, 0 deletions
| diff --git a/vendors/simpletest/test/http_test.php b/vendors/simpletest/test/http_test.php new file mode 100644 index 000000000..d249850c8 --- /dev/null +++ b/vendors/simpletest/test/http_test.php @@ -0,0 +1,427 @@ +<?php +// $Id: http_test.php 1505 2007-04-30 23:39:59Z lastcraft $ +require_once(dirname(__FILE__) . '/../autorun.php'); +require_once(dirname(__FILE__) . '/../encoding.php'); +require_once(dirname(__FILE__) . '/../http.php'); +require_once(dirname(__FILE__) . '/../socket.php'); +require_once(dirname(__FILE__) . '/../cookies.php'); +Mock::generate('SimpleSocket'); +Mock::generate('SimpleCookieJar'); +Mock::generate('SimpleRoute'); +Mock::generatePartial('SimpleRoute', 'PartialSimpleRoute', array('_createSocket')); +Mock::generatePartial( +        'SimpleProxyRoute', +        'PartialSimpleProxyRoute', +        array('_createSocket')); + +class TestOfDirectRoute extends UnitTestCase { +     +    function testDefaultGetRequest() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("GET /here.html HTTP/1.0\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("Host: a.valid.host\r\n")); +        $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n")); +        $socket->expectCallCount('write', 3); +         +        $route = &new PartialSimpleRoute(); +        $route->setReturnReference('_createSocket', $socket); +        $route->SimpleRoute(new SimpleUrl('http://a.valid.host/here.html')); +         +        $this->assertReference($route->createConnection('GET', 15), $socket); +    } +     +    function testDefaultPostRequest() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("POST /here.html HTTP/1.0\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("Host: a.valid.host\r\n")); +        $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n")); +        $socket->expectCallCount('write', 3); +         +        $route = &new PartialSimpleRoute(); +        $route->setReturnReference('_createSocket', $socket); +        $route->SimpleRoute(new SimpleUrl('http://a.valid.host/here.html')); +         +        $route->createConnection('POST', 15); +    } +     +    function testGetWithPort() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("GET /here.html HTTP/1.0\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("Host: a.valid.host:81\r\n")); +        $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n")); +        $socket->expectCallCount('write', 3); +         +        $route = &new PartialSimpleRoute(); +        $route->setReturnReference('_createSocket', $socket); +        $route->SimpleRoute(new SimpleUrl('http://a.valid.host:81/here.html')); +         +        $route->createConnection('GET', 15); +    } +     +    function testGetWithParameters() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("GET /here.html?a=1&b=2 HTTP/1.0\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("Host: a.valid.host\r\n")); +        $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n")); +        $socket->expectCallCount('write', 3); +         +        $route = &new PartialSimpleRoute(); +        $route->setReturnReference('_createSocket', $socket); +        $route->SimpleRoute(new SimpleUrl('http://a.valid.host/here.html?a=1&b=2')); +         +        $route->createConnection('GET', 15); +    } +} + +class TestOfProxyRoute extends UnitTestCase { +     +    function testDefaultGet() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("GET http://a.valid.host/here.html HTTP/1.0\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("Host: my-proxy:8080\r\n")); +        $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n")); +        $socket->expectCallCount('write', 3); +         +        $route = &new PartialSimpleProxyRoute(); +        $route->setReturnReference('_createSocket', $socket); +        $route->SimpleProxyRoute( +                new SimpleUrl('http://a.valid.host/here.html'), +                new SimpleUrl('http://my-proxy')); +        $route->createConnection('GET', 15); +    } +     +    function testDefaultPost() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("POST http://a.valid.host/here.html HTTP/1.0\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("Host: my-proxy:8080\r\n")); +        $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n")); +        $socket->expectCallCount('write', 3); +         +        $route = &new PartialSimpleProxyRoute(); +        $route->setReturnReference('_createSocket', $socket); +        $route->SimpleProxyRoute( +                new SimpleUrl('http://a.valid.host/here.html'), +                new SimpleUrl('http://my-proxy')); +        $route->createConnection('POST', 15); +    } +     +    function testGetWithPort() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("GET http://a.valid.host:81/here.html HTTP/1.0\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("Host: my-proxy:8081\r\n")); +        $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n")); +        $socket->expectCallCount('write', 3); +         +        $route = &new PartialSimpleProxyRoute(); +        $route->setReturnReference('_createSocket', $socket); +        $route->SimpleProxyRoute( +                new SimpleUrl('http://a.valid.host:81/here.html'), +                new SimpleUrl('http://my-proxy:8081')); +        $route->createConnection('GET', 15); +    } +     +    function testGetWithParameters() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("GET http://a.valid.host/here.html?a=1&b=2 HTTP/1.0\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("Host: my-proxy:8080\r\n")); +        $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n")); +        $socket->expectCallCount('write', 3); +         +        $route = &new PartialSimpleProxyRoute(); +        $route->setReturnReference('_createSocket', $socket); +        $route->SimpleProxyRoute( +                new SimpleUrl('http://a.valid.host/here.html?a=1&b=2'), +                new SimpleUrl('http://my-proxy')); +        $route->createConnection('GET', 15); +    } +     +    function testGetWithAuthentication() { +        $encoded = base64_encode('Me:Secret'); + +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("GET http://a.valid.host/here.html HTTP/1.0\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("Host: my-proxy:8080\r\n")); +        $socket->expectArgumentsAt(2, 'write', array("Proxy-Authorization: Basic $encoded\r\n")); +        $socket->expectArgumentsAt(3, 'write', array("Connection: close\r\n")); +        $socket->expectCallCount('write', 4); +         +        $route = &new PartialSimpleProxyRoute(); +        $route->setReturnReference('_createSocket', $socket); +        $route->SimpleProxyRoute( +                new SimpleUrl('http://a.valid.host/here.html'), +                new SimpleUrl('http://my-proxy'), +                'Me', +                'Secret'); +        $route->createConnection('GET', 15); +    } +} + +class TestOfHttpRequest extends UnitTestCase { +     +    function testReadingBadConnection() { +        $socket = &new MockSimpleSocket(); +         +        $route = &new MockSimpleRoute(); +        $route->setReturnReference('createConnection', $socket); +         +        $request = &new SimpleHttpRequest($route, new SimpleGetEncoding()); +        $reponse = &$request->fetch(15); +        $this->assertTrue($reponse->isError()); +    } +     +    function testReadingGoodConnection() { +        $socket = &new MockSimpleSocket(); +        $socket->expectOnce('write', array("\r\n")); +         +        $route = &new MockSimpleRoute(); +        $route->setReturnReference('createConnection', $socket); +        $route->expectArguments('createConnection', array('GET', 15)); +         +        $request = &new SimpleHttpRequest($route, new SimpleGetEncoding()); +        $this->assertIsA($request->fetch(15), 'SimpleHttpResponse'); +    } +     +    function testWritingAdditionalHeaders() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("My: stuff\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("\r\n")); +        $socket->expectCallCount('write', 2); +         +        $route = &new MockSimpleRoute(); +        $route->setReturnReference('createConnection', $socket); +         +        $request = &new SimpleHttpRequest($route, new SimpleGetEncoding()); +        $request->addHeaderLine('My: stuff'); +        $request->fetch(15); +    } +     +    function testCookieWriting() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("Cookie: a=A\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("\r\n")); +        $socket->expectCallCount('write', 2); +         +        $route = &new MockSimpleRoute(); +        $route->setReturnReference('createConnection', $socket); +         +        $jar = new SimpleCookieJar(); +        $jar->setCookie('a', 'A'); +         +        $request = &new SimpleHttpRequest($route, new SimpleGetEncoding()); +        $request->readCookiesFromJar($jar, new SimpleUrl('/')); +        $this->assertIsA($request->fetch(15), 'SimpleHttpResponse'); +    } +     +    function testMultipleCookieWriting() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("Cookie: a=A;b=B\r\n")); +         +        $route = &new MockSimpleRoute(); +        $route->setReturnReference('createConnection', $socket); +         +        $jar = new SimpleCookieJar(); +        $jar->setCookie('a', 'A'); +        $jar->setCookie('b', 'B'); +         +        $request = &new SimpleHttpRequest($route, new SimpleGetEncoding()); +        $request->readCookiesFromJar($jar, new SimpleUrl('/')); +        $request->fetch(15); +    } +} + +class TestOfHttpPostRequest extends UnitTestCase { +     +    function testReadingBadConnectionCausesErrorBecauseOfDeadSocket() { +        $socket = &new MockSimpleSocket(); +         +        $route = &new MockSimpleRoute(); +        $route->setReturnReference('createConnection', $socket); +         +        $request = &new SimpleHttpRequest($route, new SimplePostEncoding()); +        $reponse = &$request->fetch(15); +        $this->assertTrue($reponse->isError()); +    } +     +    function testReadingGoodConnection() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("Content-Length: 0\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("Content-Type: application/x-www-form-urlencoded\r\n")); +        $socket->expectArgumentsAt(2, 'write', array("\r\n")); +        $socket->expectArgumentsAt(3, 'write', array("")); +         +        $route = &new MockSimpleRoute(); +        $route->setReturnReference('createConnection', $socket); +        $route->expectArguments('createConnection', array('POST', 15)); +         +        $request = &new SimpleHttpRequest($route, new SimplePostEncoding()); +        $this->assertIsA($request->fetch(15), 'SimpleHttpResponse'); +    } +     +    function testContentHeadersCalculated() { +        $socket = &new MockSimpleSocket(); +        $socket->expectArgumentsAt(0, 'write', array("Content-Length: 3\r\n")); +        $socket->expectArgumentsAt(1, 'write', array("Content-Type: application/x-www-form-urlencoded\r\n")); +        $socket->expectArgumentsAt(2, 'write', array("\r\n")); +        $socket->expectArgumentsAt(3, 'write', array("a=A")); +         +        $route = &new MockSimpleRoute(); +        $route->setReturnReference('createConnection', $socket); +        $route->expectArguments('createConnection', array('POST', 15)); +         +        $request = &new SimpleHttpRequest( +                $route, +                new SimplePostEncoding(array('a' => 'A'))); +        $this->assertIsA($request->fetch(15), 'SimpleHttpResponse'); +    } +} +     +class TestOfHttpHeaders extends UnitTestCase { +     +    function testParseBasicHeaders() { +        $headers = new SimpleHttpHeaders( +                "HTTP/1.1 200 OK\r\n" . +                "Date: Mon, 18 Nov 2002 15:50:29 GMT\r\n" . +                "Content-Type: text/plain\r\n" . +                "Server: Apache/1.3.24 (Win32) PHP/4.2.3\r\n" . +                "Connection: close"); +        $this->assertIdentical($headers->getHttpVersion(), "1.1"); +        $this->assertIdentical($headers->getResponseCode(), 200); +        $this->assertEqual($headers->getMimeType(), "text/plain"); +    } +     +    function testNonStandardResponseHeader() { +        $headers = new SimpleHttpHeaders( +                "HTTP/1.1 302 (HTTP-Version SP Status-Code CRLF)\r\n" . +                "Connection: close"); +        $this->assertIdentical($headers->getResponseCode(), 302); +    } +     +    function testCanParseMultipleCookies() { +        $jar = &new MockSimpleCookieJar(); +        $jar->expectAt(0, 'setCookie', array('a', 'aaa', 'host', '/here/', 'Wed, 25 Dec 2002 04:24:20 GMT')); +        $jar->expectAt(1, 'setCookie', array('b', 'bbb', 'host', '/', false)); + +        $headers = new SimpleHttpHeaders( +                "HTTP/1.1 200 OK\r\n" . +                "Date: Mon, 18 Nov 2002 15:50:29 GMT\r\n" . +                "Content-Type: text/plain\r\n" . +                "Server: Apache/1.3.24 (Win32) PHP/4.2.3\r\n" . +                "Set-Cookie: a=aaa; expires=Wed, 25-Dec-02 04:24:20 GMT; path=/here/\r\n" . +                "Set-Cookie: b=bbb\r\n" . +                "Connection: close"); +        $headers->writeCookiesToJar($jar, new SimpleUrl('http://host')); +    } +     +    function testCanRecogniseRedirect() { +        $headers = new SimpleHttpHeaders("HTTP/1.1 301 OK\r\n" . +                "Content-Type: text/plain\r\n" . +                "Content-Length: 0\r\n" . +                "Location: http://www.somewhere-else.com/\r\n" . +                "Connection: close"); +        $this->assertIdentical($headers->getResponseCode(), 301); +        $this->assertEqual($headers->getLocation(), "http://www.somewhere-else.com/"); +        $this->assertTrue($headers->isRedirect()); +    } +     +    function testCanParseChallenge() { +        $headers = new SimpleHttpHeaders("HTTP/1.1 401 Authorization required\r\n" . +                "Content-Type: text/plain\r\n" . +                "Connection: close\r\n" . +                "WWW-Authenticate: Basic realm=\"Somewhere\""); +        $this->assertEqual($headers->getAuthentication(), 'Basic'); +        $this->assertEqual($headers->getRealm(), 'Somewhere'); +        $this->assertTrue($headers->isChallenge()); +    } +} + +class TestOfHttpResponse extends UnitTestCase { +     +    function testBadRequest() { +        $socket = &new MockSimpleSocket(); +        $socket->setReturnValue('getSent', ''); + +        $response = &new SimpleHttpResponse($socket, new SimpleUrl('here'), new SimpleGetEncoding()); +        $this->assertTrue($response->isError()); +        $this->assertPattern('/Nothing fetched/', $response->getError()); +        $this->assertIdentical($response->getContent(), false); +        $this->assertIdentical($response->getSent(), ''); +    } +     +    function testBadSocketDuringResponse() { +        $socket = &new MockSimpleSocket(); +        $socket->setReturnValueAt(0, "read", "HTTP/1.1 200 OK\r\n"); +        $socket->setReturnValueAt(1, "read", "Date: Mon, 18 Nov 2002 15:50:29 GMT\r\n"); +        $socket->setReturnValue("read", ""); +        $socket->setReturnValue('getSent', 'HTTP/1.1 ...'); + +        $response = &new SimpleHttpResponse($socket, new SimpleUrl('here'), new SimpleGetEncoding()); +        $this->assertTrue($response->isError()); +        $this->assertEqual($response->getContent(), ''); +        $this->assertEqual($response->getSent(), 'HTTP/1.1 ...'); +    } +     +    function testIncompleteHeader() { +        $socket = &new MockSimpleSocket(); +        $socket->setReturnValueAt(0, "read", "HTTP/1.1 200 OK\r\n"); +        $socket->setReturnValueAt(1, "read", "Date: Mon, 18 Nov 2002 15:50:29 GMT\r\n"); +        $socket->setReturnValueAt(2, "read", "Content-Type: text/plain\r\n"); +        $socket->setReturnValue("read", ""); +         +        $response = &new SimpleHttpResponse($socket, new SimpleUrl('here'), new SimpleGetEncoding()); +        $this->assertTrue($response->isError()); +        $this->assertEqual($response->getContent(), ""); +    } +     +    function testParseOfResponseHeadersWhenChunked() { +        $socket = &new MockSimpleSocket(); +        $socket->setReturnValueAt(0, "read", "HTTP/1.1 200 OK\r\nDate: Mon, 18 Nov 2002 15:50:29 GMT\r\n"); +        $socket->setReturnValueAt(1, "read", "Content-Type: text/plain\r\n"); +        $socket->setReturnValueAt(2, "read", "Server: Apache/1.3.24 (Win32) PHP/4.2.3\r\nConne"); +        $socket->setReturnValueAt(3, "read", "ction: close\r\n\r\nthis is a test file\n"); +        $socket->setReturnValueAt(4, "read", "with two lines in it\n"); +        $socket->setReturnValue("read", ""); +         +        $response = &new SimpleHttpResponse($socket, new SimpleUrl('here'), new SimpleGetEncoding()); +        $this->assertFalse($response->isError()); +        $this->assertEqual( +                $response->getContent(), +                "this is a test file\nwith two lines in it\n"); +        $headers = $response->getHeaders(); +        $this->assertIdentical($headers->getHttpVersion(), "1.1"); +        $this->assertIdentical($headers->getResponseCode(), 200); +        $this->assertEqual($headers->getMimeType(), "text/plain"); +        $this->assertFalse($headers->isRedirect()); +        $this->assertFalse($headers->getLocation()); +    } +     +    function testRedirect() { +        $socket = &new MockSimpleSocket(); +        $socket->setReturnValueAt(0, "read", "HTTP/1.1 301 OK\r\n"); +        $socket->setReturnValueAt(1, "read", "Content-Type: text/plain\r\n"); +        $socket->setReturnValueAt(2, "read", "Location: http://www.somewhere-else.com/\r\n"); +        $socket->setReturnValueAt(3, "read", "Connection: close\r\n"); +        $socket->setReturnValueAt(4, "read", "\r\n"); +        $socket->setReturnValue("read", ""); +         +        $response = &new SimpleHttpResponse($socket, new SimpleUrl('here'), new SimpleGetEncoding()); +        $headers = $response->getHeaders(); +        $this->assertTrue($headers->isRedirect()); +        $this->assertEqual($headers->getLocation(), "http://www.somewhere-else.com/"); +    } +     +    function testRedirectWithPort() { +        $socket = &new MockSimpleSocket(); +        $socket->setReturnValueAt(0, "read", "HTTP/1.1 301 OK\r\n"); +        $socket->setReturnValueAt(1, "read", "Content-Type: text/plain\r\n"); +        $socket->setReturnValueAt(2, "read", "Location: http://www.somewhere-else.com:80/\r\n"); +        $socket->setReturnValueAt(3, "read", "Connection: close\r\n"); +        $socket->setReturnValueAt(4, "read", "\r\n"); +        $socket->setReturnValue("read", ""); +         +        $response = &new SimpleHttpResponse($socket, new SimpleUrl('here'), new SimpleGetEncoding()); +        $headers = $response->getHeaders(); +        $this->assertTrue($headers->isRedirect()); +        $this->assertEqual($headers->getLocation(), "http://www.somewhere-else.com:80/"); +    } +} +?>
\ No newline at end of file | 
