ILIAS  trunk Revision v11.0_alpha-1749-g1a06bdef097
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
ILIAS\Filesystem\Util\ZipTest Class Reference
+ Inheritance diagram for ILIAS\Filesystem\Util\ZipTest:
+ Collaboration diagram for ILIAS\Filesystem\Util\ZipTest:

Public Member Functions

 testZip ()
 
 testLegacyZip ()
 
 LegacyZipWithTop ()
 
 testUnzip (string $zip, bool $has_multiple_root_entries, int $expected_amount_directories, array $expected_directories, int $expected_amount_files, array $expected_files)
 
 testWrongZip ()
 
 testLargeZIPs ()
 
 testLegacyUnzip (string $zip, bool $has_multiple_root_entries, int $expected_amount_directories, array $expected_directories, int $expected_amount_files, array $expected_files)
 

Static Public Member Functions

static getZips ()
 

Data Fields

const ZIPPED_ZIP = 'zipped.zip'
 

Protected Member Functions

 setUp ()
 
 tearDown ()
 

Protected Attributes

string $zips_dir = __DIR__ . '/zips/'
 
string $unzips_dir = __DIR__ . '/unzips/'
 

Static Protected Attributes

static array $files_mixed
 
static array static array $directories_mixed
 
static array static array static array $directories_one
 
static array static array static array static array $directories_three
 
static array static array static array static array static array $files_one
 
static array static array static array static array static array static array $files_three
 

Private Member Functions

 recurseRmdir (string $path_to_directory)
 
 directoryToArray (string $path_to_directory)
 

Detailed Description

Author
Fabian Schmid fabia.nosp@m.n@sr.nosp@m..solu.nosp@m.tion.nosp@m.s

Definition at line 41 of file ZipTest.php.

Member Function Documentation

◆ directoryToArray()

ILIAS\Filesystem\Util\ZipTest::directoryToArray ( string  $path_to_directory)
private
Returns
string[]|string[][]

Definition at line 251 of file ZipTest.php.

References ILIAS\UI\examples\Symbol\Glyph\Sort\sort().

Referenced by ILIAS\Filesystem\Util\ZipTest\testLegacyUnzip().

251  : array
252  {
253  $iterator = new \RecursiveIteratorIterator(
254  new \RecursiveDirectoryIterator($path_to_directory, \RecursiveDirectoryIterator::SKIP_DOTS),
255  \RecursiveIteratorIterator::SELF_FIRST,
256  \RecursiveIteratorIterator::CATCH_GET_CHILD
257  );
258  $paths = [];
259  foreach ($iterator as $item) {
260  $relative_path = str_replace($path_to_directory . '/', '', $item->getPathname());
261  $paths[] = $item->isDir() ? $relative_path . '/' : $relative_path;
262  }
263 
264  sort($paths);
265 
266  return $paths;
267  }
sort()
description: > Example for rendering a Sort Glyph.
Definition: sort.php:41
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getZips()

static ILIAS\Filesystem\Util\ZipTest::getZips ( )
static

Definition at line 271 of file ZipTest.php.

271  : array
272  {
273  return [
274  ['1_folder_mac.zip', false, 10, self::$directories_one, 15, self::$files_one],
275  ['1_folder_win.zip', false, 10, self::$directories_one, 15, self::$files_one],
276  ['3_folders_mac.zip', true, 9, self::$directories_three, 12, self::$files_three],
277  ['3_folders_win.zip', true, 9, self::$directories_three, 12, self::$files_three],
278  ['1_folder_1_file_mac.zip', true, 3, self::$directories_mixed, 5, self::$files_mixed]
279  ];
280  }

◆ LegacyZipWithTop()

ILIAS\Filesystem\Util\ZipTest::LegacyZipWithTop ( )

Definition at line 104 of file ZipTest.php.

References $parts, $path, and ILIAS\Filesystem\Util\ZipTest\recurseRmdir().

