X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=php%2Fphpxmlrpc%2Ftests%2F5ServerTest.php;fp=php%2Fphpxmlrpc%2Ftests%2F3LocalhostTest.php;h=0345b79722b820a22d0aa6cfe3a59cb2fabee635;hb=c379c0fff5edc592cc5d5d647c7fadb91317db87;hp=0290dbf97eab1bbc4fe91bf27fbcf3d979df059e;hpb=ae8b10f8363f7a1df02e77cbd820904c4ded10b8;p=plcapi.git diff --git a/php/phpxmlrpc/tests/3LocalhostTest.php b/php/phpxmlrpc/tests/5ServerTest.php similarity index 88% rename from php/phpxmlrpc/tests/3LocalhostTest.php rename to php/phpxmlrpc/tests/5ServerTest.php index 0290dbf..0345b79 100644 --- a/php/phpxmlrpc/tests/3LocalhostTest.php +++ b/php/phpxmlrpc/tests/5ServerTest.php @@ -5,11 +5,18 @@ include_once __DIR__ . '/../lib/xmlrpc_wrappers.inc'; include_once __DIR__ . '/parse_args.php'; +include_once __DIR__ . '/PolyfillTestCase.php'; + +use PHPUnit\Extensions\SeleniumCommon\RemoteCoverage; +use PHPUnit\Framework\TestResult; +use PHPUnit\Runner\BaseTestRunner; + /** * Tests which involve interaction between the client and the server. - * They are run against the server found in demo/server.php + * They are run against the server found in demo/server.php. + * Includes testing of (some of) the Wrapper class */ -class LocalhostTest extends PHPUnit_Framework_TestCase +class ServerTest extends PhpXmlRpc_PolyfillTestCase { /** @var xmlrpc_client $client */ protected $client = null; @@ -26,7 +33,10 @@ class LocalhostTest extends PHPUnit_Framework_TestCase protected $collectCodeCoverageInformation; protected $coverageScriptUrl; - public static function fail($message = '') + /** + * @todo instead of overriding fail via _fail, implement Yoast\PHPUnitPolyfills\TestListeners\TestListenerDefaultImplementation + */ + public static function _fail($message = '') { // save in a static var that this particular test has failed // (but only if not called from subclass objects / multitests) @@ -40,18 +50,20 @@ class LocalhostTest extends PHPUnit_Framework_TestCase } } - parent::fail($message); + parent::_fail($message); } /** * Reimplemented to allow us to collect code coverage info from the target server. * Code taken from PHPUnit_Extensions_Selenium2TestCase * - * @param PHPUnit_Framework_TestResult $result - * @return PHPUnit_Framework_TestResult + * @param TestResult $result + * @return TestResult * @throws Exception + * + * @todo instead of overriding run via _run, try to achieve this by implementing Yoast\PHPUnitPolyfills\TestListeners\TestListenerDefaultImplementation */ - public function run(PHPUnit_Framework_TestResult $result = NULL) + public function _run($result = NULL) { $this->testId = get_class($this) . '__' . $this->getName(); @@ -61,10 +73,10 @@ class LocalhostTest extends PHPUnit_Framework_TestCase $this->collectCodeCoverageInformation = $result->getCollectCodeCoverageInformation(); - parent::run($result); + parent::_run($result); if ($this->collectCodeCoverageInformation) { - $coverage = new PHPUnit_Extensions_SeleniumCommon_RemoteCoverage( + $coverage = new RemoteCoverage( $this->coverageScriptUrl, $this->testId ); @@ -79,44 +91,44 @@ class LocalhostTest extends PHPUnit_Framework_TestCase return $result; } - public function setUp() + public function set_up() { $this->args = argParser::getArgs(); - $server = explode(':', $this->args['LOCALSERVER']); + $server = explode(':', $this->args['HTTPSERVER']); if (count($server) > 1) { - $this->client = new xmlrpc_client($this->args['URI'], $server[0], $server[1]); + $this->client = new xmlrpc_client($this->args['HTTPURI'], $server[0], $server[1]); } else { - $this->client = new xmlrpc_client($this->args['URI'], $this->args['LOCALSERVER']); + $this->client = new xmlrpc_client($this->args['HTTPURI'], $this->args['HTTPSERVER']); } $this->client->setDebug($this->args['DEBUG']); $this->client->request_compression = $this->request_compression; $this->client->accepted_compression = $this->accepted_compression; - $this->coverageScriptUrl = 'http://' . $this->args['LOCALSERVER'] . '/' . str_replace( '/demo/server/server.php', 'tests/phpunit_coverage.php', $this->args['URI'] ); + $this->coverageScriptUrl = 'http://' . $this->args['HTTPSERVER'] . '/' . str_replace( '/demo/server/server.php', 'tests/phpunit_coverage.php', $this->args['HTTPURI'] ); if ($this->args['DEBUG'] == 1) ob_start(); } - protected function tearDown() + protected function tear_down() { if ($this->args['DEBUG'] != 1) return; $out = ob_get_clean(); $status = $this->getStatus(); - if ($status == PHPUnit_Runner_BaseTestRunner::STATUS_ERROR - || $status == PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE) { + if ($status == BaseTestRunner::STATUS_ERROR + || $status == BaseTestRunner::STATUS_FAILURE) { echo $out; } } /** * @param PhpXmlRpc\Request|array $msg - * @param int|array $errorCode + * @param int|array $errorCode expected error codes * @param bool $returnResponse - * @return mixed|\PhpXmlRpc\Response|\PhpXmlRpc\Response[]|\PhpXmlRpc\Value|string|void + * @return mixed|\PhpXmlRpc\Response|\PhpXmlRpc\Response[]|\PhpXmlRpc\Value|string|null */ protected function send($msg, $errorCode = 0, $returnResponse = false) { @@ -141,10 +153,22 @@ class LocalhostTest extends PHPUnit_Framework_TestCase return $r->value(); } } else { - return; + return null; } } + /** + * Adds (and replaces) query params to the url currently used by the client + * @param array $data + */ + protected function addQueryParams($data) + { + $query = parse_url($this->client->path, PHP_URL_QUERY); + parse_str($query, $vars); + $query = http_build_query(array_merge($vars, $data)); + $this->client->path = parse_url($this->client->path, PHP_URL_PATH) . '?' . $query; + } + public function testString() { $sendString = "here are 3 \"entities\": < > & " . @@ -235,7 +259,7 @@ class LocalhostTest extends PHPUnit_Framework_TestCase PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding = 'UTF-8'; // no encoding declaration either in the http header or xml prolog, let mb_detect_encoding // (used on the server side) sort it out - $this->client->path = $this->args['URI'].'?DETECT_ENCODINGS[]=EUC-JP&DETECT_ENCODINGS[]=UTF-8'; + $this->addQueryParams(array('DETECT_ENCODINGS' => array('EUC-JP', 'UTF-8'))); $v = $this->send(mb_convert_encoding($str, 'EUC-JP', 'UTF-8')); $this->assertEquals($sendString, $v->scalarval()); PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding = 'ISO-8859-1'; @@ -261,7 +285,7 @@ class LocalhostTest extends PHPUnit_Framework_TestCase // no encoding declaration either in the http header or xml prolog, let mb_detect_encoding // (used on the server side) sort it out - $this->client->path = $this->args['URI'].'?DETECT_ENCODINGS[]=ISO-8859-1&DETECT_ENCODINGS[]=UTF-8'; + $this->addQueryParams(array('DETECT_ENCODINGS' => array('ISO-8859-1', 'UTF-8'))); $v = $this->send($str); $this->assertEquals($sendString, $v->scalarval()); } @@ -411,7 +435,7 @@ And turned it into nylon'; $got = ''; $expected = '37210'; $expect_array = array('ctLeftAngleBrackets', 'ctRightAngleBrackets', 'ctAmpersands', 'ctApostrophes', 'ctQuotes'); - while (list(, $val) = each($expect_array)) { + foreach($expect_array as $val) { $b = $v->structmem($val); $got .= $b->me['int']; } @@ -488,6 +512,7 @@ And turned it into nylon'; { // NB: This test will NOT pass if server does not support system.multicall. + $noMultiCall = $this->client->no_multicall; $this->client->no_multicall = false; $good1 = new xmlrpcmsg('system.methodHelp', @@ -525,12 +550,15 @@ And turned it into nylon'; $this->assertTrue($this->client->no_multicall == false, "server does not support system.multicall" ); + + $this->client->no_multicall = $noMultiCall; } public function testClientMulticall2() { // NB: This test will NOT pass if server does not support system.multicall. + $noMultiCall = $this->client->no_multicall; $this->client->no_multicall = true; $good1 = new xmlrpcmsg('system.methodHelp', @@ -562,12 +590,17 @@ And turned it into nylon'; $val = $r[3]->value(); $this->assertTrue($val->kindOf() == 'array', "good2 did not return array"); } + + $this->client->no_multicall = $noMultiCall; } public function testClientMulticall3() { // NB: This test will NOT pass if server does not support system.multicall. + $noMultiCall = $this->client->no_multicall; + $returnType = $this->client->return_type; + $this->client->return_type = 'phpvals'; $this->client->no_multicall = false; @@ -598,7 +631,9 @@ And turned it into nylon'; $val = $r[3]->value(); $this->assertTrue(is_array($val), "good2 did not return array"); } - $this->client->return_type = 'xmlrpcvals'; + + $this->client->return_type = $returnType; + $this->client->no_multicall = $noMultiCall; } public function testCatchWarnings() @@ -618,9 +653,9 @@ And turned it into nylon'; new xmlrpcval('whatever', 'string'), )); $v = $this->send($m, $GLOBALS['xmlrpcerr']['server_error']); - $this->client->path = $this->args['URI'] . '?EXCEPTION_HANDLING=1'; + $this->addQueryParams(array('EXCEPTION_HANDLING' => 1)); $v = $this->send($m, 1); // the error code of the expected exception - $this->client->path = $this->args['URI'] . '?EXCEPTION_HANDLING=2'; + $this->addQueryParams(array('EXCEPTION_HANDLING' => 2)); // depending on whether display_errors is ON or OFF on the server, we will get back a different error here, // as php will generate an http status code of either 200 or 500... $v = $this->send($m, array($GLOBALS['xmlrpcerr']['invalid_return'], $GLOBALS['xmlrpcerr']['http_error'])); @@ -791,6 +826,30 @@ And turned it into nylon'; $this->assertEquals('Michigan', $v->scalarval()); } + public function testServerWrappedClassWithNamespace() + { + $m = new xmlrpcmsg('namespacetest.findState', array( + new xmlrpcval(23, 'int'), + )); + $v = $this->send($m); + $this->assertEquals('Michigan', $v->scalarval()); + } + + public function testWrapInexistentMethod() + { + // make a 'deep client copy' as the original one might have many properties set + $func = wrap_xmlrpc_method($this->client, 'examples.getStateName.notexisting', array('simple_client_copy' => 0)); + $this->assertEquals(false, $func); + } + + public function testWrapInexistentUrl() + { + $this->client->path = '/notexisting'; + // make a 'deep client copy' as the original one might have many properties set + $func = wrap_xmlrpc_method($this->client, 'examples.getStateName', array('simple_client_copy' => 0)); + $this->assertEquals(false, $func); + } + public function testWrappedMethod() { // make a 'deep client copy' as the original one might have many properties set @@ -834,19 +893,23 @@ And turned it into nylon'; $this->fail('Registration of remote server failed'); } else { $obj = new $class(); - $v = $obj->examples_getStateName(23); - // work around bug in current (or old?) version of phpunit when reporting the error - /*if (is_object($v)) { - $v = var_export($v, true); - }*/ - $this->assertEquals('Michigan', $v); + if (!is_callable(array($obj, 'examples_getStateName'))) { + $this->fail('Registration of remote server failed to import method "examples_getStateName"'); + } else { + $v = $obj->examples_getStateName(23); + // work around bug in current (or old?) version of phpunit when reporting the error + /*if (is_object($v)) { + $v = var_export($v, true); + }*/ + $this->assertEquals('Michigan', $v); + } } } public function testTransferOfObjectViaWrapping() { // make a 'deep client copy' as the original one might have many properties set - $func = wrap_xmlrpc_method($this->client, 'tests.returnPhpObject', array('simple_client_copy' => true, + $func = wrap_xmlrpc_method($this->client, 'tests.returnPhpObject', array('simple_client_copy' => 0, 'decode_php_objs' => true)); if ($func == false) { $this->fail('Registration of tests.returnPhpObject failed'); @@ -938,7 +1001,7 @@ And turned it into nylon'; new xmlrpcval('hello world', 'string'), )); $r = $this->send($m, 0, true); - $this->assertContains('hello world', $r->raw_data); + $this->assertStringContainsString('hello world', $r->raw_data); } public function testSendTwiceSameMsg()