public function testAppendToCurrentFifo() { if (!$this->canWrite) { return; } if (!ezcBaseFeatures::hasFunction('posix_mknod')) { return; } $dir = $this->getTempDir(); posix_mknod("{$dir}/myfifo", POSIX_S_IFIFO); $fifo = "{$dir}/my_fifo.tar"; $bf = new ezcArchiveBlockFile($fifo, true); $archive = ezcArchive::getTarInstance($bf, $this->tarMimeFormat); $archive->appendToCurrent("{$dir}/myfifo", "{$dir}"); $archive->close(); // Do the same with gnu tar. exec("tar -cf {$dir}/gnutar.tar --format=" . $this->tarFormat . " -C {$dir}/ myfifo"); $this->assertEquals(file_get_contents("{$dir}/gnutar.tar"), file_get_contents($fifo)); unlink("{$dir}/myfifo"); }
public function testAppendArchiveAtOnce() { if (!$this->canWrite) { try { $this->complexArchive->truncate(); $this->fail("Cannot write exception expected"); } catch (ezcBaseFilePermissionException $e) { // Okay, some exception thrown. } return; } $dir = $this->getTempDir(); $src = $dir . "/src"; mkdir($src); $files = array(); do { $this->complexArchive->extractCurrent($src); $files[] = $src . '/' . $this->complexArchive->current()->getPath(); } while ($this->complexArchive->next()); $mytar = "{$dir}/my_archive.tar"; $bf = new ezcArchiveBlockFile($mytar, true); $archive = ezcArchive::getTarInstance($bf, $this->tarMimeFormat); $archive->appendToCurrent($files, $src); $archive->close(); exec("tar -cf {$dir}/gnutar.tar --format=" . $this->tarFormat . " -C {$src} files"); $this->assertEquals(file_get_contents("{$dir}/gnutar.tar"), file_get_contents($mytar)); unset($archive); unset($bf); }
public function testExtractLongLinkName() { $dir = $this->getTempDir(); if ($this->isWindows()) { $dirname = "aaaaabbbbbaaaaabbbbbaaaaabbbbb"; // 30 char. max paths shorter in Windows $filename = "cccccdddddcccccdddddcccccddddd"; // 30 char. max paths shorter in Windows mkdir("{$dir}\\{$dirname}\\{$dirname}\\{$dirname}", 0777, true); touch("{$dir}\\{$dirname}\\{$dirname}\\{$dirname}\\{$filename}"); copy("{$dir}\\{$dirname}\\{$dirname}\\{$dirname}\\{$filename}", "{$dir}/mylink"); } else { $dirname = "aaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbb"; // 60 char. mkdir("{$dir}/{$dirname}/{$dirname}/{$dirname}", 0777, true); $filename = "ccccccccccddddddddddccccccccccddddddddddccccccccccdddddddddd"; // 60 char. touch("{$dir}/{$dirname}/{$dirname}/{$dirname}/{$filename}"); symlink("{$dirname}/{$dirname}/{$dirname}/{$filename}", "{$dir}/mylink"); } exec("tar -cf {$dir}/gnutar.tar --format=" . $this->tarFormat . " -C {$dir} mylink"); unlink("{$dir}/{$dirname}/{$dirname}/{$dirname}/{$filename}"); rmdir("{$dir}/{$dirname}/{$dirname}/{$dirname}"); rmdir("{$dir}/{$dirname}/{$dirname}"); rmdir("{$dir}/{$dirname}"); // Extract it: $bf = new ezcArchiveBlockFile("{$dir}/gnutar.tar"); $archive = ezcArchive::getTarInstance($bf, $this->tarMimeFormat); foreach ($archive as $entry) { $archive->extractCurrent($dir); } $this->assertTrue(is_link("{$dir}/mylink")); $this->assertEquals("{$dirname}/{$dirname}/{$dirname}/{$filename}", readlink("{$dir}/mylink")); unset($bf); }