test exceptions thrown in wrapped code; make testsuite faster by not wrapping the...
authorgggeek <giunta.gaetano@gmail.com>
Sat, 23 May 2015 20:40:54 +0000 (21:40 +0100)
committergggeek <giunta.gaetano@gmail.com>
Sat, 23 May 2015 20:40:54 +0000 (21:40 +0100)
demo/server/server.php
src/Wrapper.php
tests/3LocalhostTest.php

index 6f0a430..3880428 100644 (file)
@@ -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);
     }
 }
 
index 4b70dc1..f94f807 100644 (file)
@@ -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
index f559fa6..3675d9d 100644 (file)
@@ -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 {