diff options
Diffstat (limited to '_test/tests/inc/init_creationmodes.test.php')
-rw-r--r-- | _test/tests/inc/init_creationmodes.test.php | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/_test/tests/inc/init_creationmodes.test.php b/_test/tests/inc/init_creationmodes.test.php new file mode 100644 index 000000000..04e2e9d41 --- /dev/null +++ b/_test/tests/inc/init_creationmodes.test.php @@ -0,0 +1,109 @@ +<?php + +class init_creationmodes_test extends DokuWikiTest +{ + + protected $oldumask; + protected $dir; + protected $file; + + /** @inheritDoc */ + public static function setUpBeforeClass(): void + { + parent::setUpBeforeClass(); + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + self::markTestSkipped('Permission checks skipped on Windows'); + } + } + + /** + * set up the file and directory we use for testing + */ + protected function init() + { + $this->dir = getCacheName('dir', '.creationmode_test'); + $this->file = getCacheName('bar', '.creationmode_test'); + } + + /** @inheritDoc */ + public function setUp(): void + { + parent::setUp(); + + if (!isset($this->dir)) $this->init(); + $this->oldumask = umask(); + } + + /** @inheritDoc */ + protected function tearDown(): void + { + umask($this->oldumask); + + chmod($this->dir, 0777); + rmdir($this->dir); + + chmod($this->file, 0777); + unlink($this->file); + + parent::tearDown(); + + } + + /** + * @return Generator|string[] + * @see testFilemodes + */ + public function provideFilemodes() + { + $umasks = [0000, 0022, 0002, 0007]; + $fmodes = [0777, 0666, 0644, 0640, 0664, 0660]; + $dmodes = [0777, 0775, 0755, 0750, 0770, 0700]; + + foreach ($umasks as $umask) { + foreach ($dmodes as $dmode) { + foreach ($fmodes as $fmode) { + yield [$umask, $dmode, $fmode]; + } + } + } + } + + /** + * @dataProvider provideFilemodes + */ + public function testFilemodes($umask, $dmode, $fmode) + { + global $conf; + + // setup + $conf['dmode'] = $dmode; + $conf['fmode'] = $fmode; + umask($umask); + + // create + init_creationmodes(); + io_mkdir_p($this->dir); + io_saveFile($this->file, 'test'); + + // get actual values (removing the status bits) + clearstatcache(); + $dperm = fileperms($this->dir) - 0x4000; + $fperm = fileperms($this->file) - 0x8000; + + + $this->assertSame($dmode, $dperm, + sprintf( + 'dir had %04o, expected %04o with umask %04o (fperm: %04o)', + $dperm, $dmode, $umask, $conf['dperm'] + ) + ); + $this->assertSame($fmode, $fperm, + sprintf( + 'file had %04o, expected %04o with umask %04o (fperm: %04o)', + $fperm, $fmode, $umask, $conf['fperm'] + ) + ); + } + +} + |