Skip to content

Commit

Permalink
test exceptions thrown in wrapped code; make testsuite faster by not …
Browse files Browse the repository at this point in the history
…wrapping the whole server
  • Loading branch information
gggeek committed May 23, 2015
1 parent 2503e40 commit 2563dc1
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 9 deletions.
16 changes: 10 additions & 6 deletions demo/server/server.php
Expand Up @@ -53,10 +53,12 @@ public function exceptionGenerator($req)
}

/**
* 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);
Expand Down Expand Up @@ -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)
{
Expand All @@ -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);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/Wrapper.php
Expand Up @@ -966,7 +966,7 @@ protected function buildWrapMethodSource($client, $methodName, array $extraOptio
*
* @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
Expand Down
17 changes: 15 additions & 2 deletions tests/3LocalhostTest.php
Expand Up @@ -533,7 +533,7 @@ public function testCatchExceptions()
));
$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...
Expand Down Expand Up @@ -563,6 +563,12 @@ public function testServerWrappedFunction()
));
$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()
Expand All @@ -572,6 +578,12 @@ public function testServerWrappedFunctionAsSource()
));
$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()
Expand Down Expand Up @@ -698,7 +710,8 @@ public function testWrappedMethodAsSource()
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 {
Expand Down

0 comments on commit 2563dc1

Please sign in to comment.