FileSecurityTest.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace Drupal\Tests\Component\FileSecurity;
  3. use Drupal\Component\FileSecurity\FileSecurity;
  4. use org\bovigo\vfs\vfsStream;
  5. use PHPUnit\Framework\TestCase;
  6. /**
  7. * Tests the file security component.
  8. *
  9. * @coversDefaultClass \Drupal\Component\FileSecurity\FileSecurity
  10. * @group FileSecurity
  11. */
  12. class FileSecurityTest extends TestCase {
  13. /**
  14. * @covers ::writeHtaccess
  15. */
  16. public function testWriteHtaccessPrivate() {
  17. vfsStream::setup('root');
  18. FileSecurity::writeHtaccess(vfsStream::url('root'));
  19. $htaccess_file = vfsStream::url('root') . '/.htaccess';
  20. $this->assertFileExists($htaccess_file);
  21. $this->assertEquals('0444', substr(sprintf('%o', fileperms($htaccess_file)), -4));
  22. $htaccess_contents = file_get_contents($htaccess_file);
  23. $this->assertContains("Require all denied", $htaccess_contents);
  24. }
  25. /**
  26. * @covers ::writeHtaccess
  27. */
  28. public function testWriteHtaccessPublic() {
  29. vfsStream::setup('root');
  30. $this->assertTrue(FileSecurity::writeHtaccess(vfsStream::url('root'), FALSE));
  31. $htaccess_file = vfsStream::url('root') . '/.htaccess';
  32. $this->assertFileExists($htaccess_file);
  33. $this->assertEquals('0444', substr(sprintf('%o', fileperms($htaccess_file)), -4));
  34. $htaccess_contents = file_get_contents($htaccess_file);
  35. $this->assertNotContains("Require all denied", $htaccess_contents);
  36. }
  37. /**
  38. * @covers ::writeHtaccess
  39. */
  40. public function testWriteHtaccessForceOverwrite() {
  41. vfsStream::setup('root');
  42. $htaccess_file = vfsStream::url('root') . '/.htaccess';
  43. file_put_contents($htaccess_file, "foo");
  44. $this->assertTrue(FileSecurity::writeHtaccess(vfsStream::url('root'), TRUE, TRUE));
  45. $htaccess_contents = file_get_contents($htaccess_file);
  46. $this->assertContains("Require all denied", $htaccess_contents);
  47. $this->assertNotContains("foo", $htaccess_contents);
  48. }
  49. /**
  50. * @covers ::writeHtaccess
  51. */
  52. public function testWriteHtaccessFailure() {
  53. vfsStream::setup('root');
  54. $this->assertFalse(FileSecurity::writeHtaccess(vfsStream::url('root') . '/foo'));
  55. }
  56. /**
  57. * @covers ::writeWebConfig
  58. */
  59. public function testWriteWebConfig() {
  60. vfsStream::setup('root');
  61. $this->assertTrue(FileSecurity::writeWebConfig(vfsStream::url('root')));
  62. $web_config_file = vfsStream::url('root') . '/web.config';
  63. $this->assertFileExists($web_config_file);
  64. $this->assertEquals('0444', substr(sprintf('%o', fileperms($web_config_file)), -4));
  65. }
  66. /**
  67. * @covers ::writeWebConfig
  68. */
  69. public function testWriteWebConfigForceOverwrite() {
  70. vfsStream::setup('root');
  71. $web_config_file = vfsStream::url('root') . '/web.config';
  72. file_put_contents($web_config_file, "foo");
  73. $this->assertTrue(FileSecurity::writeWebConfig(vfsStream::url('root'), TRUE));
  74. $this->assertFileExists($web_config_file);
  75. $this->assertEquals('0444', substr(sprintf('%o', fileperms($web_config_file)), -4));
  76. $this->assertNotContains("foo", $web_config_file);
  77. }
  78. /**
  79. * @covers ::writeWebConfig
  80. */
  81. public function testWriteWebConfigFailure() {
  82. vfsStream::setup('root');
  83. $this->assertFalse(FileSecurity::writeWebConfig(vfsStream::url('root') . '/foo'));
  84. }
  85. }