From 322bb9cd2be9e51422cb2b82684692e825c2bfb7 Mon Sep 17 00:00:00 2001 From: brettp Date: Fri, 2 Oct 2009 18:40:04 +0000 Subject: Added simpletest and start of unit tests. git-svn-id: http://code.elgg.org/elgg/trunk@3503 36083f99-b078-4883-b0ff-0f9b5a30f544 --- vendors/simpletest/test/user_agent_test.php | 358 ++++++++++++++++++++++++++++ 1 file changed, 358 insertions(+) create mode 100755 vendors/simpletest/test/user_agent_test.php (limited to 'vendors/simpletest/test/user_agent_test.php') diff --git a/vendors/simpletest/test/user_agent_test.php b/vendors/simpletest/test/user_agent_test.php new file mode 100755 index 000000000..657c7e155 --- /dev/null +++ b/vendors/simpletest/test/user_agent_test.php @@ -0,0 +1,358 @@ +_headers = &new MockSimpleHttpHeaders(); + + $this->_response = &new MockSimpleHttpResponse(); + $this->_response->setReturnValue('isError', false); + $this->_response->setReturnReference('getHeaders', new MockSimpleHttpHeaders()); + + $this->_request = &new MockSimpleHttpRequest(); + $this->_request->setReturnReference('fetch', $this->_response); + } + + function testGetRequestWithoutIncidentGivesNoErrors() { + $url = new SimpleUrl('http://test:secret@this.com/page.html'); + $url->addRequestParameters(array('a' => 'A', 'b' => 'B')); + + $agent = &new MockRequestUserAgent(); + $agent->setReturnReference('_createHttpRequest', $this->_request); + $agent->SimpleUserAgent(); + + $response = &$agent->fetchResponse( + new SimpleUrl('http://test:secret@this.com/page.html'), + new SimpleGetEncoding(array('a' => 'A', 'b' => 'B'))); + $this->assertFalse($response->isError()); + } +} + +class TestOfAdditionalHeaders extends UnitTestCase { + + function testAdditionalHeaderAddedToRequest() { + $response = &new MockSimpleHttpResponse(); + $response->setReturnReference('getHeaders', new MockSimpleHttpHeaders()); + + $request = &new MockSimpleHttpRequest(); + $request->setReturnReference('fetch', $response); + $request->expectOnce( + 'addHeaderLine', + array('User-Agent: SimpleTest')); + + $agent = &new MockRequestUserAgent(); + $agent->setReturnReference('_createHttpRequest', $request); + $agent->SimpleUserAgent(); + $agent->addHeader('User-Agent: SimpleTest'); + $response = &$agent->fetchResponse(new SimpleUrl('http://this.host/'), new SimpleGetEncoding()); + } +} + +class TestOfBrowserCookies extends UnitTestCase { + + function &_createStandardResponse() { + $response = &new MockSimpleHttpResponse(); + $response->setReturnValue("isError", false); + $response->setReturnValue("getContent", "stuff"); + $response->setReturnReference("getHeaders", new MockSimpleHttpHeaders()); + return $response; + } + + function &_createCookieSite($header_lines) { + $headers = &new SimpleHttpHeaders($header_lines); + + $response = &new MockSimpleHttpResponse(); + $response->setReturnValue("isError", false); + $response->setReturnReference("getHeaders", $headers); + $response->setReturnValue("getContent", "stuff"); + + $request = &new MockSimpleHttpRequest(); + $request->setReturnReference("fetch", $response); + return $request; + } + + function &_createMockedRequestUserAgent(&$request) { + $agent = &new MockRequestUserAgent(); + $agent->setReturnReference('_createHttpRequest', $request); + $agent->SimpleUserAgent(); + return $agent; + } + + function testCookieJarIsSentToRequest() { + $jar = new SimpleCookieJar(); + $jar->setCookie('a', 'A'); + + $request = &new MockSimpleHttpRequest(); + $request->setReturnReference('fetch', $this->_createStandardResponse()); + $request->expectOnce('readCookiesFromJar', array($jar, '*')); + + $agent = &$this->_createMockedRequestUserAgent($request); + $agent->setCookie('a', 'A'); + $agent->fetchResponse( + new SimpleUrl('http://this.com/this/path/page.html'), + new SimpleGetEncoding()); + } + + function testNoCookieJarIsSentToRequestWhenCookiesAreDisabled() { + $request = &new MockSimpleHttpRequest(); + $request->setReturnReference('fetch', $this->_createStandardResponse()); + $request->expectNever('readCookiesFromJar'); + + $agent = &$this->_createMockedRequestUserAgent($request); + $agent->setCookie('a', 'A'); + $agent->ignoreCookies(); + $agent->fetchResponse( + new SimpleUrl('http://this.com/this/path/page.html'), + new SimpleGetEncoding()); + } + + function testReadingNewCookie() { + $request = &$this->_createCookieSite('Set-cookie: a=AAAA'); + $agent = &$this->_createMockedRequestUserAgent($request); + $agent->fetchResponse( + new SimpleUrl('http://this.com/this/path/page.html'), + new SimpleGetEncoding()); + $this->assertEqual($agent->getCookieValue("this.com", "this/path/", "a"), "AAAA"); + } + + function testIgnoringNewCookieWhenCookiesDisabled() { + $request = &$this->_createCookieSite('Set-cookie: a=AAAA'); + $agent = &$this->_createMockedRequestUserAgent($request); + $agent->ignoreCookies(); + $agent->fetchResponse( + new SimpleUrl('http://this.com/this/path/page.html'), + new SimpleGetEncoding()); + $this->assertIdentical($agent->getCookieValue("this.com", "this/path/", "a"), false); + } + + function testOverwriteCookieThatAlreadyExists() { + $request = &$this->_createCookieSite('Set-cookie: a=AAAA'); + $agent = &$this->_createMockedRequestUserAgent($request); + $agent->setCookie('a', 'A'); + $agent->fetchResponse( + new SimpleUrl('http://this.com/this/path/page.html'), + new SimpleGetEncoding()); + $this->assertEqual($agent->getCookieValue("this.com", "this/path/", "a"), "AAAA"); + } + + function testClearCookieBySettingExpiry() { + $request = &$this->_createCookieSite('Set-cookie: a=b'); + $agent = &$this->_createMockedRequestUserAgent($request); + + $agent->setCookie("a", "A", "this/path/", "Wed, 25-Dec-02 04:24:21 GMT"); + $agent->fetchResponse( + new SimpleUrl('http://this.com/this/path/page.html'), + new SimpleGetEncoding()); + $this->assertIdentical( + $agent->getCookieValue("this.com", "this/path/", "a"), + "b"); + $agent->restart("Wed, 25-Dec-02 04:24:20 GMT"); + $this->assertIdentical( + $agent->getCookieValue("this.com", "this/path/", "a"), + false); + } + + function testAgeingAndClearing() { + $request = &$this->_createCookieSite('Set-cookie: a=A; expires=Wed, 25-Dec-02 04:24:21 GMT; path=/this/path'); + $agent = &$this->_createMockedRequestUserAgent($request); + + $agent->fetchResponse( + new SimpleUrl('http://this.com/this/path/page.html'), + new SimpleGetEncoding()); + $agent->restart("Wed, 25-Dec-02 04:24:20 GMT"); + $this->assertIdentical( + $agent->getCookieValue("this.com", "this/path/", "a"), + "A"); + $agent->ageCookies(2); + $agent->restart("Wed, 25-Dec-02 04:24:20 GMT"); + $this->assertIdentical( + $agent->getCookieValue("this.com", "this/path/", "a"), + false); + } + + function testReadingIncomingAndSettingNewCookies() { + $request = &$this->_createCookieSite('Set-cookie: a=AAA'); + $agent = &$this->_createMockedRequestUserAgent($request); + + $this->assertNull($agent->getBaseCookieValue("a", false)); + $agent->fetchResponse( + new SimpleUrl('http://this.com/this/path/page.html'), + new SimpleGetEncoding()); + $agent->setCookie("b", "BBB", "this.com", "this/path/"); + $this->assertEqual( + $agent->getBaseCookieValue("a", new SimpleUrl('http://this.com/this/path/page.html')), + "AAA"); + $this->assertEqual( + $agent->getBaseCookieValue("b", new SimpleUrl('http://this.com/this/path/page.html')), + "BBB"); + } +} + +class TestOfHttpRedirects extends UnitTestCase { + + function &createRedirect($content, $redirect) { + $headers = &new MockSimpleHttpHeaders(); + $headers->setReturnValue('isRedirect', (boolean)$redirect); + $headers->setReturnValue('getLocation', $redirect); + + $response = &new MockSimpleHttpResponse(); + $response->setReturnValue('getContent', $content); + $response->setReturnReference('getHeaders', $headers); + + $request = &new MockSimpleHttpRequest(); + $request->setReturnReference('fetch', $response); + return $request; + } + + function testDisabledRedirects() { + $agent = &new MockRequestUserAgent(); + $agent->setReturnReference( + '_createHttpRequest', + $this->createRedirect('stuff', 'there.html')); + $agent->expectOnce('_createHttpRequest'); + $agent->SimpleUserAgent(); + + $agent->setMaximumRedirects(0); + $response = &$agent->fetchResponse(new SimpleUrl('here.html'), new SimpleGetEncoding()); + $this->assertEqual($response->getContent(), 'stuff'); + } + + function testSingleRedirect() { + $agent = &new MockRequestUserAgent(); + $agent->setReturnReferenceAt( + 0, + '_createHttpRequest', + $this->createRedirect('first', 'two.html')); + $agent->setReturnReferenceAt( + 1, + '_createHttpRequest', + $this->createRedirect('second', 'three.html')); + $agent->expectCallCount('_createHttpRequest', 2); + $agent->SimpleUserAgent(); + + $agent->setMaximumRedirects(1); + $response = &$agent->fetchResponse(new SimpleUrl('one.html'), new SimpleGetEncoding()); + $this->assertEqual($response->getContent(), 'second'); + } + + function testDoubleRedirect() { + $agent = &new MockRequestUserAgent(); + $agent->setReturnReferenceAt( + 0, + '_createHttpRequest', + $this->createRedirect('first', 'two.html')); + $agent->setReturnReferenceAt( + 1, + '_createHttpRequest', + $this->createRedirect('second', 'three.html')); + $agent->setReturnReferenceAt( + 2, + '_createHttpRequest', + $this->createRedirect('third', 'four.html')); + $agent->expectCallCount('_createHttpRequest', 3); + $agent->SimpleUserAgent(); + + $agent->setMaximumRedirects(2); + $response = &$agent->fetchResponse(new SimpleUrl('one.html'), new SimpleGetEncoding()); + $this->assertEqual($response->getContent(), 'third'); + } + + function testSuccessAfterRedirect() { + $agent = &new MockRequestUserAgent(); + $agent->setReturnReferenceAt( + 0, + '_createHttpRequest', + $this->createRedirect('first', 'two.html')); + $agent->setReturnReferenceAt( + 1, + '_createHttpRequest', + $this->createRedirect('second', false)); + $agent->setReturnReferenceAt( + 2, + '_createHttpRequest', + $this->createRedirect('third', 'four.html')); + $agent->expectCallCount('_createHttpRequest', 2); + $agent->SimpleUserAgent(); + + $agent->setMaximumRedirects(2); + $response = &$agent->fetchResponse(new SimpleUrl('one.html'), new SimpleGetEncoding()); + $this->assertEqual($response->getContent(), 'second'); + } + + function testRedirectChangesPostToGet() { + $agent = &new MockRequestUserAgent(); + $agent->setReturnReferenceAt( + 0, + '_createHttpRequest', + $this->createRedirect('first', 'two.html')); + $agent->expectArgumentsAt(0, '_createHttpRequest', array('*', new IsAExpectation('SimplePostEncoding'))); + $agent->setReturnReferenceAt( + 1, + '_createHttpRequest', + $this->createRedirect('second', 'three.html')); + $agent->expectArgumentsAt(1, '_createHttpRequest', array('*', new IsAExpectation('SimpleGetEncoding'))); + $agent->expectCallCount('_createHttpRequest', 2); + $agent->SimpleUserAgent(); + $agent->setMaximumRedirects(1); + $response = &$agent->fetchResponse(new SimpleUrl('one.html'), new SimplePostEncoding()); + } +} + +class TestOfBadHosts extends UnitTestCase { + + function &_createSimulatedBadHost() { + $response = &new MockSimpleHttpResponse(); + $response->setReturnValue('isError', true); + $response->setReturnValue('getError', 'Bad socket'); + $response->setReturnValue('getContent', false); + + $request = &new MockSimpleHttpRequest(); + $request->setReturnReference('fetch', $response); + return $request; + } + + function testUntestedHost() { + $request = &$this->_createSimulatedBadHost(); + + $agent = &new MockRequestUserAgent(); + $agent->setReturnReference('_createHttpRequest', $request); + $agent->SimpleUserAgent(); + + $response = &$agent->fetchResponse( + new SimpleUrl('http://this.host/this/path/page.html'), + new SimpleGetEncoding()); + $this->assertTrue($response->isError()); + } +} + +class TestOfAuthorisation extends UnitTestCase { + + function testAuthenticateHeaderAdded() { + $response = &new MockSimpleHttpResponse(); + $response->setReturnReference('getHeaders', new MockSimpleHttpHeaders()); + + $request = &new MockSimpleHttpRequest(); + $request->setReturnReference('fetch', $response); + $request->expectOnce( + 'addHeaderLine', + array('Authorization: Basic ' . base64_encode('test:secret'))); + + $agent = &new MockRequestUserAgent(); + $agent->setReturnReference('_createHttpRequest', $request); + $agent->SimpleUserAgent(); + $response = &$agent->fetchResponse( + new SimpleUrl('http://test:secret@this.host'), + new SimpleGetEncoding()); + } +} +?> \ No newline at end of file -- cgit v1.2.3