236 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			7,6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			236 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			7,6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * @group validate
 | |
|  */
 | |
| class Msd_Validate_File_AccessibleTest extends PHPUnit_Framework_TestCase
 | |
| {
 | |
|     /**
 | |
|      * @var string Path to test files
 | |
|      */
 | |
|     protected $_testFile = '';
 | |
| 
 | |
|     /**
 | |
|      * @var string Path to test files
 | |
|      */
 | |
|     protected $_testDir = '';
 | |
| 
 | |
|     /**
 | |
|      * @var Msd_Validate_File_Accessible
 | |
|      */
 | |
|     protected $validator = null;
 | |
| 
 | |
|     public function setUp()
 | |
|     {
 | |
|         parent::setUp();
 | |
|         $this->_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()));
 | |
|     }
 | |
| 
 | |
| } |