104  : void
105  {
106  $legacy = new LegacyArchives();
107 
108  define('CLIENT_WEB_DIR', __DIR__);
109  define('ILIAS_WEB_DIR', 'public/data');
110  define('CLIENT_ID', 'test');
111  define('CLIENT_DATA_DIR', __DIR__);
112  define('ILIAS_ABSOLUTE_PATH', __DIR__);
113 
114  mkdir($this->unzips_dir);
115  $legacy->zip($this->zips_dir, $this->unzips_dir . self::ZIPPED_ZIP, true);
116  $this->assertFileExists($this->unzips_dir . self::ZIPPED_ZIP);
117 
118  $unzip_again = new Unzip(new UnzipOptions(), Streams::ofResource(fopen($this->unzips_dir . self::ZIPPED_ZIP, 'r')));
119  $this->assertEquals(5, $unzip_again->getAmountOfFiles());
120 
121  $depth = 0;
122  foreach ($unzip_again->getPaths() as $path) {
123  $parts = explode('/', $path);
124  $depth = max($depth, count($parts));
125  }
126  $this->assertEquals(2, $depth);
127  $this->recurseRmdir($this->unzips_dir);
128  }
if($clientAssertionType !='urn:ietf:params:oauth:client-assertion-type:jwt-bearer'|| $grantType !='client_credentials') $parts
Definition: ltitoken.php:61
$path
Definition: ltiservices.php:29
recurseRmdir(string $path_to_directory)
Definition: ZipTest.php:237
+ Here is the call graph for this function:

◆ recurseRmdir()

ILIAS\Filesystem\Util\ZipTest::recurseRmdir ( string  $path_to_directory)
private

Definition at line 237 of file ZipTest.php.

Referenced by ILIAS\Filesystem\Util\ZipTest\LegacyZipWithTop(), ILIAS\Filesystem\Util\ZipTest\tearDown(), ILIAS\Filesystem\Util\ZipTest\testLegacyUnzip(), and ILIAS\Filesystem\Util\ZipTest\testLegacyZip().

237  : bool
238  {
239  $files = array_diff(scandir($path_to_directory), ['.', '..']);
240  foreach ($files as $file) {
241  (is_dir("$path_to_directory/$file") && !is_link("$path_to_directory/$file")) ? $this->recurseRmdir(
242  "$path_to_directory/$file"
243  ) : unlink("$path_to_directory/$file");
244  }
245  return rmdir($path_to_directory);
246  }
recurseRmdir(string $path_to_directory)
Definition: ZipTest.php:237
+ Here is the caller graph for this function:

◆ setUp()

ILIAS\Filesystem\Util\ZipTest::setUp ( )
protected

Definition at line 47 of file ZipTest.php.

47  : void
48  {
49  if (file_exists($this->unzips_dir . self::ZIPPED_ZIP)) {
50  unlink($this->unzips_dir . self::ZIPPED_ZIP);
51  }
52  if (!file_exists($this->unzips_dir)) {
53  mkdir($this->unzips_dir);
54  }
55  }

◆ tearDown()

ILIAS\Filesystem\Util\ZipTest::tearDown ( )
protected

Definition at line 57 of file ZipTest.php.

References ILIAS\Filesystem\Util\ZipTest\recurseRmdir().

57  : void
58  {
59  if (file_exists($this->unzips_dir)) {
60  $this->recurseRmdir($this->unzips_dir);
61  }
62  }
recurseRmdir(string $path_to_directory)
Definition: ZipTest.php:237
+ Here is the call graph for this function:

◆ testLargeZIPs()

ILIAS\Filesystem\Util\ZipTest::testLargeZIPs ( )

Definition at line 174 of file ZipTest.php.

References ILIAS\Repository\int(), and ILIAS\UI\examples\Symbol\Glyph\Sort\sort().

174  : void
175  {
176  // get ulimit
177  $ulimit = (int) shell_exec('ulimit -n');
178  $limit = 2500;
179  if ($ulimit >= $limit) {
180  $this->markTestSkipped('ulimit is too high and would take too much resources');
181  }
182  $this->assertLessThan($limit, $ulimit);
183 
184  $zip = new Zip(new ZipOptions());
185 
186  $file_names = [];
187 
188  for ($i = 0; $i < $ulimit * 2; $i++) {
189  $path_inside_zip = $file_names[] = 'test' . $i;
190  $zip->addStream(Streams::ofString('-'), $path_inside_zip);
191  }
192  $this->assertTrue(true); // no warning or error
193 
194  // check if the zip now contains all files
195  $unzip = new Unzip(new UnzipOptions(), $zip->get());
196  $file_names_in_zip = iterator_to_array($unzip->getFiles());
197  sort($file_names);
198  sort($file_names_in_zip);
199  $this->assertEquals($file_names, $file_names_in_zip);
200  }
sort()
description: > Example for rendering a Sort Glyph.
Definition: sort.php:41
+ Here is the call graph for this function:

