Implemented adding and removing address bindings in the store, along with unit tests.
diff --git a/core/net/src/test/java/org/onlab/onos/net/host/impl/HostManagerTest.java b/core/net/src/test/java/org/onlab/onos/net/host/impl/HostManagerTest.java
index 661d2b5..49ac5b8 100644
--- a/core/net/src/test/java/org/onlab/onos/net/host/impl/HostManagerTest.java
+++ b/core/net/src/test/java/org/onlab/onos/net/host/impl/HostManagerTest.java
@@ -2,9 +2,13 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.onlab.onos.net.host.HostEvent.Type.HOST_ADDED;
+import static org.onlab.onos.net.host.HostEvent.Type.HOST_MOVED;
+import static org.onlab.onos.net.host.HostEvent.Type.HOST_REMOVED;
+import static org.onlab.onos.net.host.HostEvent.Type.HOST_UPDATED;
import java.util.List;
import java.util.Set;
@@ -14,6 +18,7 @@
import org.junit.Test;
import org.onlab.onos.event.Event;
import org.onlab.onos.event.impl.TestEventDispatcher;
+import org.onlab.onos.net.ConnectPoint;
import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.Host;
import org.onlab.onos.net.HostId;
@@ -26,6 +31,7 @@
import org.onlab.onos.net.host.HostProvider;
import org.onlab.onos.net.host.HostProviderRegistry;
import org.onlab.onos.net.host.HostProviderService;
+import org.onlab.onos.net.host.PortAddresses;
import org.onlab.onos.net.provider.AbstractProvider;
import org.onlab.onos.net.provider.ProviderId;
import org.onlab.onos.net.trivial.impl.SimpleHostStore;
@@ -36,8 +42,6 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-import static org.onlab.onos.net.host.HostEvent.Type.*;
-
/**
* Test codifying the host service & host provider service contracts.
*/
@@ -63,6 +67,12 @@
private static final PortNumber P2 = PortNumber.portNumber(200);
private static final HostLocation LOC1 = new HostLocation(DID1, P1, 123L);
private static final HostLocation LOC2 = new HostLocation(DID1, P2, 123L);
+ private static final ConnectPoint CP1 = new ConnectPoint(DID1, P1);
+ private static final ConnectPoint CP2 = new ConnectPoint(DID2, P2);
+
+ private static final IpPrefix PREFIX1 = IpPrefix.valueOf("10.0.1.0/24");
+ private static final IpPrefix PREFIX2 = IpPrefix.valueOf("10.1.0.0/16");
+ private static final IpPrefix PREFIX3 = IpPrefix.valueOf("5.8.2.0/23");
private HostManager mgr;
@@ -196,4 +206,130 @@
}
}
+
+ @Test
+ public void bindAddressesToPort() {
+ PortAddresses add1 = new PortAddresses(CP1,
+ Sets.newHashSet(PREFIX1, PREFIX2), MAC1);
+
+ mgr.bindAddressesToPort(add1);
+ PortAddresses storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertTrue(add1.ips().equals(storedAddresses.ips()));
+ assertTrue(add1.mac().equals(storedAddresses.mac()));
+
+ // Add some more addresses and check that they're added correctly
+ PortAddresses add2 = new PortAddresses(CP1, Sets.newHashSet(PREFIX3), null);
+
+ mgr.bindAddressesToPort(add2);
+ storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertTrue(storedAddresses.ips().equals(
+ Sets.newHashSet(PREFIX1, PREFIX2, PREFIX3)));
+ assertTrue(storedAddresses.mac().equals(MAC1));
+
+ PortAddresses add3 = new PortAddresses(CP1, null, MAC2);
+
+ mgr.bindAddressesToPort(add3);
+ storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertTrue(storedAddresses.ips().equals(
+ Sets.newHashSet(PREFIX1, PREFIX2, PREFIX3)));
+ assertTrue(storedAddresses.mac().equals(MAC2));
+ }
+
+ @Test
+ public void unbindAddressesFromPort() {
+ PortAddresses add1 = new PortAddresses(CP1,
+ Sets.newHashSet(PREFIX1, PREFIX2), MAC1);
+
+ mgr.bindAddressesToPort(add1);
+ PortAddresses storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertTrue(storedAddresses.ips().size() == 2);
+ assertNotNull(storedAddresses.mac());
+
+ PortAddresses rem1 = new PortAddresses(CP1,
+ Sets.newHashSet(PREFIX1), null);
+
+ mgr.unbindAddressesFromPort(rem1);
+ storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertTrue(storedAddresses.ips().equals(Sets.newHashSet(PREFIX2)));
+ assertTrue(storedAddresses.mac().equals(MAC1));
+
+ PortAddresses rem2 = new PortAddresses(CP1, null, MAC1);
+
+ mgr.unbindAddressesFromPort(rem2);
+ storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertTrue(storedAddresses.ips().equals(Sets.newHashSet(PREFIX2)));
+ assertNull(storedAddresses.mac());
+
+ PortAddresses rem3 = new PortAddresses(CP1,
+ Sets.newHashSet(PREFIX2), MAC1);
+
+ mgr.unbindAddressesFromPort(rem3);
+ storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertTrue(storedAddresses.ips().isEmpty());
+ assertNull(storedAddresses.mac());
+ }
+
+ @Test
+ public void clearAddresses() {
+ PortAddresses add1 = new PortAddresses(CP1,
+ Sets.newHashSet(PREFIX1, PREFIX2), MAC1);
+
+ mgr.bindAddressesToPort(add1);
+ PortAddresses storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertTrue(storedAddresses.ips().size() == 2);
+ assertNotNull(storedAddresses.mac());
+
+ mgr.clearAddresses(CP1);
+ storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertTrue(storedAddresses.ips().isEmpty());
+ assertNull(storedAddresses.mac());
+ }
+
+ @Test
+ public void getAddressBindingsForPort() {
+ PortAddresses add1 = new PortAddresses(CP1,
+ Sets.newHashSet(PREFIX1, PREFIX2), MAC1);
+
+ mgr.bindAddressesToPort(add1);
+ PortAddresses storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertTrue(storedAddresses.connectPoint().equals(CP1));
+ assertTrue(storedAddresses.ips().equals(Sets.newHashSet(PREFIX1, PREFIX2)));
+ assertTrue(storedAddresses.mac().equals(MAC1));
+ }
+
+ @Test
+ public void getAddressBindings() {
+ Set<PortAddresses> storedAddresses = mgr.getAddressBindings();
+
+ assertTrue(storedAddresses.isEmpty());
+
+ PortAddresses add1 = new PortAddresses(CP1,
+ Sets.newHashSet(PREFIX1, PREFIX2), MAC1);
+
+ mgr.bindAddressesToPort(add1);
+
+ storedAddresses = mgr.getAddressBindings();
+
+ assertTrue(storedAddresses.size() == 1);
+
+ PortAddresses add2 = new PortAddresses(CP2,
+ Sets.newHashSet(PREFIX3), MAC2);
+
+ mgr.bindAddressesToPort(add2);
+
+ storedAddresses = mgr.getAddressBindings();
+
+ assertTrue(storedAddresses.size() == 2);
+ assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2)));
+ }
}