Fix buffer handling; decrease logger verbosity
diff --git a/src/main/java/com/intel/jndn/mock/MockTransport.java b/src/main/java/com/intel/jndn/mock/MockTransport.java
index ee9c4e3..f8ed15e 100644
--- a/src/main/java/com/intel/jndn/mock/MockTransport.java
+++ b/src/main/java/com/intel/jndn/mock/MockTransport.java
@@ -13,6 +13,7 @@
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import net.named_data.jndn.Data;
import net.named_data.jndn.encoding.ElementListener;
@@ -47,15 +48,15 @@
}
/**
- *
+ *
*/
public void clear() {
throw new UnsupportedOperationException("Not supported yet.");
}
/**
- *
- * @return
+ *
+ * @return
*/
public List<Data> getSentDataPackets() {
return outputPackets;
@@ -113,7 +114,7 @@
@Override
public void send(ByteBuffer data) throws IOException {
logger.debug("Sending " + (data.capacity() - data.position()) + " bytes");
-
+
// add to sent bytes
outputBuffer.put(data);
data.flip();
@@ -142,11 +143,15 @@
return;
}
+ logger.trace(String.format("Sending buffer (position: %s, limit: %s, capacity: %s): %s", inputBuffer.position(), inputBuffer.limit(), inputBuffer.capacity(), Arrays.toString(inputBuffer.array())));
+
// pass data up to face
- inputBuffer.limit(inputBuffer.capacity());
+ inputBuffer.limit(inputBuffer.position());
inputBuffer.position(0);
elementReader.onReceivedData(inputBuffer);
+ logger.trace(String.format("Sending buffer (position: %s, limit: %s, capacity: %s): %s", inputBuffer.position(), inputBuffer.limit(), inputBuffer.capacity(), Arrays.toString(inputBuffer.array())));
+
// reset buffer
inputBuffer = ByteBuffer.allocate(BUFFER_CAPACITY);
}
diff --git a/src/main/resources/log4j2-test.xml b/src/main/resources/log4j2-test.xml
index 9e29cc3..602b5ab 100644
--- a/src/main/resources/log4j2-test.xml
+++ b/src/main/resources/log4j2-test.xml
@@ -6,7 +6,7 @@
</Console>
</Appenders>
<Loggers>
- <Root level="trace">
+ <Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
index 8f7a167..0dac33a 100644
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
@@ -6,7 +6,7 @@
</Console>
</Appenders>
<Loggers>
- <Root level="error">
+ <Root level="warn">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
diff --git a/src/test/java/com/intel/jndn/mock/MockTransportTest.java b/src/test/java/com/intel/jndn/mock/MockTransportTest.java
index bf5afd1..300c081 100644
--- a/src/test/java/com/intel/jndn/mock/MockTransportTest.java
+++ b/src/test/java/com/intel/jndn/mock/MockTransportTest.java
@@ -15,6 +15,7 @@
import net.named_data.jndn.Interest;
import net.named_data.jndn.Name;
import net.named_data.jndn.OnData;
+import net.named_data.jndn.OnTimeout;
import net.named_data.jndn.encoding.EncodingException;
import net.named_data.jndn.util.Blob;
import org.apache.logging.log4j.LogManager;
@@ -65,6 +66,65 @@
}
}
+
+ /**
+ * Test sending multiple Datas
+ * @throws java.io.IOException
+ * @throws net.named_data.jndn.encoding.EncodingException
+ */
+ @Test
+ public void testSendMultipleData() throws IOException, EncodingException {
+ MockTransport transport = new MockTransport();
+ Face face = new Face(transport, null);
+
+ // setup return data
+ Data response1 = new Data(new Name("/a/b/c/1"));
+ response1.setContent(new Blob("..."));
+ transport.respondWith(response1);
+ Data response2 = new Data(new Name("/a/b/c/2"));
+ response2.setContent(new Blob("..."));
+ transport.respondWith(response2);
+
+ // express interest on the face
+ final Counter count = new Counter();
+ face.expressInterest(new Interest(new Name("/a/b/c/1")), new OnData() {
+ @Override
+ public void onData(Interest interest, Data data) {
+ count.inc();
+ logger.debug("Received data");
+ assertEquals(data.getContent().buf(), new Blob("...").buf());
+ }
+ });
+
+ while(count.get() == 0){
+ face.processEvents();
+ }
+
+ // express interest again, but this time it should time out because there
+ // is no data left on the wire; the first processEvents() has already
+ // picked it up
+ final Counter count2 = new Counter();
+ Interest failingInterest = new Interest(new Name("/a/b/c/2"));
+ failingInterest.setInterestLifetimeMilliseconds(50);
+ face.expressInterest(failingInterest, new OnData() {
+ @Override
+ public void onData(Interest interest, Data data) {
+ count2.inc();
+ fail("Should not return data; data should already be cleared");
+ }
+ }, new OnTimeout(){
+ @Override
+ public void onTimeout(Interest interest) {
+ count2.inc();
+ assertTrue(true);
+ }
+ });
+
+ while(count2.get() == 0){
+ face.processEvents();
+ }
+ }
+
/**
* Count reference
*/