◆ testLegacyUnzip()

ILIAS\Filesystem\Util\ZipTest::testLegacyUnzip ( string  $zip,
bool  $has_multiple_root_entries,
int  $expected_amount_directories,
array  $expected_directories,
int  $expected_amount_files,
array  $expected_files 
)
Parameters
mixed[]$expected_directories
mixed[]$expected_files

Definition at line 207 of file ZipTest.php.

References ILIAS\Filesystem\Util\ZipTest\directoryToArray(), ILIAS\Filesystem\Util\ZipTest\recurseRmdir(), and ILIAS\UI\examples\Symbol\Glyph\Sort\sort().

214  : void {
215  $legacy = new LegacyArchives();
216 
217  $this->assertStringContainsString('.zip', $zip);
218  $zip_path = $this->zips_dir . $zip;
219  $this->assertFileExists($zip_path);
220 
221  $temp_unzip_path = $this->unzips_dir . uniqid('unzip', true);
222 
223  $return = $legacy->unzip(
224  $zip_path,
225  $temp_unzip_path
226  );
227 
228  $this->assertTrue($return);
229 
230  $unzipped_files = $this->directoryToArray($temp_unzip_path);
231  $expected_paths = array_merge($expected_directories, $expected_files);
232  sort($expected_paths);
233  $this->assertEquals($expected_paths, $unzipped_files);
234  $this->assertTrue($this->recurseRmdir($temp_unzip_path));
235  }
directoryToArray(string $path_to_directory)
Definition: ZipTest.php:251
sort()
description: > Example for rendering a Sort Glyph.
Definition: sort.php:41
recurseRmdir(string $path_to_directory)
Definition: ZipTest.php:237
+ Here is the call graph for this function:

◆ testLegacyZip()

ILIAS\Filesystem\Util\ZipTest::testLegacyZip ( )

Definition at line 79 of file ZipTest.php.

References $parts, $path, and ILIAS\Filesystem\Util\ZipTest\recurseRmdir().

79  : void
80  {
81  $legacy = new LegacyArchives();
82 
83  define('CLIENT_WEB_DIR', __DIR__);
84  define('ILIAS_WEB_DIR', 'public/data');
85  define('CLIENT_ID', 'test');
86  define('CLIENT_DATA_DIR', __DIR__);
87  define('ILIAS_ABSOLUTE_PATH', __DIR__);
88 
89  $legacy->zip($this->zips_dir, $this->unzips_dir . self::ZIPPED_ZIP, false);
90  $this->assertFileExists($this->unzips_dir . self::ZIPPED_ZIP);
91 
92  $unzip_again = new Unzip(new UnzipOptions(), Streams::ofResource(fopen($this->unzips_dir . self::ZIPPED_ZIP, 'r')));
93  $this->assertEquals(5, $unzip_again->getAmountOfFiles());
94 
95  $depth = 0;
96  foreach ($unzip_again->getPaths() as $path) {
97  $parts = explode('/', $path);
98  $depth = max($depth, count($parts));
99  }
100  $this->assertEquals(2, $depth);
101  $this->recurseRmdir($this->unzips_dir);
102  }
if($clientAssertionType !='urn:ietf:params:oauth:client-assertion-type:jwt-bearer'|| $grantType !='client_credentials') $parts
Definition: ltitoken.php:61
$path
Definition: ltiservices.php:29
recurseRmdir(string $path_to_directory)
Definition: ZipTest.php:237
+ Here is the call graph for this function:

◆ testUnzip()

ILIAS\Filesystem\Util\ZipTest::testUnzip ( string  $zip,
bool  $has_multiple_root_entries,
int  $expected_amount_directories,
array  $expected_directories,
int  $expected_amount_files,
array  $expected_files 
)
Parameters
mixed[]$expected_directories
mixed[]$expected_files

Definition at line 135 of file ZipTest.php.

