AsiExtraFieldTest.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace PhpZip\Tests\Extra\Fields;
  3. use PHPUnit\Framework\TestCase;
  4. use PhpZip\Exception\Crc32Exception;
  5. use PhpZip\Exception\ZipException;
  6. use PhpZip\Model\Extra\Fields\AsiExtraField;
  7. /**
  8. * @internal
  9. *
  10. * @small
  11. */
  12. final class AsiExtraFieldTest extends TestCase
  13. {
  14. /**
  15. * @dataProvider provideExtraField
  16. *
  17. * @param int $mode
  18. * @param int $uid
  19. * @param int $gid
  20. * @param string $link
  21. * @param string $binaryData
  22. *
  23. * @throws ZipException
  24. */
  25. public function testExtraField($mode, $uid, $gid, $link, $binaryData)
  26. {
  27. $asiExtraField = new AsiExtraField($mode, $uid, $gid, $link);
  28. self::assertSame($asiExtraField->getHeaderId(), AsiExtraField::HEADER_ID);
  29. self::assertSame($asiExtraField->getMode(), $mode);
  30. self::assertSame($asiExtraField->getUserId(), $uid);
  31. self::assertSame($asiExtraField->getGroupId(), $uid);
  32. self::assertSame($asiExtraField->getLink(), $link);
  33. self::assertSame($asiExtraField->packLocalFileData(), $binaryData);
  34. self::assertSame($asiExtraField->packCentralDirData(), $binaryData);
  35. self::assertEquals(AsiExtraField::unpackLocalFileData($binaryData), $asiExtraField);
  36. self::assertEquals(AsiExtraField::unpackCentralDirData($binaryData), $asiExtraField);
  37. }
  38. /**
  39. * @return array
  40. */
  41. public function provideExtraField()
  42. {
  43. return [
  44. [
  45. 040755,
  46. AsiExtraField::USER_GID_PID,
  47. AsiExtraField::USER_GID_PID,
  48. '',
  49. "#\x06\\\xF6\xEDA\x00\x00\x00\x00\xE8\x03\xE8\x03",
  50. ],
  51. [
  52. 0100644,
  53. 0,
  54. 0,
  55. 'sites-enabled/example.conf',
  56. "_\xB8\xC7b\xA4\x81\x1A\x00\x00\x00\x00\x00\x00\x00sites-enabled/example.conf",
  57. ],
  58. ];
  59. }
  60. public function testSetter()
  61. {
  62. $extraField = new AsiExtraField(0777);
  63. $extraField->setMode(0100666);
  64. self::assertSame(0100666, $extraField->getMode());
  65. $extraField->setUserId(700);
  66. self::assertSame(700, $extraField->getUserId());
  67. $extraField->setGroupId(500);
  68. self::assertSame(500, $extraField->getGroupId());
  69. $extraField->setLink('link.txt');
  70. self::assertSame($extraField->getLink(), 'link.txt');
  71. self::assertSame(0120666, $extraField->getMode());
  72. // dir mode
  73. $extraField->setMode(0755);
  74. self::assertSame(0120755, $extraField->getMode());
  75. $extraField->setLink('');
  76. self::assertSame($extraField->getLink(), '');
  77. self::assertSame(0100755, $extraField->getMode());
  78. }
  79. /**
  80. * @throws Crc32Exception
  81. */
  82. public function testInvalidParse()
  83. {
  84. $this->expectException(
  85. Crc32Exception::class
  86. );
  87. $this->expectExceptionMessage(
  88. 'Asi Unix Extra Filed Data (expected CRC32 value'
  89. );
  90. AsiExtraField::unpackLocalFileData("\x01\x06\\\xF6\xEDA\x00\x00\x00\x00\xE8\x03\xE8\x03");
  91. }
  92. }