diff --git a/core/api/src/test/java/org/onosproject/store/service/TestConsistentMultimap.java b/core/api/src/test/java/org/onosproject/store/service/TestConsistentMultimap.java
new file mode 100644
index 0000000..6bf6602
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/store/service/TestConsistentMultimap.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.onosproject.store.service;
+
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Multiset;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * Implementation to test ConsistentMultimap. Very limited.
+ * No listener notification. Some methods (still not required) not implemented.
+ * @param <K> the key type
+ * @param <V> the value type
+ */
+public class TestConsistentMultimap<K, V> implements ConsistentMultimap<K, V> {
+
+    private String name;
+    private HashMultimap<K, Versioned<V>> innermap;
+    private AtomicLong counter = new AtomicLong();
+
+    public TestConsistentMultimap() {
+        this.innermap = HashMultimap.create();
+    }
+
+    private Versioned<V> version(V v) {
+        return new Versioned<>(v, counter.incrementAndGet(), System.currentTimeMillis());
+    }
+
+    @Override
+    public int size() {
+        return innermap.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return innermap.isEmpty();
+    }
+
+    @Override
+    public boolean containsKey(K key) {
+        return innermap.containsKey(key);
+    }
+
+    @Override
+    public boolean containsValue(V value) {
+        return innermap.containsValue(value);
+    }
+
+    @Override
+    public boolean containsEntry(K key, V value) {
+        return innermap.containsEntry(key, value);
+    }
+
+    @Override
+    public boolean put(K key, V value) {
+        return innermap.put(key, version(value));
+    }
+
+    @Override
+    public boolean remove(K key, V value) {
+        return innermap.remove(key, value);
+    }
+
+    @Override
+    public boolean removeAll(K key, Collection<? extends V> values) {
+        return false;
+    }
+
+    @Override
+    public Versioned<Collection<? extends V>> removeAll(K key) {
+        return null;
+    }
+
+    @Override
+    public boolean putAll(K key, Collection<? extends V> values) {
+        return false;
+    }
+
+    @Override
+    public Versioned<Collection<? extends V>> replaceValues(K key, Collection<V> values) {
+        return null;
+    }
+
+    @Override
+    public void clear() {
+        innermap.clear();
+    }
+
+    @Override
+    public Versioned<Collection<? extends V>> get(K key) {
+        return (Versioned<Collection<? extends V>>) innermap.get(key);
+    }
+
+    @Override
+    public Set<K> keySet() {
+        return innermap.keySet();
+    }
+
+    @Override
+    public Multiset<K> keys() {
+        return innermap.keys();
+    }
+
+    @Override
+    public Multiset<V> values() {
+        return null;
+    }
+
+    @Override
+    public Collection<Map.Entry<K, V>> entries() {
+        return null;
+    }
+
+    @Override
+    public Map<K, Collection<V>> asMap() {
+        return null;
+    }
+
+    @Override
+    public String name() {
+        return this.name;
+    }
+
+    @Override
+    public Type primitiveType() {
+        return null;
+    }
+
+    public static TestConsistentMultimap.Builder builder() {
+        return new TestConsistentMultimap.Builder();
+    }
+
+    public static class Builder<K, V> extends ConsistentMultimapBuilder<K, V> {
+
+        @Override
+        public AsyncConsistentMultimap<K, V> buildMultimap() {
+            return null;
+        }
+
+        @Override
+        public ConsistentMultimap<K, V> build() {
+            return new TestConsistentMultimap<K, V>();
+        }
+    }
+
+}
