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()));
 | 
						|
    }
 | 
						|
 | 
						|
} |