123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- <?php
- /*
- * This file is part of the Stash package.
- *
- * (c) Robert Hafner <tedivm@tedivm.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Stash\Test\Driver;
- use Stash\Test\Stubs\PoolGetDriverStub;
- use Stash\Driver\FileSystem;
- use Stash\Item;
- function strdup($str)
- {
- return $str;
- }
- /**
- * @package Stash
- * @author Robert Hafner <tedivm@tedivm.com>
- */
- class FileSystemTest extends AbstractDriverTest
- {
- protected $driverClass = 'Stash\Driver\FileSystem';
- protected $extension = '.php';
- protected $persistence = true;
- protected function getOptions($options = array())
- {
- return array_merge(array('memKeyLimit' => 2), $options);
- }
- /**
- * @expectedException Stash\Exception\RuntimeException
- */
- public function testOptionKeyHashFunctionException()
- {
- $driver = new FileSystem($this->getOptions(array('keyHashFunction' => 'foobar_'.mt_rand())));
- }
- /**
- * @expectedException Stash\Exception\RuntimeException
- */
- public function testOptionEncoderObjectException()
- {
- $encoder = new \stdClass();
- $driver = new FileSystem($this->getOptions(array('encoder' => $encoder)));
- }
- /**
- * @expectedException Stash\Exception\RuntimeException
- */
- public function testOptionEncoderStringException()
- {
- $encoder = 'stdClass';
- $driver = new FileSystem($this->getOptions(array('encoder' => $encoder)));
- }
- public function testOptionEncoderAsObject()
- {
- $encoder = new \Stash\Driver\FileSystem\NativeEncoder();
- $driver = new FileSystem($this->getOptions(array('encoder' => $encoder)));
- }
- public function testOptionEncoderAsString()
- {
- $encoder = '\Stash\Driver\FileSystem\NativeEncoder';
- $driver = new FileSystem($this->getOptions(array('encoder' => $encoder)));
- }
- public function testOptionKeyHashFunction()
- {
- $driver = new FileSystem(array('keyHashFunction' => 'md5'));
- }
- /**
- * Test that the paths are created using the key hash function.
- */
- public function testOptionKeyHashFunctionDirs()
- {
- $hashfunctions = array('Stash\Test\Driver\strdup', 'strrev', 'md5', function ($value) {
- return abs(crc32($value));
- });
- $paths = array('one', 'two', 'three', 'four');
- foreach ($hashfunctions as $hashfunction) {
- $driver = new FileSystem($this->getOptions(array(
- 'keyHashFunction' => $hashfunction,
- 'path' => sys_get_temp_dir().DIRECTORY_SEPARATOR.'stash',
- 'dirSplit' => 1
- )));
- $rand = str_repeat(uniqid(), 32);
- $item = new Item();
- $poolStub = new PoolGetDriverStub();
- $poolStub->setDriver($driver);
- $item->setPool($poolStub);
- $item->setKey($paths);
- $item->set($rand)->save();
- $allpaths = array_merge(array('cache'), $paths);
- $predicted = sys_get_temp_dir().
- DIRECTORY_SEPARATOR.
- 'stash'.
- DIRECTORY_SEPARATOR.
- implode(DIRECTORY_SEPARATOR, array_map($hashfunction, $allpaths)).
- $this->extension;
- $this->assertFileExists($predicted);
- }
- }
- /**
- * Test creation of directories with long paths (Windows issue)
- *
- * Regression test for https://github.com/tedivm/Stash/issues/61
- *
- * There are currently no short term plans to allow long paths in PHP windows
- * http://www.mail-archive.com/internals@lists.php.net/msg62672.html
- *
- */
- public function testLongPathFolderCreation()
- {
- if (strtolower(substr(PHP_OS, 0, 3)) !== 'win') {
- $this->markTestSkipped('This test can only occur on Windows based systems.');
- }
- $cachePath = sys_get_temp_dir().DIRECTORY_SEPARATOR.'stash';
- $driver = new FileSystem($this->getOptions(array(
- 'keyHashFunction' => 'Stash\Test\Driver\strdup',
- 'path' => $cachePath,
- 'dirSplit' => 1
- )));
- $key=array();
- // MAX_PATH is 260 - http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx
- while (strlen($cachePath . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $key)) < 259) {
- // 32 character string typical of an md5 sum
- $key[]="abcdefghijklmnopqrstuvwxyz123456";
- }
- $key[]="abcdefghijklmnopqrstuvwxyz123456";
- $this->expiration = time() + 3600;
- $this->setExpectedException('\Stash\Exception\WindowsPathMaxLengthException');
- $driver->storeData($key, "test", $this->expiration);
- }
- /**
- * Test creation of file with long paths (Windows issue)
- *
- * Regression test for https://github.com/tedivm/Stash/issues/61
- *
- * There are currently no short term plans to allow long paths in PHP windows
- * http://www.mail-archive.com/internals@lists.php.net/msg62672.html
- *
- */
- public function testLongPathFileCreation()
- {
- if (strtolower(substr(PHP_OS, 0, 3)) !== 'win') {
- $this->markTestSkipped('This test can only occur on Windows based systems.');
- }
- $cachePath = sys_get_temp_dir().DIRECTORY_SEPARATOR.'stash';
- $driver = new FileSystem($this->getOptions(array(
- 'keyHashFunction' => 'Stash\Test\Driver\strdup',
- 'path' => $cachePath,
- 'dirSplit' => 1
- )));
- $key=array();
- // MAX_PATH is 260 - http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx
- while (strlen($cachePath . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $key)) < 259) {
- // 32 character string typical of an md5 sum
- $key[]="abcdefghijklmnopqrstuvwxyz123456";
- }
- $this->expiration = time() + 3600;
- $this->setExpectedException('\Stash\Exception\WindowsPathMaxLengthException');
- $driver->storeData($key, "test", $this->expiration);
- }
- }
|