http_test.php

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 427 行 · 第 1/2 页

PHP
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');
    }
    

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?