handle devices agreed to be inactive during master re-election
Change-Id: Ia193d7210a8319f04ce957f2bd4a0479b88d15a8
diff --git a/core/store/hz/cluster/src/test/java/org/onlab/onos/store/cluster/impl/DistributedMastershipStoreTest.java b/core/store/hz/cluster/src/test/java/org/onlab/onos/store/cluster/impl/DistributedMastershipStoreTest.java
index b2c0e2e..c3efdfe 100644
--- a/core/store/hz/cluster/src/test/java/org/onlab/onos/store/cluster/impl/DistributedMastershipStoreTest.java
+++ b/core/store/hz/cluster/src/test/java/org/onlab/onos/store/cluster/impl/DistributedMastershipStoreTest.java
@@ -5,6 +5,7 @@
import static org.junit.Assert.assertTrue;
import static org.onlab.onos.net.MastershipRole.*;
+import java.util.List;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -25,7 +26,13 @@
import org.onlab.onos.cluster.MastershipStoreDelegate;
import org.onlab.onos.cluster.MastershipTerm;
import org.onlab.onos.cluster.NodeId;
+import org.onlab.onos.net.Device;
import org.onlab.onos.net.DeviceId;
+import org.onlab.onos.net.MastershipRole;
+import org.onlab.onos.net.Port;
+import org.onlab.onos.net.PortNumber;
+import org.onlab.onos.net.device.DeviceListener;
+import org.onlab.onos.net.device.DeviceService;
import org.onlab.onos.store.common.StoreManager;
import org.onlab.onos.store.common.StoreService;
import org.onlab.onos.store.common.TestStoreManager;
@@ -80,6 +87,7 @@
dms = new TestDistributedMastershipStore(storeMgr, serializationMgr);
dms.clusterService = new TestClusterService();
+ dms.deviceService = new TestDeviceService();
dms.activate();
testStore = (TestDistributedMastershipStore) dms;
@@ -179,8 +187,11 @@
assertEquals("wrong role for NONE:", MASTER, dms.requestRole(DID1));
//no backup, no new MASTER/event
assertNull("wrong event:", dms.unsetMaster(N1, DID1));
- //add backup CN2, get it elected MASTER
+
dms.requestRole(DID1);
+ ((TestDeviceService) dms.deviceService).active.add(DID1);
+
+ //add backup CN2, get it elected MASTER by relinquishing
testStore.setCurrent(CN2);
dms.requestRole(DID1);
assertEquals("wrong event:", Type.MASTER_CHANGED, dms.unsetMaster(N1, DID1).type());
@@ -193,6 +204,12 @@
//NONE - nothing happens
assertNull("wrong event:", dms.unsetMaster(N1, DID2));
assertEquals("wrong role for node:", NONE, dms.getRole(N1, DID2));
+
+ //for a device that turned off (not active) - status to NONE
+ ((TestDeviceService) dms.deviceService).active.clear();
+ assertNull("extraneous event:", dms.unsetMaster(N2, DID1));
+ assertEquals("wrong role", NONE, dms.getRole(N2, DID1));
+
}
@Ignore("Ignore until Delegate spec. is clear.")
@@ -299,4 +316,53 @@
}
}
+
+ private class TestDeviceService implements DeviceService {
+
+ Set<DeviceId> active = Sets.newHashSet();
+
+ @Override
+ public int getDeviceCount() {
+ return 0;
+ }
+
+ @Override
+ public Iterable<Device> getDevices() {
+ return null;
+ }
+
+ @Override
+ public Device getDevice(DeviceId deviceId) {
+ return null;
+ }
+
+ @Override
+ public MastershipRole getRole(DeviceId deviceId) {
+ return null;
+ }
+
+ @Override
+ public List<Port> getPorts(DeviceId deviceId) {
+ return null;
+ }
+
+ @Override
+ public Port getPort(DeviceId deviceId, PortNumber portNumber) {
+ return null;
+ }
+
+ @Override
+ public boolean isAvailable(DeviceId deviceId) {
+ return active.contains(deviceId);
+ }
+
+ @Override
+ public void addListener(DeviceListener listener) {
+ }
+
+ @Override
+ public void removeListener(DeviceListener listener) {
+ }
+
+ }
}