aboutsummaryrefslogtreecommitdiffstats
path: root/filedistribution
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-01-30 09:33:06 +0100
committerHarald Musum <musum@oath.com>2018-01-30 09:33:06 +0100
commit9869141c46d299e84ac9285a3ee575e49cb1970a (patch)
treeb40990015d6fb48059654c3ba2fcd66a3c34ea17 /filedistribution
parent0e6ec009fcce1796b4d9ad0ad7accaa403221930 (diff)
Fix bug where nextContent() always returned all data
Diffstat (limited to 'filedistribution')
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDataBlob.java11
-rw-r--r--filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileReferenceDataTest.java28
2 files changed, 37 insertions, 2 deletions
diff --git a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDataBlob.java b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDataBlob.java
index f0db12a45fc..c22770395d3 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDataBlob.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDataBlob.java
@@ -9,6 +9,7 @@ import java.nio.ByteBuffer;
public class FileReferenceDataBlob extends FileReferenceData {
private final byte[] content;
private final long xxhash;
+ private boolean contentRead = false;
public FileReferenceDataBlob(FileReference fileReference, String filename, Type type, byte[] content) {
this(fileReference, filename, type, content, XXHashFactory.fastestInstance().hash64().hash(ByteBuffer.wrap(content), 0));
@@ -27,10 +28,16 @@ public class FileReferenceDataBlob extends FileReferenceData {
public ByteBuffer content() {
return ByteBuffer.wrap(content);
}
+
@Override
public int nextContent(ByteBuffer bb) {
- bb.put(content);
- return content.length;
+ if (contentRead) {
+ return -1;
+ } else {
+ contentRead = true;
+ bb.put(content);
+ return content.length;
+ }
}
@Override
diff --git a/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileReferenceDataTest.java b/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileReferenceDataTest.java
new file mode 100644
index 00000000000..0b85def5809
--- /dev/null
+++ b/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileReferenceDataTest.java
@@ -0,0 +1,28 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.filedistribution;
+
+import com.yahoo.config.FileReference;
+import com.yahoo.text.Utf8;
+import org.junit.Test;
+
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+
+import static org.junit.Assert.assertEquals;
+
+public class FileReferenceDataTest {
+
+ @Test
+ public void testDataBlob() {
+ String content = "blob";
+ FileReferenceData fileReferenceData =
+ new FileReferenceDataBlob(new FileReference("ref"), "foo", FileReferenceData.Type.compressed, Utf8.toBytes(content));
+ ByteBuffer byteBuffer = ByteBuffer.allocate(100);
+ assertEquals(4, fileReferenceData.nextContent(byteBuffer));
+ assertEquals(content, Utf8.toString(Arrays.copyOfRange(byteBuffer.array(), 0, 4)));
+
+ // nextContent() will always return everything for FileReferenceDataBlob, so nothing more should be read
+ assertEquals(-1, fileReferenceData.nextContent(byteBuffer));
+ }
+
+}