/** * Tests preservation and rollback on tricky path permissions. * * @depends testPreserveAndRollback */ public function testFileModes() { $workingDirectory = new TempDirectory(__METHOD__); $cacheDirectory = new TempDirectory(__METHOD__ . '-cache'); // Create directory to test. $folder1 = $workingDirectory->getPath('folder1'); mkdir($folder1); $subfolder1 = $workingDirectory->getPath('folder1/subfolder1'); mkdir($subfolder1); $file1 = $workingDirectory->getPath('folder1/file1.txt'); file_put_contents($file1, 'Test content'); $file2 = $workingDirectory->getPath('folder1/file2.txt'); file_put_contents($file2, 'Test content 2'); // After changing some permissions we test if the given paths can be // restored. chmod($file2, 0400); // For checking if file exists, we need to set the permission for the folder // differently // @see http://stackoverflow.com/questions/11834629/glob-lists-files-file-exists-says-they-dont-exist chmod($folder1, 0500); $this->assertIsDir($folder1, 'Folder created.'); $this->assertIsDir($subfolder1, 'Subfolder 1 created.'); $this->assertFileExists($file1, 'File 1 created.'); $this->assertFileExists($file2, 'File 2 created.'); $installPaths = array($folder1); $preservePaths = array($subfolder1, $file1, $file2); $preserver = new PathPreserver($installPaths, $preservePaths, $cacheDirectory->getRoot(), $this->fs, $this->io); // We check if preservation works even with restrictive permissions. chmod($folder1, 0400); $preserver->preserve(); chmod($folder1, 0500); $this->assertIsDir($folder1, 'Folder not removed for backup.'); $this->assertFileNotExists($subfolder1, 'Subfolder removed for backup.'); $this->assertFileNotExists($file1, 'File 1 was removed for backup.'); $this->assertFileNotExists($file2, 'File 2 was removed for backup.'); // We check if rollback works even with restrictive permissions. chmod($folder1, 0400); $preserver->rollback(); chmod($folder1, 0500); $this->assertFileExists($subfolder1, 'Subfolder 1 recreated.'); $this->assertFileExists($file1, 'File 1 recreated.'); $this->assertFileExists($file2, 'File 2 recreated.'); }
/** * Tests if temp directories have a simple name and really are sub * * @param $name * * @dataProvider directoryNames */ public function testTempDirectoryName($name) { $dir = sys_get_temp_dir(); $temp = new TempDirectory($name); $root = $temp->getRoot(); $basename = basename($root); $this->assertRegExp('/^[\\w]+\\-[\\w]+\\-[\\w]+$/', $basename, 'Folder name does not match alphanumeric pattern.'); $parent = dirname($root); $this->assertEquals($dir, $parent, 'Folder is not subfolder of system temp dir'); }