diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/meter/impl/MeterManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/meter/impl/MeterManagerTest.java
index 05832c7..a81004f 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/meter/impl/MeterManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/meter/impl/MeterManagerTest.java
@@ -35,8 +35,10 @@
 import org.onosproject.net.meter.Band;
 import org.onosproject.net.meter.DefaultBand;
 import org.onosproject.net.meter.DefaultMeter;
+import org.onosproject.net.meter.DefaultMeterFeatures;
 import org.onosproject.net.meter.DefaultMeterRequest;
 import org.onosproject.net.meter.Meter;
+import org.onosproject.net.meter.MeterFeaturesKey;
 import org.onosproject.net.meter.MeterId;
 import org.onosproject.net.meter.MeterOperation;
 import org.onosproject.net.meter.MeterOperations;
@@ -51,13 +53,12 @@
 import org.onosproject.store.service.TestStorageService;
 
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
 import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 import static org.onosproject.net.NetTestTools.APP_ID;
 import static org.onosproject.net.NetTestTools.did;
 import static org.onosproject.net.NetTestTools.injectEventDispatcher;
@@ -96,6 +97,24 @@
         TestUtils.setField(meterStore, "clusterService", new TestClusterService());
         TestUtils.setField(meterStore, "mastershipService", new TestMastershipService());
         meterStore.activate();
+        meterStore.storeMeterFeatures(DefaultMeterFeatures.builder().forDevice(did("1"))
+                .withMaxMeters(255L)
+                .withBandTypes(new HashSet<>())
+                .withUnits(new HashSet<>())
+                .hasStats(false)
+                .hasBurst(false)
+                .withMaxBands((byte) 0)
+                .withMaxColors((byte) 0)
+                .build());
+        meterStore.storeMeterFeatures(DefaultMeterFeatures.builder().forDevice(did("2"))
+                .withMaxMeters(2)
+                .withBandTypes(new HashSet<>())
+                .withUnits(new HashSet<>())
+                .hasBurst(false)
+                .hasStats(false)
+                .withMaxBands((byte) 0)
+                .withMaxColors((byte) 0)
+                .build());
 
         manager = new MeterManager();
         manager.store = meterStore;
@@ -195,6 +214,14 @@
         assertThat(manager.getMeter(did("2"), MeterId.meterId(1)), is(m2));
     }
 
+    @Test
+    public void testMeterFeatures() {
+        assertEquals(meterStore.getMaxMeters(MeterFeaturesKey.key(did("1"))), 255L);
+        assertEquals(meterStore.getMaxMeters(MeterFeaturesKey.key(did("2"))), 2);
+    }
+
+
+
     public class TestApplicationId extends DefaultApplicationId {
         public TestApplicationId(int id, String name) {
             super(id, name);
