testsuite.php.svn-base
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 800 行 · 第 1/2 页
SVN-BASE
800 行
$this->client->no_multicall = false; $good1 = new xmlrpcmsg('system.methodHelp', array(php_xmlrpc_encode('system.listMethods'))); $bad = new xmlrpcmsg('test.nosuch', array(php_xmlrpc_encode(1), php_xmlrpc_encode(2))); $recursive = new xmlrpcmsg('system.multicall', array(new xmlrpcval(array(), 'array'))); $good2 = new xmlrpcmsg('system.methodSignature', array(php_xmlrpc_encode('system.listMethods')) ); $r = $this->send(array($good1, $bad, $recursive, $good2)); if($r) { $this->assertTrue(count($r) == 4, "wrong number of return values"); } $this->assertTrue($r[0]->faultCode() == 0, "fault from good1"); if(!$r[0]->faultCode()) { $val = $r[0]->value(); $this->assertTrue( is_string($val) , "good1 did not return string"); } $this->assertTrue($r[1]->faultCode() != 0, "no fault from bad"); $this->assertTrue($r[2]->faultCode() != 0, "no fault from recursive system.multicall"); $this->assertTrue($r[3]->faultCode() == 0, "fault from good2"); if(!$r[3]->faultCode()) { $val = $r[3]->value(); $this->assertTrue(is_array($val), "good2 did not return array"); } $this->client->return_type = 'xmlrpcvals'; } function testCatchWarnings() { $f = new xmlrpcmsg('examples.generatePHPWarning', array( new xmlrpcval('whatever', 'string') )); $v = $this->send($f); if($v) { $this->assertEquals($v->scalarval(), true); } } function testZeroParams() { $f = new xmlrpcmsg('system.listMethods'); $v = $this->send($f); } function testCodeInjectionServerSide() { $f = new xmlrpcmsg('system.MethodHelp'); $f->payload = "<?xml version=\"1.0\"?><methodCall><methodName>validator1.echoStructTest</methodName><params><param><value><struct><member><name>','')); echo('gotcha!'); die(); //</name></member></struct></value></param></params></methodCall>"; $v = $this->send($f); //$v = $r->faultCode(); if ($v) { $this->assertEquals(0, $v->structsize()); } } function testAutoRegisteredFunction() { $f=new xmlrpcmsg('examples.php.getStateName',array( new xmlrpcval(23, 'int') )); $v=$this->send($f); if($v) { $this->assertEquals('Michigan', $v->scalarval()); } else { $this->fail('Note: server can only auto register functions if running with PHP 5.0.3 and up'); } } function testAutoRegisteredMethod() { $func=wrap_xmlrpc_method($this->client, 'examples.getStateName'); if($func == '') { $this->fail('Registration of examples.getStateName failed'); } else { $v=$func(23); $this->assertEquals('Michigan', $v); } } function testGetCookies() { // let server set to us some cookies we tell it $cookies = array( //'c1' => array(), 'c2' => array('value' => 'c2'), 'c3' => array('value' => 'c3', 'expires' => time()+60*60*24*30), 'c4' => array('value' => 'c4', 'expires' => time()+60*60*24*30, 'path' => '/'), 'c5' => array('value' => 'c5', 'expires' => time()+60*60*24*30, 'path' => '/', 'domain' => 'localhost'), ); $cookiesval =& php_xmlrpc_encode($cookies); $f=new xmlrpcmsg('examples.setcookies',array($cookiesval)); $r=$this->send($f, 0, true); if($r) { $v = $r->value(); $this->assertEquals(1, $v->scalarval()); // now check if we decoded the cookies as we had set them $rcookies = $r->cookies(); foreach($cookies as $c => $v) // format for date string in cookies: 'Mon, 31 Oct 2005 13:50:56 GMT' // but PHP versions differ on that, some use 'Mon, 31-Oct-2005 13:50:56 GMT'... if(isset($v['expires'])) { if (isset($rcookies[$c]['expires']) && strpos($rcookies[$c]['expires'], '-')) { $cookies[$c]['expires'] = gmdate('D, d\-M\-Y H:i:s \G\M\T' ,$cookies[$c]['expires']); } else { $cookies[$c]['expires'] = gmdate('D, d M Y H:i:s \G\M\T' ,$cookies[$c]['expires']); } } $this->assertEquals($cookies, $rcookies); } } function testSetCookies() { // let server set to us some cookies we tell it $cookies = array( 'c0' => null, 'c1' => 1, 'c2' => '2 3', 'c3' => '!@#$%^&*()_+|}{":?><,./\';[]\\=-' ); $f=new xmlrpcmsg('examples.getallheaders',array()); foreach ($cookies as $cookie => $val) { $this->client->setCookie($cookie, $val); // build the same Cookie header returned by php in getallheaders $cookies[$cookie] = "$cookie=".urlencode($val); } $r = $this->client->send($f, $this->timeout, $this->method); $this->assertEquals($r->faultCode(), 0, 'Error '.$r->faultCode().' connecting to server: '.$r->faultString()); if(!$r->faultCode()) { $v = $r->value(); $v = $v->structmem('Cookie'); // on IIS and Apache getallheaders returns something slightly different... $this->assertEquals(implode(',', $cookies), str_replace(', ', ',', $v->scalarval())); } } function testSendTwiceSameMsg() { $f=new xmlrpcmsg('examples.stringecho', array( new xmlrpcval('hello world', 'string') )); $v1 = $this->send($f); $v2 = $this->send($f); //$v = $r->faultCode(); if ($v1 && $v2) { $this->assertEquals($v2, $v1); } } } class LocalHostMultiTests extends LocalhostTests { function _runtests() { global $failed_tests; foreach(get_class_methods('LocalhostTests') as $meth) { if(strpos($meth, 'test') === 0 && $meth != 'testHttps') { if (!isset($failed_tests[$meth])) $this->$meth(); } if ($this->_failed) { break; } } } function testDeflate() { if(!function_exists('gzdeflate')) { $this->fail('Zlib missing: cannot test deflate functionality'); return; } $this->client->accepted_compression = array('deflate'); $this->client->request_compression = 'deflate'; $this->_runtests(); } function testGzip() { if(!function_exists('gzdeflate')) { $this->fail('Zlib missing: cannot test gzip functionality'); return; } $this->client->accepted_compression = array('gzip'); $this->client->request_compression = 'gzip'; $this->_runtests(); } function testKeepAlives() { if(!function_exists('curl_init')) { $this->fail('CURL missing: cannot test http 1.1'); return; } $this->method = 'http11'; $this->client->keepalive = true; $this->_runtests(); } function testProxy() { global $PROXYSERVER, $PROXYPORT; if ($PROXYSERVER) { $this->client->setProxy($PROXYSERVER, $PROXYPORT); $this->_runtests(); } else $this->fail('PROXY definition missing: cannot test proxy'); } function testHttp11() { if(!function_exists('curl_init')) { $this->fail('CURL missing: cannot test http 1.1'); return; } $this->method = 'http11'; // not an error the double assignment! $this->client->method = 'http11'; //$this->client->verifyhost = 0; //$this->client->verifypeer = 0; $this->client->keepalive = false; $this->_runtests(); } function testHttp11Gzip() { if(!function_exists('curl_init')) { $this->fail('CURL missing: cannot test http 1.1'); return; } $this->method = 'http11'; // not an error the double assignment! $this->client->method = 'http11'; $this->client->keepalive = false; $this->client->accepted_compression = array('gzip'); $this->client->request_compression = 'gzip'; $this->_runtests(); } function testHttp11Deflate() { if(!function_exists('curl_init')) { $this->fail('CURL missing: cannot test http 1.1'); return; } $this->method = 'http11'; // not an error the double assignment! $this->client->method = 'http11'; $this->client->keepalive = false; $this->client->accepted_compression = array('deflate'); $this->client->request_compression = 'deflate'; $this->_runtests(); } function testHttp11Proxy() { global $PROXYSERVER, $PROXYPORT; if(!function_exists('curl_init')) { $this->fail('CURL missing: cannot test http 1.1 w. proxy'); return; } else if ($PROXYSERVER == '') { $this->fail('PROXY definition missing: cannot test proxy w. http 1.1'); return; } $this->method = 'http11'; // not an error the double assignment! $this->client->method = 'http11'; $this->client->setProxy($PROXYSERVER, $PROXYPORT); //$this->client->verifyhost = 0; //$this->client->verifypeer = 0; $this->client->keepalive = false; $this->_runtests(); } function testHttps() { global $HTTPSSERVER, $HTTPSURI; if(!function_exists('curl_init')) { $this->fail('CURL missing: cannot test https functionality'); return; } $this->client->server = $HTTPSSERVER; $this->method = 'https'; $this->client->method = 'https'; $this->client->path = $HTTPSURI; $this->_runtests(); } function testHttpsProxy() { global $HTTPSSERVER, $HTTPSURI, $PROXYSERVER, $PROXYPORT;; if(!function_exists('curl_init')) { $this->fail('CURL missing: cannot test https functionality'); return; } else if ($PROXYSERVER == '') { $this->fail('PROXY definition missing: cannot test proxy w. http 1.1'); return; } $this->client->server = $HTTPSSERVER; $this->method = 'https'; $this->client->method = 'https'; $this->client->setProxy($PROXYSERVER, $PROXYPORT); $this->client->path = $HTTPSURI; $this->_runtests(); } function testUTF8Responses() { global $URI; //$this->client->path = strpos($URI, '?') === null ? $URI.'?RESPONSE_ENCODING=UTF-8' : $URI.'&RESPONSE_ENCODING=UTF-8'; $this->client->path = $URI.'?RESPONSE_ENCODING=UTF-8'; $this->_runtests(); } function testUTF8Requests() { $this->client->request_charset_encoding = 'UTF-8'; $this->_runtests(); } function testISOResponses() { global $URI; //$this->client->path = strpos($URI, '?') === null ? $URI.'?RESPONSE_ENCODING=UTF-8' : $URI.'&RESPONSE_ENCODING=UTF-8'; $this->client->path = $URI.'?RESPONSE_ENCODING=ISO-8859-1'; $this->_runtests(); } function testISORequests() { $this->client->request_charset_encoding = 'ISO-8859-1'; $this->_runtests(); } } class ParsingBugsTests extends PHPUnit_TestCase { function testMinusOneString() { $v=new xmlrpcval('-1'); $u=new xmlrpcval('-1', 'string'); $this->assertEquals($u->scalarval(), $v->scalarval()); } function testUnicodeInMemberName(){ $v = array('G黱ter, El鑞e' => new xmlrpcval(1)); $r = new xmlrpcresp(new xmlrpcval($v, 'struct')); $r = $r->serialize(); $m = new xmlrpcmsg('dummy'); $r = $m->parseResponse($r); $v = $r->value(); $this->assertEquals($v->structmemexists('G黱ter, El鑞e'), true); } function testUnicodeInErrorString() { $response = utf8_encode('<?xml version="1.0"?><!-- $Id --><!-- found by G. giunta, covers what happens when lib receives UTF8 chars in reponse text and comments --><!-- 帱
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?