X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=tests%2F3LocalhostTest.php;h=220878ea986012efd063d37fbe390714f739e40c;hb=3cb8e96d8cab32cb117518cc305b953b358a2651;hp=f559fa6f8120de88e6c84d631015f416826dc29a;hpb=2503e40912ae30a40c339127519846c2f66bbd4a;p=plcapi.git diff --git a/tests/3LocalhostTest.php b/tests/3LocalhostTest.php index f559fa6..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'); @@ -563,6 +593,20 @@ And turned it into nylon'; )); $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 testServerWrappedFunctionAsSource() @@ -572,6 +616,12 @@ And turned it into nylon'; )); $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 testServerWrappedObjectMethods() @@ -669,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); } } @@ -687,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); } } @@ -698,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 @@ -786,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(