X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=tests%2F3LocalhostTest.php;h=220878ea986012efd063d37fbe390714f739e40c;hb=19b99735570521d8172f73124ade5997b9dca75d;hp=e205c9e8bc89ac47c19e8a799231dc65f646d604;hpb=58c58d4953465ea14af366ddc2afc8d901715461;p=plcapi.git diff --git a/tests/3LocalhostTest.php b/tests/3LocalhostTest.php index e205c9e..220878e 100644 --- a/tests/3LocalhostTest.php +++ b/tests/3LocalhostTest.php @@ -112,6 +112,12 @@ class LocalhostTest extends PHPUnit_Framework_TestCase } } + /** + * @param PhpXmlRpc\Request|array $msg + * @param int|array $errorCode + * @param bool $returnResponse + * @return mixed|\PhpXmlRpc\Response|\PhpXmlRpc\Response[]|\PhpXmlRpc\Value|string|void + */ protected function send($msg, $errorCode = 0, $returnResponse = false) { if ($this->collectCodeCoverageInformation) { @@ -533,7 +539,7 @@ And turned it into nylon'; )); $v = $this->send($f, $GLOBALS['xmlrpcerr']['server_error']); $this->client->path = $this->args['URI'] . '?EXCEPTION_HANDLING=1'; - $v = $this->send($f, 1); + $v = $this->send($f, 1); // the error code of the expected exception $this->client->path = $this->args['URI'] . '?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... @@ -546,6 +552,30 @@ And turned it into nylon'; $v = $this->send($f); } + public function testNullParams() + { + $f = new xmlrpcmsg('tests.getStateName.12', array( + new xmlrpcval('whatever', 'null'), + new xmlrpcval(23, 'int'), + )); + $v = $this->send($f); + if ($v) { + $this->assertEquals('Michigan', $v->scalarval()); + } + $f = new xmlrpcmsg('tests.getStateName.12', array( + new xmlrpcval(23, 'int'), + new xmlrpcval('whatever', 'null'), + )); + $v = $this->send($f); + if ($v) { + $this->assertEquals('Michigan', $v->scalarval()); + } + $f = new xmlrpcmsg('tests.getStateName.12', array( + new xmlrpcval(23, 'int') + )); + $v = $this->send($f, array($GLOBALS['xmlrpcerr']['incorrect_params'])); + } + public function testCodeInjectionServerSide() { $f = new xmlrpcmsg('system.MethodHelp'); @@ -556,25 +586,45 @@ And turned it into nylon'; } } - public function testAutoRegisteredFunction() + public function testServerWrappedFunction() { $f = new xmlrpcmsg('tests.getStateName.2', array( new xmlrpcval(23, 'int'), )); $v = $this->send($f); $this->assertEquals('Michigan', $v->scalarval()); + + // this generates an exception in the function which was wrapped, which is by default wrapped in a known error response + $f = new xmlrpcmsg('tests.getStateName.2', array( + new xmlrpcval(0, 'int'), + )); + $v = $this->send($f, $GLOBALS['xmlrpcerr']['server_error']); + + // check if the generated function dispatch map is fine, by checking if the server registered it + $f = new xmlrpcmsg('system.methodSignature', array( + new xmlrpcval('tests.getStateName.2'), + )); + $v = $this->send($f); + $encoder = new \PhpXmlRpc\Encoder(); + $this->assertEquals(array(array('string', 'int')), $encoder->decode($v)); } - public function testAutoRegisteredFunction2() + public function testServerWrappedFunctionAsSource() { $f = new xmlrpcmsg('tests.getStateName.6', array( new xmlrpcval(23, 'int'), )); $v = $this->send($f); $this->assertEquals('Michigan', $v->scalarval()); + + // this generates an exception in the function which was wrapped, which is by default wrapped in a known error response + $f = new xmlrpcmsg('tests.getStateName.6', array( + new xmlrpcval(0, 'int'), + )); + $v = $this->send($f, $GLOBALS['xmlrpcerr']['server_error']); } - public function testAutoRegisteredMethods() + public function testServerWrappedObjectMethods() { $f = new xmlrpcmsg('tests.getStateName.3', array( new xmlrpcval(23, 'int'), @@ -613,7 +663,7 @@ And turned it into nylon'; $this->assertEquals('Michigan', $v->scalarval()); } - public function testAutoRegisteredMethods2() + public function testServerWrappedObjectMethodsAsSource() { $f = new xmlrpcmsg('tests.getStateName.7', array( new xmlrpcval(23, 'int'), @@ -634,7 +684,7 @@ And turned it into nylon'; $this->assertEquals('Michigan', $v->scalarval()); } - public function testAutoRegisteredClosure() + public function testServerClosure() { $f = new xmlrpcmsg('tests.getStateName.10', array( new xmlrpcval(23, 'int'), @@ -643,7 +693,16 @@ And turned it into nylon'; $this->assertEquals('Michigan', $v->scalarval()); } - public function testAutoRegisteredClass() + public function testServerWrappedClosure() + { + $f = new xmlrpcmsg('tests.getStateName.11', array( + new xmlrpcval(23, 'int'), + )); + $v = $this->send($f); + $this->assertEquals('Michigan', $v->scalarval()); + } + + public function testServerWrappedClass() { $f = new xmlrpcmsg('tests.xmlrpcServerMethodsContainer.findState', array( new xmlrpcval(23, 'int'), @@ -660,10 +719,10 @@ And turned it into nylon'; $this->fail('Registration of examples.getStateName failed'); } else { $v = $func(23); - // work around bug in current version of phpunit - if (is_object($v)) { + // 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); } } @@ -678,10 +737,10 @@ And turned it into nylon'; eval($func['source']); $func = $func['function']; $v = $func(23); - // work around bug in current version of phpunit - if (is_object($v)) { + // 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); } } @@ -689,20 +748,36 @@ And turned it into nylon'; public function testWrappedClass() { // make a 'deep client copy' as the original one might have many properties set - $class = wrap_xmlrpc_server($this->client, array('simple_client_copy' => 0)); + // also for speed only wrap one method of the whole server + $class = wrap_xmlrpc_server($this->client, array('simple_client_copy' => 0, 'method_filter' => '/examples\.getStateName/' )); if ($class == '') { $this->fail('Registration of remote server failed'); } else { $obj = new $class(); $v = $obj->examples_getStateName(23); - // work around bug in current version of phpunit - if (is_object($v)) { + // 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, + 'decode_php_objs' => true)); + if ($func == false) { + $this->fail('Registration of tests.returnPhpObject failed'); + } else { + $v = $func(); + $obj = new stdClass(); + $obj->hello = 'world'; + $this->assertEquals($obj, $v); + } + } + public function testGetCookies() { // let server set to us some cookies we tell it @@ -777,6 +852,15 @@ And turned it into nylon'; } } + public function testServerComments() + { + $f = new xmlrpcmsg('tests.xmlrpcServerMethodsContainer.debugMessageGenerator', array( + new xmlrpcval('hello world', 'string'), + )); + $r = $this->send($f, 0, true); + $this->assertContains('hello world', $r->raw_data); + } + public function testSendTwiceSameMsg() { $f = new xmlrpcmsg('examples.stringecho', array(