3 namespace Drupal\Tests\Component\PhpStorage;
5 use Drupal\Component\PhpStorage\FileStorage;
6 use Drupal\Component\Utility\Random;
7 use org\bovigo\vfs\vfsStreamDirectory;
8 use PHPUnit\Framework\Error\Warning;
11 * @coversDefaultClass \Drupal\Component\PhpStorage\FileStorage
15 class FileStorageTest extends PhpStorageTestBase {
18 * Standard test settings to pass to storage instances.
22 protected $standardSettings;
27 protected function setUp() {
30 $this->standardSettings = [
31 'directory' => $this->directory,
37 * Tests basic load/save/delete operations.
44 public function testCRUD() {
45 $php = new FileStorage($this->standardSettings);
46 $this->assertCRUD($php);
52 public function testWriteable() {
53 $php = new FileStorage($this->standardSettings);
54 $this->assertTrue($php->writeable());
60 public function testDeleteAll() {
62 $random_generator = new Random();
64 // Write out some files.
65 $php = new FileStorage($this->standardSettings);
67 $name = $random_generator->name(8, TRUE) . '/' . $random_generator->name(8, TRUE) . '.php';
69 // Find a global that doesn't exist.
71 $random = mt_rand(10000, 100000);
72 } while (isset($GLOBALS[$random]));
74 // Write out a PHP file and ensure it's successfully loaded.
75 $code = "<?php\n\$GLOBALS[$random] = TRUE;";
76 $this->assertTrue($php->save($name, $code), 'Saved php file');
78 $this->assertTrue($GLOBALS[$random], 'File saved correctly with correct value');
80 // Make sure directory exists prior to removal.
81 $this->assertTrue(file_exists($this->directory . '/test'), 'File storage directory does not exist.');
83 $this->assertTrue($php->deleteAll(), 'Delete all reported success');
84 $this->assertFalse($php->load($name));
85 $this->assertFalse(file_exists($this->directory . '/test'), 'File storage directory does not exist after call to deleteAll()');
87 // Should still return TRUE if directory has already been deleted.
88 $this->assertTrue($php->deleteAll(), 'Delete all succeeds with nothing to delete');
89 unset($GLOBALS[$random]);
93 * @covers ::createDirectory
95 public function testCreateDirectoryFailWarning() {
96 $directory = new vfsStreamDirectory('permissionDenied', 0200);
97 $storage = new FileStorage([
98 'directory' => $directory->url(),
101 $code = "<?php\n echo 'here';";
102 if (method_exists($this, 'expectException')) {
103 $this->expectException(Warning::class);
104 $this->expectExceptionMessage('mkdir(): Permission Denied');
107 $this->setExpectedException(\PHPUnit_Framework_Error_Warning::class, 'mkdir(): Permission Denied');
109 $storage->save('subdirectory/foo.php', $code);