diff options
author | 2018-07-09 08:41:53 -0700 | |
---|---|---|
committer | 2018-07-09 08:43:19 -0700 | |
commit | f0f5d101ddac1bce16b49fce828e85096c24bbfd (patch) | |
tree | 74a33191dd4dc6a00f6136d3a96e99ddf9ee7d46 /src/test/java/com/google | |
parent | 2f0033a6a314da8bf22eed6e08ef9d7cbb5d8ff1 (diff) |
Bazel server, tools: ensure Readers are closed
Follow-up to commit 59f17d6e0550bf63a0b6ef182e2d63474e058ede.
Use try-with-resources to ensure Reader objects
are closed eagerly.
Eagerly closing Readers avoids hanging on to
file handles until the garbage collector finalizes
the object, meaning Bazel on Windows (and
other processes) can delete or mutate these files.
Hopefully this avoids intermittent file deletion
errors that sometimes occur on Windows.
See https://github.com/bazelbuild/bazel/issues/5512
RELNOTES: none
PiperOrigin-RevId: 203771262
Diffstat (limited to 'src/test/java/com/google')
4 files changed, 58 insertions, 52 deletions
diff --git a/src/test/java/com/google/devtools/build/android/AarGeneratorActionTest.java b/src/test/java/com/google/devtools/build/android/AarGeneratorActionTest.java index ae40dd3592..c5f5323376 100644 --- a/src/test/java/com/google/devtools/build/android/AarGeneratorActionTest.java +++ b/src/test/java/com/google/devtools/build/android/AarGeneratorActionTest.java @@ -730,14 +730,16 @@ public class AarGeneratorActionTest { aarData.proguardSpecs); Set<String> zipEntries = getZipEntries(aar); assertThat(zipEntries).contains("proguard.txt"); - ZipReader aarReader = new ZipReader(aar.toFile()); - List<String> proguardTxtContents = - new BufferedReader( - new InputStreamReader( - aarReader.getInputStream(aarReader.getEntry("proguard.txt")), - StandardCharsets.UTF_8)) - .lines() - .collect(Collectors.toList()); + List<String> proguardTxtContents = null; + try (ZipReader aarReader = new ZipReader(aar.toFile())) { + proguardTxtContents = + new BufferedReader( + new InputStreamReader( + aarReader.getInputStream(aarReader.getEntry("proguard.txt")), + StandardCharsets.UTF_8)) + .lines() + .collect(Collectors.toList()); + } assertThat(proguardTxtContents).containsExactly("foo", "bar", "baz").inOrder(); } } diff --git a/src/test/java/com/google/devtools/build/android/ziputils/SplitZipTest.java b/src/test/java/com/google/devtools/build/android/ziputils/SplitZipTest.java index 1794252a22..15f1461196 100644 --- a/src/test/java/com/google/devtools/build/android/ziputils/SplitZipTest.java +++ b/src/test/java/com/google/devtools/build/android/ziputils/SplitZipTest.java @@ -21,6 +21,7 @@ import com.google.common.base.Predicates; import com.google.common.collect.ImmutableSet; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; import java.util.Arrays; import java.util.Date; import org.junit.Before; @@ -423,15 +424,17 @@ public class SplitZipTest { String classFileList = "pkg1/test1.class\npkg2/test2.class\n"; fileSystem.addFile("main_dex_list.txt", classFileList); - new SplitZip() - .addOutput(new ZipOut(fileSystem.getOutputChannel("out/shard1.jar", false), - "out/shard1.jar")) - .addOutput(new ZipOut(fileSystem.getOutputChannel("out/shard2.jar", false), - "out/shard2.jar")) - .setMainClassListFile(fileSystem.getInputStream("main_dex_list.txt")) - .addInput(new ZipIn(fileSystem.getInputChannel("input.jar"), "input.jar")) - .run() - .close(); + try (InputStream mainDex = fileSystem.getInputStream("main_dex_list.txt")) { + new SplitZip() + .addOutput(new ZipOut(fileSystem.getOutputChannel("out/shard1.jar", false), + "out/shard1.jar")) + .addOutput(new ZipOut(fileSystem.getOutputChannel("out/shard2.jar", false), + "out/shard2.jar")) + .setMainClassListStreamForTesting(mainDex) + .addInput(new ZipIn(fileSystem.getInputChannel("input.jar"), "input.jar")) + .run() + .close(); + } new ZipFileBuilder() .add("pkg1/test1.class", "hello world") @@ -531,20 +534,22 @@ public class SplitZipTest { String classFileList = "pkg1/test1.class\npkg2/test2.class\n"; fileSystem.addFile("main_dex_list.txt", classFileList); - new SplitZip() - .addOutput(new ZipOut(fileSystem.getOutputChannel("out/shard1.jar", false), - "out/shard1.jar")) - .addOutput(new ZipOut(fileSystem.getOutputChannel("out/shard2.jar", false), - "out/shard2.jar")) - .setVerbose(true) - .setMainClassListFile(fileSystem.getInputStream("main_dex_list.txt")) - .addInput(new ZipIn(fileSystem.getInputChannel("input.jar"), "input.jar")) - .setInputFilter( - Predicates.in( - ImmutableSet.of("pkg1/test1.class", "pkg2/test1.class", "pkg3/test1.class"))) - .setSplitDexedClasses(true) - .run() - .close(); + try (InputStream mainDex = fileSystem.getInputStream("main_dex_list.txt")) { + new SplitZip() + .addOutput(new ZipOut(fileSystem.getOutputChannel("out/shard1.jar", false), + "out/shard1.jar")) + .addOutput(new ZipOut(fileSystem.getOutputChannel("out/shard2.jar", false), + "out/shard2.jar")) + .setVerbose(true) + .setMainClassListStreamForTesting(mainDex) + .addInput(new ZipIn(fileSystem.getInputChannel("input.jar"), "input.jar")) + .setInputFilter( + Predicates.in( + ImmutableSet.of("pkg1/test1.class", "pkg2/test1.class", "pkg3/test1.class"))) + .setSplitDexedClasses(true) + .run() + .close(); + } // 1st shard contains only main dex list classes also in the filter new ZipFileBuilder() diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/downloader/HashInputStreamTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/downloader/HashInputStreamTest.java index c1e14df907..3c97cf30f7 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/repository/downloader/HashInputStreamTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/downloader/HashInputStreamTest.java @@ -39,29 +39,30 @@ public class HashInputStreamTest { @Test public void validChecksum_readsOk() throws Exception { - assertThat( - CharStreams.toString( - new InputStreamReader( - new HashInputStream( - new ByteArrayInputStream("hello".getBytes(UTF_8)), - Hashing.sha1(), - HashCode.fromString("aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d")), - UTF_8))) - .isEqualTo("hello"); + try (InputStreamReader reader = + new InputStreamReader( + new HashInputStream( + new ByteArrayInputStream("hello".getBytes(UTF_8)), + Hashing.sha1(), + HashCode.fromString("aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d")), + UTF_8)) { + assertThat(CharStreams.toString(reader)).isEqualTo("hello"); + } } @Test public void badChecksum_throwsIOException() throws Exception { thrown.expect(IOException.class); thrown.expectMessage("Checksum"); - assertThat( - CharStreams.toString( - new InputStreamReader( - new HashInputStream( - new ByteArrayInputStream("hello".getBytes(UTF_8)), - Hashing.sha1(), - HashCode.fromString("0000000000000000000000000000000000000000")), - UTF_8))) - .isNull(); // Only here to make @CheckReturnValue happy. + try (InputStreamReader reader = + new InputStreamReader( + new HashInputStream( + new ByteArrayInputStream("hello".getBytes(UTF_8)), + Hashing.sha1(), + HashCode.fromString("0000000000000000000000000000000000000000")), + UTF_8)) { + assertThat(CharStreams.toString(reader)) + .isNull(); // Only here to make @CheckReturnValue happy. + } } } diff --git a/src/test/java/com/google/devtools/build/lib/buildeventstream/transports/JsonFormatFileTransportTest.java b/src/test/java/com/google/devtools/build/lib/buildeventstream/transports/JsonFormatFileTransportTest.java index 656f87c289..83ce626c22 100644 --- a/src/test/java/com/google/devtools/build/lib/buildeventstream/transports/JsonFormatFileTransportTest.java +++ b/src/test/java/com/google/devtools/build/lib/buildeventstream/transports/JsonFormatFileTransportTest.java @@ -29,7 +29,6 @@ import com.google.devtools.common.options.Options; import com.google.protobuf.util.JsonFormat; import java.io.File; import java.io.FileInputStream; -import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import org.junit.After; @@ -82,8 +81,7 @@ public class JsonFormatFileTransportTest { transport.sendBuildEvent(buildEvent, artifactGroupNamer); transport.close().get(); - try (InputStream in = new FileInputStream(output)) { - Reader reader = new InputStreamReader(in); + try (Reader reader = new InputStreamReader(new FileInputStream(output))) { JsonFormat.Parser parser = JsonFormat.parser(); BuildEventStreamProtos.BuildEvent.Builder builder = BuildEventStreamProtos.BuildEvent.newBuilder(); |