X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=tests%2F3LocalhostTest.php;h=4b721d6214e4084ab1126f3da0cfe198b87ce7a4;hb=a56b8ca18c8f34d2018d6f2099c25b3539804d19;hp=b782319fd4c354ca9db49bf13acde82d6cc5689f;hpb=5282cf295c80ee4acfdde505e7122d050e574596;p=plcapi.git diff --git a/tests/3LocalhostTest.php b/tests/3LocalhostTest.php index b782319..4b721d6 100644 --- a/tests/3LocalhostTest.php +++ b/tests/3LocalhostTest.php @@ -5,6 +5,10 @@ include_once __DIR__ . '/../lib/xmlrpc_wrappers.inc'; include_once __DIR__ . '/parse_args.php'; +/** + * Tests which involve interaction between the client and the server. + * They are run against the server found in demo/server.php + */ class LocalhostTest extends PHPUnit_Framework_TestCase { /** @var xmlrpc_client $client */ @@ -529,7 +533,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... @@ -552,55 +556,198 @@ And turned it into nylon'; } } - public function testAutoRegisteredFunction() + public function testServerWrappedFunction() { - $f = new xmlrpcmsg('examples.php.getStateName', array( + $f = new xmlrpcmsg('tests.getStateName.2', 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'); - } + $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 testAutoRegisteredClass() + public function testServerWrappedFunctionAsSource() { - $f = new xmlrpcmsg('examples.php2.getStateName', array( + $f = new xmlrpcmsg('tests.getStateName.6', array( new xmlrpcval(23, 'int'), )); $v = $this->send($f); - if ($v) { - $this->assertEquals('Michigan', $v->scalarval()); - $f = new xmlrpcmsg('examples.php3.getStateName', array( - new xmlrpcval(23, 'int'), - )); - $v = $this->send($f); - if ($v) { - $this->assertEquals('Michigan', $v->scalarval()); - } + $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() + { + $f = new xmlrpcmsg('tests.getStateName.3', array( + new xmlrpcval(23, 'int'), + )); + $v = $this->send($f); + $this->assertEquals('Michigan', $v->scalarval()); + + $f = new xmlrpcmsg('tests.getStateName.4', array( + new xmlrpcval(23, 'int'), + )); + $v = $this->send($f); + $this->assertEquals('Michigan', $v->scalarval()); + + $f = new xmlrpcmsg('tests.getStateName.5', array( + new xmlrpcval(23, 'int'), + )); + $v = $this->send($f); + $this->assertEquals('Michigan', $v->scalarval()); + + $f = new xmlrpcmsg('tests.getStateName.7', array( + new xmlrpcval(23, 'int'), + )); + $v = $this->send($f); + $this->assertEquals('Michigan', $v->scalarval()); + + $f = new xmlrpcmsg('tests.getStateName.8', array( + new xmlrpcval(23, 'int'), + )); + $v = $this->send($f); + $this->assertEquals('Michigan', $v->scalarval()); + + $f = new xmlrpcmsg('tests.getStateName.9', array( + new xmlrpcval(23, 'int'), + )); + $v = $this->send($f); + $this->assertEquals('Michigan', $v->scalarval()); + } + + public function testServerWrappedObjectMethodsAsSource() + { + $f = new xmlrpcmsg('tests.getStateName.7', array( + new xmlrpcval(23, 'int'), + )); + $v = $this->send($f); + $this->assertEquals('Michigan', $v->scalarval()); + + $f = new xmlrpcmsg('tests.getStateName.8', array( + new xmlrpcval(23, 'int'), + )); + $v = $this->send($f); + $this->assertEquals('Michigan', $v->scalarval()); + + $f = new xmlrpcmsg('tests.getStateName.9', array( + new xmlrpcval(23, 'int'), + )); + $v = $this->send($f); + $this->assertEquals('Michigan', $v->scalarval()); + } + + public function testServerClosure() + { + $f = new xmlrpcmsg('tests.getStateName.10', array( + new xmlrpcval(23, 'int'), + )); + $v = $this->send($f); + $this->assertEquals('Michigan', $v->scalarval()); + } + + 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'), + )); + $v = $this->send($f); + $this->assertEquals('Michigan', $v->scalarval()); + } + + public function testWrappedMethod() + { + // 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)); + if ($func == false) { + $this->fail('Registration of examples.getStateName failed'); } else { - $this->fail('Note: server can only auto register class methods if running with PHP 5.0.3 and up'); + $v = $func(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 testAutoRegisteredMethod() + public function testWrappedMethodAsSource() { // 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' => 1)); - if ($func == '') { + $func = wrap_xmlrpc_method($this->client, 'examples.getStateName', array('simple_client_copy' => 0, 'return_source' => true)); + if ($func == false) { $this->fail('Registration of examples.getStateName failed'); } else { + 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); } } + public function testWrappedClass() + { + // make a 'deep client copy' as the original one might have many properties set + // 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 (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