Refactored the HostStore to allow multiple MAC addresses bound to a single port
Change-Id: Icd3b2e483b15486251ac1cca107478a012d1a3e7
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 cbc9cf1..6a058ab 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
@@ -234,10 +234,10 @@
new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1);
mgr.bindAddressesToPort(add1);
- PortAddresses storedAddresses = mgr.getAddressBindingsForPort(CP1);
+ Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
- assertTrue(add1.ipAddresses().equals(storedAddresses.ipAddresses()));
- assertTrue(add1.mac().equals(storedAddresses.mac()));
+ assertEquals(1, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
// Add some more addresses and check that they're added correctly
PortAddresses add2 =
@@ -246,18 +246,19 @@
mgr.bindAddressesToPort(add2);
storedAddresses = mgr.getAddressBindingsForPort(CP1);
- assertTrue(storedAddresses.ipAddresses().equals(
- Sets.newHashSet(IA1, IA2, IA3)));
- assertTrue(storedAddresses.mac().equals(MAC1));
+ assertEquals(2, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
+ assertTrue(storedAddresses.contains(add2));
PortAddresses add3 = new PortAddresses(CP1, null, MAC2);
mgr.bindAddressesToPort(add3);
storedAddresses = mgr.getAddressBindingsForPort(CP1);
- assertTrue(storedAddresses.ipAddresses().equals(
- Sets.newHashSet(IA1, IA2, IA3)));
- assertTrue(storedAddresses.mac().equals(MAC2));
+ assertEquals(3, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
+ assertTrue(storedAddresses.contains(add2));
+ assertTrue(storedAddresses.contains(add3));
}
@Test
@@ -266,10 +267,10 @@
new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1);
mgr.bindAddressesToPort(add1);
- PortAddresses storedAddresses = mgr.getAddressBindingsForPort(CP1);
+ Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
- assertTrue(storedAddresses.ipAddresses().size() == 2);
- assertNotNull(storedAddresses.mac());
+ assertEquals(1, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
PortAddresses rem1 =
new PortAddresses(CP1, Sets.newHashSet(IA1), null);
@@ -277,25 +278,15 @@
mgr.unbindAddressesFromPort(rem1);
storedAddresses = mgr.getAddressBindingsForPort(CP1);
- assertTrue(storedAddresses.ipAddresses().equals(Sets.newHashSet(IA2)));
- assertTrue(storedAddresses.mac().equals(MAC1));
+ // It shouldn't have been removed because it didn't match the originally
+ // submitted address object
+ assertEquals(1, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
- PortAddresses rem2 = new PortAddresses(CP1, null, MAC1);
-
- mgr.unbindAddressesFromPort(rem2);
+ mgr.unbindAddressesFromPort(add1);
storedAddresses = mgr.getAddressBindingsForPort(CP1);
- assertTrue(storedAddresses.ipAddresses().equals(Sets.newHashSet(IA2)));
- assertNull(storedAddresses.mac());
-
- PortAddresses rem3 =
- new PortAddresses(CP1, Sets.newHashSet(IA2), MAC1);
-
- mgr.unbindAddressesFromPort(rem3);
- storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertTrue(storedAddresses.ipAddresses().isEmpty());
- assertNull(storedAddresses.mac());
+ assertTrue(storedAddresses.isEmpty());
}
@Test
@@ -304,16 +295,15 @@
new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1);
mgr.bindAddressesToPort(add1);
- PortAddresses storedAddresses = mgr.getAddressBindingsForPort(CP1);
+ Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
- assertTrue(storedAddresses.ipAddresses().size() == 2);
- assertNotNull(storedAddresses.mac());
+ assertEquals(1, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
mgr.clearAddresses(CP1);
storedAddresses = mgr.getAddressBindingsForPort(CP1);
- assertTrue(storedAddresses.ipAddresses().isEmpty());
- assertNull(storedAddresses.mac());
+ assertTrue(storedAddresses.isEmpty());
}
@Test
@@ -322,12 +312,10 @@
new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1);
mgr.bindAddressesToPort(add1);
- PortAddresses storedAddresses = mgr.getAddressBindingsForPort(CP1);
+ Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
- assertTrue(storedAddresses.connectPoint().equals(CP1));
- assertTrue(storedAddresses.ipAddresses().equals(
- Sets.newHashSet(IA1, IA2)));
- assertTrue(storedAddresses.mac().equals(MAC1));
+ assertEquals(1, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
}
@Test
diff --git a/core/net/src/test/java/org/onlab/onos/net/host/impl/HostMonitorTest.java b/core/net/src/test/java/org/onlab/onos/net/host/impl/HostMonitorTest.java
index 654cab1..a8febd7 100644
--- a/core/net/src/test/java/org/onlab/onos/net/host/impl/HostMonitorTest.java
+++ b/core/net/src/test/java/org/onlab/onos/net/host/impl/HostMonitorTest.java
@@ -20,7 +20,9 @@
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collections;
@@ -130,7 +132,7 @@
expect(hostManager.getHostsByIp(TARGET_IP_ADDR))
.andReturn(Collections.<Host>emptySet()).anyTimes();
expect(hostManager.getAddressBindingsForPort(cp))
- .andReturn(pa).anyTimes();
+ .andReturn(Collections.singleton(pa)).anyTimes();
replay(hostManager);
TestPacketService packetService = new TestPacketService();
diff --git a/core/net/src/test/java/org/onlab/onos/net/proxyarp/impl/ProxyArpManagerTest.java b/core/net/src/test/java/org/onlab/onos/net/proxyarp/impl/ProxyArpManagerTest.java
index e82151e..8beac4a 100644
--- a/core/net/src/test/java/org/onlab/onos/net/proxyarp/impl/ProxyArpManagerTest.java
+++ b/core/net/src/test/java/org/onlab/onos/net/proxyarp/impl/ProxyArpManagerTest.java
@@ -19,7 +19,10 @@
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collections;
@@ -207,13 +210,18 @@
IpAddress addr2 = IpAddress.valueOf("10.0." + (2 * i) + ".1");
InterfaceIpAddress ia1 = new InterfaceIpAddress(addr1, prefix1);
InterfaceIpAddress ia2 = new InterfaceIpAddress(addr2, prefix2);
- PortAddresses pa =
- new PortAddresses(cp, Sets.newHashSet(ia1, ia2),
- MacAddress.valueOf(i));
- addresses.add(pa);
+ PortAddresses pa1 =
+ new PortAddresses(cp, Sets.newHashSet(ia1),
+ MacAddress.valueOf(2 * i - 1));
+ PortAddresses pa2 =
+ new PortAddresses(cp, Sets.newHashSet(ia2),
+ MacAddress.valueOf(2 * i));
+
+ addresses.add(pa1);
+ addresses.add(pa2);
expect(hostService.getAddressBindingsForPort(cp))
- .andReturn(pa).anyTimes();
+ .andReturn(Sets.newHashSet(pa1, pa2)).anyTimes();
}
expect(hostService.getAddressBindings()).andReturn(addresses).anyTimes();
@@ -222,7 +230,7 @@
ConnectPoint cp = new ConnectPoint(getDeviceId(i + NUM_ADDRESS_PORTS),
P1);
expect(hostService.getAddressBindingsForPort(cp))
- .andReturn(new PortAddresses(cp, null, null)).anyTimes();
+ .andReturn(Collections.<PortAddresses>emptySet()).anyTimes();
}
}
@@ -339,7 +347,8 @@
IpAddress theirIp = IpAddress.valueOf("10.0.1.254");
IpAddress ourFirstIp = IpAddress.valueOf("10.0.1.1");
IpAddress ourSecondIp = IpAddress.valueOf("10.0.2.1");
- MacAddress ourMac = MacAddress.valueOf(1L);
+ MacAddress firstMac = MacAddress.valueOf(1L);
+ MacAddress secondMac = MacAddress.valueOf(2L);
Host requestor = new DefaultHost(PID, HID2, MAC2, VLAN1, LOC1,
Collections.singleton(theirIp));
@@ -352,7 +361,7 @@
proxyArp.reply(arpRequest, LOC1);
assertEquals(1, packetService.packets.size());
- Ethernet arpReply = buildArp(ARP.OP_REPLY, ourMac, MAC2, ourFirstIp, theirIp);
+ Ethernet arpReply = buildArp(ARP.OP_REPLY, firstMac, MAC2, ourFirstIp, theirIp);
verifyPacketOut(arpReply, LOC1, packetService.packets.get(0));
// Test a request for the second address on that port
@@ -362,7 +371,7 @@
proxyArp.reply(arpRequest, LOC1);
assertEquals(1, packetService.packets.size());
- arpReply = buildArp(ARP.OP_REPLY, ourMac, MAC2, ourSecondIp, theirIp);
+ arpReply = buildArp(ARP.OP_REPLY, secondMac, MAC2, ourSecondIp, theirIp);
verifyPacketOut(arpReply, LOC1, packetService.packets.get(0));
}