diff --git a/utils/junit/BUCK b/utils/junit/BUCK
index c2fea21..cf8c29a 100644
--- a/utils/junit/BUCK
+++ b/utils/junit/BUCK
@@ -2,6 +2,7 @@
     '//lib:junit',
     '//lib:hamcrest-all',
     '//lib:guava',
+    '//lib:slf4j-api',
 ]
 
 TEST_DEPS = [
diff --git a/utils/junit/src/main/java/org/onlab/junit/HttpResourceUrlInterceptor.java b/utils/junit/src/main/java/org/onlab/junit/HttpResourceUrlInterceptor.java
new file mode 100644
index 0000000..045fd4c
--- /dev/null
+++ b/utils/junit/src/main/java/org/onlab/junit/HttpResourceUrlInterceptor.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onlab.junit;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+import java.net.URLStreamHandlerFactory;
+
+/**
+ * Intercepts HTTP URL connections and supplies predefined data from a resource. Used for supplying data to HTTP
+ * connections in unit tests.
+ */
+public class HttpResourceUrlInterceptor {
+
+    /**
+     * Handles creation of HTTP Connections to the resource data.
+     */
+    private static class HttpResourceUrlInterceptorHandler extends URLStreamHandler {
+
+        String resourceName;
+
+        HttpResourceUrlInterceptorHandler(String resourceName) {
+            this.resourceName = resourceName;
+        }
+
+        @Override
+        protected URLConnection openConnection(URL u) throws IOException {
+            return new InterceptedHttpUrlConnection(u, resourceName);
+        }
+    }
+
+    /**
+     * Creates stream handlers for the interceptor.
+     */
+    public static class HttpResourceUrlInterceptorFactory implements URLStreamHandlerFactory {
+
+        String resourceName;
+
+        public HttpResourceUrlInterceptorFactory(String resourceName) {
+            this.resourceName = resourceName;
+        }
+
+        @Override
+        public URLStreamHandler createURLStreamHandler(String protocol) {
+            return new HttpResourceUrlInterceptorHandler(resourceName);
+        }
+    }
+
+    /**
+     * HTTP Url Connection that is backed by the data in the resource.
+     */
+    private static final class InterceptedHttpUrlConnection extends HttpURLConnection {
+
+        private final String resourceName;
+
+        private InterceptedHttpUrlConnection(URL url, String resourceName) {
+            super(url);
+            this.resourceName = resourceName;
+        }
+
+        @Override
+        public int getResponseCode() {
+            return HTTP_OK;
+        }
+
+        @Override
+        public boolean usingProxy() {
+            return false;
+        }
+
+        @Override
+        public void disconnect() {
+            // noop
+        }
+
+        @Override
+        public void connect() {
+            // noop
+        }
+
+        @Override
+        public InputStream getInputStream() throws IOException {
+            return this.getClass().getResource(resourceName).openStream();
+        }
+
+    }
+}
+
+
diff --git a/utils/junit/src/main/java/org/onlab/junit/LoggerAdapter.java b/utils/junit/src/main/java/org/onlab/junit/LoggerAdapter.java
new file mode 100644
index 0000000..5e4f635e
--- /dev/null
+++ b/utils/junit/src/main/java/org/onlab/junit/LoggerAdapter.java
@@ -0,0 +1,327 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onlab.junit;
+
+import org.slf4j.Logger;
+import org.slf4j.Marker;
+
+public class LoggerAdapter implements Logger {
+    @Override
+    public String getName() {
+        return "Adapter";
+    }
+
+    @Override
+    public boolean isTraceEnabled() {
+        return false;
+    }
+
+    @Override
+    public void trace(String s) {
+
+    }
+
+    @Override
+    public void trace(String s, Object o) {
+
+    }
+
+    @Override
+    public void trace(String s, Object o, Object o1) {
+
+    }
+
+    @Override
+    public void trace(String s, Object... objects) {
+
+    }
+
+    @Override
+    public void trace(String s, Throwable throwable) {
+
+    }
+
+    @Override
+    public boolean isTraceEnabled(Marker marker) {
+        return false;
+    }
+
+    @Override
+    public void trace(Marker marker, String s) {
+
+    }
+
+    @Override
+    public void trace(Marker marker, String s, Object o) {
+
+    }
+
+    @Override
+    public void trace(Marker marker, String s, Object o, Object o1) {
+
+    }
+
+    @Override
+    public void trace(Marker marker, String s, Object... objects) {
+
+    }
+
+    @Override
+    public void trace(Marker marker, String s, Throwable throwable) {
+
+    }
+
+    @Override
+    public boolean isDebugEnabled() {
+        return false;
+    }
+
+    @Override
+    public void debug(String s) {
+
+    }
+
+    @Override
+    public void debug(String s, Object o) {
+
+    }
+
+    @Override
+    public void debug(String s, Object o, Object o1) {
+
+    }
+
+    @Override
+    public void debug(String s, Object... objects) {
+
+    }
+
+    @Override
+    public void debug(String s, Throwable throwable) {
+
+    }
+
+    @Override
+    public boolean isDebugEnabled(Marker marker) {
+        return false;
+    }
+
+    @Override
+    public void debug(Marker marker, String s) {
+
+    }
+
+    @Override
+    public void debug(Marker marker, String s, Object o) {
+
+    }
+
+    @Override
+    public void debug(Marker marker, String s, Object o, Object o1) {
+
+    }
+
+    @Override
+    public void debug(Marker marker, String s, Object... objects) {
+
+    }
+
+    @Override
+    public void debug(Marker marker, String s, Throwable throwable) {
+
+    }
+
+    @Override
+    public boolean isInfoEnabled() {
+        return false;
+    }
+
+    @Override
+    public void info(String s) {
+
+    }
+
+    @Override
+    public void info(String s, Object o) {
+
+    }
+
+    @Override
+    public void info(String s, Object o, Object o1) {
+
+    }
+
+    @Override
+    public void info(String s, Object... objects) {
+
+    }
+
+    @Override
+    public void info(String s, Throwable throwable) {
+
+    }
+
+    @Override
+    public boolean isInfoEnabled(Marker marker) {
+        return false;
+    }
+
+    @Override
+    public void info(Marker marker, String s) {
+
+    }
+
+    @Override
+    public void info(Marker marker, String s, Object o) {
+
+    }
+
+    @Override
+    public void info(Marker marker, String s, Object o, Object o1) {
+
+    }
+
+    @Override
+    public void info(Marker marker, String s, Object... objects) {
+
+    }
+
+    @Override
+    public void info(Marker marker, String s, Throwable throwable) {
+
+    }
+
+    @Override
+    public boolean isWarnEnabled() {
+        return false;
+    }
+
+    @Override
+    public void warn(String s) {
+
+    }
+
+    @Override
+    public void warn(String s, Object o) {
+
+    }
+
+    @Override
+    public void warn(String s, Object... objects) {
+
+    }
+
+    @Override
+    public void warn(String s, Object o, Object o1) {
+
+    }
+
+    @Override
+    public void warn(String s, Throwable throwable) {
+
+    }
+
+    @Override
+    public boolean isWarnEnabled(Marker marker) {
+        return false;
+    }
+
+    @Override
+    public void warn(Marker marker, String s) {
+
+    }
+
+    @Override
+    public void warn(Marker marker, String s, Object o) {
+
+    }
+
+    @Override
+    public void warn(Marker marker, String s, Object o, Object o1) {
+
+    }
+
+    @Override
+    public void warn(Marker marker, String s, Object... objects) {
+
+    }
+
+    @Override
+    public void warn(Marker marker, String s, Throwable throwable) {
+
+    }
+
+    @Override
+    public boolean isErrorEnabled() {
+        return false;
+    }
+
+    @Override
+    public void error(String s) {
+
+    }
+
+    @Override
+    public void error(String s, Object o) {
+
+    }
+
+    @Override
+    public void error(String s, Object o, Object o1) {
+
+    }
+
+    @Override
+    public void error(String s, Object... objects) {
+
+    }
+
+    @Override
+    public void error(String s, Throwable throwable) {
+
+    }
+
+    @Override
+    public boolean isErrorEnabled(Marker marker) {
+        return false;
+    }
+
+    @Override
+    public void error(Marker marker, String s) {
+
+    }
+
+    @Override
+    public void error(Marker marker, String s, Object o) {
+
+    }
+
+    @Override
+    public void error(Marker marker, String s, Object o, Object o1) {
+
+    }
+
+    @Override
+    public void error(Marker marker, String s, Object... objects) {
+
+    }
+
+    @Override
+    public void error(Marker marker, String s, Throwable throwable) {
+
+    }
+}
diff --git a/utils/junit/src/main/resources/org/onlab/junit/cluster-info.json b/utils/junit/src/main/resources/org/onlab/junit/cluster-info.json
new file mode 100644
index 0000000..152635b
--- /dev/null
+++ b/utils/junit/src/main/resources/org/onlab/junit/cluster-info.json
@@ -0,0 +1,18 @@
+{
+  "nodes": [
+    {
+      "ip": "10.128.11.141",
+      "id": "10.128.11.141",
+      "port": 9876
+    }
+  ],
+  "name": "MyCluster",
+  "partitions": [
+    {
+      "id": 1,
+      "members": [
+        "10.128.11.141"
+      ]
+    }
+  ]
+}
