diff options
Diffstat (limited to 'tests/lib/appframework')
30 files changed, 0 insertions, 7128 deletions
diff --git a/tests/lib/appframework/AppTest.php b/tests/lib/appframework/AppTest.php deleted file mode 100644 index 3d41d6590aa..00000000000 --- a/tests/lib/appframework/AppTest.php +++ /dev/null @@ -1,164 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework; - -use OCP\AppFramework\Http\Response; - - -function rrmdir($directory) { - $files = array_diff(scandir($directory), array('.','..')); - foreach ($files as $file) { - if (is_dir($directory . '/' . $file)) { - rrmdir($directory . '/' . $file); - } else { - unlink($directory . '/' . $file); - } - } - return rmdir($directory); -} - - -class AppTest extends \Test\TestCase { - - private $container; - private $io; - private $api; - private $controller; - private $dispatcher; - private $params; - private $headers; - private $output; - private $controllerName; - private $controllerMethod; - private $appPath; - - protected function setUp() { - parent::setUp(); - - $this->container = new \OC\AppFramework\DependencyInjection\DIContainer('test', array()); - $this->controller = $this->getMockBuilder( - 'OCP\AppFramework\Controller') - ->disableOriginalConstructor() - ->getMock(); - $this->dispatcher = $this->getMockBuilder( - 'OC\AppFramework\Http\Dispatcher') - ->disableOriginalConstructor() - ->getMock(); - - $this->io = $this->getMockBuilder('OCP\\AppFramework\\Http\\IOutput')->getMock(); - - $this->headers = array('key' => 'value'); - $this->output = 'hi'; - $this->controllerName = 'Controller'; - $this->controllerMethod = 'method'; - - $this->container[$this->controllerName] = $this->controller; - $this->container['Dispatcher'] = $this->dispatcher; - $this->container['OCP\\AppFramework\\Http\\IOutput'] = $this->io; - $this->container['urlParams'] = array(); - - $this->appPath = __DIR__ . '/../../../apps/namespacetestapp'; - $infoXmlPath = $this->appPath . '/appinfo/info.xml'; - mkdir($this->appPath . '/appinfo', 0777, true); - - $xml = '<?xml version="1.0" encoding="UTF-8"?>' . - '<info>' . - '<id>namespacetestapp</id>' . - '<namespace>NameSpaceTestApp</namespace>' . - '</info>'; - file_put_contents($infoXmlPath, $xml); - } - - - public function testControllerNameAndMethodAreBeingPassed(){ - $return = array(null, array(), array(), null, new Response()); - $this->dispatcher->expects($this->once()) - ->method('dispatch') - ->with($this->equalTo($this->controller), - $this->equalTo($this->controllerMethod)) - ->will($this->returnValue($return)); - - $this->io->expects($this->never()) - ->method('setOutput'); - - App::main($this->controllerName, $this->controllerMethod, - $this->container); - } - - - public function testBuildAppNamespace() { - $ns = App::buildAppNamespace('someapp'); - $this->assertEquals('OCA\Someapp', $ns); - } - - - public function testBuildAppNamespaceCore() { - $ns = App::buildAppNamespace('someapp', 'OC\\'); - $this->assertEquals('OC\Someapp', $ns); - } - - - public function testBuildAppNamespaceInfoXml() { - $ns = App::buildAppNamespace('namespacetestapp', 'OCA\\'); - $this->assertEquals('OCA\NameSpaceTestApp', $ns); - } - - - protected function tearDown() { - rrmdir($this->appPath); - parent::tearDown(); - } - - - public function testOutputIsPrinted(){ - $return = [null, [], [], $this->output, new Response()]; - $this->dispatcher->expects($this->once()) - ->method('dispatch') - ->with($this->equalTo($this->controller), - $this->equalTo($this->controllerMethod)) - ->will($this->returnValue($return)); - $this->io->expects($this->once()) - ->method('setOutput') - ->with($this->equalTo($this->output)); - App::main($this->controllerName, $this->controllerMethod, $this->container, []); - } - - - public function testCallbackIsCalled(){ - $mock = $this->getMockBuilder('OCP\AppFramework\Http\ICallbackResponse') - ->getMock(); - - $return = [null, [], [], $this->output, $mock]; - $this->dispatcher->expects($this->once()) - ->method('dispatch') - ->with($this->equalTo($this->controller), - $this->equalTo($this->controllerMethod)) - ->will($this->returnValue($return)); - $mock->expects($this->once()) - ->method('callback'); - App::main($this->controllerName, $this->controllerMethod, $this->container, []); - } - -} diff --git a/tests/lib/appframework/controller/ApiControllerTest.php b/tests/lib/appframework/controller/ApiControllerTest.php deleted file mode 100644 index 137e5950f67..00000000000 --- a/tests/lib/appframework/controller/ApiControllerTest.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OCP\AppFramework; - -use OC\AppFramework\Http\Request; - - -class ChildApiController extends ApiController {}; - - -class ApiControllerTest extends \Test\TestCase { - /** @var ChildApiController */ - protected $controller; - - public function testCors() { - $request = new Request( - ['server' => ['HTTP_ORIGIN' => 'test']], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->controller = new ChildApiController('app', $request, 'verbs', - 'headers', 100); - - $response = $this->controller->preflightedCors(); - - $headers = $response->getHeaders(); - - $this->assertEquals('test', $headers['Access-Control-Allow-Origin']); - $this->assertEquals('verbs', $headers['Access-Control-Allow-Methods']); - $this->assertEquals('headers', $headers['Access-Control-Allow-Headers']); - $this->assertEquals('false', $headers['Access-Control-Allow-Credentials']); - $this->assertEquals(100, $headers['Access-Control-Max-Age']); - } - -} diff --git a/tests/lib/appframework/controller/ControllerTest.php b/tests/lib/appframework/controller/ControllerTest.php deleted file mode 100644 index 1493c0c3175..00000000000 --- a/tests/lib/appframework/controller/ControllerTest.php +++ /dev/null @@ -1,225 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OCP\AppFramework; - -use OC\AppFramework\Http\Request; -use OCP\AppFramework\Http\TemplateResponse; -use OCP\AppFramework\Http\JSONResponse; -use OCP\AppFramework\Http\DataResponse; - - -class ChildController extends Controller { - - public function __construct($appName, $request) { - parent::__construct($appName, $request); - $this->registerResponder('tom', function ($respone) { - return 'hi'; - }); - } - - public function custom($in) { - $this->registerResponder('json', function ($response) { - return new JSONResponse(array(strlen($response))); - }); - - return $in; - } - - public function customDataResponse($in) { - $response = new DataResponse($in, 300); - $response->addHeader('test', 'something'); - return $response; - } -}; - -class ControllerTest extends \Test\TestCase { - - /** - * @var Controller - */ - private $controller; - private $app; - - protected function setUp(){ - parent::setUp(); - - $request = new Request( - [ - 'get' => ['name' => 'John Q. Public', 'nickname' => 'Joey'], - 'post' => ['name' => 'Jane Doe', 'nickname' => 'Janey'], - 'urlParams' => ['name' => 'Johnny Weissmüller'], - 'files' => ['file' => 'filevalue'], - 'env' => ['PATH' => 'daheim'], - 'session' => ['sezession' => 'kein'], - 'method' => 'hi', - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - - $this->app = $this->getMock('OC\AppFramework\DependencyInjection\DIContainer', - array('getAppName'), array('test')); - $this->app->expects($this->any()) - ->method('getAppName') - ->will($this->returnValue('apptemplate_advanced')); - - $this->controller = new ChildController($this->app, $request); - } - - - public function testParamsGet(){ - $this->assertEquals('Johnny Weissmüller', $this->controller->params('name', 'Tarzan')); - } - - - public function testParamsGetDefault(){ - $this->assertEquals('Tarzan', $this->controller->params('Ape Man', 'Tarzan')); - } - - - public function testParamsFile(){ - $this->assertEquals('filevalue', $this->controller->params('file', 'filevalue')); - } - - - public function testGetUploadedFile(){ - $this->assertEquals('filevalue', $this->controller->getUploadedFile('file')); - } - - - - public function testGetUploadedFileDefault(){ - $this->assertEquals('default', $this->controller->params('files', 'default')); - } - - - public function testGetParams(){ - $params = array( - 'name' => 'Johnny Weissmüller', - 'nickname' => 'Janey', - ); - - $this->assertEquals($params, $this->controller->getParams()); - } - - - public function testRender(){ - $this->assertTrue($this->controller->render('') instanceof TemplateResponse); - } - - - public function testSetParams(){ - $params = array('john' => 'foo'); - $response = $this->controller->render('home', $params); - - $this->assertEquals($params, $response->getParams()); - } - - - public function testRenderHeaders(){ - $headers = array('one', 'two'); - $response = $this->controller->render('', array(), '', $headers); - - $this->assertTrue(in_array($headers[0], $response->getHeaders())); - $this->assertTrue(in_array($headers[1], $response->getHeaders())); - } - - - public function testGetRequestMethod(){ - $this->assertEquals('hi', $this->controller->method()); - } - - - public function testGetEnvVariable(){ - $this->assertEquals('daheim', $this->controller->env('PATH')); - } - - - /** - * @expectedException \DomainException - */ - public function testFormatResonseInvalidFormat() { - $this->controller->buildResponse(null, 'test'); - } - - - public function testFormat() { - $response = $this->controller->buildResponse(array('hi'), 'json'); - - $this->assertEquals(array('hi'), $response->getData()); - } - - - public function testFormatDataResponseJSON() { - $expectedHeaders = [ - 'test' => 'something', - 'Cache-Control' => 'no-cache, must-revalidate', - 'Content-Type' => 'application/json; charset=utf-8', - 'Content-Security-Policy' => "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'", - ]; - - $response = $this->controller->customDataResponse(array('hi')); - $response = $this->controller->buildResponse($response, 'json'); - - $this->assertEquals(array('hi'), $response->getData()); - $this->assertEquals(300, $response->getStatus()); - $this->assertEquals($expectedHeaders, $response->getHeaders()); - } - - - public function testCustomFormatter() { - $response = $this->controller->custom('hi'); - $response = $this->controller->buildResponse($response, 'json'); - - $this->assertEquals(array(2), $response->getData()); - } - - - public function testDefaultResponderToJSON() { - $responder = $this->controller->getResponderByHTTPHeader('*/*'); - - $this->assertEquals('json', $responder); - } - - - public function testResponderAcceptHeaderParsed() { - $responder = $this->controller->getResponderByHTTPHeader( - '*/*, application/tom, application/json' - ); - - $this->assertEquals('tom', $responder); - } - - - public function testResponderAcceptHeaderParsedUpperCase() { - $responder = $this->controller->getResponderByHTTPHeader( - '*/*, apPlication/ToM, application/json' - ); - - $this->assertEquals('tom', $responder); - } - - -} diff --git a/tests/lib/appframework/controller/OCSControllerTest.php b/tests/lib/appframework/controller/OCSControllerTest.php deleted file mode 100644 index 92b092cf0e9..00000000000 --- a/tests/lib/appframework/controller/OCSControllerTest.php +++ /dev/null @@ -1,147 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2015 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OCP\AppFramework; - -use OC\AppFramework\Http\Request; -use OCP\AppFramework\Http\DataResponse; - - -class ChildOCSController extends OCSController {} - - -class OCSControllerTest extends \Test\TestCase { - - private $controller; - - public function testCors() { - $request = new Request( - [ - 'server' => [ - 'HTTP_ORIGIN' => 'test', - ], - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $controller = new ChildOCSController('app', $request, 'verbs', - 'headers', 100); - - $response = $controller->preflightedCors(); - - $headers = $response->getHeaders(); - - $this->assertEquals('test', $headers['Access-Control-Allow-Origin']); - $this->assertEquals('verbs', $headers['Access-Control-Allow-Methods']); - $this->assertEquals('headers', $headers['Access-Control-Allow-Headers']); - $this->assertEquals('false', $headers['Access-Control-Allow-Credentials']); - $this->assertEquals(100, $headers['Access-Control-Max-Age']); - } - - - public function testXML() { - $controller = new ChildOCSController('app', new Request( - [], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - )); - $expected = "<?xml version=\"1.0\"?>\n" . - "<ocs>\n" . - " <meta>\n" . - " <status>failure</status>\n" . - " <statuscode>400</statuscode>\n" . - " <message>OK</message>\n" . - " <totalitems></totalitems>\n" . - " <itemsperpage></itemsperpage>\n" . - " </meta>\n" . - " <data>\n" . - " <test>hi</test>\n" . - " </data>\n" . - "</ocs>\n"; - - $params = [ - 'data' => [ - 'test' => 'hi' - ], - 'statuscode' => 400 - ]; - - $out = $controller->buildResponse($params, 'xml')->render(); - $this->assertEquals($expected, $out); - } - - - public function testXMLDataResponse() { - $controller = new ChildOCSController('app', new Request( - [], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - )); - $expected = "<?xml version=\"1.0\"?>\n" . - "<ocs>\n" . - " <meta>\n" . - " <status>failure</status>\n" . - " <statuscode>400</statuscode>\n" . - " <message>OK</message>\n" . - " <totalitems></totalitems>\n" . - " <itemsperpage></itemsperpage>\n" . - " </meta>\n" . - " <data>\n" . - " <test>hi</test>\n" . - " </data>\n" . - "</ocs>\n"; - - $params = new DataResponse([ - 'data' => [ - 'test' => 'hi' - ], - 'statuscode' => 400 - ]); - - $out = $controller->buildResponse($params, 'xml')->render(); - $this->assertEquals($expected, $out); - } - - - public function testJSON() { - $controller = new ChildOCSController('app', new Request( - [], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - )); - $expected = '{"ocs":{"meta":{"status":"failure","statuscode":400,"message":"OK",' . - '"totalitems":"","itemsperpage":""},"data":{"test":"hi"}}}'; - $params = [ - 'data' => [ - 'test' => 'hi' - ], - 'statuscode' => 400 - ]; - - $out = $controller->buildResponse($params, 'json')->render(); - $this->assertEquals($expected, $out); - } - - -} diff --git a/tests/lib/appframework/db/EntityTest.php b/tests/lib/appframework/db/EntityTest.php deleted file mode 100644 index 161e11d8030..00000000000 --- a/tests/lib/appframework/db/EntityTest.php +++ /dev/null @@ -1,224 +0,0 @@ -<?php - -/** -* ownCloud - App Framework -* -* @author Bernhard Posselt -* @copyright 2012 Bernhard Posselt dev@bernhard-posselt.com -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE -* License as published by the Free Software Foundation; either -* version 3 of the License, or any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU AFFERO GENERAL PUBLIC LICENSE for more details. -* -* You should have received a copy of the GNU Affero General Public -* License along with this library. If not, see <http://www.gnu.org/licenses/>. -* -*/ - -namespace OCP\AppFramework\Db; - - -/** - * @method integer getId() - * @method void setId(integer $id) - * @method integer getTestId() - * @method void setTestId(integer $id) - * @method string getName() - * @method void setName(string $name) - * @method string getEmail() - * @method void setEmail(string $email) - * @method string getPreName() - * @method void setPreName(string $preName) - */ -class TestEntity extends Entity { - protected $name; - protected $email; - protected $testId; - protected $preName; - - public function __construct($name=null){ - $this->addType('testId', 'integer'); - $this->name = $name; - } -}; - - -class EntityTest extends \Test\TestCase { - - private $entity; - - protected function setUp(){ - parent::setUp(); - $this->entity = new TestEntity(); - } - - - public function testResetUpdatedFields(){ - $entity = new TestEntity(); - $entity->setId(3); - $entity->resetUpdatedFields(); - - $this->assertEquals(array(), $entity->getUpdatedFields()); - } - - - public function testFromRow(){ - $row = array( - 'pre_name' => 'john', - 'email' => 'john@something.com' - ); - $this->entity = TestEntity::fromRow($row); - - $this->assertEquals($row['pre_name'], $this->entity->getPreName()); - $this->assertEquals($row['email'], $this->entity->getEmail()); - } - - - public function testGetSetId(){ - $id = 3; - $this->entity->setId(3); - - $this->assertEquals($id, $this->entity->getId()); - } - - - public function testColumnToPropertyNoReplacement(){ - $column = 'my'; - $this->assertEquals('my', - $this->entity->columnToProperty($column)); - } - - - public function testColumnToProperty(){ - $column = 'my_attribute'; - $this->assertEquals('myAttribute', - $this->entity->columnToProperty($column)); - } - - - public function testPropertyToColumnNoReplacement(){ - $property = 'my'; - $this->assertEquals('my', - $this->entity->propertyToColumn($property)); - } - - - public function testSetterMarksFieldUpdated(){ - $this->entity->setId(3); - - $this->assertContains('id', $this->entity->getUpdatedFields()); - } - - - public function testCallShouldOnlyWorkForGetterSetter(){ - $this->setExpectedException('\BadFunctionCallException'); - - $this->entity->something(); - } - - - public function testGetterShouldFailIfAttributeNotDefined(){ - $this->setExpectedException('\BadFunctionCallException'); - - $this->entity->getTest(); - } - - - public function testSetterShouldFailIfAttributeNotDefined(){ - $this->setExpectedException('\BadFunctionCallException'); - - $this->entity->setTest(); - } - - - public function testFromRowShouldNotAssignEmptyArray(){ - $row = array(); - $entity2 = new TestEntity(); - - $this->entity = TestEntity::fromRow($row); - $this->assertEquals($entity2, $this->entity); - } - - - public function testIdGetsConvertedToInt(){ - $row = array('id' => '4'); - - $this->entity = TestEntity::fromRow($row); - $this->assertSame(4, $this->entity->getId()); - } - - - public function testSetType(){ - $row = array('testId' => '4'); - - $this->entity = TestEntity::fromRow($row); - $this->assertSame(4, $this->entity->getTestId()); - } - - - public function testFromParams(){ - $params = array( - 'testId' => 4, - 'email' => 'john@doe' - ); - - $entity = TestEntity::fromParams($params); - - $this->assertEquals($params['testId'], $entity->getTestId()); - $this->assertEquals($params['email'], $entity->getEmail()); - $this->assertTrue($entity instanceof TestEntity); - } - - public function testSlugify(){ - $entity = new TestEntity(); - $entity->setName('Slugify this!'); - $this->assertEquals('slugify-this', $entity->slugify('name')); - $entity->setName('°!"§$%&/()=?`´ß\}][{³²#\'+~*-_.:,;<>|äöüÄÖÜSlugify this!'); - $this->assertEquals('slugify-this', $entity->slugify('name')); - } - - - public function testSetterCasts() { - $entity = new TestEntity(); - $entity->setId('3'); - $this->assertSame(3, $entity->getId()); - } - - - public function testSetterDoesNotCastOnNull() { - $entity = new TestEntity(); - $entity->setId(null); - $this->assertSame(null, $entity->getId()); - } - - - public function testGetFieldTypes() { - $entity = new TestEntity(); - $this->assertEquals(array( - 'id' => 'integer', - 'testId' => 'integer' - ), $entity->getFieldTypes()); - } - - - public function testGetItInt() { - $entity = new TestEntity(); - $entity->setId(3); - $this->assertEquals('integer', gettype($entity->getId())); - } - - - public function testFieldsNotMarkedUpdatedIfNothingChanges() { - $entity = new TestEntity('hey'); - $entity->setName('hey'); - $this->assertEquals(0, count($entity->getUpdatedFields())); - } - - -} diff --git a/tests/lib/appframework/db/mappertest.php b/tests/lib/appframework/db/mappertest.php deleted file mode 100644 index c8b999ad62c..00000000000 --- a/tests/lib/appframework/db/mappertest.php +++ /dev/null @@ -1,290 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt dev@bernhard-posselt.com - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OCP\AppFramework\Db; - -use \OCP\IDBConnection; -use Test\AppFramework\Db\MapperTestUtility; - -/** - * @method integer getId() - * @method void setId(integer $id) - * @method string getEmail() - * @method void setEmail(string $email) - * @method string getPreName() - * @method void setPreName(string $preName) - */ -class Example extends Entity { - protected $preName; - protected $email; -}; - - -class ExampleMapper extends Mapper { - public function __construct(IDBConnection $db){ parent::__construct($db, 'table'); } - public function find($table, $id){ return $this->findOneQuery($table, $id); } - public function findOneEntity($table, $id){ return $this->findEntity($table, $id); } - public function findAllEntities($table){ return $this->findEntities($table); } - public function mapRow($row){ return $this->mapRowToEntity($row); } - public function execSql($sql, $params){ return $this->execute($sql, $params); } -} - - -class MapperTest extends MapperTestUtility { - - /** - * @var Mapper - */ - private $mapper; - - protected function setUp(){ - parent::setUp(); - $this->mapper = new ExampleMapper($this->db); - } - - - public function testMapperShouldSetTableName(){ - $this->assertEquals('*PREFIX*table', $this->mapper->getTableName()); - } - - - public function testFindQuery(){ - $sql = 'hi'; - $params = array('jo'); - $rows = array( - array('hi') - ); - $this->setMapperResult($sql, $params, $rows); - $this->mapper->find($sql, $params); - } - - public function testFindEntity(){ - $sql = 'hi'; - $params = array('jo'); - $rows = array( - array('pre_name' => 'hi') - ); - $this->setMapperResult($sql, $params, $rows, null, null, true); - $this->mapper->findOneEntity($sql, $params); - } - - public function testFindNotFound(){ - $sql = 'hi'; - $params = array('jo'); - $rows = array(); - $this->setMapperResult($sql, $params, $rows); - $this->setExpectedException( - '\OCP\AppFramework\Db\DoesNotExistException'); - $this->mapper->find($sql, $params); - } - - public function testFindEntityNotFound(){ - $sql = 'hi'; - $params = array('jo'); - $rows = array(); - $this->setMapperResult($sql, $params, $rows, null, null, true); - $this->setExpectedException( - '\OCP\AppFramework\Db\DoesNotExistException'); - $this->mapper->findOneEntity($sql, $params); - } - - public function testFindMultiple(){ - $sql = 'hi'; - $params = array('jo'); - $rows = array( - array('jo'), array('ho') - ); - $this->setMapperResult($sql, $params, $rows, null, null, true); - $this->setExpectedException( - '\OCP\AppFramework\Db\MultipleObjectsReturnedException'); - $this->mapper->find($sql, $params); - } - - public function testFindEntityMultiple(){ - $sql = 'hi'; - $params = array('jo'); - $rows = array( - array('jo'), array('ho') - ); - $this->setMapperResult($sql, $params, $rows, null, null, true); - $this->setExpectedException( - '\OCP\AppFramework\Db\MultipleObjectsReturnedException'); - $this->mapper->findOneEntity($sql, $params); - } - - - public function testDelete(){ - $sql = 'DELETE FROM `*PREFIX*table` WHERE `id` = ?'; - $params = array(2); - - $this->setMapperResult($sql, $params, [], null, null, true); - $entity = new Example(); - $entity->setId($params[0]); - - $this->mapper->delete($entity); - } - - - public function testCreate(){ - $this->db->expects($this->once()) - ->method('lastInsertId') - ->with($this->equalTo('*PREFIX*table')) - ->will($this->returnValue(3)); - $this->mapper = new ExampleMapper($this->db); - - $sql = 'INSERT INTO `*PREFIX*table`(`pre_name`,`email`) ' . - 'VALUES(?,?)'; - $params = array('john', 'my@email'); - $entity = new Example(); - $entity->setPreName($params[0]); - $entity->setEmail($params[1]); - - $this->setMapperResult($sql, $params, [], null, null, true); - - $this->mapper->insert($entity); - } - - - public function testCreateShouldReturnItemWithCorrectInsertId(){ - $this->db->expects($this->once()) - ->method('lastInsertId') - ->with($this->equalTo('*PREFIX*table')) - ->will($this->returnValue(3)); - $this->mapper = new ExampleMapper($this->db); - - $sql = 'INSERT INTO `*PREFIX*table`(`pre_name`,`email`) ' . - 'VALUES(?,?)'; - $params = array('john', 'my@email'); - $entity = new Example(); - $entity->setPreName($params[0]); - $entity->setEmail($params[1]); - - $this->setMapperResult($sql, $params); - - $result = $this->mapper->insert($entity); - - $this->assertEquals(3, $result->getId()); - } - - - public function testAssocParameters() { - $sql = 'test'; - $params = [':test' => 1, ':a' => 2]; - - $this->setMapperResult($sql, $params); - $this->mapper->execSql($sql, $params); - } - - - public function testUpdate(){ - $sql = 'UPDATE `*PREFIX*table` ' . - 'SET ' . - '`pre_name` = ?,'. - '`email` = ? ' . - 'WHERE `id` = ?'; - - $params = array('john', 'my@email', 1); - $entity = new Example(); - $entity->setPreName($params[0]); - $entity->setEmail($params[1]); - $entity->setId($params[2]); - - $this->setMapperResult($sql, $params, [], null, null, true); - - $this->mapper->update($entity); - } - - - public function testUpdateNoId(){ - $params = array('john', 'my@email'); - $entity = new Example(); - $entity->setPreName($params[0]); - $entity->setEmail($params[1]); - - $this->setExpectedException('InvalidArgumentException'); - - $this->mapper->update($entity); - } - - - public function testUpdateNothingChangedNoQuery(){ - $params = array('john', 'my@email'); - $entity = new Example(); - $entity->setId(3); - $entity->setEmail($params[1]); - $entity->resetUpdatedFields(); - - $this->db->expects($this->never()) - ->method('prepareQuery'); - - $this->mapper->update($entity); - } - - - public function testMapRowToEntity(){ - $entity1 = $this->mapper->mapRow(array('pre_name' => 'test1', 'email' => 'test2')); - $entity2 = new Example(); - $entity2->setPreName('test1'); - $entity2->setEmail('test2'); - $entity2->resetUpdatedFields(); - $this->assertEquals($entity2, $entity1); - } - - public function testFindEntities(){ - $sql = 'hi'; - $rows = array( - array('pre_name' => 'hi') - ); - $entity = new Example(); - $entity->setPreName('hi'); - $entity->resetUpdatedFields(); - $this->setMapperResult($sql, array(), $rows, null, null, true); - $result = $this->mapper->findAllEntities($sql); - $this->assertEquals(array($entity), $result); - } - - public function testFindEntitiesNotFound(){ - $sql = 'hi'; - $rows = array(); - $this->setMapperResult($sql, array(), $rows); - $result = $this->mapper->findAllEntities($sql); - $this->assertEquals(array(), $result); - } - - public function testFindEntitiesMultiple(){ - $sql = 'hi'; - $rows = array( - array('pre_name' => 'jo'), array('email' => 'ho') - ); - $entity1 = new Example(); - $entity1->setPreName('jo'); - $entity1->resetUpdatedFields(); - $entity2 = new Example(); - $entity2->setEmail('ho'); - $entity2->resetUpdatedFields(); - $this->setMapperResult($sql, array(), $rows); - $result = $this->mapper->findAllEntities($sql); - $this->assertEquals(array($entity1, $entity2), $result); - } -} diff --git a/tests/lib/appframework/db/mappertestutility.php b/tests/lib/appframework/db/mappertestutility.php deleted file mode 100644 index 69f0ad4eb67..00000000000 --- a/tests/lib/appframework/db/mappertestutility.php +++ /dev/null @@ -1,209 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt dev@bernhard-posselt.com - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace Test\AppFramework\Db; - - -/** - * Simple utility class for testing mappers - */ -abstract class MapperTestUtility extends \Test\TestCase { - protected $db; - private $query; - private $queryAt; - private $prepareAt; - private $fetchAt; - private $iterators; - - - /** - * Run this function before the actual test to either set or initialize the - * db. After this the db can be accessed by using $this->db - */ - protected function setUp(){ - parent::setUp(); - - $this->db = $this->getMockBuilder( - '\OCP\IDBConnection') - ->disableOriginalConstructor() - ->getMock(); - - $this->query = $this->getMock('\PDOStatement'); - $this->queryAt = 0; - $this->prepareAt = 0; - $this->iterators = []; - $this->fetchAt = 0; - } - - /** - * Checks if an array is associative - * @param array $array - * @return bool true if associative - */ - private function isAssocArray(array $array) { - return array_values($array) !== $array; - } - - /** - * Returns the correct PDO constant based on the value type - * @param $value - * @return int PDO constant - */ - private function getPDOType($value) { - switch (gettype($value)) { - case 'integer': - return \PDO::PARAM_INT; - case 'boolean': - return \PDO::PARAM_BOOL; - default: - return \PDO::PARAM_STR; - } - } - - /** - * Create mocks and set expected results for database queries - * @param string $sql the sql query that you expect to receive - * @param array $arguments the expected arguments for the prepare query - * method - * @param array $returnRows the rows that should be returned for the result - * of the database query. If not provided, it wont be assumed that fetch - * will be called on the result - */ - protected function setMapperResult($sql, $arguments=array(), $returnRows=array(), - $limit=null, $offset=null, $expectClose=false){ - if($limit === null && $offset === null) { - $this->db->expects($this->at($this->prepareAt)) - ->method('prepare') - ->with($this->equalTo($sql)) - ->will(($this->returnValue($this->query))); - } elseif($limit !== null && $offset === null) { - $this->db->expects($this->at($this->prepareAt)) - ->method('prepare') - ->with($this->equalTo($sql), $this->equalTo($limit)) - ->will(($this->returnValue($this->query))); - } elseif($limit === null && $offset !== null) { - $this->db->expects($this->at($this->prepareAt)) - ->method('prepare') - ->with($this->equalTo($sql), - $this->equalTo(null), - $this->equalTo($offset)) - ->will(($this->returnValue($this->query))); - } else { - $this->db->expects($this->at($this->prepareAt)) - ->method('prepare') - ->with($this->equalTo($sql), - $this->equalTo($limit), - $this->equalTo($offset)) - ->will(($this->returnValue($this->query))); - } - - $this->iterators[] = new ArgumentIterator($returnRows); - - $iterators = $this->iterators; - $fetchAt = $this->fetchAt; - - $this->query->expects($this->any()) - ->method('fetch') - ->will($this->returnCallback( - function() use ($iterators, $fetchAt){ - $iterator = $iterators[$fetchAt]; - $result = $iterator->next(); - - if($result === false) { - $fetchAt++; - } - - $this->queryAt++; - - return $result; - } - )); - - if ($this->isAssocArray($arguments)) { - foreach($arguments as $key => $argument) { - $pdoConstant = $this->getPDOType($argument); - $this->query->expects($this->at($this->queryAt)) - ->method('bindValue') - ->with($this->equalTo($key), - $this->equalTo($argument), - $this->equalTo($pdoConstant)); - $this->queryAt++; - } - } else { - $index = 1; - foreach($arguments as $argument) { - $pdoConstant = $this->getPDOType($argument); - $this->query->expects($this->at($this->queryAt)) - ->method('bindValue') - ->with($this->equalTo($index), - $this->equalTo($argument), - $this->equalTo($pdoConstant)); - $index++; - $this->queryAt++; - } - } - - $this->query->expects($this->at($this->queryAt)) - ->method('execute') - ->will($this->returnCallback(function($sql, $p=null, $o=null, $s=null) { - - })); - $this->queryAt++; - - - - if ($expectClose) { - $closing = $this->at($this->queryAt); - } else { - $closing = $this->any(); - } - $this->query->expects($closing)->method('closeCursor'); - $this->queryAt++; - - $this->prepareAt++; - $this->fetchAt++; - } - - -} - - -class ArgumentIterator { - - private $arguments; - - public function __construct($arguments){ - $this->arguments = $arguments; - } - - public function next(){ - $result = array_shift($this->arguments); - if($result === null){ - return false; - } else { - return $result; - } - } -} - diff --git a/tests/lib/appframework/dependencyinjection/DIContainerTest.php b/tests/lib/appframework/dependencyinjection/DIContainerTest.php deleted file mode 100644 index fc15b5a44ee..00000000000 --- a/tests/lib/appframework/dependencyinjection/DIContainerTest.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @author Morris Jobke - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * @copyright 2013 Morris Jobke <morris.jobke@gmail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework\DependencyInjection; - -use \OC\AppFramework\Http\Request; - - -class DIContainerTest extends \Test\TestCase { - - private $container; - private $api; - - protected function setUp(){ - parent::setUp(); - $this->container = $this->getMock('OC\AppFramework\DependencyInjection\DIContainer', - ['isAdminUser'], ['name'] - ); - $this->api = $this->getMock('OC\AppFramework\Core\API', array(), array('hi')); - } - - public function testProvidesAPI(){ - $this->assertTrue(isset($this->container['API'])); - } - - - public function testProvidesRequest(){ - $this->assertTrue(isset($this->container['Request'])); - } - - - public function testProvidesSecurityMiddleware(){ - $this->assertTrue(isset($this->container['SecurityMiddleware'])); - } - - - public function testProvidesMiddlewareDispatcher(){ - $this->assertTrue(isset($this->container['MiddlewareDispatcher'])); - } - - - public function testProvidesAppName(){ - $this->assertTrue(isset($this->container['AppName'])); - } - - - public function testAppNameIsSetCorrectly(){ - $this->assertEquals('name', $this->container['AppName']); - } - - - public function testMiddlewareDispatcherIncludesSecurityMiddleware(){ - $this->container['Request'] = new Request( - ['method' => 'GET'], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $security = $this->container['SecurityMiddleware']; - $dispatcher = $this->container['MiddlewareDispatcher']; - - $this->assertContains($security, $dispatcher->getMiddlewares()); - } - - -} diff --git a/tests/lib/appframework/http/ContentSecurityPolicyTest.php b/tests/lib/appframework/http/ContentSecurityPolicyTest.php deleted file mode 100644 index adf03185e9f..00000000000 --- a/tests/lib/appframework/http/ContentSecurityPolicyTest.php +++ /dev/null @@ -1,429 +0,0 @@ -<?php -/** - * Copyright (c) 2015 Lukas Reschke lukas@owncloud.com - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - - -namespace OC\AppFramework\Http; - -use OCP\AppFramework\Http; -use OCP\AppFramework\Http\ContentSecurityPolicy; - -/** - * Class ContentSecurityPolicyTest - * - * @package OC\AppFramework\Http - */ -class ContentSecurityPolicyTest extends \Test\TestCase { - - /** @var ContentSecurityPolicy */ - private $contentSecurityPolicy; - - public function setUp() { - parent::setUp(); - $this->contentSecurityPolicy = new ContentSecurityPolicy(); - } - - public function testGetPolicyDefault() { - $defaultPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - $this->assertSame($defaultPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyScriptDomainValid() { - $expectedPolicy = "default-src 'none';script-src 'self' www.owncloud.com 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyScriptDomainValidMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' www.owncloud.com www.owncloud.org 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowScriptDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowScriptDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowScriptDomainMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' www.owncloud.com 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowScriptDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowScriptDomainMultipleStacked() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowScriptDomain('www.owncloud.org')->disallowScriptDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyScriptAllowInline() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-inline' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->allowInlineScript(true); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyScriptAllowInlineWithDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' www.owncloud.com 'unsafe-inline' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.com'); - $this->contentSecurityPolicy->allowInlineScript(true); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyScriptDisallowInlineAndEval() { - $expectedPolicy = "default-src 'none';script-src 'self';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->allowInlineScript(false); - $this->contentSecurityPolicy->allowEvalScript(false); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyStyleDomainValid() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' www.owncloud.com 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyStyleDomainValidMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' www.owncloud.com www.owncloud.org 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowStyleDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowStyleDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowStyleDomainMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' www.owncloud.com 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowStyleDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowStyleDomainMultipleStacked() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowStyleDomain('www.owncloud.org')->disallowStyleDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyStyleAllowInline() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->allowInlineStyle(true); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyStyleAllowInlineWithDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' www.owncloud.com 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyStyleDisallowInline() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->allowInlineStyle(false); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyImageDomainValid() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob: www.owncloud.com;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedImageDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyImageDomainValidMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob: www.owncloud.com www.owncloud.org;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedImageDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedImageDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowImageDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedImageDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowImageDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowImageDomainMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob: www.owncloud.com;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedImageDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowImageDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowImageDomainMultipleStakes() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedImageDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowImageDomain('www.owncloud.org')->disallowImageDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyFontDomainValid() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self' www.owncloud.com;connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedFontDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyFontDomainValidMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self' www.owncloud.com www.owncloud.org;connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedFontDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedFontDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowFontDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedFontDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowFontDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowFontDomainMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self' www.owncloud.com;connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedFontDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowFontDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowFontDomainMultipleStakes() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedFontDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowFontDomain('www.owncloud.org')->disallowFontDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyConnectDomainValid() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self' www.owncloud.com;media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedConnectDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyConnectDomainValidMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self' www.owncloud.com www.owncloud.org;media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedConnectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedConnectDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowConnectDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedConnectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowConnectDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowConnectDomainMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self' www.owncloud.com;media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedConnectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowConnectDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowConnectDomainMultipleStakes() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedConnectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowConnectDomain('www.owncloud.org')->disallowConnectDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyMediaDomainValid() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self' www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedMediaDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyMediaDomainValidMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self' www.owncloud.com www.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedMediaDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedMediaDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowMediaDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedMediaDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowMediaDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowMediaDomainMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self' www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedMediaDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowMediaDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowMediaDomainMultipleStakes() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedMediaDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowMediaDomain('www.owncloud.org')->disallowMediaDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyObjectDomainValid() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self';object-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedObjectDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyObjectDomainValidMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self';object-src www.owncloud.com www.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedObjectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedObjectDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowObjectDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedObjectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowObjectDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowObjectDomainMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self';object-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedObjectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowObjectDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowObjectDomainMultipleStakes() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedObjectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowObjectDomain('www.owncloud.org')->disallowObjectDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetAllowedFrameDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self';frame-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedFrameDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyFrameDomainValidMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self';frame-src www.owncloud.com www.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedFrameDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedFrameDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowFrameDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedFrameDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowFrameDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowFrameDomainMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self';frame-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedFrameDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowFrameDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowFrameDomainMultipleStakes() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedFrameDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowFrameDomain('www.owncloud.org')->disallowFrameDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetAllowedChildSrcDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self';child-src child.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedChildSrcDomain('child.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyChildSrcValidMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self';child-src child.owncloud.com child.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedChildSrcDomain('child.owncloud.com'); - $this->contentSecurityPolicy->addAllowedChildSrcDomain('child.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowChildSrcDomain() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedChildSrcDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowChildSrcDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowChildSrcDomainMultiple() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self';child-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedChildSrcDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowChildSrcDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowChildSrcDomainMultipleStakes() { - $expectedPolicy = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->contentSecurityPolicy->addAllowedChildSrcDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowChildSrcDomain('www.owncloud.org')->disallowChildSrcDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } -} diff --git a/tests/lib/appframework/http/DataResponseTest.php b/tests/lib/appframework/http/DataResponseTest.php deleted file mode 100644 index e3d5689d54c..00000000000 --- a/tests/lib/appframework/http/DataResponseTest.php +++ /dev/null @@ -1,91 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2014 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework\Http; - - -use OCP\AppFramework\Http\DataResponse; -use OCP\AppFramework\Http; - - -class DataResponseTest extends \Test\TestCase { - - /** - * @var DataResponse - */ - private $response; - - protected function setUp() { - parent::setUp(); - $this->response = new DataResponse(); - } - - - public function testSetData() { - $params = array('hi', 'yo'); - $this->response->setData($params); - - $this->assertEquals(array('hi', 'yo'), $this->response->getData()); - } - - - public function testConstructorAllowsToSetData() { - $data = array('hi'); - $code = 300; - $response = new DataResponse($data, $code); - - $this->assertEquals($data, $response->getData()); - $this->assertEquals($code, $response->getStatus()); - } - - - public function testConstructorAllowsToSetHeaders() { - $data = array('hi'); - $code = 300; - $headers = array('test' => 'something'); - $response = new DataResponse($data, $code, $headers); - - $expectedHeaders = [ - 'Cache-Control' => 'no-cache, must-revalidate', - 'Content-Security-Policy' => "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'", - ]; - $expectedHeaders = array_merge($expectedHeaders, $headers); - - $this->assertEquals($data, $response->getData()); - $this->assertEquals($code, $response->getStatus()); - $this->assertEquals($expectedHeaders, $response->getHeaders()); - } - - - public function testChainability() { - $params = array('hi', 'yo'); - $this->response->setData($params) - ->setStatus(Http::STATUS_NOT_FOUND); - - $this->assertEquals(Http::STATUS_NOT_FOUND, $this->response->getStatus()); - $this->assertEquals(array('hi', 'yo'), $this->response->getData()); - } - - -} diff --git a/tests/lib/appframework/http/DispatcherTest.php b/tests/lib/appframework/http/DispatcherTest.php deleted file mode 100644 index 02c86df8e72..00000000000 --- a/tests/lib/appframework/http/DispatcherTest.php +++ /dev/null @@ -1,464 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework\Http; - -use OC\AppFramework\Utility\ControllerMethodReflector; -use OCP\AppFramework\Http; -use OCP\AppFramework\Http\JSONResponse; -use OCP\AppFramework\Http\DataResponse; -use OCP\AppFramework\Controller; - - -class TestController extends Controller { - /** - * @param string $appName - * @param \OCP\IRequest $request - */ - public function __construct($appName, $request) { - parent::__construct($appName, $request); - } - - /** - * @param int $int - * @param bool $bool - * @param int $test - * @param int $test2 - * @return array - */ - public function exec($int, $bool, $test=4, $test2=1) { - $this->registerResponder('text', function($in) { - return new JSONResponse(array('text' => $in)); - }); - return array($int, $bool, $test, $test2); - } - - - /** - * @param int $int - * @param bool $bool - * @param int $test - * @param int $test2 - * @return DataResponse - */ - public function execDataResponse($int, $bool, $test=4, $test2=1) { - return new DataResponse(array( - 'text' => array($int, $bool, $test, $test2) - )); - } - -} - - -class DispatcherTest extends \Test\TestCase { - private $middlewareDispatcher; - private $dispatcher; - private $controllerMethod; - private $response; - private $request; - private $lastModified; - private $etag; - private $http; - private $reflector; - - protected function setUp() { - parent::setUp(); - $this->controllerMethod = 'test'; - - $app = $this->getMockBuilder( - 'OC\AppFramework\DependencyInjection\DIContainer') - ->disableOriginalConstructor() - ->getMock(); - $request = $this->getMockBuilder( - '\OC\AppFramework\Http\Request') - ->disableOriginalConstructor() - ->getMock(); - $this->http = $this->getMockBuilder( - '\OC\AppFramework\Http') - ->disableOriginalConstructor() - ->getMock(); - - $this->middlewareDispatcher = $this->getMockBuilder( - '\OC\AppFramework\Middleware\MiddlewareDispatcher') - ->disableOriginalConstructor() - ->getMock(); - $this->controller = $this->getMock( - '\OCP\AppFramework\Controller', - array($this->controllerMethod), array($app, $request)); - - $this->request = $this->getMockBuilder( - '\OC\AppFramework\Http\Request') - ->disableOriginalConstructor() - ->getMock(); - - $this->reflector = new ControllerMethodReflector(); - - $this->dispatcher = new Dispatcher( - $this->http, $this->middlewareDispatcher, $this->reflector, - $this->request - ); - - $this->response = $this->getMockBuilder( - '\OCP\AppFramework\Http\Response') - ->disableOriginalConstructor() - ->getMock(); - - $this->lastModified = new \DateTime(null, new \DateTimeZone('GMT')); - $this->etag = 'hi'; - } - - - /** - * @param string $out - * @param string $httpHeaders - */ - private function setMiddlewareExpectations($out=null, - $httpHeaders=null, $responseHeaders=array(), - $ex=false, $catchEx=true) { - - if($ex) { - $exception = new \Exception(); - $this->middlewareDispatcher->expects($this->once()) - ->method('beforeController') - ->with($this->equalTo($this->controller), - $this->equalTo($this->controllerMethod)) - ->will($this->throwException($exception)); - if($catchEx) { - $this->middlewareDispatcher->expects($this->once()) - ->method('afterException') - ->with($this->equalTo($this->controller), - $this->equalTo($this->controllerMethod), - $this->equalTo($exception)) - ->will($this->returnValue($this->response)); - } else { - $this->middlewareDispatcher->expects($this->once()) - ->method('afterException') - ->with($this->equalTo($this->controller), - $this->equalTo($this->controllerMethod), - $this->equalTo($exception)) - ->will($this->returnValue(null)); - return; - } - } else { - $this->middlewareDispatcher->expects($this->once()) - ->method('beforeController') - ->with($this->equalTo($this->controller), - $this->equalTo($this->controllerMethod)); - $this->controller->expects($this->once()) - ->method($this->controllerMethod) - ->will($this->returnValue($this->response)); - } - - $this->response->expects($this->once()) - ->method('render') - ->will($this->returnValue($out)); - $this->response->expects($this->once()) - ->method('getStatus') - ->will($this->returnValue(Http::STATUS_OK)); - $this->response->expects($this->once()) - ->method('getLastModified') - ->will($this->returnValue($this->lastModified)); - $this->response->expects($this->once()) - ->method('getETag') - ->will($this->returnValue($this->etag)); - $this->response->expects($this->once()) - ->method('getHeaders') - ->will($this->returnValue($responseHeaders)); - $this->http->expects($this->once()) - ->method('getStatusHeader') - ->with($this->equalTo(Http::STATUS_OK), - $this->equalTo($this->lastModified), - $this->equalTo($this->etag)) - ->will($this->returnValue($httpHeaders)); - - $this->middlewareDispatcher->expects($this->once()) - ->method('afterController') - ->with($this->equalTo($this->controller), - $this->equalTo($this->controllerMethod), - $this->equalTo($this->response)) - ->will($this->returnValue($this->response)); - - $this->middlewareDispatcher->expects($this->once()) - ->method('afterController') - ->with($this->equalTo($this->controller), - $this->equalTo($this->controllerMethod), - $this->equalTo($this->response)) - ->will($this->returnValue($this->response)); - - $this->middlewareDispatcher->expects($this->once()) - ->method('beforeOutput') - ->with($this->equalTo($this->controller), - $this->equalTo($this->controllerMethod), - $this->equalTo($out)) - ->will($this->returnValue($out)); - } - - - public function testDispatcherReturnsArrayWith2Entries() { - $this->setMiddlewareExpectations(); - - $response = $this->dispatcher->dispatch($this->controller, - $this->controllerMethod); - $this->assertNull($response[0]); - $this->assertEquals(array(), $response[1]); - $this->assertNull($response[2]); - } - - - public function testHeadersAndOutputAreReturned(){ - $out = 'yo'; - $httpHeaders = 'Http'; - $responseHeaders = array('hell' => 'yeah'); - $this->setMiddlewareExpectations($out, $httpHeaders, $responseHeaders); - - $response = $this->dispatcher->dispatch($this->controller, - $this->controllerMethod); - - $this->assertEquals($httpHeaders, $response[0]); - $this->assertEquals($responseHeaders, $response[1]); - $this->assertEquals($out, $response[3]); - } - - - public function testExceptionCallsAfterException() { - $out = 'yo'; - $httpHeaders = 'Http'; - $responseHeaders = array('hell' => 'yeah'); - $this->setMiddlewareExpectations($out, $httpHeaders, $responseHeaders, true); - - $response = $this->dispatcher->dispatch($this->controller, - $this->controllerMethod); - - $this->assertEquals($httpHeaders, $response[0]); - $this->assertEquals($responseHeaders, $response[1]); - $this->assertEquals($out, $response[3]); - } - - - public function testExceptionThrowsIfCanNotBeHandledByAfterException() { - $out = 'yo'; - $httpHeaders = 'Http'; - $responseHeaders = array('hell' => 'yeah'); - $this->setMiddlewareExpectations($out, $httpHeaders, $responseHeaders, true, false); - - $this->setExpectedException('\Exception'); - $response = $this->dispatcher->dispatch($this->controller, - $this->controllerMethod); - - } - - - private function dispatcherPassthrough() { - $this->middlewareDispatcher->expects($this->once()) - ->method('beforeController'); - $this->middlewareDispatcher->expects($this->once()) - ->method('afterController') - ->will($this->returnCallback(function($a, $b, $in) { - return $in; - })); - $this->middlewareDispatcher->expects($this->once()) - ->method('beforeOutput') - ->will($this->returnCallback(function($a, $b, $in) { - return $in; - })); - } - - - public function testControllerParametersInjected() { - $this->request = new Request( - [ - 'post' => [ - 'int' => '3', - 'bool' => 'false' - ], - 'method' => 'POST' - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->dispatcher = new Dispatcher( - $this->http, $this->middlewareDispatcher, $this->reflector, - $this->request - ); - $controller = new TestController('app', $this->request); - - // reflector is supposed to be called once - $this->dispatcherPassthrough(); - $response = $this->dispatcher->dispatch($controller, 'exec'); - - $this->assertEquals('[3,true,4,1]', $response[3]); - } - - - public function testControllerParametersInjectedDefaultOverwritten() { - $this->request = new Request( - [ - 'post' => [ - 'int' => '3', - 'bool' => 'false', - 'test2' => 7 - ], - 'method' => 'POST', - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->dispatcher = new Dispatcher( - $this->http, $this->middlewareDispatcher, $this->reflector, - $this->request - ); - $controller = new TestController('app', $this->request); - - // reflector is supposed to be called once - $this->dispatcherPassthrough(); - $response = $this->dispatcher->dispatch($controller, 'exec'); - - $this->assertEquals('[3,true,4,7]', $response[3]); - } - - - - public function testResponseTransformedByUrlFormat() { - $this->request = new Request( - [ - 'post' => [ - 'int' => '3', - 'bool' => 'false' - ], - 'urlParams' => [ - 'format' => 'text' - ], - 'method' => 'GET' - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->dispatcher = new Dispatcher( - $this->http, $this->middlewareDispatcher, $this->reflector, - $this->request - ); - $controller = new TestController('app', $this->request); - - // reflector is supposed to be called once - $this->dispatcherPassthrough(); - $response = $this->dispatcher->dispatch($controller, 'exec'); - - $this->assertEquals('{"text":[3,false,4,1]}', $response[3]); - } - - - public function testResponseTransformsDataResponse() { - $this->request = new Request( - [ - 'post' => [ - 'int' => '3', - 'bool' => 'false' - ], - 'urlParams' => [ - 'format' => 'json' - ], - 'method' => 'GET' - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->dispatcher = new Dispatcher( - $this->http, $this->middlewareDispatcher, $this->reflector, - $this->request - ); - $controller = new TestController('app', $this->request); - - // reflector is supposed to be called once - $this->dispatcherPassthrough(); - $response = $this->dispatcher->dispatch($controller, 'execDataResponse'); - - $this->assertEquals('{"text":[3,false,4,1]}', $response[3]); - } - - - public function testResponseTransformedByAcceptHeader() { - $this->request = new Request( - [ - 'post' => [ - 'int' => '3', - 'bool' => 'false' - ], - 'server' => [ - 'HTTP_ACCEPT' => 'application/text, test', - 'HTTP_CONTENT_TYPE' => 'application/x-www-form-urlencoded' - ], - 'method' => 'PUT' - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->dispatcher = new Dispatcher( - $this->http, $this->middlewareDispatcher, $this->reflector, - $this->request - ); - $controller = new TestController('app', $this->request); - - // reflector is supposed to be called once - $this->dispatcherPassthrough(); - $response = $this->dispatcher->dispatch($controller, 'exec'); - - $this->assertEquals('{"text":[3,false,4,1]}', $response[3]); - } - - - public function testResponsePrimarilyTransformedByParameterFormat() { - $this->request = new Request( - [ - 'post' => [ - 'int' => '3', - 'bool' => 'false' - ], - 'get' => [ - 'format' => 'text' - ], - 'server' => [ - 'HTTP_ACCEPT' => 'application/json, test' - ], - 'method' => 'POST' - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->dispatcher = new Dispatcher( - $this->http, $this->middlewareDispatcher, $this->reflector, - $this->request - ); - $controller = new TestController('app', $this->request); - - // reflector is supposed to be called once - $this->dispatcherPassthrough(); - $response = $this->dispatcher->dispatch($controller, 'exec'); - - $this->assertEquals('{"text":[3,true,4,1]}', $response[3]); - } - - - - -} diff --git a/tests/lib/appframework/http/DownloadResponseTest.php b/tests/lib/appframework/http/DownloadResponseTest.php deleted file mode 100644 index 5e5db2c55ec..00000000000 --- a/tests/lib/appframework/http/DownloadResponseTest.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OCP\AppFramework\Http; - - -class ChildDownloadResponse extends DownloadResponse { - -}; - - -class DownloadResponseTest extends \Test\TestCase { - - /** - * @var ChildDownloadResponse - */ - protected $response; - - protected function setUp(){ - parent::setUp(); - $this->response = new ChildDownloadResponse('file', 'content'); - } - - - public function testHeaders() { - $headers = $this->response->getHeaders(); - - $this->assertContains('attachment; filename="file"', $headers['Content-Disposition']); - $this->assertContains('content', $headers['Content-Type']); - } - - -} diff --git a/tests/lib/appframework/http/EmptyContentSecurityPolicyTest.php b/tests/lib/appframework/http/EmptyContentSecurityPolicyTest.php deleted file mode 100644 index 0d0f92de819..00000000000 --- a/tests/lib/appframework/http/EmptyContentSecurityPolicyTest.php +++ /dev/null @@ -1,430 +0,0 @@ -<?php -/** - * Copyright (c) 2015 Lukas Reschke lukas@owncloud.com - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - - -namespace OC\AppFramework\Http; - -use OCP\AppFramework\Http; -use OCP\AppFramework\Http\EmptyContentSecurityPolicy; - -/** - * Class ContentSecurityPolicyTest - * - * @package OC\AppFramework\Http - */ -class EmptyContentSecurityPolicyTest extends \Test\TestCase { - - /** @var EmptyContentSecurityPolicy */ - private $contentSecurityPolicy; - - public function setUp() { - parent::setUp(); - $this->contentSecurityPolicy = new EmptyContentSecurityPolicy(); - } - - public function testGetPolicyDefault() { - $defaultPolicy = "default-src 'none'"; - $this->assertSame($defaultPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyScriptDomainValid() { - $expectedPolicy = "default-src 'none';script-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyScriptDomainValidMultiple() { - $expectedPolicy = "default-src 'none';script-src www.owncloud.com www.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowScriptDomain() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowScriptDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowScriptDomainMultiple() { - $expectedPolicy = "default-src 'none';script-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowScriptDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowScriptDomainMultipleStacked() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowScriptDomain('www.owncloud.org')->disallowScriptDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyScriptAllowInline() { - $expectedPolicy = "default-src 'none';script-src 'unsafe-inline'"; - - $this->contentSecurityPolicy->allowInlineScript(true); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyScriptAllowInlineWithDomain() { - $expectedPolicy = "default-src 'none';script-src www.owncloud.com 'unsafe-inline'"; - - $this->contentSecurityPolicy->addAllowedScriptDomain('www.owncloud.com'); - $this->contentSecurityPolicy->allowInlineScript(true); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyScriptAllowInlineAndEval() { - $expectedPolicy = "default-src 'none';script-src 'unsafe-inline' 'unsafe-eval'"; - - $this->contentSecurityPolicy->allowInlineScript(true); - $this->contentSecurityPolicy->allowEvalScript(true); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyStyleDomainValid() { - $expectedPolicy = "default-src 'none';style-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyStyleDomainValidMultiple() { - $expectedPolicy = "default-src 'none';style-src www.owncloud.com www.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowStyleDomain() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowStyleDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowStyleDomainMultiple() { - $expectedPolicy = "default-src 'none';style-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowStyleDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowStyleDomainMultipleStacked() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowStyleDomain('www.owncloud.org')->disallowStyleDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyStyleAllowInline() { - $expectedPolicy = "default-src 'none';style-src 'unsafe-inline'"; - - $this->contentSecurityPolicy->allowInlineStyle(true); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyStyleAllowInlineWithDomain() { - $expectedPolicy = "default-src 'none';style-src www.owncloud.com 'unsafe-inline'"; - - $this->contentSecurityPolicy->addAllowedStyleDomain('www.owncloud.com'); - $this->contentSecurityPolicy->allowInlineStyle(true); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyStyleDisallowInline() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->allowInlineStyle(false); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyImageDomainValid() { - $expectedPolicy = "default-src 'none';img-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedImageDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyImageDomainValidMultiple() { - $expectedPolicy = "default-src 'none';img-src www.owncloud.com www.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedImageDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedImageDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowImageDomain() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedImageDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowImageDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowImageDomainMultiple() { - $expectedPolicy = "default-src 'none';img-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedImageDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowImageDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowImageDomainMultipleStakes() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedImageDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowImageDomain('www.owncloud.org')->disallowImageDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyFontDomainValid() { - $expectedPolicy = "default-src 'none';font-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedFontDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyFontDomainValidMultiple() { - $expectedPolicy = "default-src 'none';font-src www.owncloud.com www.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedFontDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedFontDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowFontDomain() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedFontDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowFontDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowFontDomainMultiple() { - $expectedPolicy = "default-src 'none';font-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedFontDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowFontDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowFontDomainMultipleStakes() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedFontDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowFontDomain('www.owncloud.org')->disallowFontDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyConnectDomainValid() { - $expectedPolicy = "default-src 'none';connect-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedConnectDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyConnectDomainValidMultiple() { - $expectedPolicy = "default-src 'none';connect-src www.owncloud.com www.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedConnectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedConnectDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowConnectDomain() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedConnectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowConnectDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowConnectDomainMultiple() { - $expectedPolicy = "default-src 'none';connect-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedConnectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowConnectDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowConnectDomainMultipleStakes() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedConnectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowConnectDomain('www.owncloud.org')->disallowConnectDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyMediaDomainValid() { - $expectedPolicy = "default-src 'none';media-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedMediaDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyMediaDomainValidMultiple() { - $expectedPolicy = "default-src 'none';media-src www.owncloud.com www.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedMediaDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedMediaDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowMediaDomain() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedMediaDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowMediaDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowMediaDomainMultiple() { - $expectedPolicy = "default-src 'none';media-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedMediaDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowMediaDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowMediaDomainMultipleStakes() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedMediaDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowMediaDomain('www.owncloud.org')->disallowMediaDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyObjectDomainValid() { - $expectedPolicy = "default-src 'none';object-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedObjectDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyObjectDomainValidMultiple() { - $expectedPolicy = "default-src 'none';object-src www.owncloud.com www.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedObjectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedObjectDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowObjectDomain() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedObjectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowObjectDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowObjectDomainMultiple() { - $expectedPolicy = "default-src 'none';object-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedObjectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowObjectDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowObjectDomainMultipleStakes() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedObjectDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowObjectDomain('www.owncloud.org')->disallowObjectDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetAllowedFrameDomain() { - $expectedPolicy = "default-src 'none';frame-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedFrameDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyFrameDomainValidMultiple() { - $expectedPolicy = "default-src 'none';frame-src www.owncloud.com www.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedFrameDomain('www.owncloud.com'); - $this->contentSecurityPolicy->addAllowedFrameDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowFrameDomain() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedFrameDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowFrameDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowFrameDomainMultiple() { - $expectedPolicy = "default-src 'none';frame-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedFrameDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowFrameDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowFrameDomainMultipleStakes() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedFrameDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowFrameDomain('www.owncloud.org')->disallowFrameDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetAllowedChildSrcDomain() { - $expectedPolicy = "default-src 'none';child-src child.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedChildSrcDomain('child.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyChildSrcValidMultiple() { - $expectedPolicy = "default-src 'none';child-src child.owncloud.com child.owncloud.org"; - - $this->contentSecurityPolicy->addAllowedChildSrcDomain('child.owncloud.com'); - $this->contentSecurityPolicy->addAllowedChildSrcDomain('child.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowChildSrcDomain() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedChildSrcDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowChildSrcDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowChildSrcDomainMultiple() { - $expectedPolicy = "default-src 'none';child-src www.owncloud.com"; - - $this->contentSecurityPolicy->addAllowedChildSrcDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowChildSrcDomain('www.owncloud.org'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } - - public function testGetPolicyDisallowChildSrcDomainMultipleStakes() { - $expectedPolicy = "default-src 'none'"; - - $this->contentSecurityPolicy->addAllowedChildSrcDomain('www.owncloud.com'); - $this->contentSecurityPolicy->disallowChildSrcDomain('www.owncloud.org')->disallowChildSrcDomain('www.owncloud.com'); - $this->assertSame($expectedPolicy, $this->contentSecurityPolicy->buildPolicy()); - } -} diff --git a/tests/lib/appframework/http/HttpTest.php b/tests/lib/appframework/http/HttpTest.php deleted file mode 100644 index 4bcc8305db4..00000000000 --- a/tests/lib/appframework/http/HttpTest.php +++ /dev/null @@ -1,99 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework\Http; - -use OC\AppFramework\Http; - - -class HttpTest extends \Test\TestCase { - - private $server; - - /** - * @var Http - */ - private $http; - - protected function setUp(){ - parent::setUp(); - - $this->server = array(); - $this->http = new Http($this->server); - } - - - public function testProtocol() { - $header = $this->http->getStatusHeader(Http::STATUS_TEMPORARY_REDIRECT); - $this->assertEquals('HTTP/1.1 307 Temporary Redirect', $header); - } - - - public function testProtocol10() { - $this->http = new Http($this->server, 'HTTP/1.0'); - $header = $this->http->getStatusHeader(Http::STATUS_OK); - $this->assertEquals('HTTP/1.0 200 OK', $header); - } - - - public function testEtagMatchReturnsNotModified() { - $http = new Http(array('HTTP_IF_NONE_MATCH' => 'hi')); - - $header = $http->getStatusHeader(Http::STATUS_OK, null, 'hi'); - $this->assertEquals('HTTP/1.1 304 Not Modified', $header); - } - - - public function testQuotedEtagMatchReturnsNotModified() { - $http = new Http(array('HTTP_IF_NONE_MATCH' => '"hi"')); - - $header = $http->getStatusHeader(Http::STATUS_OK, null, 'hi'); - $this->assertEquals('HTTP/1.1 304 Not Modified', $header); - } - - - public function testLastModifiedMatchReturnsNotModified() { - $dateTime = new \DateTime(null, new \DateTimeZone('GMT')); - $dateTime->setTimestamp('12'); - - $http = new Http( - array( - 'HTTP_IF_MODIFIED_SINCE' => 'Thu, 01 Jan 1970 00:00:12 +0000') - ); - - $header = $http->getStatusHeader(Http::STATUS_OK, $dateTime); - $this->assertEquals('HTTP/1.1 304 Not Modified', $header); - } - - - - public function testTempRedirectBecomesFoundInHttp10() { - $http = new Http(array(), 'HTTP/1.0'); - - $header = $http->getStatusHeader(Http::STATUS_TEMPORARY_REDIRECT); - $this->assertEquals('HTTP/1.0 302 Found', $header); - } - // TODO: write unittests for http codes - -} diff --git a/tests/lib/appframework/http/JSONResponseTest.php b/tests/lib/appframework/http/JSONResponseTest.php deleted file mode 100644 index a98f5fc894a..00000000000 --- a/tests/lib/appframework/http/JSONResponseTest.php +++ /dev/null @@ -1,123 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @author Morris Jobke - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * @copyright 2013 Morris Jobke <morris.jobke@gmail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework\Http; - - -use OCP\AppFramework\Http\JSONResponse; -use OCP\AppFramework\Http; - -class JSONResponseTest extends \Test\TestCase { - - /** - * @var JSONResponse - */ - private $json; - - protected function setUp() { - parent::setUp(); - $this->json = new JSONResponse(); - } - - - public function testHeader() { - $headers = $this->json->getHeaders(); - $this->assertEquals('application/json; charset=utf-8', $headers['Content-Type']); - } - - - public function testSetData() { - $params = array('hi', 'yo'); - $this->json->setData($params); - - $this->assertEquals(array('hi', 'yo'), $this->json->getData()); - } - - - public function testSetRender() { - $params = array('test' => 'hi'); - $this->json->setData($params); - - $expected = '{"test":"hi"}'; - - $this->assertEquals($expected, $this->json->render()); - } - - /** - * @return array - */ - public function renderDataProvider() { - return [ - [ - ['test' => 'hi'], '{"test":"hi"}', - ], - [ - ['<h1>test' => '<h1>hi'], '{"\u003Ch1\u003Etest":"\u003Ch1\u003Ehi"}', - ], - ]; - } - - /** - * @dataProvider renderDataProvider - * @param array $input - * @param string $expected - */ - public function testRender(array $input, $expected) { - $this->json->setData($input); - $this->assertEquals($expected, $this->json->render()); - } - - /** - * @expectedException \Exception - * @expectedExceptionMessage Could not json_encode due to invalid non UTF-8 characters in the array: array ( - * @requires PHP 5.5 - */ - public function testRenderWithNonUtf8Encoding() { - $params = ['test' => hex2bin('e9')]; - $this->json->setData($params); - $this->json->render(); - } - - public function testConstructorAllowsToSetData() { - $data = array('hi'); - $code = 300; - $response = new JSONResponse($data, $code); - - $expected = '["hi"]'; - $this->assertEquals($expected, $response->render()); - $this->assertEquals($code, $response->getStatus()); - } - - public function testChainability() { - $params = array('hi', 'yo'); - $this->json->setData($params) - ->setStatus(Http::STATUS_NOT_FOUND); - - $this->assertEquals(Http::STATUS_NOT_FOUND, $this->json->getStatus()); - $this->assertEquals(array('hi', 'yo'), $this->json->getData()); - } - -} diff --git a/tests/lib/appframework/http/OCSResponseTest.php b/tests/lib/appframework/http/OCSResponseTest.php deleted file mode 100644 index 1ca3e330bad..00000000000 --- a/tests/lib/appframework/http/OCSResponseTest.php +++ /dev/null @@ -1,72 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2015 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework\Http; - - -use OCP\AppFramework\Http\OCSResponse; - - -class OCSResponseTest extends \Test\TestCase { - - - public function testHeadersJSON() { - $response = new OCSResponse('json', 1, 2, 3); - $type = $response->getHeaders()['Content-Type']; - $this->assertEquals('application/json; charset=utf-8', $type); - } - - - public function testHeadersXML() { - $response = new OCSResponse('xml', 1, 2, 3); - $type = $response->getHeaders()['Content-Type']; - $this->assertEquals('application/xml; charset=utf-8', $type); - } - - - public function testRender() { - $response = new OCSResponse( - 'xml', 2, 'message', ['test' => 'hi'], 3, 4 - ); - $out = $response->render(); - $expected = "<?xml version=\"1.0\"?>\n" . - "<ocs>\n" . - " <meta>\n" . - " <status>failure</status>\n" . - " <statuscode>2</statuscode>\n" . - " <message>message</message>\n" . - " <totalitems>3</totalitems>\n" . - " <itemsperpage>4</itemsperpage>\n" . - " </meta>\n" . - " <data>\n" . - " <test>hi</test>\n" . - " </data>\n" . - "</ocs>\n"; - - $this->assertEquals($expected, $out); - - } - - -} diff --git a/tests/lib/appframework/http/RedirectResponseTest.php b/tests/lib/appframework/http/RedirectResponseTest.php deleted file mode 100644 index 723f6600c55..00000000000 --- a/tests/lib/appframework/http/RedirectResponseTest.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OCP\AppFramework\Http; - -use OCP\AppFramework\Http; - - -class RedirectResponseTest extends \Test\TestCase { - - /** - * @var RedirectResponse - */ - protected $response; - - protected function setUp(){ - parent::setUp(); - $this->response = new RedirectResponse('/url'); - } - - - public function testHeaders() { - $headers = $this->response->getHeaders(); - $this->assertEquals('/url', $headers['Location']); - $this->assertEquals(Http::STATUS_SEE_OTHER, - $this->response->getStatus()); - } - - - public function testGetRedirectUrl(){ - $this->assertEquals('/url', $this->response->getRedirectUrl()); - } - - -} diff --git a/tests/lib/appframework/http/RequestTest.php b/tests/lib/appframework/http/RequestTest.php deleted file mode 100644 index 3f1d09c2a93..00000000000 --- a/tests/lib/appframework/http/RequestTest.php +++ /dev/null @@ -1,1453 +0,0 @@ -<?php -/** - * @copyright 2013 Thomas Tanghus (thomas@tanghus.net) - * @copyright 2015 Lukas Reschke lukas@owncloud.com - * - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -namespace OC\AppFramework\Http; - -use OC\Security\CSRF\CsrfToken; -use OC\Security\CSRF\CsrfTokenManager; -use OCP\Security\ISecureRandom; -use OCP\IConfig; - -/** - * Class RequestTest - * - * @package OC\AppFramework\Http - */ -class RequestTest extends \Test\TestCase { - /** @var string */ - protected $stream = 'fakeinput://data'; - /** @var ISecureRandom */ - protected $secureRandom; - /** @var IConfig */ - protected $config; - /** @var CsrfTokenManager */ - protected $csrfTokenManager; - - protected function setUp() { - parent::setUp(); - - require_once __DIR__ . '/requeststream.php'; - if (in_array('fakeinput', stream_get_wrappers())) { - stream_wrapper_unregister('fakeinput'); - } - stream_wrapper_register('fakeinput', 'RequestStream'); - - $this->secureRandom = $this->getMockBuilder('\OCP\Security\ISecureRandom')->getMock(); - $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); - $this->csrfTokenManager = $this->getMockBuilder('\OC\Security\CSRF\CsrfTokenManager') - ->disableOriginalConstructor()->getMock(); - } - - protected function tearDown() { - stream_wrapper_unregister('fakeinput'); - parent::tearDown(); - } - - public function testRequestAccessors() { - $vars = array( - 'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'), - 'method' => 'GET', - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - // Countable - $this->assertSame(2, count($request)); - // Array access - $this->assertSame('Joey', $request['nickname']); - // "Magic" accessors - $this->assertSame('Joey', $request->{'nickname'}); - $this->assertTrue(isset($request['nickname'])); - $this->assertTrue(isset($request->{'nickname'})); - $this->assertFalse(isset($request->{'flickname'})); - // Only testing 'get', but same approach for post, files etc. - $this->assertSame('Joey', $request->get['nickname']); - // Always returns null if variable not set. - $this->assertSame(null, $request->{'flickname'}); - - } - - // urlParams has precedence over POST which has precedence over GET - public function testPrecedence() { - $vars = array( - 'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'), - 'post' => array('name' => 'Jane Doe', 'nickname' => 'Janey'), - 'urlParams' => array('user' => 'jw', 'name' => 'Johnny Weissmüller'), - 'method' => 'GET' - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame(3, count($request)); - $this->assertSame('Janey', $request->{'nickname'}); - $this->assertSame('Johnny Weissmüller', $request->{'name'}); - } - - - /** - * @expectedException \RuntimeException - */ - public function testImmutableArrayAccess() { - $vars = array( - 'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'), - 'method' => 'GET' - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $request['nickname'] = 'Janey'; - } - - /** - * @expectedException \RuntimeException - */ - public function testImmutableMagicAccess() { - $vars = array( - 'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'), - 'method' => 'GET' - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $request->{'nickname'} = 'Janey'; - } - - /** - * @expectedException \LogicException - */ - public function testGetTheMethodRight() { - $vars = array( - 'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'), - 'method' => 'GET', - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $request->post; - } - - public function testTheMethodIsRight() { - $vars = array( - 'get' => array('name' => 'John Q. Public', 'nickname' => 'Joey'), - 'method' => 'GET', - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('GET', $request->method); - $result = $request->get; - $this->assertSame('John Q. Public', $result['name']); - $this->assertSame('Joey', $result['nickname']); - } - - public function testJsonPost() { - global $data; - $data = '{"name": "John Q. Public", "nickname": "Joey"}'; - $vars = array( - 'method' => 'POST', - 'server' => array('CONTENT_TYPE' => 'application/json; utf-8') - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('POST', $request->method); - $result = $request->post; - $this->assertSame('John Q. Public', $result['name']); - $this->assertSame('Joey', $result['nickname']); - $this->assertSame('Joey', $request->params['nickname']); - $this->assertSame('Joey', $request['nickname']); - } - - public function testNotJsonPost() { - global $data; - $data = 'this is not valid json'; - $vars = array( - 'method' => 'POST', - 'server' => array('CONTENT_TYPE' => 'application/json; utf-8') - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertEquals('POST', $request->method); - $result = $request->post; - // ensure there's no error attempting to decode the content - } - - public function testPatch() { - global $data; - $data = http_build_query(array('name' => 'John Q. Public', 'nickname' => 'Joey'), '', '&'); - - $vars = array( - 'method' => 'PATCH', - 'server' => array('CONTENT_TYPE' => 'application/x-www-form-urlencoded'), - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('PATCH', $request->method); - $result = $request->patch; - - $this->assertSame('John Q. Public', $result['name']); - $this->assertSame('Joey', $result['nickname']); - } - - public function testJsonPatchAndPut() { - global $data; - - // PUT content - $data = '{"name": "John Q. Public", "nickname": "Joey"}'; - $vars = array( - 'method' => 'PUT', - 'server' => array('CONTENT_TYPE' => 'application/json; utf-8'), - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('PUT', $request->method); - $result = $request->put; - - $this->assertSame('John Q. Public', $result['name']); - $this->assertSame('Joey', $result['nickname']); - - // PATCH content - $data = '{"name": "John Q. Public", "nickname": null}'; - $vars = array( - 'method' => 'PATCH', - 'server' => array('CONTENT_TYPE' => 'application/json; utf-8'), - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('PATCH', $request->method); - $result = $request->patch; - - $this->assertSame('John Q. Public', $result['name']); - $this->assertSame(null, $result['nickname']); - } - - public function testPutStream() { - global $data; - $data = file_get_contents(__DIR__ . '/../../../data/testimage.png'); - - $vars = array( - 'put' => $data, - 'method' => 'PUT', - 'server' => array('CONTENT_TYPE' => 'image/png'), - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('PUT', $request->method); - $resource = $request->put; - $contents = stream_get_contents($resource); - $this->assertSame($data, $contents); - - try { - $resource = $request->put; - } catch(\LogicException $e) { - return; - } - $this->fail('Expected LogicException.'); - - } - - - public function testSetUrlParameters() { - $vars = array( - 'post' => array(), - 'method' => 'POST', - 'urlParams' => array('id' => '2'), - ); - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $newParams = array('id' => '3', 'test' => 'test2'); - $request->setUrlParameters($newParams); - $this->assertSame('test2', $request->getParam('test')); - $this->assertEquals('3', $request->getParam('id')); - $this->assertEquals('3', $request->getParams()['id']); - } - - public function testGetIdWithModUnique() { - $vars = [ - 'server' => [ - 'UNIQUE_ID' => 'GeneratedUniqueIdByModUnique' - ], - ]; - - $request = new Request( - $vars, - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('GeneratedUniqueIdByModUnique', $request->getId()); - } - - public function testGetIdWithoutModUnique() { - $this->secureRandom->expects($this->once()) - ->method('generate') - ->with('20') - ->will($this->returnValue('GeneratedByOwnCloudItself')); - - $request = new Request( - [], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('GeneratedByOwnCloudItself', $request->getId()); - } - - public function testGetIdWithoutModUniqueStable() { - $request = new Request( - [], - \OC::$server->getSecureRandom(), - $this->config, - $this->csrfTokenManager, - $this->stream - ); - $firstId = $request->getId(); - $secondId = $request->getId(); - $this->assertSame($firstId, $secondId); - } - - public function testGetRemoteAddressWithoutTrustedRemote() { - $this->config - ->expects($this->once()) - ->method('getSystemValue') - ->with('trusted_proxies') - ->will($this->returnValue([])); - - $request = new Request( - [ - 'server' => [ - 'REMOTE_ADDR' => '10.0.0.2', - 'HTTP_X_FORWARDED' => '10.4.0.5, 10.4.0.4', - 'HTTP_X_FORWARDED_FOR' => '192.168.0.233' - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('10.0.0.2', $request->getRemoteAddress()); - } - - public function testGetRemoteAddressWithNoTrustedHeader() { - $this->config - ->expects($this->at(0)) - ->method('getSystemValue') - ->with('trusted_proxies') - ->will($this->returnValue(['10.0.0.2'])); - $this->config - ->expects($this->at(1)) - ->method('getSystemValue') - ->with('forwarded_for_headers') - ->will($this->returnValue([])); - - $request = new Request( - [ - 'server' => [ - 'REMOTE_ADDR' => '10.0.0.2', - 'HTTP_X_FORWARDED' => '10.4.0.5, 10.4.0.4', - 'HTTP_X_FORWARDED_FOR' => '192.168.0.233' - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('10.0.0.2', $request->getRemoteAddress()); - } - - public function testGetRemoteAddressWithSingleTrustedRemote() { - $this->config - ->expects($this->at(0)) - ->method('getSystemValue') - ->with('trusted_proxies') - ->will($this->returnValue(['10.0.0.2'])); - $this->config - ->expects($this->at(1)) - ->method('getSystemValue') - ->with('forwarded_for_headers') - ->will($this->returnValue(['HTTP_X_FORWARDED'])); - - $request = new Request( - [ - 'server' => [ - 'REMOTE_ADDR' => '10.0.0.2', - 'HTTP_X_FORWARDED' => '10.4.0.5, 10.4.0.4', - 'HTTP_X_FORWARDED_FOR' => '192.168.0.233' - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('10.4.0.5', $request->getRemoteAddress()); - } - - public function testGetRemoteAddressVerifyPriorityHeader() { - $this->config - ->expects($this->at(0)) - ->method('getSystemValue') - ->with('trusted_proxies') - ->will($this->returnValue(['10.0.0.2'])); - $this->config - ->expects($this->at(1)) - ->method('getSystemValue') - ->with('forwarded_for_headers') - ->will($this->returnValue([ - 'HTTP_CLIENT_IP', - 'HTTP_X_FORWARDED_FOR', - 'HTTP_X_FORWARDED' - ])); - - $request = new Request( - [ - 'server' => [ - 'REMOTE_ADDR' => '10.0.0.2', - 'HTTP_X_FORWARDED' => '10.4.0.5, 10.4.0.4', - 'HTTP_X_FORWARDED_FOR' => '192.168.0.233' - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('192.168.0.233', $request->getRemoteAddress()); - } - - /** - * @return array - */ - public function httpProtocolProvider() { - return [ - // Valid HTTP 1.0 - ['HTTP/1.0', 'HTTP/1.0'], - ['http/1.0', 'HTTP/1.0'], - ['HTTp/1.0', 'HTTP/1.0'], - - // Valid HTTP 1.1 - ['HTTP/1.1', 'HTTP/1.1'], - ['http/1.1', 'HTTP/1.1'], - ['HTTp/1.1', 'HTTP/1.1'], - - // Valid HTTP 2.0 - ['HTTP/2', 'HTTP/2'], - ['http/2', 'HTTP/2'], - ['HTTp/2', 'HTTP/2'], - - // Invalid - ['HTTp/394', 'HTTP/1.1'], - ['InvalidProvider/1.1', 'HTTP/1.1'], - [null, 'HTTP/1.1'], - ['', 'HTTP/1.1'], - - ]; - } - - /** - * @dataProvider httpProtocolProvider - * - * @param mixed $input - * @param string $expected - */ - public function testGetHttpProtocol($input, $expected) { - $request = new Request( - [ - 'server' => [ - 'SERVER_PROTOCOL' => $input, - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame($expected, $request->getHttpProtocol()); - } - - public function testGetServerProtocolWithOverride() { - $this->config - ->expects($this->at(0)) - ->method('getSystemValue') - ->with('overwriteprotocol') - ->will($this->returnValue('customProtocol')); - $this->config - ->expects($this->at(1)) - ->method('getSystemValue') - ->with('overwritecondaddr') - ->will($this->returnValue('')); - $this->config - ->expects($this->at(2)) - ->method('getSystemValue') - ->with('overwriteprotocol') - ->will($this->returnValue('customProtocol')); - - $request = new Request( - [], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('customProtocol', $request->getServerProtocol()); - } - - public function testGetServerProtocolWithProtoValid() { - $this->config - ->expects($this->exactly(2)) - ->method('getSystemValue') - ->with('overwriteprotocol') - ->will($this->returnValue('')); - - $requestHttps = new Request( - [ - 'server' => [ - 'HTTP_X_FORWARDED_PROTO' => 'HtTpS' - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - $requestHttp = new Request( - [ - 'server' => [ - 'HTTP_X_FORWARDED_PROTO' => 'HTTp' - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - - $this->assertSame('https', $requestHttps->getServerProtocol()); - $this->assertSame('http', $requestHttp->getServerProtocol()); - } - - public function testGetServerProtocolWithHttpsServerValueOn() { - $this->config - ->expects($this->once()) - ->method('getSystemValue') - ->with('overwriteprotocol') - ->will($this->returnValue('')); - - $request = new Request( - [ - 'server' => [ - 'HTTPS' => 'on' - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - $this->assertSame('https', $request->getServerProtocol()); - } - - public function testGetServerProtocolWithHttpsServerValueOff() { - $this->config - ->expects($this->once()) - ->method('getSystemValue') - ->with('overwriteprotocol') - ->will($this->returnValue('')); - - $request = new Request( - [ - 'server' => [ - 'HTTPS' => 'off' - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - $this->assertSame('http', $request->getServerProtocol()); - } - - public function testGetServerProtocolWithHttpsServerValueEmpty() { - $this->config - ->expects($this->once()) - ->method('getSystemValue') - ->with('overwriteprotocol') - ->will($this->returnValue('')); - - $request = new Request( - [ - 'server' => [ - 'HTTPS' => '' - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - $this->assertSame('http', $request->getServerProtocol()); - } - - public function testGetServerProtocolDefault() { - $this->config - ->expects($this->once()) - ->method('getSystemValue') - ->with('overwriteprotocol') - ->will($this->returnValue('')); - - $request = new Request( - [], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - $this->assertSame('http', $request->getServerProtocol()); - } - - public function testGetServerProtocolBehindLoadBalancers() { - $this->config - ->expects($this->once()) - ->method('getSystemValue') - ->with('overwriteprotocol') - ->will($this->returnValue('')); - - $request = new Request( - [ - 'server' => [ - 'HTTP_X_FORWARDED_PROTO' => 'https,http,http' - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('https', $request->getServerProtocol()); - } - - /** - * @dataProvider userAgentProvider - * @param string $testAgent - * @param array $userAgent - * @param bool $matches - */ - public function testUserAgent($testAgent, $userAgent, $matches) { - $request = new Request( - [ - 'server' => [ - 'HTTP_USER_AGENT' => $testAgent, - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame($matches, $request->isUserAgent($userAgent)); - } - - /** - * @dataProvider userAgentProvider - * @param string $testAgent - * @param array $userAgent - * @param bool $matches - */ - public function testUndefinedUserAgent($testAgent, $userAgent, $matches) { - $request = new Request( - [], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertFalse($request->isUserAgent($userAgent)); - } - - /** - * @return array - */ - function userAgentProvider() { - return [ - [ - 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)', - [ - Request::USER_AGENT_IE - ], - true, - ], - [ - 'Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Firefox/24.0', - [ - Request::USER_AGENT_IE - ], - false, - ], - [ - 'Mozilla/5.0 (Linux; Android 4.4; Nexus 4 Build/KRT16S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36', - [ - Request::USER_AGENT_ANDROID_MOBILE_CHROME - ], - true, - ], - [ - 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)', - [ - Request::USER_AGENT_ANDROID_MOBILE_CHROME - ], - false, - ], - [ - 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)', - [ - Request::USER_AGENT_IE, - Request::USER_AGENT_ANDROID_MOBILE_CHROME, - ], - true, - ], - [ - 'Mozilla/5.0 (Linux; Android 4.4; Nexus 4 Build/KRT16S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36', - [ - Request::USER_AGENT_IE, - Request::USER_AGENT_ANDROID_MOBILE_CHROME, - ], - true, - ], - [ - 'Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Firefox/24.0', - [ - Request::USER_AGENT_FREEBOX - ], - false, - ], - [ - 'Mozilla/5.0', - [ - Request::USER_AGENT_FREEBOX - ], - true, - ], - [ - 'Fake Mozilla/5.0', - [ - Request::USER_AGENT_FREEBOX - ], - false, - ], - ]; - } - - public function testInsecureServerHostServerNameHeader() { - $request = new Request( - [ - 'server' => [ - 'SERVER_NAME' => 'from.server.name:8080', - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('from.server.name:8080', $request->getInsecureServerHost()); - } - - public function testInsecureServerHostHttpHostHeader() { - $request = new Request( - [ - 'server' => [ - 'SERVER_NAME' => 'from.server.name:8080', - 'HTTP_HOST' => 'from.host.header:8080', - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('from.host.header:8080', $request->getInsecureServerHost()); - } - - public function testInsecureServerHostHttpFromForwardedHeaderSingle() { - $request = new Request( - [ - 'server' => [ - 'SERVER_NAME' => 'from.server.name:8080', - 'HTTP_HOST' => 'from.host.header:8080', - 'HTTP_X_FORWARDED_HOST' => 'from.forwarded.host:8080', - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('from.forwarded.host:8080', $request->getInsecureServerHost()); - } - - public function testInsecureServerHostHttpFromForwardedHeaderStacked() { - $request = new Request( - [ - 'server' => [ - 'SERVER_NAME' => 'from.server.name:8080', - 'HTTP_HOST' => 'from.host.header:8080', - 'HTTP_X_FORWARDED_HOST' => 'from.forwarded.host2:8080,another.one:9000', - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('from.forwarded.host2:8080', $request->getInsecureServerHost()); - } - - public function testGetServerHostWithOverwriteHost() { - $this->config - ->expects($this->at(0)) - ->method('getSystemValue') - ->with('overwritehost') - ->will($this->returnValue('my.overwritten.host')); - $this->config - ->expects($this->at(1)) - ->method('getSystemValue') - ->with('overwritecondaddr') - ->will($this->returnValue('')); - $this->config - ->expects($this->at(2)) - ->method('getSystemValue') - ->with('overwritehost') - ->will($this->returnValue('my.overwritten.host')); - - $request = new Request( - [], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('my.overwritten.host', $request->getServerHost()); - } - - public function testGetServerHostWithTrustedDomain() { - $this->config - ->expects($this->at(3)) - ->method('getSystemValue') - ->with('trusted_domains') - ->will($this->returnValue(['my.trusted.host'])); - - $request = new Request( - [ - 'server' => [ - 'HTTP_X_FORWARDED_HOST' => 'my.trusted.host', - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('my.trusted.host', $request->getServerHost()); - } - - public function testGetServerHostWithUntrustedDomain() { - $this->config - ->expects($this->at(3)) - ->method('getSystemValue') - ->with('trusted_domains') - ->will($this->returnValue(['my.trusted.host'])); - $this->config - ->expects($this->at(4)) - ->method('getSystemValue') - ->with('trusted_domains') - ->will($this->returnValue(['my.trusted.host'])); - - $request = new Request( - [ - 'server' => [ - 'HTTP_X_FORWARDED_HOST' => 'my.untrusted.host', - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('my.trusted.host', $request->getServerHost()); - } - - public function testGetServerHostWithNoTrustedDomain() { - $this->config - ->expects($this->at(3)) - ->method('getSystemValue') - ->with('trusted_domains') - ->will($this->returnValue([])); - $this->config - ->expects($this->at(4)) - ->method('getSystemValue') - ->with('trusted_domains') - ->will($this->returnValue([])); - - $request = new Request( - [ - 'server' => [ - 'HTTP_X_FORWARDED_HOST' => 'my.untrusted.host', - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('', $request->getServerHost()); - } - - public function testGetOverwriteHostDefaultNull() { - $this->config - ->expects($this->once()) - ->method('getSystemValue') - ->with('overwritehost') - ->will($this->returnValue('')); - $request = new Request( - [], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertNull(self::invokePrivate($request, 'getOverwriteHost')); - } - - public function testGetOverwriteHostWithOverwrite() { - $this->config - ->expects($this->at(0)) - ->method('getSystemValue') - ->with('overwritehost') - ->will($this->returnValue('www.owncloud.org')); - $this->config - ->expects($this->at(1)) - ->method('getSystemValue') - ->with('overwritecondaddr') - ->will($this->returnValue('')); - $this->config - ->expects($this->at(2)) - ->method('getSystemValue') - ->with('overwritehost') - ->will($this->returnValue('www.owncloud.org')); - - $request = new Request( - [], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('www.owncloud.org', self::invokePrivate($request, 'getOverwriteHost')); - } - - public function testGetPathInfoWithSetEnv() { - $request = new Request( - [ - 'server' => [ - 'PATH_INFO' => 'apps/files/', - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('apps/files/', $request->getPathInfo()); - } - - /** - * @expectedException \Exception - * @expectedExceptionMessage The requested uri(/foo.php) cannot be processed by the script '/var/www/index.php') - */ - public function testGetPathInfoNotProcessible() { - $request = new Request( - [ - 'server' => [ - 'REQUEST_URI' => '/foo.php', - 'SCRIPT_NAME' => '/var/www/index.php', - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $request->getPathInfo(); - } - - /** - * @expectedException \Exception - * @expectedExceptionMessage The requested uri(/foo.php) cannot be processed by the script '/var/www/index.php') - */ - public function testGetRawPathInfoNotProcessible() { - $request = new Request( - [ - 'server' => [ - 'REQUEST_URI' => '/foo.php', - 'SCRIPT_NAME' => '/var/www/index.php', - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $request->getRawPathInfo(); - } - - /** - * @dataProvider genericPathInfoProvider - * @param string $requestUri - * @param string $scriptName - * @param string $expected - */ - public function testGetPathInfoWithoutSetEnvGeneric($requestUri, $scriptName, $expected) { - $request = new Request( - [ - 'server' => [ - 'REQUEST_URI' => $requestUri, - 'SCRIPT_NAME' => $scriptName, - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame($expected, $request->getPathInfo()); - } - - /** - * @dataProvider genericPathInfoProvider - * @param string $requestUri - * @param string $scriptName - * @param string $expected - */ - public function testGetRawPathInfoWithoutSetEnvGeneric($requestUri, $scriptName, $expected) { - $request = new Request( - [ - 'server' => [ - 'REQUEST_URI' => $requestUri, - 'SCRIPT_NAME' => $scriptName, - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame($expected, $request->getRawPathInfo()); - } - - /** - * @dataProvider rawPathInfoProvider - * @param string $requestUri - * @param string $scriptName - * @param string $expected - */ - public function testGetRawPathInfoWithoutSetEnv($requestUri, $scriptName, $expected) { - $request = new Request( - [ - 'server' => [ - 'REQUEST_URI' => $requestUri, - 'SCRIPT_NAME' => $scriptName, - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame($expected, $request->getRawPathInfo()); - } - - /** - * @dataProvider pathInfoProvider - * @param string $requestUri - * @param string $scriptName - * @param string $expected - */ - public function testGetPathInfoWithoutSetEnv($requestUri, $scriptName, $expected) { - $request = new Request( - [ - 'server' => [ - 'REQUEST_URI' => $requestUri, - 'SCRIPT_NAME' => $scriptName, - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame($expected, $request->getPathInfo()); - } - - /** - * @return array - */ - public function genericPathInfoProvider() { - return [ - ['/core/index.php?XDEBUG_SESSION_START=14600', '/core/index.php', ''], - ['/index.php/apps/files/', 'index.php', '/apps/files/'], - ['/index.php/apps/files/../&/&?someQueryParameter=QueryParam', 'index.php', '/apps/files/../&/&'], - ['/remote.php/漢字編碼方法 / 汉字编码方法', 'remote.php', '/漢字編碼方法 / 汉字编码方法'], - ['///removeTrailin//gSlashes///', 'remote.php', '/removeTrailin/gSlashes/'], - ['/', '/', ''], - ['', '', ''], - ]; - } - - /** - * @return array - */ - public function rawPathInfoProvider() { - return [ - ['/foo%2Fbar/subfolder', '', 'foo%2Fbar/subfolder'], - ]; - } - - /** - * @return array - */ - public function pathInfoProvider() { - return [ - ['/foo%2Fbar/subfolder', '', 'foo/bar/subfolder'], - ]; - } - - public function testGetRequestUriWithoutOverwrite() { - $this->config - ->expects($this->once()) - ->method('getSystemValue') - ->with('overwritewebroot') - ->will($this->returnValue('')); - - $request = new Request( - [ - 'server' => [ - 'REQUEST_URI' => '/test.php' - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('/test.php', $request->getRequestUri()); - } - - public function providesGetRequestUriWithOverwriteData() { - return [ - ['/scriptname.php/some/PathInfo', '/owncloud/', ''], - ['/scriptname.php/some/PathInfo', '/owncloud/', '123'], - ]; - } - - /** - * @dataProvider providesGetRequestUriWithOverwriteData - */ - public function testGetRequestUriWithOverwrite($expectedUri, $overwriteWebRoot, $overwriteCondAddr) { - $this->config - ->expects($this->at(0)) - ->method('getSystemValue') - ->with('overwritewebroot') - ->will($this->returnValue($overwriteWebRoot)); - $this->config - ->expects($this->at(1)) - ->method('getSystemValue') - ->with('overwritecondaddr') - ->will($this->returnValue($overwriteCondAddr)); - - $request = $this->getMockBuilder('\OC\AppFramework\Http\Request') - ->setMethods(['getScriptName']) - ->setConstructorArgs([ - [ - 'server' => [ - 'REQUEST_URI' => '/test.php/some/PathInfo', - 'SCRIPT_NAME' => '/test.php', - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ]) - ->getMock(); - $request - ->expects($this->once()) - ->method('getScriptName') - ->will($this->returnValue('/scriptname.php')); - - $this->assertSame($expectedUri, $request->getRequestUri()); - } - - public function testPassesCSRFCheckWithGet() { - /** @var Request $request */ - $request = $this->getMockBuilder('\OC\AppFramework\Http\Request') - ->setMethods(['getScriptName']) - ->setConstructorArgs([ - [ - 'get' => [ - 'requesttoken' => 'AAAHGxsTCTc3BgMQESAcNR0OAR0=:MyTotalSecretShareds', - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ]) - ->getMock(); - $token = new CsrfToken('AAAHGxsTCTc3BgMQESAcNR0OAR0=:MyTotalSecretShareds'); - $this->csrfTokenManager - ->expects($this->once()) - ->method('isTokenValid') - ->with($token) - ->willReturn(true); - - $this->assertTrue($request->passesCSRFCheck()); - } - - public function testPassesCSRFCheckWithPost() { - /** @var Request $request */ - $request = $this->getMockBuilder('\OC\AppFramework\Http\Request') - ->setMethods(['getScriptName']) - ->setConstructorArgs([ - [ - 'post' => [ - 'requesttoken' => 'AAAHGxsTCTc3BgMQESAcNR0OAR0=:MyTotalSecretShareds', - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ]) - ->getMock(); - $token = new CsrfToken('AAAHGxsTCTc3BgMQESAcNR0OAR0=:MyTotalSecretShareds'); - $this->csrfTokenManager - ->expects($this->once()) - ->method('isTokenValid') - ->with($token) - ->willReturn(true); - - $this->assertTrue($request->passesCSRFCheck()); - } - - public function testPassesCSRFCheckWithHeader() { - /** @var Request $request */ - $request = $this->getMockBuilder('\OC\AppFramework\Http\Request') - ->setMethods(['getScriptName']) - ->setConstructorArgs([ - [ - 'server' => [ - 'HTTP_REQUESTTOKEN' => 'AAAHGxsTCTc3BgMQESAcNR0OAR0=:MyTotalSecretShareds', - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ]) - ->getMock(); - $token = new CsrfToken('AAAHGxsTCTc3BgMQESAcNR0OAR0=:MyTotalSecretShareds'); - $this->csrfTokenManager - ->expects($this->once()) - ->method('isTokenValid') - ->with($token) - ->willReturn(true); - - $this->assertTrue($request->passesCSRFCheck()); - } - - /** - * @return array - */ - public function invalidTokenDataProvider() { - return [ - ['InvalidSentToken'], - ['InvalidSentToken:InvalidSecret'], - [null], - [''], - ]; - } - - /** - * @dataProvider invalidTokenDataProvider - * @param string $invalidToken - */ - public function testPassesCSRFCheckWithInvalidToken($invalidToken) { - /** @var Request $request */ - $request = $this->getMockBuilder('\OC\AppFramework\Http\Request') - ->setMethods(['getScriptName']) - ->setConstructorArgs([ - [ - 'server' => [ - 'HTTP_REQUESTTOKEN' => $invalidToken, - ], - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ]) - ->getMock(); - - $token = new CsrfToken($invalidToken); - $this->csrfTokenManager - ->expects($this->any()) - ->method('isTokenValid') - ->with($token) - ->willReturn(false); - - $this->assertFalse($request->passesCSRFCheck()); - } - - public function testPassesCSRFCheckWithoutTokenFail() { - /** @var Request $request */ - $request = $this->getMockBuilder('\OC\AppFramework\Http\Request') - ->setMethods(['getScriptName']) - ->setConstructorArgs([ - [], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ]) - ->getMock(); - - $this->assertFalse($request->passesCSRFCheck()); - } - -} diff --git a/tests/lib/appframework/http/ResponseTest.php b/tests/lib/appframework/http/ResponseTest.php deleted file mode 100644 index f845f02d984..00000000000 --- a/tests/lib/appframework/http/ResponseTest.php +++ /dev/null @@ -1,267 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework\Http; - - -use OCP\AppFramework\Http\Response; -use OCP\AppFramework\Http; - - -class ResponseTest extends \Test\TestCase { - - /** - * @var \OCP\AppFramework\Http\Response - */ - private $childResponse; - - protected function setUp(){ - parent::setUp(); - $this->childResponse = new Response(); - } - - - public function testAddHeader(){ - $this->childResponse->addHeader(' hello ', 'world'); - $headers = $this->childResponse->getHeaders(); - $this->assertEquals('world', $headers['hello']); - } - - - public function testSetHeaders() { - $expected = array( - 'Last-Modified' => 1, - 'ETag' => 3, - 'Something-Else' => 'hi' - ); - - $this->childResponse->setHeaders($expected); - $headers = $this->childResponse->getHeaders(); - $expected['Content-Security-Policy'] = "default-src 'none';script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data: blob:;font-src 'self';connect-src 'self';media-src 'self'"; - - $this->assertEquals($expected, $headers); - } - - public function testOverwriteCsp() { - $expected = [ - 'Content-Security-Policy' => "default-src 'none';script-src 'self' 'unsafe-inline' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self';font-src 'self';connect-src 'self';media-src 'self'", - ]; - $policy = new Http\ContentSecurityPolicy(); - $policy->allowInlineScript(true); - - $this->childResponse->setContentSecurityPolicy($policy); - $headers = $this->childResponse->getHeaders(); - - $this->assertEquals(array_merge($expected, $headers), $headers); - } - - public function testGetCsp() { - $policy = new Http\ContentSecurityPolicy(); - $policy->allowInlineScript(true); - - $this->childResponse->setContentSecurityPolicy($policy); - $this->assertEquals($policy, $this->childResponse->getContentSecurityPolicy()); - } - - public function testGetCspEmpty() { - $this->assertNull($this->childResponse->getContentSecurityPolicy()); - } - - public function testAddHeaderValueNullDeletesIt(){ - $this->childResponse->addHeader('hello', 'world'); - $this->childResponse->addHeader('hello', null); - $this->assertEquals(2, count($this->childResponse->getHeaders())); - } - - - public function testCacheHeadersAreDisabledByDefault(){ - $headers = $this->childResponse->getHeaders(); - $this->assertEquals('no-cache, must-revalidate', $headers['Cache-Control']); - } - - - public function testAddCookie() { - $this->childResponse->addCookie('foo', 'bar'); - $this->childResponse->addCookie('bar', 'foo', new \DateTime('1970-01-01')); - - $expectedResponse = array( - 'foo' => array( - 'value' => 'bar', - 'expireDate' => null, - ), - 'bar' => array( - 'value' => 'foo', - 'expireDate' => new \DateTime('1970-01-01') - ) - ); - $this->assertEquals($expectedResponse, $this->childResponse->getCookies()); - } - - - function testSetCookies() { - $expected = array( - 'foo' => array( - 'value' => 'bar', - 'expireDate' => null, - ), - 'bar' => array( - 'value' => 'foo', - 'expireDate' => new \DateTime('1970-01-01') - ) - ); - - $this->childResponse->setCookies($expected); - $cookies = $this->childResponse->getCookies(); - - $this->assertEquals($expected, $cookies); - } - - - function testInvalidateCookie() { - $this->childResponse->addCookie('foo', 'bar'); - $this->childResponse->invalidateCookie('foo'); - $expected = array( - 'foo' => array( - 'value' => 'expired', - 'expireDate' => new \DateTime('1971-01-01') - ) - ); - - $cookies = $this->childResponse->getCookies(); - - $this->assertEquals($expected, $cookies); - } - - - function testInvalidateCookies() { - $this->childResponse->addCookie('foo', 'bar'); - $this->childResponse->addCookie('bar', 'foo'); - $expected = array( - 'foo' => array( - 'value' => 'bar', - 'expireDate' => null - ), - 'bar' => array( - 'value' => 'foo', - 'expireDate' => null - ) - ); - $cookies = $this->childResponse->getCookies(); - $this->assertEquals($expected, $cookies); - - $this->childResponse->invalidateCookies(array('foo', 'bar')); - $expected = array( - 'foo' => array( - 'value' => 'expired', - 'expireDate' => new \DateTime('1971-01-01') - ), - 'bar' => array( - 'value' => 'expired', - 'expireDate' => new \DateTime('1971-01-01') - ) - ); - - $cookies = $this->childResponse->getCookies(); - $this->assertEquals($expected, $cookies); - } - - - public function testRenderReturnNullByDefault(){ - $this->assertEquals(null, $this->childResponse->render()); - } - - - public function testGetStatus() { - $default = $this->childResponse->getStatus(); - - $this->childResponse->setStatus(Http::STATUS_NOT_FOUND); - - $this->assertEquals(Http::STATUS_OK, $default); - $this->assertEquals(Http::STATUS_NOT_FOUND, $this->childResponse->getStatus()); - } - - - public function testGetEtag() { - $this->childResponse->setEtag('hi'); - $this->assertSame('hi', $this->childResponse->getEtag()); - } - - - public function testGetLastModified() { - $lastModified = new \DateTime(null, new \DateTimeZone('GMT')); - $lastModified->setTimestamp(1); - $this->childResponse->setLastModified($lastModified); - $this->assertEquals($lastModified, $this->childResponse->getLastModified()); - } - - - - public function testCacheSecondsZero() { - $this->childResponse->cacheFor(0); - - $headers = $this->childResponse->getHeaders(); - $this->assertEquals('no-cache, no-store, must-revalidate', $headers['Cache-Control']); - } - - - public function testCacheSeconds() { - $this->childResponse->cacheFor(33); - - $headers = $this->childResponse->getHeaders(); - $this->assertEquals('max-age=33, must-revalidate', - $headers['Cache-Control']); - } - - - - public function testEtagLastModifiedHeaders() { - $lastModified = new \DateTime(null, new \DateTimeZone('GMT')); - $lastModified->setTimestamp(1); - $this->childResponse->setLastModified($lastModified); - $headers = $this->childResponse->getHeaders(); - $this->assertEquals('Thu, 01 Jan 1970 00:00:01 +0000', $headers['Last-Modified']); - } - - public function testChainability() { - $lastModified = new \DateTime(null, new \DateTimeZone('GMT')); - $lastModified->setTimestamp(1); - - $this->childResponse->setEtag('hi') - ->setStatus(Http::STATUS_NOT_FOUND) - ->setLastModified($lastModified) - ->cacheFor(33) - ->addHeader('hello', 'world'); - - $headers = $this->childResponse->getHeaders(); - - $this->assertEquals('world', $headers['hello']); - $this->assertEquals(Http::STATUS_NOT_FOUND, $this->childResponse->getStatus()); - $this->assertEquals('hi', $this->childResponse->getEtag()); - $this->assertEquals('Thu, 01 Jan 1970 00:00:01 +0000', $headers['Last-Modified']); - $this->assertEquals('max-age=33, must-revalidate', - $headers['Cache-Control']); - - } - -} diff --git a/tests/lib/appframework/http/StreamResponseTest.php b/tests/lib/appframework/http/StreamResponseTest.php deleted file mode 100644 index 4c47ecfbd6c..00000000000 --- a/tests/lib/appframework/http/StreamResponseTest.php +++ /dev/null @@ -1,99 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2015 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework\Http; - - -use OCP\AppFramework\Http\StreamResponse; -use OCP\AppFramework\Http; - - -class StreamResponseTest extends \Test\TestCase { - - /** @var IOutput */ - private $output; - - protected function setUp() { - parent::setUp(); - $this->output = $this->getMock('OCP\\AppFramework\\Http\\IOutput'); - } - - public function testOutputNotModified(){ - $path = __FILE__; - $this->output->expects($this->once()) - ->method('getHttpResponseCode') - ->will($this->returnValue(Http::STATUS_NOT_MODIFIED)); - $this->output->expects($this->never()) - ->method('setReadfile'); - $response = new StreamResponse($path); - - $response->callback($this->output); - } - - public function testOutputOk(){ - $path = __FILE__; - $this->output->expects($this->once()) - ->method('getHttpResponseCode') - ->will($this->returnValue(Http::STATUS_OK)); - $this->output->expects($this->once()) - ->method('setReadfile') - ->with($this->equalTo($path)) - ->will($this->returnValue(true)); - $response = new StreamResponse($path); - - $response->callback($this->output); - } - - public function testOutputNotFound(){ - $path = __FILE__ . 'test'; - $this->output->expects($this->once()) - ->method('getHttpResponseCode') - ->will($this->returnValue(Http::STATUS_OK)); - $this->output->expects($this->never()) - ->method('setReadfile'); - $this->output->expects($this->once()) - ->method('setHttpResponseCode') - ->with($this->equalTo(Http::STATUS_NOT_FOUND)); - $response = new StreamResponse($path); - - $response->callback($this->output); - } - - public function testOutputReadFileError(){ - $path = __FILE__; - $this->output->expects($this->once()) - ->method('getHttpResponseCode') - ->will($this->returnValue(Http::STATUS_OK)); - $this->output->expects($this->once()) - ->method('setReadfile') - ->will($this->returnValue(false)); - $this->output->expects($this->once()) - ->method('setHttpResponseCode') - ->with($this->equalTo(Http::STATUS_BAD_REQUEST)); - $response = new StreamResponse($path); - - $response->callback($this->output); - } - -} diff --git a/tests/lib/appframework/http/TemplateResponseTest.php b/tests/lib/appframework/http/TemplateResponseTest.php deleted file mode 100644 index 2ec57f8979a..00000000000 --- a/tests/lib/appframework/http/TemplateResponseTest.php +++ /dev/null @@ -1,99 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework\Http; - -use OCP\AppFramework\Http\TemplateResponse; -use OCP\AppFramework\Http; - - -class TemplateResponseTest extends \Test\TestCase { - - /** - * @var \OCP\AppFramework\Http\TemplateResponse - */ - private $tpl; - - /** - * @var \OCP\AppFramework\IApi - */ - private $api; - - protected function setUp() { - parent::setUp(); - - $this->api = $this->getMock('OC\AppFramework\Core\API', - array('getAppName'), array('test')); - $this->api->expects($this->any()) - ->method('getAppName') - ->will($this->returnValue('app')); - - $this->tpl = new TemplateResponse($this->api, 'home'); - } - - - public function testSetParamsConstructor(){ - $params = array('hi' => 'yo'); - $this->tpl = new TemplateResponse($this->api, 'home', $params); - - $this->assertEquals(array('hi' => 'yo'), $this->tpl->getParams()); - } - - - public function testSetRenderAsConstructor(){ - $renderAs = 'myrender'; - $this->tpl = new TemplateResponse($this->api, 'home', array(), $renderAs); - - $this->assertEquals($renderAs, $this->tpl->getRenderAs()); - } - - - public function testSetParams(){ - $params = array('hi' => 'yo'); - $this->tpl->setParams($params); - - $this->assertEquals(array('hi' => 'yo'), $this->tpl->getParams()); - } - - - public function testGetTemplateName(){ - $this->assertEquals('home', $this->tpl->getTemplateName()); - } - - public function testGetRenderAs(){ - $render = 'myrender'; - $this->tpl->renderAs($render); - $this->assertEquals($render, $this->tpl->getRenderAs()); - } - - public function testChainability() { - $params = array('hi' => 'yo'); - $this->tpl->setParams($params) - ->setStatus(Http::STATUS_NOT_FOUND); - - $this->assertEquals(Http::STATUS_NOT_FOUND, $this->tpl->getStatus()); - $this->assertEquals(array('hi' => 'yo'), $this->tpl->getParams()); - } - -} diff --git a/tests/lib/appframework/http/requeststream.php b/tests/lib/appframework/http/requeststream.php deleted file mode 100644 index e1bf5c2c6bb..00000000000 --- a/tests/lib/appframework/http/requeststream.php +++ /dev/null @@ -1,107 +0,0 @@ -<?php -/** - * Copy of http://dk1.php.net/manual/en/stream.streamwrapper.example-1.php - * Used to simulate php://input for Request tests - */ -class RequestStream { - protected $position; - protected $varname; - - function stream_open($path, $mode, $options, &$opened_path) { - $url = parse_url($path); - $this->varname = $url["host"]; - $this->position = 0; - - return true; - } - - function stream_read($count) { - $ret = substr($GLOBALS[$this->varname], $this->position, $count); - $this->position += strlen($ret); - return $ret; - } - - function stream_write($data) { - $left = substr($GLOBALS[$this->varname], 0, $this->position); - $right = substr($GLOBALS[$this->varname], $this->position + strlen($data)); - $GLOBALS[$this->varname] = $left . $data . $right; - $this->position += strlen($data); - return strlen($data); - } - - function stream_tell() { - return $this->position; - } - - function stream_eof() { - return $this->position >= strlen($GLOBALS[$this->varname]); - } - - function stream_seek($offset, $whence) { - switch ($whence) { - case SEEK_SET: - if ($offset < strlen($GLOBALS[$this->varname]) && $offset >= 0) { - $this->position = $offset; - return true; - } else { - return false; - } - break; - - case SEEK_CUR: - if ($offset >= 0) { - $this->position += $offset; - return true; - } else { - return false; - } - break; - - case SEEK_END: - if (strlen($GLOBALS[$this->varname]) + $offset >= 0) { - $this->position = strlen($GLOBALS[$this->varname]) + $offset; - return true; - } else { - return false; - } - break; - - default: - return false; - } - } - - public function stream_stat() { - $size = strlen($GLOBALS[$this->varname]); - $time = time(); - $data = array( - 'dev' => 0, - 'ino' => 0, - 'mode' => 0777, - 'nlink' => 1, - 'uid' => 0, - 'gid' => 0, - 'rdev' => '', - 'size' => $size, - 'atime' => $time, - 'mtime' => $time, - 'ctime' => $time, - 'blksize' => -1, - 'blocks' => -1, - ); - return array_values($data) + $data; - //return false; - } - - function stream_metadata($path, $option, $var) { - if($option == STREAM_META_TOUCH) { - $url = parse_url($path); - $varname = $url["host"]; - if(!isset($GLOBALS[$varname])) { - $GLOBALS[$varname] = ''; - } - return true; - } - return false; - } -} diff --git a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php deleted file mode 100644 index a8731525798..00000000000 --- a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php +++ /dev/null @@ -1,292 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework; - -use OC\AppFramework\Http\Request; -use OC\AppFramework\Middleware\MiddlewareDispatcher; -use OCP\AppFramework\Middleware; -use OCP\AppFramework\Http\Response; - - -// needed to test ordering -class TestMiddleware extends Middleware { - public static $beforeControllerCalled = 0; - public static $afterControllerCalled = 0; - public static $afterExceptionCalled = 0; - public static $beforeOutputCalled = 0; - - public $beforeControllerOrder = 0; - public $afterControllerOrder = 0; - public $afterExceptionOrder = 0; - public $beforeOutputOrder = 0; - - public $controller; - public $methodName; - public $exception; - public $response; - public $output; - - private $beforeControllerThrowsEx; - - /** - * @param boolean $beforeControllerThrowsEx - */ - public function __construct($beforeControllerThrowsEx) { - self::$beforeControllerCalled = 0; - self::$afterControllerCalled = 0; - self::$afterExceptionCalled = 0; - self::$beforeOutputCalled = 0; - $this->beforeControllerThrowsEx = $beforeControllerThrowsEx; - } - - public function beforeController($controller, $methodName){ - self::$beforeControllerCalled++; - $this->beforeControllerOrder = self::$beforeControllerCalled; - $this->controller = $controller; - $this->methodName = $methodName; - if($this->beforeControllerThrowsEx){ - throw new \Exception(); - } - } - - public function afterException($controller, $methodName, \Exception $exception){ - self::$afterExceptionCalled++; - $this->afterExceptionOrder = self::$afterExceptionCalled; - $this->controller = $controller; - $this->methodName = $methodName; - $this->exception = $exception; - parent::afterException($controller, $methodName, $exception); - } - - public function afterController($controller, $methodName, Response $response){ - self::$afterControllerCalled++; - $this->afterControllerOrder = self::$afterControllerCalled; - $this->controller = $controller; - $this->methodName = $methodName; - $this->response = $response; - return parent::afterController($controller, $methodName, $response); - } - - public function beforeOutput($controller, $methodName, $output){ - self::$beforeOutputCalled++; - $this->beforeOutputOrder = self::$beforeOutputCalled; - $this->controller = $controller; - $this->methodName = $methodName; - $this->output = $output; - return parent::beforeOutput($controller, $methodName, $output); - } -} - - -class MiddlewareDispatcherTest extends \Test\TestCase { - - public $exception; - public $response; - private $out; - private $method; - private $controller; - - /** - * @var MiddlewareDispatcher - */ - private $dispatcher; - - protected function setUp() { - parent::setUp(); - - $this->dispatcher = new MiddlewareDispatcher(); - $this->controller = $this->getControllerMock(); - $this->method = 'method'; - $this->response = new Response(); - $this->out = 'hi'; - $this->exception = new \Exception(); - } - - - private function getControllerMock(){ - return $this->getMock( - 'OCP\AppFramework\Controller', - ['method'], - ['app', - new Request( - ['method' => 'GET'], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ) - ] - ); - } - - - private function getMiddleware($beforeControllerThrowsEx=false){ - $m1 = new TestMiddleware($beforeControllerThrowsEx); - $this->dispatcher->registerMiddleware($m1); - return $m1; - } - - - public function testAfterExceptionShouldReturnResponseOfMiddleware(){ - $response = new Response(); - $m1 = $this->getMock('\OCP\AppFramework\Middleware', - array('afterException', 'beforeController')); - $m1->expects($this->never()) - ->method('afterException'); - - $m2 = $this->getMock('OCP\AppFramework\Middleware', - array('afterException', 'beforeController')); - $m2->expects($this->once()) - ->method('afterException') - ->will($this->returnValue($response)); - - $this->dispatcher->registerMiddleware($m1); - $this->dispatcher->registerMiddleware($m2); - - $this->dispatcher->beforeController($this->controller, $this->method); - $this->assertEquals($response, $this->dispatcher->afterException($this->controller, $this->method, $this->exception)); - } - - - public function testAfterExceptionShouldThrowAgainWhenNotHandled(){ - $m1 = new TestMiddleware(false); - $m2 = new TestMiddleware(true); - - $this->dispatcher->registerMiddleware($m1); - $this->dispatcher->registerMiddleware($m2); - - $this->setExpectedException('\Exception'); - $this->dispatcher->beforeController($this->controller, $this->method); - $this->dispatcher->afterException($this->controller, $this->method, $this->exception); - } - - - public function testBeforeControllerCorrectArguments(){ - $m1 = $this->getMiddleware(); - $this->dispatcher->beforeController($this->controller, $this->method); - - $this->assertEquals($this->controller, $m1->controller); - $this->assertEquals($this->method, $m1->methodName); - } - - - public function testAfterControllerCorrectArguments(){ - $m1 = $this->getMiddleware(); - - $this->dispatcher->afterController($this->controller, $this->method, $this->response); - - $this->assertEquals($this->controller, $m1->controller); - $this->assertEquals($this->method, $m1->methodName); - $this->assertEquals($this->response, $m1->response); - } - - - public function testAfterExceptionCorrectArguments(){ - $m1 = $this->getMiddleware(); - - $this->setExpectedException('\Exception'); - - $this->dispatcher->beforeController($this->controller, $this->method); - $this->dispatcher->afterException($this->controller, $this->method, $this->exception); - - $this->assertEquals($this->controller, $m1->controller); - $this->assertEquals($this->method, $m1->methodName); - $this->assertEquals($this->exception, $m1->exception); - } - - - public function testBeforeOutputCorrectArguments(){ - $m1 = $this->getMiddleware(); - - $this->dispatcher->beforeOutput($this->controller, $this->method, $this->out); - - $this->assertEquals($this->controller, $m1->controller); - $this->assertEquals($this->method, $m1->methodName); - $this->assertEquals($this->out, $m1->output); - } - - - public function testBeforeControllerOrder(){ - $m1 = $this->getMiddleware(); - $m2 = $this->getMiddleware(); - - $this->dispatcher->beforeController($this->controller, $this->method); - - $this->assertEquals(1, $m1->beforeControllerOrder); - $this->assertEquals(2, $m2->beforeControllerOrder); - } - - public function testAfterControllerOrder(){ - $m1 = $this->getMiddleware(); - $m2 = $this->getMiddleware(); - - $this->dispatcher->afterController($this->controller, $this->method, $this->response); - - $this->assertEquals(2, $m1->afterControllerOrder); - $this->assertEquals(1, $m2->afterControllerOrder); - } - - - public function testAfterExceptionOrder(){ - $m1 = $this->getMiddleware(); - $m2 = $this->getMiddleware(); - - $this->setExpectedException('\Exception'); - $this->dispatcher->beforeController($this->controller, $this->method); - $this->dispatcher->afterException($this->controller, $this->method, $this->exception); - - $this->assertEquals(1, $m1->afterExceptionOrder); - $this->assertEquals(1, $m2->afterExceptionOrder); - } - - - public function testBeforeOutputOrder(){ - $m1 = $this->getMiddleware(); - $m2 = $this->getMiddleware(); - - $this->dispatcher->beforeOutput($this->controller, $this->method, $this->out); - - $this->assertEquals(2, $m1->beforeOutputOrder); - $this->assertEquals(1, $m2->beforeOutputOrder); - } - - - public function testExceptionShouldRunAfterExceptionOfOnlyPreviouslyExecutedMiddlewares(){ - $m1 = $this->getMiddleware(); - $m2 = $this->getMiddleware(true); - $m3 = $this->getMock('\OCP\AppFramework\Middleware'); - $m3->expects($this->never()) - ->method('afterException'); - $m3->expects($this->never()) - ->method('beforeController'); - $m3->expects($this->never()) - ->method('afterController'); - - $this->dispatcher->registerMiddleware($m3); - - $this->dispatcher->beforeOutput($this->controller, $this->method, $this->out); - - $this->assertEquals(2, $m1->beforeOutputOrder); - $this->assertEquals(1, $m2->beforeOutputOrder); - } -} diff --git a/tests/lib/appframework/middleware/MiddlewareTest.php b/tests/lib/appframework/middleware/MiddlewareTest.php deleted file mode 100644 index 33f04e1383d..00000000000 --- a/tests/lib/appframework/middleware/MiddlewareTest.php +++ /dev/null @@ -1,99 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework; - -use OC\AppFramework\Http\Request; -use OCP\AppFramework\Middleware; -use OCP\AppFramework\Http\Response; - -class ChildMiddleware extends Middleware {}; - - -class MiddlewareTest extends \Test\TestCase { - - /** - * @var Middleware - */ - private $middleware; - private $controller; - private $exception; - private $api; - /** @var Response */ - private $response; - - protected function setUp(){ - parent::setUp(); - - $this->middleware = new ChildMiddleware(); - - $this->api = $this->getMockBuilder( - 'OC\AppFramework\DependencyInjection\DIContainer') - ->disableOriginalConstructor() - ->getMock(); - - $this->controller = $this->getMock( - 'OCP\AppFramework\Controller', - [], - [ - $this->api, - new Request( - [], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ) - ] - ); - $this->exception = new \Exception(); - $this->response = $this->getMock('OCP\AppFramework\Http\Response'); - } - - - public function testBeforeController() { - $this->middleware->beforeController($this->controller, null); - $this->assertNull(null); - } - - - public function testAfterExceptionRaiseAgainWhenUnhandled() { - $this->setExpectedException('Exception'); - $afterEx = $this->middleware->afterException($this->controller, null, $this->exception); - } - - - public function testAfterControllerReturnResponseWhenUnhandled() { - $response = $this->middleware->afterController($this->controller, null, $this->response); - - $this->assertEquals($this->response, $response); - } - - - public function testBeforeOutputReturnOutputhenUnhandled() { - $output = $this->middleware->beforeOutput($this->controller, null, 'test'); - - $this->assertEquals('test', $output); - } - - -} diff --git a/tests/lib/appframework/middleware/security/CORSMiddlewareTest.php b/tests/lib/appframework/middleware/security/CORSMiddlewareTest.php deleted file mode 100644 index cf5f97a046f..00000000000 --- a/tests/lib/appframework/middleware/security/CORSMiddlewareTest.php +++ /dev/null @@ -1,235 +0,0 @@ -<?php -/** - * ownCloud - App Framework - * - * This file is licensed under the Affero General Public License version 3 or - * later. See the COPYING file. - * - * @author Bernhard Posselt <dev@bernhard-posselt.com> - * @copyright Bernhard Posselt 2014 - */ - - -namespace OC\AppFramework\Middleware\Security; - -use OC\AppFramework\Http\Request; -use OC\AppFramework\Utility\ControllerMethodReflector; -use OC\AppFramework\Middleware\Security\Exceptions\SecurityException; -use OCP\AppFramework\Http; -use OCP\AppFramework\Http\JSONResponse; -use OCP\AppFramework\Http\Response; - - -class CORSMiddlewareTest extends \Test\TestCase { - - private $reflector; - private $session; - - protected function setUp() { - parent::setUp(); - $this->reflector = new ControllerMethodReflector(); - $this->session = $this->getMock('\OCP\IUserSession'); - } - - /** - * @CORS - */ - public function testSetCORSAPIHeader() { - $request = new Request( - [ - 'server' => [ - 'HTTP_ORIGIN' => 'test' - ] - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->reflector->reflect($this, __FUNCTION__); - $middleware = new CORSMiddleware($request, $this->reflector, $this->session); - - $response = $middleware->afterController($this, __FUNCTION__, new Response()); - $headers = $response->getHeaders(); - $this->assertEquals('test', $headers['Access-Control-Allow-Origin']); - } - - - public function testNoAnnotationNoCORSHEADER() { - $request = new Request( - [ - 'server' => [ - 'HTTP_ORIGIN' => 'test' - ] - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $middleware = new CORSMiddleware($request, $this->reflector, $this->session); - - $response = $middleware->afterController($this, __FUNCTION__, new Response()); - $headers = $response->getHeaders(); - $this->assertFalse(array_key_exists('Access-Control-Allow-Origin', $headers)); - } - - - /** - * @CORS - */ - public function testNoOriginHeaderNoCORSHEADER() { - $request = new Request( - [], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->reflector->reflect($this, __FUNCTION__); - $middleware = new CORSMiddleware($request, $this->reflector, $this->session); - - $response = $middleware->afterController($this, __FUNCTION__, new Response()); - $headers = $response->getHeaders(); - $this->assertFalse(array_key_exists('Access-Control-Allow-Origin', $headers)); - } - - - /** - * @CORS - * @expectedException \OC\AppFramework\Middleware\Security\Exceptions\SecurityException - */ - public function testCorsIgnoredIfWithCredentialsHeaderPresent() { - $request = new Request( - [ - 'server' => [ - 'HTTP_ORIGIN' => 'test' - ] - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->reflector->reflect($this, __FUNCTION__); - $middleware = new CORSMiddleware($request, $this->reflector, $this->session); - - $response = new Response(); - $response->addHeader('AcCess-control-Allow-Credentials ', 'TRUE'); - $middleware->afterController($this, __FUNCTION__, $response); - } - - /** - * @CORS - * @PublicPage - */ - public function testNoCORSShouldAllowCookieAuth() { - $request = new Request( - [], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->reflector->reflect($this, __FUNCTION__); - $middleware = new CORSMiddleware($request, $this->reflector, $this->session); - $this->session->expects($this->never()) - ->method('logout'); - $this->session->expects($this->never()) - ->method('login') - ->with($this->equalTo('user'), $this->equalTo('pass')) - ->will($this->returnValue(true)); - $this->reflector->reflect($this, __FUNCTION__); - - $middleware->beforeController($this, __FUNCTION__, new Response()); - } - - /** - * @CORS - */ - public function testCORSShouldRelogin() { - $request = new Request( - ['server' => [ - 'PHP_AUTH_USER' => 'user', - 'PHP_AUTH_PW' => 'pass' - ]], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->session->expects($this->once()) - ->method('logout'); - $this->session->expects($this->once()) - ->method('login') - ->with($this->equalTo('user'), $this->equalTo('pass')) - ->will($this->returnValue(true)); - $this->reflector->reflect($this, __FUNCTION__); - $middleware = new CORSMiddleware($request, $this->reflector, $this->session); - - $middleware->beforeController($this, __FUNCTION__, new Response()); - } - - /** - * @CORS - * @expectedException \OC\AppFramework\Middleware\Security\Exceptions\SecurityException - */ - public function testCORSShouldNotAllowCookieAuth() { - $request = new Request( - ['server' => [ - 'PHP_AUTH_USER' => 'user', - 'PHP_AUTH_PW' => 'pass' - ]], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->session->expects($this->once()) - ->method('logout'); - $this->session->expects($this->once()) - ->method('login') - ->with($this->equalTo('user'), $this->equalTo('pass')) - ->will($this->returnValue(false)); - $this->reflector->reflect($this, __FUNCTION__); - $middleware = new CORSMiddleware($request, $this->reflector, $this->session); - - $middleware->beforeController($this, __FUNCTION__, new Response()); - } - - public function testAfterExceptionWithSecurityExceptionNoStatus() { - $request = new Request( - ['server' => [ - 'PHP_AUTH_USER' => 'user', - 'PHP_AUTH_PW' => 'pass' - ]], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $middleware = new CORSMiddleware($request, $this->reflector, $this->session); - $response = $middleware->afterException($this, __FUNCTION__, new SecurityException('A security exception')); - - $expected = new JSONResponse(['message' => 'A security exception'], 500); - $this->assertEquals($expected, $response); - } - - public function testAfterExceptionWithSecurityExceptionWithStatus() { - $request = new Request( - ['server' => [ - 'PHP_AUTH_USER' => 'user', - 'PHP_AUTH_PW' => 'pass' - ]], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $middleware = new CORSMiddleware($request, $this->reflector, $this->session); - $response = $middleware->afterException($this, __FUNCTION__, new SecurityException('A security exception', 501)); - - $expected = new JSONResponse(['message' => 'A security exception'], 501); - $this->assertEquals($expected, $response); - } - - /** - * @expectedException \Exception - * @expectedExceptionMessage A regular exception - */ - public function testAfterExceptionWithRegularException() { - $request = new Request( - ['server' => [ - 'PHP_AUTH_USER' => 'user', - 'PHP_AUTH_PW' => 'pass' - ]], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $middleware = new CORSMiddleware($request, $this->reflector, $this->session); - $middleware->afterException($this, __FUNCTION__, new \Exception('A regular exception')); - } - -} diff --git a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php deleted file mode 100644 index 9e71a3d0961..00000000000 --- a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php +++ /dev/null @@ -1,447 +0,0 @@ -<?php -/** - * @author Bernhard Posselt <dev@bernhard-posselt.com> - * @author Lukas Reschke <lukas@owncloud.com> - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - - - -namespace OC\AppFramework\Middleware\Security; - -use OC\AppFramework\Http; -use OC\AppFramework\Http\Request; -use OC\Appframework\Middleware\Security\Exceptions\AppNotEnabledException; -use OC\Appframework\Middleware\Security\Exceptions\CrossSiteRequestForgeryException; -use OC\Appframework\Middleware\Security\Exceptions\NotAdminException; -use OC\Appframework\Middleware\Security\Exceptions\NotLoggedInException; -use OC\AppFramework\Middleware\Security\Exceptions\SecurityException; -use OC\AppFramework\Utility\ControllerMethodReflector; -use OC\Security\CSP\ContentSecurityPolicy; -use OCP\AppFramework\Http\RedirectResponse; -use OCP\AppFramework\Http\JSONResponse; -use OCP\AppFramework\Http\TemplateResponse; - - -class SecurityMiddlewareTest extends \Test\TestCase { - - private $middleware; - private $controller; - private $secException; - private $secAjaxException; - private $request; - private $reader; - private $logger; - private $navigationManager; - private $urlGenerator; - private $contentSecurityPolicyManager; - - protected function setUp() { - parent::setUp(); - - $this->controller = $this->getMockBuilder('OCP\AppFramework\Controller') - ->disableOriginalConstructor() - ->getMock(); - $this->reader = new ControllerMethodReflector(); - $this->logger = $this->getMockBuilder( - 'OCP\ILogger') - ->disableOriginalConstructor() - ->getMock(); - $this->navigationManager = $this->getMockBuilder( - 'OCP\INavigationManager') - ->disableOriginalConstructor() - ->getMock(); - $this->urlGenerator = $this->getMockBuilder( - 'OCP\IURLGenerator') - ->disableOriginalConstructor() - ->getMock(); - $this->request = $this->getMockBuilder( - 'OCP\IRequest') - ->disableOriginalConstructor() - ->getMock(); - $this->contentSecurityPolicyManager = $this->getMockBuilder( - 'OC\Security\CSP\ContentSecurityPolicyManager') - ->disableOriginalConstructor() - ->getMock(); - $this->middleware = $this->getMiddleware(true, true); - $this->secException = new SecurityException('hey', false); - $this->secAjaxException = new SecurityException('hey', true); - } - - /** - * @param bool $isLoggedIn - * @param bool $isAdminUser - * @return SecurityMiddleware - */ - private function getMiddleware($isLoggedIn, $isAdminUser) { - return new SecurityMiddleware( - $this->request, - $this->reader, - $this->navigationManager, - $this->urlGenerator, - $this->logger, - 'files', - $isLoggedIn, - $isAdminUser, - $this->contentSecurityPolicyManager - ); - } - - - /** - * @PublicPage - * @NoCSRFRequired - */ - public function testSetNavigationEntry(){ - $this->navigationManager->expects($this->once()) - ->method('setActiveEntry') - ->with($this->equalTo('files')); - - $this->reader->reflect(__CLASS__, __FUNCTION__); - $this->middleware->beforeController(__CLASS__, __FUNCTION__); - } - - - /** - * @param string $method - * @param string $test - */ - private function ajaxExceptionStatus($method, $test, $status) { - $isLoggedIn = false; - $isAdminUser = false; - - // isAdminUser requires isLoggedIn call to return true - if ($test === 'isAdminUser') { - $isLoggedIn = true; - } - - $sec = $this->getMiddleware($isLoggedIn, $isAdminUser); - - try { - $this->reader->reflect(__CLASS__, $method); - $sec->beforeController(__CLASS__, $method); - } catch (SecurityException $ex){ - $this->assertEquals($status, $ex->getCode()); - } - - // add assertion if everything should work fine otherwise phpunit will - // complain - if ($status === 0) { - $this->assertTrue(true); - } - } - - public function testAjaxStatusLoggedInCheck() { - $this->ajaxExceptionStatus( - __FUNCTION__, - 'isLoggedIn', - Http::STATUS_UNAUTHORIZED - ); - } - - /** - * @NoCSRFRequired - */ - public function testAjaxNotAdminCheck() { - $this->ajaxExceptionStatus( - __FUNCTION__, - 'isAdminUser', - Http::STATUS_FORBIDDEN - ); - } - - /** - * @PublicPage - */ - public function testAjaxStatusCSRFCheck() { - $this->ajaxExceptionStatus( - __FUNCTION__, - 'passesCSRFCheck', - Http::STATUS_PRECONDITION_FAILED - ); - } - - /** - * @PublicPage - * @NoCSRFRequired - */ - public function testAjaxStatusAllGood() { - $this->ajaxExceptionStatus( - __FUNCTION__, - 'isLoggedIn', - 0 - ); - $this->ajaxExceptionStatus( - __FUNCTION__, - 'isAdminUser', - 0 - ); - $this->ajaxExceptionStatus( - __FUNCTION__, - 'isSubAdminUser', - 0 - ); - $this->ajaxExceptionStatus( - __FUNCTION__, - 'passesCSRFCheck', - 0 - ); - } - - - /** - * @PublicPage - * @NoCSRFRequired - */ - public function testNoChecks(){ - $this->request->expects($this->never()) - ->method('passesCSRFCheck') - ->will($this->returnValue(false)); - - $sec = $this->getMiddleware(false, false); - - $this->reader->reflect(__CLASS__, __FUNCTION__); - $sec->beforeController(__CLASS__, __FUNCTION__); - } - - - /** - * @param string $method - * @param string $expects - */ - private function securityCheck($method, $expects, $shouldFail=false){ - // admin check requires login - if ($expects === 'isAdminUser') { - $isLoggedIn = true; - $isAdminUser = !$shouldFail; - } else { - $isLoggedIn = !$shouldFail; - $isAdminUser = false; - } - - $sec = $this->getMiddleware($isLoggedIn, $isAdminUser); - - if($shouldFail) { - $this->setExpectedException('\OC\AppFramework\Middleware\Security\Exceptions\SecurityException'); - } else { - $this->assertTrue(true); - } - - $this->reader->reflect(__CLASS__, $method); - $sec->beforeController(__CLASS__, $method); - } - - - /** - * @PublicPage - * @expectedException \OC\AppFramework\Middleware\Security\Exceptions\CrossSiteRequestForgeryException - */ - public function testCsrfCheck(){ - $this->request->expects($this->once()) - ->method('passesCSRFCheck') - ->will($this->returnValue(false)); - - $this->reader->reflect(__CLASS__, __FUNCTION__); - $this->middleware->beforeController(__CLASS__, __FUNCTION__); - } - - - /** - * @PublicPage - * @NoCSRFRequired - */ - public function testNoCsrfCheck(){ - $this->request->expects($this->never()) - ->method('passesCSRFCheck') - ->will($this->returnValue(false)); - - $this->reader->reflect(__CLASS__, __FUNCTION__); - $this->middleware->beforeController(__CLASS__, __FUNCTION__); - } - - - /** - * @PublicPage - */ - public function testFailCsrfCheck(){ - $this->request->expects($this->once()) - ->method('passesCSRFCheck') - ->will($this->returnValue(true)); - - $this->reader->reflect(__CLASS__, __FUNCTION__); - $this->middleware->beforeController(__CLASS__, __FUNCTION__); - } - - - /** - * @NoCSRFRequired - * @NoAdminRequired - */ - public function testLoggedInCheck(){ - $this->securityCheck(__FUNCTION__, 'isLoggedIn'); - } - - - /** - * @NoCSRFRequired - * @NoAdminRequired - */ - public function testFailLoggedInCheck(){ - $this->securityCheck(__FUNCTION__, 'isLoggedIn', true); - } - - - /** - * @NoCSRFRequired - */ - public function testIsAdminCheck(){ - $this->securityCheck(__FUNCTION__, 'isAdminUser'); - } - - - /** - * @NoCSRFRequired - */ - public function testFailIsAdminCheck(){ - $this->securityCheck(__FUNCTION__, 'isAdminUser', true); - } - - - public function testAfterExceptionNotCaughtThrowsItAgain(){ - $ex = new \Exception(); - $this->setExpectedException('\Exception'); - $this->middleware->afterException($this->controller, 'test', $ex); - } - - public function testAfterExceptionReturnsRedirectForNotLoggedInUser() { - $this->request = new Request( - [ - 'server' => - [ - 'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', - 'REQUEST_URI' => 'owncloud/index.php/apps/specialapp' - ] - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->middleware = $this->getMiddleware(false, false); - $this->urlGenerator - ->expects($this->once()) - ->method('getAbsoluteURL') - ->with('index.php') - ->will($this->returnValue('http://localhost/index.php')); - $this->logger - ->expects($this->once()) - ->method('debug') - ->with('Current user is not logged in'); - $response = $this->middleware->afterException( - $this->controller, - 'test', - new NotLoggedInException() - ); - - $expected = new RedirectResponse('http://localhost/index.php?redirect_url=owncloud%2Findex.php%2Fapps%2Fspecialapp'); - $this->assertEquals($expected , $response); - } - - /** - * @return array - */ - public function exceptionProvider() { - return [ - [ - new AppNotEnabledException(), - ], - [ - new CrossSiteRequestForgeryException(), - ], - [ - new NotAdminException(), - ], - ]; - } - - /** - * @dataProvider exceptionProvider - * @param SecurityException $exception - */ - public function testAfterExceptionReturnsTemplateResponse(SecurityException $exception) { - $this->request = new Request( - [ - 'server' => - [ - 'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', - 'REQUEST_URI' => 'owncloud/index.php/apps/specialapp' - ] - ], - $this->getMock('\OCP\Security\ISecureRandom'), - $this->getMock('\OCP\IConfig') - ); - $this->middleware = $this->getMiddleware(false, false); - $this->logger - ->expects($this->once()) - ->method('debug') - ->with($exception->getMessage()); - $response = $this->middleware->afterException( - $this->controller, - 'test', - $exception - ); - - $expected = new TemplateResponse('core', '403', ['file' => $exception->getMessage()], 'guest'); - $expected->setStatus($exception->getCode()); - $this->assertEquals($expected , $response); - } - - - public function testAfterAjaxExceptionReturnsJSONError(){ - $response = $this->middleware->afterException($this->controller, 'test', - $this->secAjaxException); - - $this->assertTrue($response instanceof JSONResponse); - } - - public function testAfterController() { - $response = $this->getMockBuilder('\OCP\AppFramework\Http\Response')->disableOriginalConstructor()->getMock(); - $defaultPolicy = new ContentSecurityPolicy(); - $defaultPolicy->addAllowedImageDomain('defaultpolicy'); - $currentPolicy = new ContentSecurityPolicy(); - $currentPolicy->addAllowedConnectDomain('currentPolicy'); - $mergedPolicy = new ContentSecurityPolicy(); - $mergedPolicy->addAllowedMediaDomain('mergedPolicy'); - $response - ->expects($this->exactly(2)) - ->method('getContentSecurityPolicy') - ->willReturn($currentPolicy); - $this->contentSecurityPolicyManager - ->expects($this->once()) - ->method('getDefaultPolicy') - ->willReturn($defaultPolicy); - $this->contentSecurityPolicyManager - ->expects($this->once()) - ->method('mergePolicies') - ->with($defaultPolicy, $currentPolicy) - ->willReturn($mergedPolicy); - $response->expects($this->once()) - ->method('setContentSecurityPolicy') - ->with($mergedPolicy); - - $this->middleware->afterController($this->controller, 'test', $response); - } -} diff --git a/tests/lib/appframework/middleware/sessionmiddlewaretest.php b/tests/lib/appframework/middleware/sessionmiddlewaretest.php deleted file mode 100644 index 11c1600f515..00000000000 --- a/tests/lib/appframework/middleware/sessionmiddlewaretest.php +++ /dev/null @@ -1,95 +0,0 @@ -<?php -/** - * ownCloud - App Framework - * - * This file is licensed under the Affero General Public License version 3 or - * later. See the COPYING file. - * - * @author Thomas Müller <deepdiver@owncloud.com> - * @copyright Thomas Müller 2014 - */ - - -namespace OC\AppFramework\Middleware\Security; - -use OC\AppFramework\Http\Request; -use OC\AppFramework\Middleware\SessionMiddleware; -use OC\AppFramework\Utility\ControllerMethodReflector; -use OCP\AppFramework\Http\Response; - - -class SessionMiddlewareTest extends \Test\TestCase { - - /** - * @var ControllerMethodReflector - */ - private $reflector; - - /** - * @var Request - */ - private $request; - - protected function setUp() { - parent::setUp(); - - $this->request = new Request( - [], - $this->getMockBuilder('\OCP\Security\ISecureRandom')->getMock(), - $this->getMock('\OCP\IConfig') - ); - $this->reflector = new ControllerMethodReflector(); - } - - /** - * @UseSession - */ - public function testSessionNotClosedOnBeforeController() { - $session = $this->getSessionMock(0); - - $this->reflector->reflect($this, __FUNCTION__); - $middleware = new SessionMiddleware($this->request, $this->reflector, $session); - $middleware->beforeController($this, __FUNCTION__); - } - - /** - * @UseSession - */ - public function testSessionClosedOnAfterController() { - $session = $this->getSessionMock(1); - - $this->reflector->reflect($this, __FUNCTION__); - $middleware = new SessionMiddleware($this->request, $this->reflector, $session); - $middleware->afterController($this, __FUNCTION__, new Response()); - } - - public function testSessionClosedOnBeforeController() { - $session = $this->getSessionMock(1); - - $this->reflector->reflect($this, __FUNCTION__); - $middleware = new SessionMiddleware($this->request, $this->reflector, $session); - $middleware->beforeController($this, __FUNCTION__); - } - - public function testSessionNotClosedOnAfterController() { - $session = $this->getSessionMock(0); - - $this->reflector->reflect($this, __FUNCTION__); - $middleware = new SessionMiddleware($this->request, $this->reflector, $session); - $middleware->afterController($this, __FUNCTION__, new Response()); - } - - /** - * @return mixed - */ - private function getSessionMock($expectedCloseCount) { - $session = $this->getMockBuilder('\OC\Session\Memory') - ->disableOriginalConstructor() - ->getMock(); - - $session->expects($this->exactly($expectedCloseCount)) - ->method('close'); - return $session; - } - -} diff --git a/tests/lib/appframework/routing/RoutingTest.php b/tests/lib/appframework/routing/RoutingTest.php deleted file mode 100644 index b063ef32835..00000000000 --- a/tests/lib/appframework/routing/RoutingTest.php +++ /dev/null @@ -1,283 +0,0 @@ -<?php - -namespace OC\AppFramework\Routing; - -use OC\AppFramework\DependencyInjection\DIContainer; -use OC\AppFramework\routing\RouteConfig; - - -class RoutingTest extends \Test\TestCase -{ - - public function testSimpleRoute() - { - $routes = array('routes' => array( - array('name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'GET') - )); - - $this->assertSimpleRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open'); - } - - public function testSimpleRouteWithMissingVerb() - { - $routes = array('routes' => array( - array('name' => 'folders#open', 'url' => '/folders/{folderId}/open') - )); - - $this->assertSimpleRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open'); - } - - public function testSimpleRouteWithLowercaseVerb() - { - $routes = array('routes' => array( - array('name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete') - )); - - $this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open'); - } - - public function testSimpleRouteWithRequirements() - { - $routes = array('routes' => array( - array('name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete', 'requirements' => array('something')) - )); - - $this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array('something')); - } - - public function testSimpleRouteWithDefaults() - { - $routes = array('routes' => array( - array('name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete', array(), 'defaults' => array('param' => 'foobar')) - )); - - $this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array(), array('param' => 'foobar')); - } - - public function testSimpleRouteWithPostfix() - { - $routes = array('routes' => array( - array('name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete', 'postfix' => '_something') - )); - - $this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array(), array(), '_something'); - } - - - /** - * @expectedException \UnexpectedValueException - */ - public function testSimpleRouteWithBrokenName() - { - $routes = array('routes' => array( - array('name' => 'folders_open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete') - )); - - // router mock - $router = $this->getMock("\OC\Route\Router", array('create'), [\OC::$server->getLogger()]); - - // load route configuration - $container = new DIContainer('app1'); - $config = new RouteConfig($container, $router, $routes); - - $config->register(); - } - - public function testSimpleRouteWithUnderScoreNames() - { - $routes = array('routes' => array( - array('name' => 'admin_folders#open_current', 'url' => '/folders/{folderId}/open', 'verb' => 'delete') - )); - - $this->assertSimpleRoute($routes, 'admin_folders.open_current', 'DELETE', '/folders/{folderId}/open', 'AdminFoldersController', 'openCurrent'); - } - - public function testResource() - { - $routes = array('resources' => array('account' => array('url' => '/accounts'))); - - $this->assertResource($routes, 'account', '/accounts', 'AccountController', 'id'); - } - - public function testResourceWithUnderScoreName() - { - $routes = array('resources' => array('admin_accounts' => array('url' => '/admin/accounts'))); - - $this->assertResource($routes, 'admin_accounts', '/admin/accounts', 'AdminAccountsController', 'id'); - } - - /** - * @param string $name - * @param string $verb - * @param string $url - * @param string $controllerName - * @param string $actionName - */ - private function assertSimpleRoute($routes, $name, $verb, $url, $controllerName, $actionName, array $requirements=array(), array $defaults=array(), $postfix='') - { - if ($postfix) { - $name .= $postfix; - } - - // route mocks - $container = new DIContainer('app1'); - $route = $this->mockRoute($container, $verb, $controllerName, $actionName, $requirements, $defaults); - - // router mock - $router = $this->getMock("\OC\Route\Router", array('create'), [\OC::$server->getLogger()]); - - // we expect create to be called once: - $router - ->expects($this->once()) - ->method('create') - ->with($this->equalTo('app1.' . $name), $this->equalTo($url)) - ->will($this->returnValue($route)); - - // load route configuration - $config = new RouteConfig($container, $router, $routes); - - $config->register(); - } - - /** - * @param string $resourceName - * @param string $url - * @param string $controllerName - * @param string $paramName - */ - private function assertResource($yaml, $resourceName, $url, $controllerName, $paramName) - { - // router mock - $router = $this->getMock("\OC\Route\Router", array('create'), [\OC::$server->getLogger()]); - - // route mocks - $container = new DIContainer('app1'); - $indexRoute = $this->mockRoute($container, 'GET', $controllerName, 'index'); - $showRoute = $this->mockRoute($container, 'GET', $controllerName, 'show'); - $createRoute = $this->mockRoute($container, 'POST', $controllerName, 'create'); - $updateRoute = $this->mockRoute($container, 'PUT', $controllerName, 'update'); - $destroyRoute = $this->mockRoute($container, 'DELETE', $controllerName, 'destroy'); - - $urlWithParam = $url . '/{' . $paramName . '}'; - - // we expect create to be called once: - $router - ->expects($this->at(0)) - ->method('create') - ->with($this->equalTo('app1.' . $resourceName . '.index'), $this->equalTo($url)) - ->will($this->returnValue($indexRoute)); - - $router - ->expects($this->at(1)) - ->method('create') - ->with($this->equalTo('app1.' . $resourceName . '.show'), $this->equalTo($urlWithParam)) - ->will($this->returnValue($showRoute)); - - $router - ->expects($this->at(2)) - ->method('create') - ->with($this->equalTo('app1.' . $resourceName . '.create'), $this->equalTo($url)) - ->will($this->returnValue($createRoute)); - - $router - ->expects($this->at(3)) - ->method('create') - ->with($this->equalTo('app1.' . $resourceName . '.update'), $this->equalTo($urlWithParam)) - ->will($this->returnValue($updateRoute)); - - $router - ->expects($this->at(4)) - ->method('create') - ->with($this->equalTo('app1.' . $resourceName . '.destroy'), $this->equalTo($urlWithParam)) - ->will($this->returnValue($destroyRoute)); - - // load route configuration - $config = new RouteConfig($container, $router, $yaml); - - $config->register(); - } - - /** - * @param DIContainer $container - * @param string $verb - * @param string $controllerName - * @param string $actionName - * @param array $requirements - * @param array $defaults - * @return \PHPUnit_Framework_MockObject_MockObject - */ - private function mockRoute( - DIContainer $container, - $verb, - $controllerName, - $actionName, - array $requirements=array(), - array $defaults=array() - ) { - $route = $this->getMock("\OC\Route\Route", array('method', 'action', 'requirements', 'defaults'), array(), '', false); - $route - ->expects($this->exactly(1)) - ->method('method') - ->with($this->equalTo($verb)) - ->will($this->returnValue($route)); - - $route - ->expects($this->exactly(1)) - ->method('action') - ->with($this->equalTo(new RouteActionHandler($container, $controllerName, $actionName))) - ->will($this->returnValue($route)); - - if(count($requirements) > 0) { - $route - ->expects($this->exactly(1)) - ->method('requirements') - ->with($this->equalTo($requirements)) - ->will($this->returnValue($route)); - } - - if (count($defaults) > 0) { - $route - ->expects($this->exactly(1)) - ->method('defaults') - ->with($this->equalTo($defaults)) - ->will($this->returnValue($route)); - } - - return $route; - } - -} - -/* -# -# sample routes.yaml for ownCloud -# -# the section simple describes one route - -routes: - - name: folders#open - url: /folders/{folderId}/open - verb: GET - # controller: name.split()[0] - # action: name.split()[1] - -# for a resource following actions will be generated: -# - index -# - create -# - show -# - update -# - destroy -# - new -resources: - accounts: - url: /accounts - - folders: - url: /accounts/{accountId}/folders - # actions can be used to define additional actions on the resource - actions: - - name: validate - verb: GET - on-collection: false - - * */ diff --git a/tests/lib/appframework/utility/ControllerMethodReflectorTest.php b/tests/lib/appframework/utility/ControllerMethodReflectorTest.php deleted file mode 100644 index c643c362a9c..00000000000 --- a/tests/lib/appframework/utility/ControllerMethodReflectorTest.php +++ /dev/null @@ -1,208 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ - - -namespace OC\AppFramework\Utility; - - -class BaseController { - - /** - * @Annotation - */ - public function test(){} - - /** - * @Annotation - */ - public function test2(){} - - /** - * @Annotation - */ - public function test3(){} - -} - -class MiddleController extends BaseController { - - /** - * @NoAnnotation - */ - public function test2() {} - - public function test3() {} - -} - -class EndController extends MiddleController {} - -class ControllerMethodReflectorTest extends \Test\TestCase { - - - /** - * @Annotation - */ - public function testReadAnnotation(){ - $reader = new ControllerMethodReflector(); - $reader->reflect( - '\OC\AppFramework\Utility\ControllerMethodReflectorTest', - 'testReadAnnotation' - ); - - $this->assertTrue($reader->hasAnnotation('Annotation')); - } - - - /** - * @Annotation - * @param test - */ - public function testReadAnnotationNoLowercase(){ - $reader = new ControllerMethodReflector(); - $reader->reflect( - '\OC\AppFramework\Utility\ControllerMethodReflectorTest', - 'testReadAnnotationNoLowercase' - ); - - $this->assertTrue($reader->hasAnnotation('Annotation')); - $this->assertFalse($reader->hasAnnotation('param')); - } - - - /** - * @Annotation - * @param int $test - */ - public function testReadTypeIntAnnotations(){ - $reader = new ControllerMethodReflector(); - $reader->reflect( - '\OC\AppFramework\Utility\ControllerMethodReflectorTest', - 'testReadTypeIntAnnotations' - ); - - $this->assertEquals('int', $reader->getType('test')); - } - - /** - * @Annotation - * @param int $a - * @param int $b - */ - public function arguments3($a, float $b, int $c, $d){} - - /** - * @requires PHP 7 - */ - public function testReadTypeIntAnnotationsScalarTypes(){ - $reader = new ControllerMethodReflector(); - $reader->reflect( - '\OC\AppFramework\Utility\ControllerMethodReflectorTest', - 'arguments3' - ); - - $this->assertEquals('int', $reader->getType('a')); - $this->assertEquals('float', $reader->getType('b')); - $this->assertEquals('int', $reader->getType('c')); - $this->assertNull($reader->getType('d')); - } - - - /** - * @Annotation - * @param double $test something special - */ - public function testReadTypeDoubleAnnotations(){ - $reader = new ControllerMethodReflector(); - $reader->reflect( - '\OC\AppFramework\Utility\ControllerMethodReflectorTest', - 'testReadTypeDoubleAnnotations' - ); - - $this->assertEquals('double', $reader->getType('test')); - } - - /** - * @Annotation - * @param string $foo - */ - public function testReadTypeWhitespaceAnnotations(){ - $reader = new ControllerMethodReflector(); - $reader->reflect( - '\OC\AppFramework\Utility\ControllerMethodReflectorTest', - 'testReadTypeWhitespaceAnnotations' - ); - - $this->assertEquals('string', $reader->getType('foo')); - } - - - public function arguments($arg, $arg2='hi') {} - public function testReflectParameters() { - $reader = new ControllerMethodReflector(); - $reader->reflect( - '\OC\AppFramework\Utility\ControllerMethodReflectorTest', - 'arguments' - ); - - $this->assertEquals(array('arg' => null, 'arg2' => 'hi'), $reader->getParameters()); - } - - - public function arguments2($arg) {} - public function testReflectParameters2() { - $reader = new ControllerMethodReflector(); - $reader->reflect( - '\OC\AppFramework\Utility\ControllerMethodReflectorTest', - 'arguments2' - ); - - $this->assertEquals(array('arg' => null), $reader->getParameters()); - } - - - public function testInheritance() { - $reader = new ControllerMethodReflector(); - $reader->reflect('OC\AppFramework\Utility\EndController', 'test'); - - $this->assertTrue($reader->hasAnnotation('Annotation')); - } - - - public function testInheritanceOverride() { - $reader = new ControllerMethodReflector(); - $reader->reflect('OC\AppFramework\Utility\EndController', 'test2'); - - $this->assertTrue($reader->hasAnnotation('NoAnnotation')); - $this->assertFalse($reader->hasAnnotation('Annotation')); - } - - - public function testInheritanceOverrideNoDocblock() { - $reader = new ControllerMethodReflector(); - $reader->reflect('OC\AppFramework\Utility\EndController', 'test3'); - - $this->assertFalse($reader->hasAnnotation('Annotation')); - } - -} diff --git a/tests/lib/appframework/utility/SimpleContainerTest.php b/tests/lib/appframework/utility/SimpleContainerTest.php deleted file mode 100644 index e21e0ca13f2..00000000000 --- a/tests/lib/appframework/utility/SimpleContainerTest.php +++ /dev/null @@ -1,222 +0,0 @@ -<?php - -/** - * ownCloud - App Framework - * - * @author Bernhard Posselt - * @copyright 2014 Bernhard Posselt <dev@bernhard-posselt.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - */ -namespace Test\AppFramework\Utility; - -use OC\AppFramework\Utility\SimpleContainer; - - -interface TestInterface {} - -class ClassEmptyConstructor implements IInterfaceConstructor {} - -class ClassSimpleConstructor implements IInterfaceConstructor { - public $test; - public function __construct($test) { - $this->test = $test; - } -} - -class ClassComplexConstructor { - public $class; - public $test; - public function __construct(ClassSimpleConstructor $class, $test) { - $this->class = $class; - $this->test = $test; - } -} - -interface IInterfaceConstructor {} -class ClassInterfaceConstructor { - public $class; - public $test; - public function __construct(IInterfaceConstructor $class, $test) { - $this->class = $class; - $this->test = $test; - } -} - - -class SimpleContainerTest extends \Test\TestCase { - - - private $container; - - public function setUp() { - $this->container = new SimpleContainer(); - } - - - public function testRegister() { - $this->container->registerParameter('test', 'abc'); - $this->assertEquals('abc', $this->container->query('test')); - } - - - /** - * @expectedException \OCP\AppFramework\QueryException - */ - public function testNothingRegistered() { - $this->container->query('something really hard'); - } - - - /** - * @expectedException \OCP\AppFramework\QueryException - */ - public function testNotAClass() { - $this->container->query('Test\AppFramework\Utility\TestInterface'); - } - - - public function testNoConstructorClass() { - $object = $this->container->query('Test\AppFramework\Utility\ClassEmptyConstructor'); - $this->assertTrue($object instanceof ClassEmptyConstructor); - } - - - public function testInstancesOnlyOnce() { - $object = $this->container->query('Test\AppFramework\Utility\ClassEmptyConstructor'); - $object2 = $this->container->query('Test\AppFramework\Utility\ClassEmptyConstructor'); - $this->assertSame($object, $object2); - } - - public function testConstructorSimple() { - $this->container->registerParameter('test', 'abc'); - $object = $this->container->query( - 'Test\AppFramework\Utility\ClassSimpleConstructor' - ); - $this->assertTrue($object instanceof ClassSimpleConstructor); - $this->assertEquals('abc', $object->test); - } - - - public function testConstructorComplex() { - $this->container->registerParameter('test', 'abc'); - $object = $this->container->query( - 'Test\AppFramework\Utility\ClassComplexConstructor' - ); - $this->assertTrue($object instanceof ClassComplexConstructor); - $this->assertEquals('abc', $object->class->test); - $this->assertEquals('abc', $object->test); - } - - - public function testConstructorComplexInterface() { - $this->container->registerParameter('test', 'abc'); - $this->container->registerService( - 'Test\AppFramework\Utility\IInterfaceConstructor', function ($c) { - return $c->query('Test\AppFramework\Utility\ClassSimpleConstructor'); - }); - $object = $this->container->query( - 'Test\AppFramework\Utility\ClassInterfaceConstructor' - ); - $this->assertTrue($object instanceof ClassInterfaceConstructor); - $this->assertEquals('abc', $object->class->test); - $this->assertEquals('abc', $object->test); - } - - - public function testOverrideService() { - $this->container->registerService( - 'Test\AppFramework\Utility\IInterfaceConstructor', function ($c) { - return $c->query('Test\AppFramework\Utility\ClassSimpleConstructor'); - }); - $this->container->registerService( - 'Test\AppFramework\Utility\IInterfaceConstructor', function ($c) { - return $c->query('Test\AppFramework\Utility\ClassEmptyConstructor'); - }); - $object = $this->container->query( - 'Test\AppFramework\Utility\IInterfaceConstructor' - ); - $this->assertTrue($object instanceof ClassEmptyConstructor); - } - - public function testRegisterAliasParamter() { - $this->container->registerParameter('test', 'abc'); - $this->container->registerAlias('test1', 'test'); - $this->assertEquals('abc', $this->container->query('test1')); - } - - public function testRegisterAliasService() { - $this->container->registerService('test', function() { - return new \StdClass; - }, true); - $this->container->registerAlias('test1', 'test'); - $this->assertSame( - $this->container->query('test'), $this->container->query('test')); - $this->assertSame( - $this->container->query('test1'), $this->container->query('test1')); - $this->assertSame( - $this->container->query('test'), $this->container->query('test1')); - } - - public function sanitizeNameProvider() { - return [ - ['ABC\\Foo', 'ABC\\Foo'], - ['\\ABC\\Foo', '\\ABC\\Foo'], - ['\\ABC\\Foo', 'ABC\\Foo'], - ['ABC\\Foo', '\\ABC\\Foo'], - ]; - } - - /** - * @dataProvider sanitizeNameProvider - */ - public function testSanitizeName($register, $query) { - $this->container->registerService($register, function() { - return 'abc'; - }); - $this->assertEquals('abc', $this->container->query($query)); - } - - /** - * @expectedException \OCP\AppFramework\QueryException - */ - public function testConstructorComplexNoTestParameterFound() { - $object = $this->container->query( - 'Test\AppFramework\Utility\ClassComplexConstructor' - ); - } - - public function testRegisterFactory() { - $this->container->registerService('test', function() { - return new \StdClass(); - }, false); - $this->assertNotSame( - $this->container->query('test'), $this->container->query('test')); - } - - public function testRegisterAliasFactory() { - $this->container->registerService('test', function() { - return new \StdClass(); - }, false); - $this->container->registerAlias('test1', 'test'); - $this->assertNotSame( - $this->container->query('test'), $this->container->query('test')); - $this->assertNotSame( - $this->container->query('test1'), $this->container->query('test1')); - $this->assertNotSame( - $this->container->query('test'), $this->container->query('test1')); - } - -} |