markTestSkipped('SOAP Extension is not loaded'); } } public function testSetOptions() { $server = new Zend_Soap_Server(); $this->assertTrue($server->getOptions() == array('soap_version' => SOAP_1_2)); $options = array('soap_version' => SOAP_1_1, 'actor' => 'http://framework.zend.com/Zend_Soap_ServerTest.php', 'classmap' => array('TestData1' => 'Zend_Soap_Server_TestData1', 'TestData2' => 'Zend_Soap_Server_TestData2',), 'encoding' => 'ISO-8859-1', 'uri' => 'http://framework.zend.com/Zend_Soap_ServerTest.php' ); $server->setOptions($options); $this->assertTrue($server->getOptions() == $options); } public function testSetOptionsViaSecondConstructorArgument() { $options = array( 'soap_version' => SOAP_1_1, 'actor' => 'http://framework.zend.com/Zend_Soap_ServerTest.php', 'classmap' => array( 'TestData1' => 'Zend_Soap_Server_TestData1', 'TestData2' => 'Zend_Soap_Server_TestData2', ), 'encoding' => 'ISO-8859-1', 'uri' => 'http://framework.zend.com/Zend_Soap_ServerTest.php', ); $server = new Zend_Soap_Server(null, $options); $this->assertTrue($server->getOptions() == $options); } public function testSetWsdlViaOptionsArrayIsPossible() { $server = new Zend_Soap_Server(); $server->setOptions(array('wsdl' => 'http://www.example.com/test.wsdl')); $this->assertEquals('http://www.example.com/test.wsdl', $server->getWsdl()); } public function testGetOptions() { $server = new Zend_Soap_Server(); $this->assertTrue($server->getOptions() == array('soap_version' => SOAP_1_2)); $options = array('soap_version' => SOAP_1_1, 'uri' => 'http://framework.zend.com/Zend_Soap_ServerTest.php' ); $server->setOptions($options); $this->assertTrue($server->getOptions() == $options); } public function testEncoding() { $server = new Zend_Soap_Server(); $this->assertNull($server->getEncoding()); $server->setEncoding('ISO-8859-1'); $this->assertEquals('ISO-8859-1', $server->getEncoding()); try { $server->setEncoding(array('UTF-8')); $this->fail('Non-string encoding values should fail'); } catch (Exception $e) { // success } } public function testSoapVersion() { $server = new Zend_Soap_Server(); $this->assertEquals(SOAP_1_2, $server->getSoapVersion()); $server->setSoapVersion(SOAP_1_1); $this->assertEquals(SOAP_1_1, $server->getSoapVersion()); try { $server->setSoapVersion('bogus'); $this->fail('Invalid soap versions should fail'); } catch (Exception $e) { // success } } public function testValidateUrn() { $server = new Zend_Soap_Server(); try { $server->validateUrn('bogosity'); $this->fail('URNs without schemes should fail'); } catch (Exception $e) { // success } $this->assertTrue($server->validateUrn('http://framework.zend.com/')); $this->assertTrue($server->validateUrn('urn:soapHandler/GetOpt')); } public function testSetActor() { $server = new Zend_Soap_Server(); $this->assertNull($server->getActor()); $server->setActor('http://framework.zend.com/'); $this->assertEquals('http://framework.zend.com/', $server->getActor()); try { $server->setActor('bogus'); $this->fail('Invalid actor should fail'); } catch (Exception $e) { // success } } public function testGetActor() { $server = new Zend_Soap_Server(); $this->assertNull($server->getActor()); $server->setActor('http://framework.zend.com/'); $this->assertEquals('http://framework.zend.com/', $server->getActor()); } public function testSetUri() { $server = new Zend_Soap_Server(); $this->assertNull($server->getUri()); $server->setUri('http://framework.zend.com/'); $this->assertEquals('http://framework.zend.com/', $server->getUri()); try { $server->setUri('bogus'); $this->fail('Invalid URI should fail'); } catch (Exception $e) { // success } } public function testGetUri() { $server = new Zend_Soap_Server(); $this->assertNull($server->getUri()); $server->setUri('http://framework.zend.com/'); $this->assertEquals('http://framework.zend.com/', $server->getUri()); } public function testSetClassmap() { $server = new Zend_Soap_Server(); $classmap = array('TestData1' => 'Zend_Soap_Server_TestData1', 'TestData2' => 'Zend_Soap_Server_TestData2'); $this->assertNull($server->getClassmap()); $server->setClassmap($classmap); $this->assertTrue($classmap == $server->getClassmap()); try { $server->setClassmap('bogus'); $this->fail('Classmap which is not an array should fail'); } catch (Exception $e) { // success } try { $server->setClassmap(array('soapTypeName', 'bogusClassName')); $this->fail('Invalid class within classmap should fail'); } catch (Exception $e) { // success } } public function testGetClassmap() { $server = new Zend_Soap_Server(); $classmap = array('TestData1' => 'Zend_Soap_Server_TestData1', 'TestData2' => 'Zend_Soap_Server_TestData2'); $this->assertNull($server->getClassmap()); $server->setClassmap($classmap); $this->assertTrue($classmap == $server->getClassmap()); } public function testSetWsdl() { $server = new Zend_Soap_Server(); $this->assertNull($server->getWsdl()); $server->setWsdl(dirname(__FILE__).'/_files/wsdl_example.wsdl'); $this->assertEquals(dirname(__FILE__).'/_files/wsdl_example.wsdl', $server->getWsdl()); try { $server->setWsdl(dirname(__FILE__).'/_files/bogus.wsdl'); $this->fail('Invalid WSDL URI or PATH should fail'); } catch (Exception $e) { // success } } public function testGetWsdl() { $server = new Zend_Soap_Server(); $this->assertNull($server->getWsdl()); $server->setWsdl(dirname(__FILE__).'/_files/wsdl_example.wsdl'); $this->assertEquals(dirname(__FILE__).'/_files/wsdl_example.wsdl', $server->getWsdl()); } public function testAddFunction() { $server = new Zend_Soap_Server(); // Correct function should pass $server->addFunction('Zend_Soap_Server_TestFunc1'); // Array of correct functions should pass $functions = array('Zend_Soap_Server_TestFunc2', 'Zend_Soap_Server_TestFunc3', 'Zend_Soap_Server_TestFunc4'); $server->addFunction($functions); $this->assertEquals( array_merge(array('Zend_Soap_Server_TestFunc1'), $functions), $server->getFunctions() ); } public function testAddBogusFunctionAsInteger() { $server = new Zend_Soap_Server(); try { $server->addFunction(126); $this->fail('Invalid value should fail'); } catch (Zend_Soap_Server_Exception $e) { // success } } public function testAddBogusFunctionsAsString() { $server = new Zend_Soap_Server(); try { $server->addFunction('bogus_function'); $this->fail('Invalid function should fail.'); } catch (Zend_Soap_Server_Exception $e) { // success } } public function testAddBogusFunctionsAsArray() { $server = new Zend_Soap_Server(); try { $functions = array('Zend_Soap_Server_TestFunc5', 'bogus_function', 'Zend_Soap_Server_TestFunc6'); $server->addFunction($functions); $this->fail('Invalid function within a set of functions should fail'); } catch (Zend_Soap_Server_Exception $e) { // success } } public function testAddAllFunctionsSoapConstant() { $server = new Zend_Soap_Server(); // SOAP_FUNCTIONS_ALL as a value should pass $server->addFunction(SOAP_FUNCTIONS_ALL); $server->addFunction('substr'); $this->assertEquals(array(SOAP_FUNCTIONS_ALL), $server->getFunctions()); } public function testSetClass() { $server = new Zend_Soap_Server(); // Correct class name should pass try { $server->setClass('Zend_Soap_Server_TestClass'); } catch(Exception $e) { $this->fail("Setting a correct class name should not fail setClass()"); } } public function testSetClassTwiceThrowsException() { $server = new Zend_Soap_Server(); // Correct class name should pass try { $server->setClass('Zend_Soap_Server_TestClass'); $server->setClass('Zend_Soap_Server_TestClass'); $this->fail(); } catch(Zend_Soap_Server_Exception $e) { $this->assertEquals('A class has already been registered with this soap server instance', $e->getMessage()); } } public function testSetClassWithArguments() { $server = new Zend_Soap_Server(); // Correct class name should pass try { $server->setClass('Zend_Soap_Server_TestClass', 1, 2, 3, 4); } catch(Exception $e) { $this->fail("Setting a correct class name should not fail setClass()"); } } public function testSetBogusClassWithIntegerName() { $server = new Zend_Soap_Server(); try { $server->setClass(465); $this->fail('Non-string value should fail'); } catch (Exception $e) { // success } } public function testSetBogusClassWithUnknownClassName() { $server = new Zend_Soap_Server(); try { $server->setClass('Zend_Soap_Server_Test_BogusClass'); $this->fail('Invalid class should fail'); } catch (Exception $e) { // success } } /** * @group ZF-4366 */ public function testSetObject() { $server = new Zend_Soap_Server(); try { $server->setObject(465); $this->fail('Non-object value should fail'); } catch (Exception $e) { // success } try { $int = 1; $server->setObject($int); $this->fail('Invalid argument should fail'); } catch (Exception $e) { // success } // Correct class name should pass $server->setObject(new Zend_Soap_Server_TestClass()); try { $server->setObject(new Zend_Soap_Server_TestClass()); $this->fail('setClass() should pass only once'); } catch (Exception $e) { // success } } public function testGetFunctions() { $server = new Zend_Soap_Server(); $server->addFunction('Zend_Soap_Server_TestFunc1'); $functions = array('Zend_Soap_Server_TestFunc2', 'Zend_Soap_Server_TestFunc3', 'Zend_Soap_Server_TestFunc4'); $server->addFunction($functions); $functions = array('Zend_Soap_Server_TestFunc3', 'Zend_Soap_Server_TestFunc5', 'Zend_Soap_Server_TestFunc6'); $server->addFunction($functions); $allAddedFunctions = array( 'Zend_Soap_Server_TestFunc1', 'Zend_Soap_Server_TestFunc2', 'Zend_Soap_Server_TestFunc3', 'Zend_Soap_Server_TestFunc4', 'Zend_Soap_Server_TestFunc5', 'Zend_Soap_Server_TestFunc6' ); $this->assertTrue($server->getFunctions() == $allAddedFunctions); } public function testGetFunctionsWithClassAttached() { $server = new Zend_Soap_Server(); $server->setClass('Zend_Soap_Server_TestClass'); $this->assertEquals( array('testFunc1', 'testFunc2', 'testFunc3', 'testFunc4', 'testFunc5'), $server->getFunctions() ); } public function testGetFunctionsWithObjectAttached() { $server = new Zend_Soap_Server(); $server->setObject(new Zend_Soap_Server_TestClass()); $this->assertEquals( array('testFunc1', 'testFunc2', 'testFunc3', 'testFunc4', 'testFunc5'), $server->getFunctions() ); } public function testSetPersistence() { $server = new Zend_Soap_Server(); $this->assertNull($server->getPersistence()); $server->setPersistence(SOAP_PERSISTENCE_SESSION); $this->assertEquals(SOAP_PERSISTENCE_SESSION, $server->getPersistence()); try { $server->setSoapVersion('bogus'); $this->fail('Invalid soap versions should fail'); } catch (Exception $e) { // success } $server->setPersistence(SOAP_PERSISTENCE_REQUEST); $this->assertEquals(SOAP_PERSISTENCE_REQUEST, $server->getPersistence()); } public function testSetUnknownPersistenceStateThrowsException() { $server = new Zend_Soap_Server(); try { $server->setPersistence('bogus'); $this->fail(); } catch(Zend_Soap_Server_Exception $e) { } } public function testGetPersistence() { $server = new Zend_Soap_Server(); $this->assertNull($server->getPersistence()); $server->setPersistence(SOAP_PERSISTENCE_SESSION); $this->assertEquals(SOAP_PERSISTENCE_SESSION, $server->getPersistence()); } public function testGetLastRequest() { if (headers_sent()) { $this->markTestSkipped('Cannot run testGetLastRequest() when headers have already been sent; enable output buffering to run this test'); return; } $server = new Zend_Soap_Server(); $server->setOptions(array('location'=>'test://', 'uri'=>'http://framework.zend.com')); $server->setReturnResponse(true); $server->setClass('Zend_Soap_Server_TestClass'); $request = '' . "\n" . '' . '' . '' . 'World' . '' . '' . '' . "\n"; $response = $server->handle($request); $this->assertEquals($request, $server->getLastRequest()); } public function testSetReturnResponse() { $server = new Zend_Soap_Server(); $this->assertFalse($server->getReturnResponse()); $server->setReturnResponse(true); $this->assertTrue($server->getReturnResponse()); $server->setReturnResponse(false); $this->assertFalse($server->getReturnResponse()); } public function testGetReturnResponse() { $server = new Zend_Soap_Server(); $this->assertFalse($server->getReturnResponse()); $server->setReturnResponse(true); $this->assertTrue($server->getReturnResponse()); } public function testGetLastResponse() { if (headers_sent()) { $this->markTestSkipped('Cannot run testGetLastResponse() when headers have already been sent; enable output buffering to run this test'); return; } $server = new Zend_Soap_Server(); $server->setOptions(array('location'=>'test://', 'uri'=>'http://framework.zend.com')); $server->setReturnResponse(true); $server->setClass('Zend_Soap_Server_TestClass'); $request = '' . "\n" . '' . '' . '' . 'World' . '' . '' . '' . "\n"; $expectedResponse = '' . "\n" . '' . '' . '' . 'Hello World!' . '' . '' . '' . "\n"; $server->handle($request); $this->assertEquals($expectedResponse, $server->getLastResponse()); } public function testHandle() { if (headers_sent()) { $this->markTestSkipped('Cannot run testHandle() when headers have already been sent; enable output buffering to run this test'); return; } $server = new Zend_Soap_Server(); $server->setOptions(array('location'=>'test://', 'uri'=>'http://framework.zend.com')); $server->setClass('Zend_Soap_Server_TestClass'); $localClient = new Zend_Soap_Server_TestLocalSoapClient($server, null, array('location'=>'test://', 'uri'=>'http://framework.zend.com')); // Local SOAP client call automatically invokes handle method of the provided SOAP server $this->assertEquals('Hello World!', $localClient->testFunc2('World')); $request = '' . "\n" . '' . '' . '' . 'World' . '' . '' . '' . "\n"; $expectedResponse = '' . "\n" . '' . '' . '' . 'Hello World!' . '' . '' . '' . "\n"; $server1 = new Zend_Soap_Server(); $server1->setOptions(array('location'=>'test://', 'uri'=>'http://framework.zend.com')); $server1->setClass('Zend_Soap_Server_TestClass'); $server1->setReturnResponse(true); $this->assertEquals($expectedResponse, $server1->handle($request)); } /** * @todo Implement testRegisterFaultException(). */ public function testRegisterFaultException() { $server = new Zend_Soap_Server(); $server->registerFaultException("Zend_Soap_Server_Exception"); $server->registerFaultException(array("OutOfBoundsException", "BogusException")); $this->assertEquals(array( 'Zend_Soap_Server_Exception', 'OutOfBoundsException', 'BogusException', ), $server->getFaultExceptions()); } /** * @todo Implement testDeregisterFaultException(). */ public function testDeregisterFaultException() { $server = new Zend_Soap_Server(); $server->registerFaultException(array("OutOfBoundsException", "BogusException")); $ret = $server->deregisterFaultException("BogusException"); $this->assertTrue($ret); $this->assertEquals(array( 'OutOfBoundsException', ), $server->getFaultExceptions()); $ret = $server->deregisterFaultException("NonRegisteredException"); $this->assertFalse($ret); } /** * @todo Implement testGetFaultExceptions(). */ public function testGetFaultExceptions() { $server = new Zend_Soap_Server(); $this->assertEquals(array(), $server->getFaultExceptions()); $server->registerFaultException("Exception"); $this->assertEquals(array("Exception"), $server->getFaultExceptions()); } public function testFaultWithTextMessage() { $server = new Zend_Soap_Server(); $fault = $server->fault("Faultmessage!"); $this->assertTrue($fault instanceof SOAPFault); $this->assertContains("Faultmessage!", $fault->getMessage()); } public function testFaultWithUnregisteredException() { $server = new Zend_Soap_Server(); $fault = $server->fault(new Exception("MyException")); $this->assertTrue($fault instanceof SOAPFault); $this->assertContains("Unknown error", $fault->getMessage()); $this->assertNotContains("MyException", $fault->getMessage()); } public function testFaultWithRegisteredException() { $server = new Zend_Soap_Server(); $server->registerFaultException("Exception"); $fault = $server->fault(new Exception("MyException")); $this->assertTrue($fault instanceof SOAPFault); $this->assertNotContains("Unknown error", $fault->getMessage()); $this->assertContains("MyException", $fault->getMessage()); } public function testFautlWithBogusInput() { $server = new Zend_Soap_Server(); $fault = $server->fault(array("Here", "There", "Bogus")); $this->assertContains("Unknown error", $fault->getMessage()); } /** * @group ZF-3958 */ public function testFaultWithIntegerFailureCodeDoesNotBreakClassSoapFault() { $server = new Zend_Soap_Server(); $fault = $server->fault("Faultmessage!", 5000); $this->assertTrue($fault instanceof SOAPFault); } /** * @todo Implement testHandlePhpErrors(). */ public function testHandlePhpErrors() { $server = new Zend_Soap_Server(); // Remove the following line when you implement this test. $this->markTestIncomplete( "This test has not been implemented yet." ); } public function testLoadFunctionsIsNotImplemented() { $server = new Zend_Soap_Server(); try { $server->loadFunctions("bogus"); $this->fail(); } catch(Zend_Soap_Server_Exception $e) { } } public function testErrorHandlingOfSoapServerChangesToThrowingSoapFaultWhenInHandleMode() { if (headers_sent()) { $this->markTestSkipped('Cannot run ' . __METHOD__ . '() when headers have already been sent; enable output buffering to run this test'); return; } $server = new Zend_Soap_Server(); $server->setOptions(array('location'=>'test://', 'uri'=>'http://framework.zend.com')); $server->setReturnResponse(true); // Requesting Method with enforced parameter without it. $request = '' . "\n" . '' . '' . '' . '' . '' . "\n"; $server->setClass('Zend_Soap_Server_TestClass'); $response = $server->handle($request); $this->assertContains( 'ReceiverTest Message', $response ); } /** * @group ZF-5597 */ public function testServerAcceptsZendConfigObject() { $options = array('soap_version' => SOAP_1_1, 'actor' => 'http://framework.zend.com/Zend_Soap_ServerTest.php', 'classmap' => array('TestData1' => 'Zend_Soap_Server_TestData1', 'TestData2' => 'Zend_Soap_Server_TestData2',), 'encoding' => 'ISO-8859-1', 'uri' => 'http://framework.zend.com/Zend_Soap_ServerTest.php' ); $config = new Zend_Config($options); $server = new Zend_Soap_Server(); $server->setOptions($config); $this->assertEquals($options, $server->getOptions()); } /** * @group ZF-5300 */ public function testSetAndGetFeatures() { $server = new Zend_Soap_Server(); $this->assertNull($server->getSoapFeatures()); $server->setSoapFeatures(100); $this->assertEquals(100, $server->getSoapFeatures()); $options = $server->getOptions(); $this->assertTrue(isset($options['features'])); $this->assertEquals(100, $options['features']); } /** * @group ZF-5300 */ public function testSetAndGetWsdlCache() { $server = new Zend_Soap_Server(); $this->assertNull($server->getWsdlCache()); $server->setWsdlCache(100); $this->assertEquals(100, $server->getWsdlCache()); $options = $server->getOptions(); $this->assertTrue(isset($options['cache_wsdl'])); $this->assertEquals(100, $options['cache_wsdl']); } } if (extension_loaded('soap')) { /** Local SOAP client */ class Zend_Soap_Server_TestLocalSoapClient extends SoapClient { /** * Server object * * @var Zend_Soap_Server */ public $server; /** * Local client constructor * * @param Zend_Soap_Server $server * @param string $wsdl * @param array $options */ function __construct(Zend_Soap_Server $server, $wsdl, $options) { $this->server = $server; parent::__construct($wsdl, $options); } function __doRequest($request, $location, $action, $version, $one_way = 0) { ob_start(); $this->server->handle($request); $response = ob_get_clean(); return $response; } } } /** Test Class */ class Zend_Soap_Server_TestClass { /** * Test Function 1 * * @return string */ function testFunc1() { return "Hello World"; } /** * Test Function 2 * * @param string $who Some Arg * @return string */ function testFunc2($who) { return "Hello $who!"; } /** * Test Function 3 * * @param string $who Some Arg * @param int $when Some * @return string */ function testFunc3($who, $when) { return "Hello $who, How are you $when"; } /** * Test Function 4 * * @return string */ static function testFunc4() { return "I'm Static!"; } /** * Test Function 5 raises a user error * * @return void */ function testFunc5() { trigger_error("Test Message", E_USER_ERROR); } } /** Test class 2 */ class Zend_Soap_Server_TestData1 { /** * Property1 * * @var string */ public $property1; /** * Property2 * * @var float */ public $property2; } /** Test class 2 */ class Zend_Soap_Server_TestData2 { /** * Property1 * * @var integer */ public $property1; /** * Property1 * * @var float */ public $property2; } /* Test Functions */ /** * Test Function * * @param string $arg * @return string */ function Zend_Soap_Server_TestFunc1($who) { return "Hello $who"; } /** * Test Function 2 */ function Zend_Soap_Server_TestFunc2() { return "Hello World"; } /** * Return false * * @return bool */ function Zend_Soap_Server_TestFunc3() { return false; } /** * Return true * * @return bool */ function Zend_Soap_Server_TestFunc4() { return true; } /** * Return integer * * @return int */ function Zend_Soap_Server_TestFunc5() { return 123; } /** * Return string * * @return string */ function Zend_Soap_Server_TestFunc6() { return "string"; }