Skip to content

Commit 26de9e2

Browse files
author
Eirik Bjørsnøs
committedJan 11, 2024
8321616: Retire binary test vectors in test/jdk/java/util/zip/ZipFile
8322830: Add test case for ZipFile opening a ZIP with no entries Reviewed-by: lancea
1 parent b530c02 commit 26de9e2

14 files changed

+837
-555
lines changed
 

‎test/jdk/java/util/zip/CopyZipFile.java

+178-113
Large diffs are not rendered by default.

‎test/jdk/java/util/zip/ZipFile/Available.java

-37
This file was deleted.

‎test/jdk/java/util/zip/ZipFile/CopyJar.java

-48
This file was deleted.

‎test/jdk/java/util/zip/ZipFile/EnumAfterClose.java

-49
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
/*
2+
* Copyright (c) 2000, 2024, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation.
8+
*
9+
* This code is distributed in the hope that it will be useful, but WITHOUT
10+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
* version 2 for more details (a copy is included in the LICENSE file that
13+
* accompanied this code).
14+
*
15+
* You should have received a copy of the GNU General Public License version
16+
* 2 along with this work; if not, write to the Free Software Foundation,
17+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18+
*
19+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20+
* or visit www.oracle.com if you need additional information or have any
21+
* questions.
22+
*/
23+
24+
/* @test
25+
@bug 4290060
26+
@summary Check if the zip file is closed before access any
27+
elements in the Enumeration.
28+
@run junit EnumerateAfterClose
29+
*/
30+
31+
import org.junit.jupiter.api.AfterEach;
32+
import org.junit.jupiter.api.BeforeEach;
33+
import org.junit.jupiter.api.Test;
34+
35+
import java.io.IOException;
36+
import java.io.OutputStream;
37+
import java.nio.charset.StandardCharsets;
38+
import java.nio.file.Files;
39+
import java.nio.file.Path;
40+
import java.util.Enumeration;
41+
import java.util.zip.ZipEntry;
42+
import java.util.zip.ZipFile;
43+
import java.util.zip.ZipOutputStream;
44+
45+
import static org.junit.jupiter.api.Assertions.assertThrows;
46+
47+
public class EnumerateAfterClose {
48+
49+
// ZIP file used in this test
50+
private Path zip = Path.of("enum-after-close.zip");
51+
52+
/**
53+
* Create a sample ZIP file for use by this test
54+
* @throws IOException if an unexpected IOException occurs
55+
*/
56+
@BeforeEach
57+
public void setUp() throws IOException {
58+
try (OutputStream out = Files.newOutputStream(zip);
59+
ZipOutputStream zo = new ZipOutputStream(out)) {
60+
zo.putNextEntry(new ZipEntry("file.txt"));
61+
zo.write("hello".getBytes(StandardCharsets.UTF_8));
62+
}
63+
}
64+
65+
/**
66+
* Delete the ZIP file produced by this test
67+
* @throws IOException if an unexpected IOException occurs
68+
*/
69+
@AfterEach
70+
public void cleanup() throws IOException {
71+
Files.deleteIfExists(zip);
72+
}
73+
74+
/**
75+
* Attempting to using a ZipEntry Enumeration after its backing
76+
* ZipFile is closed should throw IllegalStateException.
77+
*
78+
* @throws IOException if an unexpected IOException occurs
79+
*/
80+
@Test
81+
public void enumeratingAfterCloseShouldThrowISE() throws IOException {
82+
// Retain a reference to an enumeration backed by a closed ZipFile
83+
Enumeration e;
84+
try (ZipFile zf = new ZipFile(zip.toFile())) {
85+
e = zf.entries();
86+
}
87+
// Using the enumeration after the ZipFile is closed should throw ISE
88+
assertThrows(IllegalStateException.class, () -> {
89+
if (e.hasMoreElements()) {
90+
ZipEntry ze = (ZipEntry)e.nextElement();
91+
}
92+
});
93+
}
94+
}

‎test/jdk/java/util/zip/ZipFile/FinalizeInflater.java

+53-14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -24,20 +24,64 @@
2424
/* @test
2525
@bug 7003462
2626
@summary Make sure cached Inflater does not get finalized.
27+
@run junit FinalizeInflater
2728
*/
2829

29-
import java.io.File;
30-
import java.io.InputStream;
30+
import org.junit.jupiter.api.AfterEach;
31+
import org.junit.jupiter.api.BeforeEach;
32+
import org.junit.jupiter.api.Test;
33+
3134
import java.io.IOException;
35+
import java.io.InputStream;
36+
import java.io.OutputStream;
37+
import java.nio.charset.StandardCharsets;
38+
import java.nio.file.Files;
39+
import java.nio.file.Path;
3240
import java.util.zip.ZipEntry;
3341
import java.util.zip.ZipFile;
42+
import java.util.zip.ZipOutputStream;
3443

3544
public class FinalizeInflater {
3645

37-
public static void main(String[] args) throws Throwable {
38-
try (ZipFile zf = new ZipFile(new File(System.getProperty("test.src", "."), "input.zip")))
39-
{
40-
ZipEntry ze = zf.getEntry("ReadZip.java");
46+
// ZIP file produced by this test
47+
private Path zip = Path.of("finalize-inflater.zip");
48+
49+
/**
50+
* Create the sample ZIP used in this test
51+
*
52+
* @throws IOException if an unexpected IOException occurs
53+
*/
54+
@BeforeEach
55+
public void setUp() throws IOException {
56+
try (OutputStream out = Files.newOutputStream(zip);
57+
ZipOutputStream zo = new ZipOutputStream(out)) {
58+
zo.putNextEntry(new ZipEntry("file.txt"));
59+
byte[] hello = "hello".getBytes(StandardCharsets.UTF_8);
60+
for (int i = 0; i < 100; i++) {
61+
zo.write(hello);
62+
}
63+
}
64+
}
65+
66+
/**
67+
* Delete the ZIP file produced by this test
68+
*
69+
* @throws IOException if an unexpected IOException occurs
70+
*/
71+
@AfterEach
72+
public void cleanup() throws IOException {
73+
Files.deleteIfExists(zip);
74+
}
75+
76+
/**
77+
* A cached Inflater should not be made invalid by finalization
78+
*
79+
* @throws IOException if an unexpected IOException occurs
80+
*/
81+
@Test
82+
public void shouldNotFinalizeInflaterInPool() throws IOException {
83+
try (ZipFile zf = new ZipFile(zip.toFile())) {
84+
ZipEntry ze = zf.getEntry("file.txt");
4185
read(zf.getInputStream(ze));
4286
System.gc();
4387
System.runFinalization();
@@ -51,15 +95,10 @@ private static void read(InputStream is)
5195
throws IOException
5296
{
5397
Wrapper wrapper = new Wrapper(is);
54-
byte[] buffer = new byte[32];
55-
try {
56-
while(is.read(buffer)>0){}
57-
} catch (IOException ioe) {
58-
ioe.printStackTrace();
59-
}
98+
is.readAllBytes();
6099
}
61100

62-
static class Wrapper{
101+
static class Wrapper {
63102
InputStream is;
64103
public Wrapper(InputStream is) {
65104
this.is = is;

‎test/jdk/java/util/zip/ZipFile/GetDirEntry.java

-43
This file was deleted.

0 commit comments

Comments
 (0)
Please sign in to comment.