546 lines
24 KiB
PHP
546 lines
24 KiB
PHP
|
<?php
|
||
|
// $Id: user_agent_test.php,v 1.22 2005/01/02 22:46:10 lastcraft Exp $
|
||
|
|
||
|
require_once(dirname(__FILE__) . '/../user_agent.php');
|
||
|
require_once(dirname(__FILE__) . '/../authentication.php');
|
||
|
require_once(dirname(__FILE__) . '/../http.php');
|
||
|
require_once(dirname(__FILE__) . '/../encoding.php');
|
||
|
Mock::generate('SimpleHttpRequest');
|
||
|
Mock::generate('SimpleHttpResponse');
|
||
|
Mock::generate('SimpleHttpHeaders');
|
||
|
Mock::generatePartial('SimpleUserAgent', 'MockRequestUserAgent', array('_createHttpRequest'));
|
||
|
|
||
|
class TestOfSimpleCookieJar extends UnitTestCase {
|
||
|
|
||
|
function testAddCookie() {
|
||
|
$jar = new SimpleCookieJar();
|
||
|
$jar->setCookie(new SimpleCookie("a", "A"));
|
||
|
$cookies = $jar->getValidCookies();
|
||
|
$this->assertEqual(count($cookies), 1);
|
||
|
$this->assertEqual($cookies[0]->getValue(), "A");
|
||
|
}
|
||
|
|
||
|
function testHostFilter() {
|
||
|
$jar = new SimpleCookieJar();
|
||
|
$cookie = new SimpleCookie('a', 'A');
|
||
|
$cookie->setHost('my-host.com');
|
||
|
$jar->setCookie($cookie);
|
||
|
$cookie = new SimpleCookie('b', 'B');
|
||
|
$cookie->setHost('another-host.com');
|
||
|
$jar->setCookie($cookie);
|
||
|
$cookie = new SimpleCookie('c', 'C');
|
||
|
$jar->setCookie($cookie);
|
||
|
$cookies = $jar->getValidCookies('my-host.com');
|
||
|
$this->assertEqual(count($cookies), 2);
|
||
|
$this->assertEqual($cookies[0]->getValue(), 'A');
|
||
|
$this->assertEqual($cookies[1]->getValue(), 'C');
|
||
|
$this->assertEqual(count($jar->getValidCookies('another-host.com')), 2);
|
||
|
$this->assertEqual(count($jar->getValidCookies('www.another-host.com')), 2);
|
||
|
$this->assertEqual(count($jar->getValidCookies('new-host.org')), 1);
|
||
|
$this->assertEqual(count($jar->getValidCookies()), 3);
|
||
|
}
|
||
|
|
||
|
function testPathFilter() {
|
||
|
$jar = new SimpleCookieJar();
|
||
|
$jar->setCookie(new SimpleCookie("a", "A", "/path/"));
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/")), 0);
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/elsewhere")), 0);
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/path/")), 1);
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/path")), 1);
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/pa")), 0);
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/path/here/")), 1);
|
||
|
}
|
||
|
|
||
|
function testPathFilterDeeply() {
|
||
|
$jar = new SimpleCookieJar();
|
||
|
$jar->setCookie(new SimpleCookie("a", "A", "/path/more_path/"));
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/path/")), 0);
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/path")), 0);
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/pa")), 0);
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/path/more_path/")), 1);
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/path/more_path/and_more")), 1);
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/path/not_here/")), 0);
|
||
|
}
|
||
|
|
||
|
function testMultipleCookieWithDifferentPaths() {
|
||
|
$jar = new SimpleCookieJar();
|
||
|
$jar->setCookie(new SimpleCookie("a", "abc", "/"));
|
||
|
$jar->setCookie(new SimpleCookie("a", "123", "/path/here/"));
|
||
|
$cookies = $jar->getValidCookies("my-host.com", "/");
|
||
|
$this->assertEqual($cookies[0]->getPath(), "/");
|
||
|
$cookies = $jar->getValidCookies("my-host.com", "/path/");
|
||
|
$this->assertEqual($cookies[0]->getPath(), "/");
|
||
|
$cookies = $jar->getValidCookies("my-host.com", "/path/here");
|
||
|
$this->assertEqual($cookies[0]->getPath(), "/");
|
||
|
$this->assertEqual($cookies[1]->getPath(), "/path/here/");
|
||
|
$cookies = $jar->getValidCookies("my-host.com", "/path/here/there");
|
||
|
$this->assertEqual($cookies[0]->getPath(), "/");
|
||
|
$this->assertEqual($cookies[1]->getPath(), "/path/here/");
|
||
|
}
|
||
|
|
||
|
function testOverwrite() {
|
||
|
$jar = new SimpleCookieJar();
|
||
|
$jar->setCookie(new SimpleCookie("a", "abc", "/"));
|
||
|
$jar->setCookie(new SimpleCookie("a", "cde", "/"));
|
||
|
$cookies = $jar->getValidCookies();
|
||
|
$this->assertIdentical($cookies[0]->getValue(), "cde");
|
||
|
}
|
||
|
|
||
|
function testClearSessionCookies() {
|
||
|
$jar = new SimpleCookieJar();
|
||
|
$jar->setCookie(new SimpleCookie("a", "A", "/"));
|
||
|
$jar->restartSession();
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/")), 0);
|
||
|
}
|
||
|
|
||
|
function testExpiryFilterByDate() {
|
||
|
$cookie = new SimpleCookie("a", "A", "/", "Wed, 25-Dec-02 04:24:20 GMT");
|
||
|
$jar = new SimpleCookieJar();
|
||
|
$jar->setCookie($cookie);
|
||
|
$jar->restartSession("Wed, 25-Dec-02 04:24:19 GMT");
|
||
|
$this->assertIdentical($list = $jar->getValidCookies(false, "/"), array($cookie));
|
||
|
$jar->restartSession("Wed, 25-Dec-02 04:24:21 GMT");
|
||
|
$this->assertIdentical($list = $jar->getValidCookies(false, "/"), array());
|
||
|
}
|
||
|
|
||
|
function testExpiryFilterByAgeing() {
|
||
|
$cookie = new SimpleCookie("a", "A", "/", "Wed, 25-Dec-02 04:24:20 GMT");
|
||
|
$jar = new SimpleCookieJar();
|
||
|
$jar->setCookie($cookie);
|
||
|
$jar->restartSession("Wed, 25-Dec-02 04:24:19 GMT");
|
||
|
$this->assertIdentical($list = $jar->getValidCookies(false, "/"), array($cookie));
|
||
|
$jar->agePrematurely(2);
|
||
|
$jar->restartSession("Wed, 25-Dec-02 04:24:19 GMT");
|
||
|
$this->assertIdentical($list = $jar->getValidCookies(false, "/"), array());
|
||
|
}
|
||
|
|
||
|
function testCookieClearing() {
|
||
|
$jar = new SimpleCookieJar();
|
||
|
$jar->setCookie(new SimpleCookie("a", "abc", "/"));
|
||
|
$jar->setCookie(new SimpleCookie("a", "", "/"));
|
||
|
$this->assertEqual(count($cookies = $jar->getValidCookies(false, "/")), 1);
|
||
|
$this->assertIdentical($cookies[0]->getValue(), "");
|
||
|
}
|
||
|
|
||
|
function testCookieClearByDate() {
|
||
|
$jar = new SimpleCookieJar();
|
||
|
$jar->setCookie(new SimpleCookie("a", "abc", "/", "Wed, 25-Dec-02 04:24:21 GMT"));
|
||
|
$jar->setCookie(new SimpleCookie("a", "def", "/", "Wed, 25-Dec-02 04:24:19 GMT"));
|
||
|
$cookies = $jar->getValidCookies(false, "/");
|
||
|
$this->assertIdentical($cookies[0]->getValue(), "def");
|
||
|
$jar->restartSession("Wed, 25-Dec-02 04:24:20 GMT");
|
||
|
$this->assertEqual(count($jar->getValidCookies(false, "/")), 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class TestOfFetchingUrlParameters extends UnitTestCase {
|
||
|
|
||
|
function testGet() {
|
||
|
$headers = &new MockSimpleHttpHeaders($this);
|
||
|
$headers->setReturnValue('getMimeType', 'text/html');
|
||
|
$headers->setReturnValue('getResponseCode', 200);
|
||
|
$headers->setReturnValue('getNewCookies', array());
|
||
|
|
||
|
$response = &new MockSimpleHttpResponse($this);
|
||
|
$response->setReturnValue('getContent', 'stuff');
|
||
|
$response->setReturnReference('getHeaders', $headers);
|
||
|
|
||
|
$request = &new MockSimpleHttpRequest($this);
|
||
|
$request->setReturnReference('fetch', $response);
|
||
|
|
||
|
$agent = &new MockRequestUserAgent($this);
|
||
|
$agent->setReturnReference('_createHttpRequest', $request);
|
||
|
$agent->expectOnce('_createHttpRequest', array(
|
||
|
'GET',
|
||
|
new SimpleUrl('http://test:secret@this.com/page.html?a=A&b=B'),
|
||
|
new SimpleFormEncoding()));
|
||
|
$agent->SimpleUserAgent();
|
||
|
|
||
|
$agent->fetchResponse(
|
||
|
'GET',
|
||
|
new SimpleUrl('http://test:secret@this.com/page.html'),
|
||
|
new SimpleFormEncoding(array('a' => 'A', 'b' => 'B')));
|
||
|
$agent->tally();
|
||
|
}
|
||
|
|
||
|
function testHead() {
|
||
|
$headers = &new MockSimpleHttpHeaders($this);
|
||
|
$headers->setReturnValue('getMimeType', 'text/html');
|
||
|
$headers->setReturnValue('getResponseCode', 200);
|
||
|
$headers->setReturnValue('getNewCookies', array());
|
||
|
|
||
|
$response = &new MockSimpleHttpResponse($this);
|
||
|
$response->setReturnValue('getContent', 'stuff');
|
||
|
$response->setReturnReference('getHeaders', $headers);
|
||
|
|
||
|
$request = &new MockSimpleHttpRequest($this);
|
||
|
$request->setReturnReference('fetch', $response);
|
||
|
|
||
|
$url = new SimpleUrl('http://this.com/page.html');
|
||
|
$url->addRequestParameters(array('a' => 'A', 'b' => 'B'));
|
||
|
|
||
|
$agent = &new MockRequestUserAgent($this);
|
||
|
$agent->setReturnReference('_createHttpRequest', $request);
|
||
|
$agent->expectOnce('_createHttpRequest', array(
|
||
|
'HEAD',
|
||
|
new SimpleUrl('http://test:secret@this.com/page.html?a=A&b=B'),
|
||
|
new SimpleFormEncoding()));
|
||
|
$agent->SimpleUserAgent();
|
||
|
|
||
|
$agent->fetchResponse(
|
||
|
'HEAD',
|
||
|
new SimpleUrl('http://test:secret@this.com/page.html'),
|
||
|
new SimpleFormEncoding(array('a' => 'A', 'b' => 'B')));
|
||
|
$agent->tally();
|
||
|
}
|
||
|
|
||
|
function testPost() {
|
||
|
$headers = &new MockSimpleHttpHeaders($this);
|
||
|
$headers->setReturnValue('getMimeType', 'text/html');
|
||
|
$headers->setReturnValue('getResponseCode', 200);
|
||
|
$headers->setReturnValue('getNewCookies', array());
|
||
|
|
||
|
$response = &new MockSimpleHttpResponse($this);
|
||
|
$response->setReturnValue('getContent', 'stuff');
|
||
|
$response->setReturnReference('getHeaders', $headers);
|
||
|
|
||
|
$request = &new MockSimpleHttpRequest($this);
|
||
|
$request->setReturnReference('fetch', $response);
|
||
|
|
||
|
$agent = &new MockRequestUserAgent($this);
|
||
|
$agent->setReturnReference('_createHttpRequest', $request);
|
||
|
$agent->expectOnce('_createHttpRequest', array(
|
||
|
'POST',
|
||
|
new SimpleUrl('http://test:secret@this.com/page.html'),
|
||
|
new SimpleFormEncoding(array('a' => 'A', 'b' => 'B'))));
|
||
|
$agent->SimpleUserAgent();
|
||
|
|
||
|
$agent->fetchResponse(
|
||
|
'POST',
|
||
|
new SimpleUrl('http://test:secret@this.com/page.html'),
|
||
|
new SimpleFormEncoding(array('a' => 'A', 'b' => 'B')));
|
||
|
$agent->tally();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class TestOfAdditionalHeaders extends UnitTestCase {
|
||
|
|
||
|
function testAdditionalHeaderAddedToRequest() {
|
||
|
$headers = &new MockSimpleHttpHeaders($this);
|
||
|
$headers->setReturnValue('getNewCookies', array());
|
||
|
|
||
|
$response = &new MockSimpleHttpResponse($this);
|
||
|
$response->setReturnReference('getHeaders', $headers);
|
||
|
|
||
|
$request = &new MockSimpleHttpRequest($this);
|
||
|
$request->setReturnReference('fetch', $response);
|
||
|
$request->expectOnce(
|
||
|
'addHeaderLine',
|
||
|
array('User-Agent: SimpleTest'));
|
||
|
|
||
|
$agent = &new MockRequestUserAgent($this);
|
||
|
$agent->setReturnReference('_createHttpRequest', $request);
|
||
|
$agent->SimpleUserAgent();
|
||
|
|
||
|
$agent->addHeader('User-Agent: SimpleTest');
|
||
|
$response = &$agent->fetchResponse('GET', new SimpleUrl('http://this.host/'));
|
||
|
$request->tally();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class TestOfBrowserCookies extends UnitTestCase {
|
||
|
|
||
|
function &_createStandardResponse() {
|
||
|
$headers = &new MockSimpleHttpHeaders($this);
|
||
|
$headers->setReturnValue("getNewCookies", array());
|
||
|
|
||
|
$response = &new MockSimpleHttpResponse($this);
|
||
|
$response->setReturnValue("isError", false);
|
||
|
$response->setReturnValue("getContent", "stuff");
|
||
|
$response->setReturnReference("getHeaders", $headers);
|
||
|
return $response;
|
||
|
}
|
||
|
|
||
|
function &_createCookieSite($cookies) {
|
||
|
$headers = &new MockSimpleHttpHeaders($this);
|
||
|
$headers->setReturnValue("getNewCookies", $cookies);
|
||
|
|
||
|
$response = &new MockSimpleHttpResponse($this);
|
||
|
$response->setReturnValue("isError", false);
|
||
|
$response->setReturnReference("getHeaders", $headers);
|
||
|
$response->setReturnValue("getContent", "stuff");
|
||
|
|
||
|
$request = &new MockSimpleHttpRequest($this);
|
||
|
$request->setReturnReference("fetch", $response);
|
||
|
return $request;
|
||
|
}
|
||
|
|
||
|
function &_createPartialFetcher(&$request) {
|
||
|
$agent = &new MockRequestUserAgent($this);
|
||
|
$agent->setReturnReference('_createHttpRequest', $request);
|
||
|
$agent->SimpleUserAgent();
|
||
|
return $agent;
|
||
|
}
|
||
|
|
||
|
function testSendingExistingCookie() {
|
||
|
$request = &new MockSimpleHttpRequest($this);
|
||
|
$request->setReturnReference('fetch', $this->_createStandardResponse());
|
||
|
$request->expectOnce('setCookie', array(new SimpleCookie('a', 'A')));
|
||
|
|
||
|
$agent = &$this->_createPartialFetcher($request);
|
||
|
$agent->setCookie('a', 'A');
|
||
|
$response = $agent->fetchResponse(
|
||
|
'GET',
|
||
|
new SimpleUrl('http://this.com/this/path/page.html'),
|
||
|
array());
|
||
|
$this->assertEqual($response->getContent(), "stuff");
|
||
|
$request->tally();
|
||
|
}
|
||
|
|
||
|
function testOverwriteCookieThatAlreadyExists() {
|
||
|
$request = &$this->_createCookieSite(array(new SimpleCookie("a", "AAAA", "this/path/")));
|
||
|
$agent = &$this->_createPartialFetcher($request);
|
||
|
|
||
|
$agent->setCookie("a", "A");
|
||
|
$agent->fetchResponse(
|
||
|
"GET",
|
||
|
new SimpleUrl('http://this.com/this/path/page.html'),
|
||
|
array());
|
||
|
$this->assertEqual($agent->getCookieValue("this.com", "this/path/", "a"), "AAAA");
|
||
|
}
|
||
|
|
||
|
function testClearCookieBySettingExpiry() {
|
||
|
$request = &$this->_createCookieSite(array(
|
||
|
new SimpleCookie("a", "b", "this/path/", "Wed, 25-Dec-02 04:24:19 GMT")));
|
||
|
$agent = &$this->_createPartialFetcher($request);
|
||
|
|
||
|
$agent->setCookie("a", "A", "this/path/", "Wed, 25-Dec-02 04:24:21 GMT");
|
||
|
$agent->fetchResponse(
|
||
|
'GET',
|
||
|
new SimpleUrl('http://this.com/this/path/page.html'),
|
||
|
array());
|
||
|
$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(array(
|
||
|
new SimpleCookie("a", "A", "this/path/", "Wed, 25-Dec-02 04:24:21 GMT")));
|
||
|
$agent = &$this->_createPartialFetcher($request);
|
||
|
|
||
|
$agent->fetchResponse(
|
||
|
'GET',
|
||
|
new SimpleUrl('http://this.com/this/path/page.html'),
|
||
|
array());
|
||
|
$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 testReadingIncomingAndSetCookies() {
|
||
|
$request = &$this->_createCookieSite(array(
|
||
|
new SimpleCookie("a", "AAA", "this/path/")));
|
||
|
$agent = &$this->_createPartialFetcher($request);
|
||
|
|
||
|
$this->assertNull($agent->getBaseCookieValue("a", false));
|
||
|
$agent->fetchResponse(
|
||
|
'GET',
|
||
|
new SimpleUrl('http://this.com/this/path/page.html'),
|
||
|
array());
|
||
|
$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($this);
|
||
|
$headers->setReturnValue('getNewCookies', array());
|
||
|
$headers->setReturnValue('isRedirect', (boolean)$redirect);
|
||
|
$headers->setReturnValue('getLocation', $redirect);
|
||
|
$headers->setReturnValue('getNewCookies', array());
|
||
|
|
||
|
$response = &new MockSimpleHttpResponse($this);
|
||
|
$response->setReturnValue('getContent', $content);
|
||
|
$response->setReturnReference('getHeaders', $headers);
|
||
|
|
||
|
$request = &new MockSimpleHttpRequest($this);
|
||
|
$request->setReturnReference('fetch', $response);
|
||
|
return $request;
|
||
|
}
|
||
|
|
||
|
function testDisabledRedirects() {
|
||
|
$agent = &new MockRequestUserAgent($this);
|
||
|
$agent->setReturnReference(
|
||
|
'_createHttpRequest',
|
||
|
$this->createRedirect('stuff', 'there.html'));
|
||
|
$agent->expectOnce('_createHttpRequest');
|
||
|
$agent->SimpleUserAgent();
|
||
|
|
||
|
$agent->setMaximumRedirects(0);
|
||
|
$response = &$agent->fetchResponse('GET', new SimpleUrl('here.html'));
|
||
|
|
||
|
$this->assertEqual($response->getContent(), 'stuff');
|
||
|
$agent->tally();
|
||
|
}
|
||
|
|
||
|
function testSingleRedirect() {
|
||
|
$agent = &new MockRequestUserAgent($this);
|
||
|
$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('GET', new SimpleUrl('one.html'));
|
||
|
|
||
|
$this->assertEqual($response->getContent(), 'second');
|
||
|
$agent->tally();
|
||
|
}
|
||
|
|
||
|
function testDoubleRedirect() {
|
||
|
$agent = &new MockRequestUserAgent($this);
|
||
|
$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('GET', new SimpleUrl('one.html'));
|
||
|
|
||
|
$this->assertEqual($response->getContent(), 'third');
|
||
|
$agent->tally();
|
||
|
}
|
||
|
|
||
|
function testSuccessAfterRedirect() {
|
||
|
$agent = &new MockRequestUserAgent($this);
|
||
|
$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('GET', new SimpleUrl('one.html'));
|
||
|
|
||
|
$this->assertEqual($response->getContent(), 'second');
|
||
|
$agent->tally();
|
||
|
}
|
||
|
|
||
|
function testRedirectChangesPostToGet() {
|
||
|
$agent = &new MockRequestUserAgent($this);
|
||
|
$agent->setReturnReferenceAt(
|
||
|
0,
|
||
|
'_createHttpRequest',
|
||
|
$this->createRedirect('first', 'two.html'));
|
||
|
$agent->expectArgumentsAt(0, '_createHttpRequest', array('POST', '*', '*'));
|
||
|
$agent->setReturnReferenceAt(
|
||
|
1,
|
||
|
'_createHttpRequest',
|
||
|
$this->createRedirect('second', 'three.html'));
|
||
|
$agent->expectArgumentsAt(1, '_createHttpRequest', array('GET', '*', '*'));
|
||
|
$agent->expectCallCount('_createHttpRequest', 2);
|
||
|
$agent->SimpleUserAgent();
|
||
|
|
||
|
$agent->setMaximumRedirects(1);
|
||
|
$response = &$agent->fetchResponse('POST', new SimpleUrl('one.html'));
|
||
|
|
||
|
$agent->tally();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class TestOfBadHosts extends UnitTestCase {
|
||
|
|
||
|
function &_createSimulatedBadHost() {
|
||
|
$response = &new MockSimpleHttpResponse($this);
|
||
|
$response->setReturnValue('isError', true);
|
||
|
$response->setReturnValue('getError', 'Bad socket');
|
||
|
$response->setReturnValue('getContent', false);
|
||
|
|
||
|
$request = &new MockSimpleHttpRequest($this);
|
||
|
$request->setReturnReference('fetch', $response);
|
||
|
return $request;
|
||
|
}
|
||
|
|
||
|
function testUntestedHost() {
|
||
|
$request = &$this->_createSimulatedBadHost();
|
||
|
|
||
|
$agent = &new MockRequestUserAgent($this);
|
||
|
$agent->setReturnReference('_createHttpRequest', $request);
|
||
|
$agent->SimpleUserAgent();
|
||
|
|
||
|
$response = &$agent->fetchResponse(
|
||
|
'GET',
|
||
|
new SimpleUrl('http://this.host/this/path/page.html'));
|
||
|
$this->assertTrue($response->isError());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class TestOfAuthorisation extends UnitTestCase {
|
||
|
|
||
|
function testAuthenticateHeaderAdded() {
|
||
|
$headers = &new MockSimpleHttpHeaders($this);
|
||
|
$headers->setReturnValue('getNewCookies', array());
|
||
|
|
||
|
$response = &new MockSimpleHttpResponse($this);
|
||
|
$response->setReturnReference('getHeaders', $headers);
|
||
|
|
||
|
$request = &new MockSimpleHttpRequest($this);
|
||
|
$request->setReturnReference('fetch', $response);
|
||
|
$request->expectOnce(
|
||
|
'addHeaderLine',
|
||
|
array('Authorization: Basic ' . base64_encode('test:secret')));
|
||
|
|
||
|
$agent = &new MockRequestUserAgent($this);
|
||
|
$agent->setReturnReference('_createHttpRequest', $request);
|
||
|
$agent->SimpleUserAgent();
|
||
|
|
||
|
$response = &$agent->fetchResponse(
|
||
|
'GET',
|
||
|
new SimpleUrl('http://test:secret@this.host'));
|
||
|
$request->tally();
|
||
|
}
|
||
|
}
|
||
|
?>
|