diff options
author | 2017-07-14 19:05:36 +0200 | |
---|---|---|
committer | 2017-07-17 10:10:53 +0200 | |
commit | c2665efd387e73b369d156bc0459311ca19fce2a (patch) | |
tree | 4d34c58e6c7c15c3a3122b56aa62c9e599709a4f /src/test/java/com | |
parent | d4cc4b6fec1d4a6c2f478628a8a985bcf6502253 (diff) |
remote: Chunker.reset() should release resources.
RELNOTES: None.
PiperOrigin-RevId: 161970540
Diffstat (limited to 'src/test/java/com')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/remote/ChunkerTest.java | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/remote/ChunkerTest.java b/src/test/java/com/google/devtools/build/lib/remote/ChunkerTest.java index 110dd6dd8d..fd0cbade33 100644 --- a/src/test/java/com/google/devtools/build/lib/remote/ChunkerTest.java +++ b/src/test/java/com/google/devtools/build/lib/remote/ChunkerTest.java @@ -19,13 +19,18 @@ import static junit.framework.TestCase.fail; import com.google.devtools.build.lib.remote.Chunker.Chunk; import com.google.devtools.remoteexecution.v1test.Digest; import com.google.protobuf.ByteString; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.NoSuchElementException; import java.util.Random; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Supplier; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.mockito.Mockito; /** Tests for {@link Chunker}. */ @RunWith(JUnit4.class) @@ -128,6 +133,32 @@ public class ChunkerTest { assertNextEquals(chunker, (byte) 1); } + @Test + public void resourcesShouldBeReleased() throws IOException { + // Test that after having consumed all data or after reset() is called (whatever happens first) + // the underlying InputStream should be closed. + + byte[] data = new byte[] {1, 2}; + final AtomicReference<InputStream> in = new AtomicReference<>(); + Supplier<InputStream> supplier = () -> { + in.set(Mockito.spy(new ByteArrayInputStream(data))); + return in.get(); + }; + Digest digest = Digests.computeDigest(data); + + Chunker chunker = new Chunker(supplier, digest, 1); + assertThat(in.get()).isNull(); + assertNextEquals(chunker, (byte) 1); + Mockito.verify(in.get(), Mockito.never()).close(); + assertNextEquals(chunker, (byte) 2); + Mockito.verify(in.get()).close(); + + chunker.reset(); + chunker.next(); + chunker.reset(); + Mockito.verify(in.get()).close(); + } + private void assertNextEquals(Chunker chunker, byte... data) throws IOException { assertThat(chunker.hasNext()).isTrue(); ByteString next = chunker.next().getData(); |