142  : void {
143  $this->assertStringContainsString('.zip', $zip);
144  $zip_path = $this->zips_dir . $zip;
145  $this->assertFileExists($zip_path);
146 
147  $stream = Streams::ofResource(fopen($zip_path, 'rb'));
148  $options = new UnzipOptions();
149  $unzip = new Unzip($options, $stream);
150 
151  $this->assertFalse($unzip->hasZipReadingError());
152  $this->assertEquals($has_multiple_root_entries, $unzip->hasMultipleRootEntriesInZip());
153  $this->assertEquals($expected_amount_directories, $unzip->getAmountOfDirectories());
154  $this->assertEquals($expected_directories, iterator_to_array($unzip->getDirectories()));
155  $this->assertEquals($expected_amount_files, $unzip->getAmountOfFiles());
156  $this->assertEquals($expected_files, iterator_to_array($unzip->getFiles()));
157  }

◆ testWrongZip()

ILIAS\Filesystem\Util\ZipTest::testWrongZip ( )

Definition at line 159 of file ZipTest.php.

159  : void
160  {
161  $stream = Streams::ofResource(fopen(__FILE__, 'rb'));
162  $options = new UnzipOptions();
163  $unzip = new Unzip($options, $stream);
164  $this->assertTrue($unzip->hasZipReadingError());
165  $this->assertFalse($unzip->hasMultipleRootEntriesInZip());
166  $this->assertEquals(0, iterator_count($unzip->getFiles()));
167  $this->assertEquals(0, iterator_count($unzip->getDirectories()));
168  $this->assertEquals(0, iterator_count($unzip->getPaths()));
169  $this->assertEquals([], iterator_to_array($unzip->getDirectories()));
170  $this->assertEquals([], iterator_to_array($unzip->getFiles()));
171  }

◆ testZip()

ILIAS\Filesystem\Util\ZipTest::testZip ( )

Definition at line 64 of file ZipTest.php.

64  : void
65  {
66  $zip_options = new ZipOptions();
67  $streams = [
68  Streams::ofResource(fopen($this->zips_dir . '1_folder_1_file_mac.zip', 'r')),
69  Streams::ofResource(fopen($this->zips_dir . '1_folder_win.zip', 'r')),
70  ];
71  $zip = new Zip($zip_options, ...$streams);
72  $zip_stream = $zip->get();
73  $this->assertGreaterThan(0, $zip_stream->getSize());
74 
75  $unzip_again = new Unzip(new UnzipOptions(), $zip_stream);
76  $this->assertEquals(2, $unzip_again->getAmountOfFiles());
77  }

Field Documentation

◆ $directories_mixed

array static array ILIAS\Filesystem\Util\ZipTest::$directories_mixed
staticprotected
Initial value:
= [
0 => 'Ordner A/'

Definition at line 290 of file ZipTest.php.

◆ $directories_one

array static array static array ILIAS\Filesystem\Util\ZipTest::$directories_one
staticprotected
Initial value:
= [
0 => 'Ordner 0/'

Definition at line 296 of file ZipTest.php.

◆ $directories_three

array static array static array static array ILIAS\Filesystem\Util\ZipTest::$directories_three
staticprotected
Initial value:
= [
0 => 'Ordner A/'

Definition at line 308 of file ZipTest.php.

◆ $files_mixed

array ILIAS\Filesystem\Util\ZipTest::$files_mixed
staticprotected
Initial value:
= [
0 => '03_Test.pdf'

Definition at line 282 of file ZipTest.php.

◆ $files_one

array static array static array static array static array ILIAS\Filesystem\Util\ZipTest::$files_one
staticprotected
Initial value:
= [
0 => 'Ordner 0/13_Test.pdf'

Definition at line 320 of file ZipTest.php.

◆ $files_three

array static array static array static array static array static array ILIAS\Filesystem\Util\ZipTest::$files_three
staticprotected
Initial value:
= [
0 => 'Ordner A/01_Test.pdf'

Definition at line 338 of file ZipTest.php.

◆ $unzips_dir

string ILIAS\Filesystem\Util\ZipTest::$unzips_dir = __DIR__ . '/unzips/'
protected

Definition at line 45 of file ZipTest.php.

◆ $zips_dir

string ILIAS\Filesystem\Util\ZipTest::$zips_dir = __DIR__ . '/zips/'
protected

Definition at line 44 of file ZipTest.php.

◆ ZIPPED_ZIP

const ILIAS\Filesystem\Util\ZipTest::ZIPPED_ZIP = 'zipped.zip'

Definition at line 43 of file ZipTest.php.


The documentation for this class was generated from the following file: