You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

ZipEntryTest.java 8.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. *
  17. */
  18. package org.apache.tools.zip;
  19. import org.junit.Test;
  20. import static org.junit.Assert.assertEquals;
  21. import static org.junit.Assert.assertFalse;
  22. import static org.junit.Assert.assertSame;
  23. import static org.junit.Assert.fail;
  24. /**
  25. * JUnit 3 testcases for org.apache.tools.zip.ZipEntry.
  26. *
  27. */
  28. public class ZipEntryTest {
  29. /**
  30. * test handling of extra fields
  31. */
  32. @Test
  33. public void testExtraFields() {
  34. AsiExtraField a = new AsiExtraField();
  35. a.setDirectory(true);
  36. a.setMode(0755);
  37. UnrecognizedExtraField u = new UnrecognizedExtraField();
  38. u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
  39. u.setLocalFileDataData(new byte[0]);
  40. ZipEntry ze = new ZipEntry("test/");
  41. ze.setExtraFields(new ZipExtraField[] {a, u});
  42. byte[] data1 = ze.getExtra();
  43. ZipExtraField[] result = ze.getExtraFields();
  44. assertEquals("first pass", 2, result.length);
  45. assertSame(a, result[0]);
  46. assertSame(u, result[1]);
  47. UnrecognizedExtraField u2 = new UnrecognizedExtraField();
  48. u2.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
  49. u2.setLocalFileDataData(new byte[] {1});
  50. ze.addExtraField(u2);
  51. byte[] data2 = ze.getExtra();
  52. result = ze.getExtraFields();
  53. assertEquals("second pass", 2, result.length);
  54. assertSame(a, result[0]);
  55. assertSame(u2, result[1]);
  56. assertEquals("length second pass", data1.length+1, data2.length);
  57. UnrecognizedExtraField u3 = new UnrecognizedExtraField();
  58. u3.setHeaderId(new ZipShort(2));
  59. u3.setLocalFileDataData(new byte[] {1});
  60. ze.addExtraField(u3);
  61. result = ze.getExtraFields();
  62. assertEquals("third pass", 3, result.length);
  63. ze.removeExtraField(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
  64. byte[] data3 = ze.getExtra();
  65. result = ze.getExtraFields();
  66. assertEquals("fourth pass", 2, result.length);
  67. assertSame(a, result[0]);
  68. assertSame(u3, result[1]);
  69. assertEquals("length fourth pass", data2.length, data3.length);
  70. try {
  71. ze.removeExtraField(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
  72. fail("should be no such element");
  73. } catch (java.util.NoSuchElementException nse) {
  74. //TODO assert exception values
  75. }
  76. }
  77. /**
  78. * test handling of extra fields via central directory
  79. */
  80. @Test
  81. public void testExtraFieldMerging() {
  82. AsiExtraField a = new AsiExtraField();
  83. a.setDirectory(true);
  84. a.setMode(0755);
  85. UnrecognizedExtraField u = new UnrecognizedExtraField();
  86. u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
  87. u.setLocalFileDataData(new byte[0]);
  88. ZipEntry ze = new ZipEntry("test/");
  89. ze.setExtraFields(new ZipExtraField[] {a, u});
  90. // merge
  91. // Header-ID 1 + length 1 + one byte of data
  92. byte[] b = ExtraFieldUtilsTest.UNRECOGNIZED_HEADER.getBytes();
  93. ze.setCentralDirectoryExtra(new byte[] {b[0], b[1], 1, 0, 127});
  94. ZipExtraField[] result = ze.getExtraFields();
  95. assertEquals("first pass", 2, result.length);
  96. assertSame(a, result[0]);
  97. assertEquals(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER,
  98. result[1].getHeaderId());
  99. assertEquals(new ZipShort(0), result[1].getLocalFileDataLength());
  100. assertEquals(new ZipShort(1), result[1].getCentralDirectoryLength());
  101. // add new
  102. // Header-ID 2 + length 0
  103. ze.setCentralDirectoryExtra(new byte[] {2, 0, 0, 0});
  104. result = ze.getExtraFields();
  105. assertEquals("second pass", 3, result.length);
  106. // merge
  107. // Header-ID 2 + length 1 + one byte of data
  108. ze.setExtra(new byte[] {2, 0, 1, 0, 127});
  109. result = ze.getExtraFields();
  110. assertEquals("third pass", 3, result.length);
  111. assertSame(a, result[0]);
  112. assertEquals(new ZipShort(2), result[2].getHeaderId());
  113. assertEquals(new ZipShort(1), result[2].getLocalFileDataLength());
  114. assertEquals(new ZipShort(0), result[2].getCentralDirectoryLength());
  115. }
  116. /**
  117. * test handling of extra fields
  118. */
  119. @Test
  120. public void testAddAsFirstExtraField() {
  121. AsiExtraField a = new AsiExtraField();
  122. a.setDirectory(true);
  123. a.setMode(0755);
  124. UnrecognizedExtraField u = new UnrecognizedExtraField();
  125. u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
  126. u.setLocalFileDataData(new byte[0]);
  127. ZipEntry ze = new ZipEntry("test/");
  128. ze.setExtraFields(new ZipExtraField[] {a, u});
  129. byte[] data1 = ze.getExtra();
  130. UnrecognizedExtraField u2 = new UnrecognizedExtraField();
  131. u2.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
  132. u2.setLocalFileDataData(new byte[] {1});
  133. ze.addAsFirstExtraField(u2);
  134. byte[] data2 = ze.getExtra();
  135. ZipExtraField[] result = ze.getExtraFields();
  136. assertEquals("second pass", 2, result.length);
  137. assertSame(u2, result[0]);
  138. assertSame(a, result[1]);
  139. assertEquals("length second pass", data1.length + 1, data2.length);
  140. UnrecognizedExtraField u3 = new UnrecognizedExtraField();
  141. u3.setHeaderId(new ZipShort(2));
  142. u3.setLocalFileDataData(new byte[] {1});
  143. ze.addAsFirstExtraField(u3);
  144. result = ze.getExtraFields();
  145. assertEquals("third pass", 3, result.length);
  146. assertSame(u3, result[0]);
  147. assertSame(u2, result[1]);
  148. assertSame(a, result[2]);
  149. }
  150. @Test
  151. public void testUnixMode() {
  152. ZipEntry ze = new ZipEntry("foo");
  153. assertEquals(0, ze.getPlatform());
  154. ze.setUnixMode(0755);
  155. assertEquals(3, ze.getPlatform());
  156. assertEquals(0755,
  157. (ze.getExternalAttributes() >> 16) & 0xFFFF);
  158. assertEquals(0, ze.getExternalAttributes() & 0xFFFF);
  159. ze.setUnixMode(0444);
  160. assertEquals(3, ze.getPlatform());
  161. assertEquals(0444,
  162. (ze.getExternalAttributes() >> 16) & 0xFFFF);
  163. assertEquals(1, ze.getExternalAttributes() & 0xFFFF);
  164. ze = new ZipEntry("foo/");
  165. assertEquals(0, ze.getPlatform());
  166. ze.setUnixMode(0777);
  167. assertEquals(3, ze.getPlatform());
  168. assertEquals(0777,
  169. (ze.getExternalAttributes() >> 16) & 0xFFFF);
  170. assertEquals(0x10, ze.getExternalAttributes() & 0xFFFF);
  171. ze.setUnixMode(0577);
  172. assertEquals(3, ze.getPlatform());
  173. assertEquals(0577,
  174. (ze.getExternalAttributes() >> 16) & 0xFFFF);
  175. assertEquals(0x11, ze.getExternalAttributes() & 0xFFFF);
  176. }
  177. /**
  178. * Test case for
  179. * <a href="https://issues.apache.org/jira/browse/COMPRESS-94"
  180. * >COMPRESS-94</a>.
  181. */
  182. @Test
  183. public void testNotEquals() {
  184. ZipEntry entry1 = new ZipEntry("foo");
  185. ZipEntry entry2 = new ZipEntry("bar");
  186. assertFalse(entry1.equals(entry2));
  187. }
  188. @Test
  189. public void testCopyConstructor() throws Exception {
  190. ZipEntry archiveEntry = new ZipEntry("fred");
  191. archiveEntry.setUnixMode(0664);
  192. archiveEntry.setMethod(ZipEntry.DEFLATED);
  193. archiveEntry.getGeneralPurposeBit().useStrongEncryption(true);
  194. ZipEntry copy = new ZipEntry(archiveEntry);
  195. assertEquals(archiveEntry, copy);
  196. }
  197. }