From: gggeek Date: Sat, 23 May 2015 20:40:54 +0000 (+0100) Subject: test exceptions thrown in wrapped code; make testsuite faster by not wrapping the... X-Git-Tag: 4.0.0-alpha^2~40 X-Git-Url: http://git.onelab.eu/?p=plcapi.git;a=commitdiff_plain;h=2563dc16dca36ef97c14503a98dd79725d10f755 test exceptions thrown in wrapped code; make testsuite faster by not wrapping the whole server --- diff --git a/demo/server/server.php b/demo/server/server.php index 6f0a430..3880428 100644 --- a/demo/server/server.php +++ b/demo/server/server.php @@ -53,10 +53,12 @@ class xmlrpcServerMethodsContainer } /** - * A PHP version of the state-number server. Send me an integer and i'll sell you a state - * @param integer $num - * @return string - */ + * A PHP version of the state-number server. Send me an integer and i'll sell you a state. + * + * @param integer $num + * @return string + * @throws Exception + */ public static function findState($num) { return inner_findstate($num); @@ -114,11 +116,13 @@ function findState($req) /** * Inner code of the state-number server. - * Used to test auto-registration of PHP functions as xmlrpc methods. + * Used to test wrapping of PHP functions into xmlrpc methods. * * @param integer $stateNo the state number * * @return string the name of the state (or error description) + * + * @throws Exception if state is not found */ function inner_findstate($stateNo) { @@ -128,7 +132,7 @@ function inner_findstate($stateNo) return $stateNames[$stateNo - 1]; } else { // not, there so complain - return "I don't have a state for the index '" . $stateNo . "'"; + throw new Exception("I don't have a state for the index '" . $stateNo . "'", PhpXmlRpc\PhpXmlRpc::$xmlrpcerruser); } } diff --git a/src/Wrapper.php b/src/Wrapper.php index 4b70dc1..f94f807 100644 --- a/src/Wrapper.php +++ b/src/Wrapper.php @@ -966,7 +966,7 @@ class Wrapper * * @param Client $client the client obj all set to query the desired server * @param array $extraOptions list of options for wrapped code. See the ones from wrap_xmlrpc_method plus - * - string method_filter + * - string method_filter regular expression * - string new_class_name * - string prefix * - bool simple_client_copy set it to true to avoid copying all properties of $client into the copy made in the new class diff --git a/tests/3LocalhostTest.php b/tests/3LocalhostTest.php index f559fa6..3675d9d 100644 --- a/tests/3LocalhostTest.php +++ b/tests/3LocalhostTest.php @@ -533,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... @@ -563,6 +563,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.2', array( + new xmlrpcval(0, 'int'), + )); + $v = $this->send($f, $GLOBALS['xmlrpcerr']['server_error']); } public function testServerWrappedFunctionAsSource() @@ -572,6 +578,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() @@ -698,7 +710,8 @@ 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 {