aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com
diff options
context:
space:
mode:
authorGravatar buchgr <buchgr@google.com>2017-07-14 19:05:36 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-07-17 10:10:53 +0200
commitc2665efd387e73b369d156bc0459311ca19fce2a (patch)
tree4d34c58e6c7c15c3a3122b56aa62c9e599709a4f /src/test/java/com
parentd4cc4b6fec1d4a6c2f478628a8a985bcf6502253 (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.java31
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();