Add MeasurableFace API

TODO add to MockFace
diff --git a/src/main/java/com/intel/jndn/mock/MeasurableFace.java b/src/main/java/com/intel/jndn/mock/MeasurableFace.java
new file mode 100644
index 0000000..c08fae8
--- /dev/null
+++ b/src/main/java/com/intel/jndn/mock/MeasurableFace.java
@@ -0,0 +1,16 @@
+package com.intel.jndn.mock;
+
+import net.named_data.jndn.Data;
+import net.named_data.jndn.Interest;
+
+import java.util.Collection;
+
+/**
+ * @author Andrew Brown, andrew.brown@intel.com
+ */
+public interface MeasurableFace {
+  Collection<Interest> sentInterests();
+  Collection<Data> sentDatas();
+  Collection<Interest> receivedInterests();
+  Collection<Data> receivedDatas();
+}
diff --git a/src/main/java/com/intel/jndn/mock/MockForwarder.java b/src/main/java/com/intel/jndn/mock/MockForwarder.java
index dffc321..0b6b95d 100644
--- a/src/main/java/com/intel/jndn/mock/MockForwarder.java
+++ b/src/main/java/com/intel/jndn/mock/MockForwarder.java
@@ -10,11 +10,18 @@
 import net.named_data.jndn.ForwardingFlags;
 import net.named_data.jndn.Interest;
 import net.named_data.jndn.Name;
+import net.named_data.jndn.OnData;
+import net.named_data.jndn.OnNetworkNack;
+import net.named_data.jndn.OnTimeout;
+import net.named_data.jndn.encoding.WireFormat;
 import net.named_data.jndn.security.KeyChain;
 import net.named_data.jndn.security.SecurityException;
 import net.named_data.jndn.transport.Transport;
 
+import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.logging.Logger;
 
 /**
@@ -140,7 +147,12 @@
     fib.add(registrationEntry);
   }
 
-  private class MockForwarderFace extends Face {
+  private class MockForwarderFace extends Face implements MeasurableFace {
+    Collection<Interest> sentInterests = new ArrayList<>();
+    Collection<Data> sentDatas = new ArrayList<>();
+    Collection<Interest> receivedInterests = new ArrayList<>();
+    Collection<Data> receivedDatas = new ArrayList<>();
+
     MockForwarderFace() {
       super(new MockTransport(), null);
       MockTransport transport = (MockTransport) node_.getTransport();
@@ -150,5 +162,39 @@
     Transport getTransport() {
       return node_.getTransport();
     }
+
+    @Override
+    public long expressInterest(Interest interest, OnData onData, OnTimeout onTimeout,
+                                OnNetworkNack onNetworkNack, WireFormat wireFormat) throws IOException {
+      sentInterests.add(interest);
+      return super.expressInterest(interest, onData, onTimeout, onNetworkNack, wireFormat);
+    }
+
+    @Override
+    public long expressInterest(Name name, Interest interestTemplate, OnData onData, OnTimeout onTimeout,
+                                OnNetworkNack onNetworkNack, WireFormat wireFormat) throws IOException {
+      sentInterests.add(getInterestCopy(name, interestTemplate));
+      return super.expressInterest(name, interestTemplate, onData, onTimeout, onNetworkNack, wireFormat);
+    }
+
+    @Override
+    public Collection<Interest> sentInterests() {
+      return Collections.unmodifiableCollection(sentInterests);
+    }
+
+    @Override
+    public Collection<Data> sentDatas() {
+      return Collections.unmodifiableCollection(sentDatas);
+    }
+
+    @Override
+    public Collection<Interest> receivedInterests() {
+      return Collections.unmodifiableCollection(receivedInterests);
+    }
+
+    @Override
+    public Collection<Data> receivedDatas() {
+      return Collections.unmodifiableCollection(receivedDatas);
+    }
   }
 }