123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- <?php
- namespace PhpZip\Tests;
- use PhpZip\Constants\ZipCompressionMethod;
- use PhpZip\Exception\ZipException;
- use PhpZip\ZipFile;
- /**
- * Test ZipAlign.
- *
- * @internal
- *
- * @small
- */
- class ZipAlignTest extends ZipTestCase
- {
- /**
- * @throws ZipException
- */
- public function testApkAlignedAndSetZipAlignAndReSave()
- {
- $filename = __DIR__ . '/resources/apk.zip';
- static::assertCorrectZipArchive($filename);
- $result = static::assertVerifyZipAlign($filename);
- if ($result !== null) {
- static::assertTrue($result);
- }
- $zipFile = new ZipFile();
- $zipFile->openFile($filename);
- $zipFile->setZipAlign(4);
- $zipFile->saveAsFile($this->outputFilename);
- $zipFile->close();
- static::assertCorrectZipArchive($this->outputFilename);
- $result = static::assertVerifyZipAlign($this->outputFilename, true);
- if ($result !== null) {
- static::assertTrue($result);
- }
- }
- /**
- * Test zip alignment.
- *
- * @throws ZipException
- * @throws \Exception
- */
- public function testZipAlignSourceZip()
- {
- $zipFile = new ZipFile();
- for ($i = 0; $i < 100; $i++) {
- $zipFile->addFromString(
- 'entry' . $i . '.txt',
- random_bytes(mt_rand(100, 4096)),
- ZipCompressionMethod::STORED
- );
- }
- $zipFile->saveAsFile($this->outputFilename);
- $zipFile->close();
- static::assertCorrectZipArchive($this->outputFilename);
- $result = static::assertVerifyZipAlign($this->outputFilename);
- if ($result === null) {
- return;
- } // zip align not installed
- // check not zip align
- static::assertFalse($result);
- $zipFile->openFile($this->outputFilename);
- $zipFile->setZipAlign(4);
- $zipFile->saveAsFile($this->outputFilename);
- $zipFile->close();
- static::assertCorrectZipArchive($this->outputFilename);
- $result = static::assertVerifyZipAlign($this->outputFilename, true);
- static::assertNotNull($result);
- // check zip align
- static::assertTrue($result);
- }
- /**
- * @throws ZipException
- * @throws \Exception
- */
- public function testZipAlignNewFiles()
- {
- $zipFile = new ZipFile();
- for ($i = 0; $i < 100; $i++) {
- $zipFile->addFromString(
- 'entry' . $i . '.txt',
- random_bytes(mt_rand(100, 4096)),
- ZipCompressionMethod::STORED
- );
- }
- $zipFile->setZipAlign(4);
- $zipFile->saveAsFile($this->outputFilename);
- $zipFile->close();
- static::assertCorrectZipArchive($this->outputFilename);
- $result = static::assertVerifyZipAlign($this->outputFilename);
- if ($result === null) {
- return;
- } // zip align not installed
- // check not zip align
- static::assertTrue($result);
- }
- /**
- * @throws ZipException
- * @throws \Exception
- */
- public function testZipAlignFromModifiedZipArchive()
- {
- $zipFile = new ZipFile();
- for ($i = 0; $i < 100; $i++) {
- $zipFile->addFromString(
- 'entry' . $i . '.txt',
- random_bytes(mt_rand(100, 4096)),
- ZipCompressionMethod::STORED
- );
- }
- $zipFile->saveAsFile($this->outputFilename);
- $zipFile->close();
- static::assertCorrectZipArchive($this->outputFilename);
- $result = static::assertVerifyZipAlign($this->outputFilename);
- if ($result === null) {
- return;
- } // zip align not installed
- // check not zip align
- static::assertFalse($result);
- $zipFile->openFile($this->outputFilename);
- $zipFile->deleteFromRegex('~entry2[\\d]+\\.txt$~s');
- for ($i = 0; $i < 100; $i++) {
- $isStored = (bool) mt_rand(0, 1);
- $zipFile->addFromString(
- 'entry_new_' . ($isStored ? 'stored' : 'deflated') . '_' . $i . '.txt',
- random_bytes(mt_rand(100, 4096)),
- $isStored ?
- ZipCompressionMethod::STORED :
- ZipCompressionMethod::DEFLATED
- );
- }
- $zipFile->setZipAlign(4);
- $zipFile->saveAsFile($this->outputFilename);
- $zipFile->close();
- static::assertCorrectZipArchive($this->outputFilename);
- $result = static::assertVerifyZipAlign($this->outputFilename, true);
- static::assertNotNull($result);
- // check zip align
- static::assertTrue($result);
- }
- }
|