_testDir = TEST_PATH . DS . 'fixtures' . DS . 'tmp'; if (!file_exists($this->_testDir)) { mkdir($this->_testDir, 0777); $this->chmod(0777, $this->_testDir); } $this->_testFile = $this->_testDir . '/testFile.sh'; if (!file_exists($this->_testFile)) { file_put_contents($this->_testFile, "#!/bin/sh\necho 'Executed'\n"); $this->chmod(0777); } $this->validator = new Msd_Validate_File_Accessible(); } /** * Chmod _testFile to given value * * @param string $rights Octal rights * @param bool $file FileName * @return void */ public function chmod($rights, $file = false) { if ($file === false) { $file = $this->_testFile; } $chmod = chmod($file, $rights); clearstatcache(); if ($chmod === false) { $this->fail('Couldn\'t chmod ' . $file . ' to ' . $rights); } } public function testCanDetectIfFileExists() { $this->chmod(0400); $this->assertEquals(true, $this->validator->isValid($this->_testFile)); } public function testCanDetectIfFileDoesNotExists() { $file = $this->_testDir . '/IDontExist.txt'; $this->assertEquals(false, $this->validator->isValid($file)); } public function testCanDetectIfFileIsReadable() { $this->chmod(0400); $this->validator->setOptions(array('accessTypes' => "read")); $this->assertEquals(true, $this->validator->isValid($this->_testFile)); } public function testCanDetectIfFileIsWritable() { $this->chmod(0200); $this->validator->setOptions(array('accessTypes' => "write")); $this->assertEquals(true, $this->validator->isValid($this->_testFile)); } public function testCanDetectIfFileIsExecutable() { $this->chmod(0100); $this->validator->setOptions(array('accessTypes' => "execute")); $this->assertEquals(true, $this->validator->isValid($this->_testFile)); } public function testCanDetectIfFileIsNotExecutable() { $this->chmod(0400); $this->validator->setOptions(array('accessTypes' => "execute")); $this->assertEquals(false, $this->validator->isValid($this->_testFile)); } public function testCanDetectIfFileIsDir() { $this->chmod(0777, $this->_testDir); $this->validator->setOptions(array('accessTypes' => "dir")); $this->assertEquals(true, $this->validator->isValid($this->_testDir)); } public function testCanDetectIfFileIsNotDir() { $this->validator->setOptions(array('accessTypes' => "dir")); $this->assertEquals(false, $this->validator->isValid($this->_testFile)); } public function testCanDetectIfFileIsFile() { $this->chmod(0700); $this->validator->setOptions(array('accessTypes' => "file")); $this->assertEquals(true, $this->validator->isValid($this->_testFile)); } public function testCanDetectIfFileIsNotAFile() { $this->chmod(0700, $this->_testDir); $this->validator->setOptions(array('accessTypes' => "file")); $this->assertEquals(false, $this->validator->isValid($this->_testDir)); } public function testCanDetectIfFileIsNotUploaded() { $this->chmod(0700); $this->validator->setOptions(array('accessTypes' => "uploaded")); $this->assertEquals(false, $this->validator->isValid($this->_testFile)); } public function testCanDetectIfDirIsReadable() { $this->chmod(0400, $this->_testDir); $this->validator->setOptions(array('accessTypes' => "dir,read")); $this->assertEquals(true, $this->validator->isValid($this->_testDir)); $this->chmod(0700, $this->_testDir); } public function testCanDetectIfDirIsWritable() { $this->chmod(0200, $this->_testDir); $this->validator->setOptions(array('accessTypes' => "dir,write")); $this->assertEquals(true, $this->validator->isValid($this->_testDir)); $this->chmod(0700, $this->_testDir); } public function testCanSetOptionsWithAccessTypesAsString() { $this->validator->setOptions( array( 'pathPrefix' => './', 'accessTypes' => 'read,write' ) ); $options = $this->validator->getOptions(); $this->assertInternalType('array', $options); $this->assertArrayHasKey('pathPrefix', $options); $this->assertEquals('./', $options['pathPrefix']); $this->assertInternalType('array', $options['accessTypes']); $this->assertTrue($options['accessTypes']['read']); $this->assertTrue($options['accessTypes']['write']); } public function testCanSetOptionsWithAccessTypesAsZendConfig() { $this->validator->setOptions( array( 'pathPrefix' => './', 'accessTypes' => new Zend_Config(array('read', 'write')), ) ); $options = $this->validator->getOptions(); $this->assertInternalType('array', $options); $this->assertArrayHasKey('pathPrefix', $options); $this->assertEquals('./', $options['pathPrefix']); $this->assertInternalType('array', $options['accessTypes']); $this->assertTrue($options['accessTypes']['read']); $this->assertTrue($options['accessTypes']['write']); } public function testCanSetOptionsWithAccessTypesAsArray() { $this->validator->setOptions( array( 'pathPrefix' => './', 'accessTypes' => array('read', 'write'), ) ); $options = $this->validator->getOptions(); $this->assertInternalType('array', $options); $this->assertArrayHasKey('pathPrefix', $options); $this->assertEquals('./', $options['pathPrefix']); $this->assertInternalType('array', $options['accessTypes']); $this->assertTrue($options['accessTypes']['read']); $this->assertTrue($options['accessTypes']['write']); } public function testClassConstructorSetsOptions() { $validator = new Msd_Validate_File_Accessible( array( 'pathPrefix' => './', 'accessTypes' => array('read', 'write'), ) ); $options = $validator->getOptions(); $this->assertInternalType('array', $options); $this->assertArrayHasKey('pathPrefix', $options); $this->assertEquals('./', $options['pathPrefix']); $this->assertInternalType('array', $options['accessTypes']); $this->assertTrue($options['accessTypes']['read']); $this->assertTrue($options['accessTypes']['write']); } /** * @expectedException Msd_Validate_Exception */ public function testThrowsExceptionIfOptionsArgumentIsNotAnArray() { $this->validator->setOptions('Go test and throw the exception.'); } /** * @expectedException Msd_Validate_Exception */ public function testThrowsExceptionIfAccessTypesOptionIsAnInvalidVariableType() { $this->validator->setOptions(array('accessTypes' => new stdClass())); } }