Add interest filters; additional tests
diff --git a/src/main/java/com/intel/jndn/mock/MockFace.java b/src/main/java/com/intel/jndn/mock/MockFace.java
index 878040f..34b8206 100644
--- a/src/main/java/com/intel/jndn/mock/MockFace.java
+++ b/src/main/java/com/intel/jndn/mock/MockFace.java
@@ -283,12 +283,12 @@
 
   @Override
   public long setInterestFilter(InterestFilter filter, OnInterestCallback onInterest) {
-    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    return node_.setInterestFilter(filter, onInterest, this);
   }
 
   @Override
   public void unsetInterestFilter(long interestFilterId) {
-    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    node_.unsetInterestFilter(interestFilterId);
   }
 
   @Override
diff --git a/src/main/java/com/intel/jndn/mock/MockTransport.java b/src/main/java/com/intel/jndn/mock/MockTransport.java
index 0079196..2db422b 100644
--- a/src/main/java/com/intel/jndn/mock/MockTransport.java
+++ b/src/main/java/com/intel/jndn/mock/MockTransport.java
@@ -37,7 +37,7 @@
   private static final Logger logger = Logger.getLogger(MockTransport.class.getName());
   protected boolean connected;
   protected ElementReader elementReader;
-  protected ByteBuffer buffer = ByteBuffer.allocate(BUFFER_CAPACITY);
+  private ByteBuffer buffer = ByteBuffer.allocate(BUFFER_CAPACITY);
   protected ByteBuffer sentBuffer = ByteBuffer.allocate(BUFFER_CAPACITY);
   protected List<Data> sentDataPackets = new ArrayList<>();
   protected List<Interest> sentInterestPackets = new ArrayList<>();
@@ -215,12 +215,34 @@
     logger.finer(String.format("Processing buffer (position: %s, limit: %s, capacity: %s): %s", buffer.position(), buffer.limit(), buffer.capacity(), Arrays.toString(buffer.array())));
 
     // pass data up to face
-    buffer.limit(buffer.position());
-    buffer.position(0);
-    elementReader.onReceivedData(buffer);
-
+    ByteBuffer temp = copy(buffer);
+    temp.flip();
+    
     // reset buffer
     buffer = ByteBuffer.allocate(BUFFER_CAPACITY);
+    
+    elementReader.onReceivedData(temp);
+  }
+  
+  /**
+   * Copy one buffer to a new buffer, preserving the source buffer's position
+   * and limit.
+   * @param source the source buffer
+   * @return a copied buffer
+   */
+  private ByteBuffer copy(ByteBuffer source){
+    ByteBuffer dest = ByteBuffer.allocate(source.capacity());
+    
+    int saveLimit = source.limit();
+    int savePosition = source.position();
+    source.flip();
+    
+    dest.put(source);
+    
+    source.limit(saveLimit);
+    source.position(savePosition);
+    
+    return dest;
   }
 
   /**