Fix checkstyle whitespace issues - WHITESPACE ONLY
Change-Id: Ic205c1afd639c6008d61d9de95cb764eeb6238ca
diff --git a/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java b/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java
index 8afe34a..672c63f 100644
--- a/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java
+++ b/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java
@@ -1,19 +1,19 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.floodlightcontroller.core.internal;
@@ -92,11 +92,10 @@
import org.openflow.vendor.nicira.OFRoleReplyVendorData;
/**
- *
* @author David Erickson (daviderickson@cs.stanford.edu)
*/
public class ControllerTest extends FloodlightTestCase {
-
+
private Controller controller;
private MockThreadPoolService tp;
@@ -104,25 +103,25 @@
public void setUp() throws Exception {
super.setUp();
FloodlightModuleContext fmc = new FloodlightModuleContext();
-
+
FloodlightProvider cm = new FloodlightProvider();
- controller = (Controller)cm.getServiceImpls().get(IFloodlightProviderService.class);
+ controller = (Controller) cm.getServiceImpls().get(IFloodlightProviderService.class);
fmc.addService(IFloodlightProviderService.class, controller);
-
+
RestApiServer restApi = new RestApiServer();
fmc.addService(IRestApiService.class, restApi);
-
+
tp = new MockThreadPoolService();
fmc.addService(IThreadPoolService.class, tp);
-
+
// Following added by ONOS
// TODO replace with mock if further testing is needed.
StandaloneRegistry sr = new StandaloneRegistry();
- fmc.addService(IControllerRegistryService.class, sr );
+ fmc.addService(IControllerRegistryService.class, sr);
LinkDiscoveryManager linkDiscovery = new LinkDiscoveryManager();
fmc.addService(ILinkDiscoveryService.class, linkDiscovery);
-
+
restApi.init(fmc);
cm.init(fmc);
tp.init(fmc);
@@ -140,7 +139,7 @@
}
protected OFStatisticsReply getStatisticsReply(int transactionId,
- int count, boolean moreReplies) {
+ int count, boolean moreReplies) {
OFStatisticsReply sr = new OFStatisticsReply();
sr.setXid(transactionId);
sr.setStatisticType(OFStatisticsType.FLOW);
@@ -153,14 +152,14 @@
sr.setFlags((short) 1);
return sr;
}
-
+
/* Set the mock expectations for sw when sw is passed to addSwitch */
protected void setupSwitchForAddSwitch(IOFSwitch sw, long dpid) {
String dpidString = HexString.toHexString(dpid);
-
+
expect(sw.getId()).andReturn(dpid).anyTimes();
expect(sw.getStringId()).andReturn(dpidString).anyTimes();
-
+
//Now we don't write to storage these methods aren't called
//expect(sw.getConnectedSince()).andReturn(new Date());
//Channel channel = createMock(Channel.class);
@@ -169,11 +168,11 @@
expect(sw.getCapabilities()).andReturn(0).anyTimes();
expect(sw.getBuffers()).andReturn(0).anyTimes();
- expect(sw.getTables()).andReturn((byte)0).anyTimes();
+ expect(sw.getTables()).andReturn((byte) 0).anyTimes();
expect(sw.getActions()).andReturn(0).anyTimes();
expect(sw.getPorts()).andReturn(new ArrayList<OFPhysicalPort>()).anyTimes();
}
-
+
/**
* Run the controller's main loop so that updates are processed
*/
@@ -187,6 +186,7 @@
/**
* Verify that a listener that throws an exception halts further
* execution, and verify that the Commands STOP and CONTINUE are honored.
+ *
* @throws Exception
*/
@Test
@@ -199,20 +199,20 @@
// Build our test packet
IPacket testPacket = new Ethernet()
- .setSourceMACAddress("00:44:33:22:11:00")
- .setDestinationMACAddress("00:11:22:33:44:55")
- .setEtherType(Ethernet.TYPE_ARP)
- .setPayload(
- new ARP()
- .setHardwareType(ARP.HW_TYPE_ETHERNET)
- .setProtocolType(ARP.PROTO_TYPE_IP)
- .setHardwareAddressLength((byte) 6)
- .setProtocolAddressLength((byte) 4)
- .setOpCode(ARP.OP_REPLY)
- .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:00"))
- .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
- .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
- .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
+ .setSourceMACAddress("00:44:33:22:11:00")
+ .setDestinationMACAddress("00:11:22:33:44:55")
+ .setEtherType(Ethernet.TYPE_ARP)
+ .setPayload(
+ new ARP()
+ .setHardwareType(ARP.HW_TYPE_ETHERNET)
+ .setProtocolType(ARP.PROTO_TYPE_IP)
+ .setHardwareAddressLength((byte) 6)
+ .setProtocolAddressLength((byte) 4)
+ .setOpCode(ARP.OP_REPLY)
+ .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:00"))
+ .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
+ .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
+ .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
byte[] testPacketSerialized = testPacket.serialize();
// Build the PacketIn
@@ -225,13 +225,13 @@
IOFMessageListener test1 = createMock(IOFMessageListener.class);
expect(test1.getName()).andReturn("test1").anyTimes();
- expect(test1.isCallbackOrderingPrereq((OFType)anyObject(), (String)anyObject())).andReturn(false).anyTimes();
- expect(test1.isCallbackOrderingPostreq((OFType)anyObject(), (String)anyObject())).andReturn(false).anyTimes();
+ expect(test1.isCallbackOrderingPrereq((OFType) anyObject(), (String) anyObject())).andReturn(false).anyTimes();
+ expect(test1.isCallbackOrderingPostreq((OFType) anyObject(), (String) anyObject())).andReturn(false).anyTimes();
expect(test1.receive(eq(sw), eq(pi), isA(FloodlightContext.class))).andThrow(new RuntimeException("This is NOT an error! We are testing exception catching."));
IOFMessageListener test2 = createMock(IOFMessageListener.class);
expect(test2.getName()).andReturn("test2").anyTimes();
- expect(test2.isCallbackOrderingPrereq((OFType)anyObject(), (String)anyObject())).andReturn(false).anyTimes();
- expect(test2.isCallbackOrderingPostreq((OFType)anyObject(), (String)anyObject())).andReturn(false).anyTimes();
+ expect(test2.isCallbackOrderingPrereq((OFType) anyObject(), (String) anyObject())).andReturn(false).anyTimes();
+ expect(test2.isCallbackOrderingPostreq((OFType) anyObject(), (String) anyObject())).andReturn(false).anyTimes();
// expect no calls to test2.receive() since test1.receive() threw an exception
replay(test1, test2, sw);
@@ -246,7 +246,7 @@
// verify STOP works
reset(test1, test2, sw);
- expect(test1.receive(eq(sw), eq(pi), isA(FloodlightContext.class))).andReturn(Command.STOP);
+ expect(test1.receive(eq(sw), eq(pi), isA(FloodlightContext.class))).andReturn(Command.STOP);
//expect(test1.getId()).andReturn(0).anyTimes();
expect(sw.getStringId()).andReturn("00:00:00:00:00:00:00").anyTimes();
replay(test1, test2, sw);
@@ -287,7 +287,6 @@
}
/**
- *
* @throws Exception
*/
@Test
@@ -390,7 +389,7 @@
expect(newsw.getPorts()).andReturn(new ArrayList<OFPhysicalPort>());
expect(newsw.getCapabilities()).andReturn(0).anyTimes();
expect(newsw.getBuffers()).andReturn(0).anyTimes();
- expect(newsw.getTables()).andReturn((byte)0).anyTimes();
+ expect(newsw.getTables()).andReturn((byte) 0).anyTimes();
expect(newsw.getActions()).andReturn(0).anyTimes();
controller.activeSwitches.put(0L, oldsw);
replay(newsw, channel);//, channel2);
@@ -399,44 +398,51 @@
verify(newsw, channel);//, channel2);
}
-
+
@Test
public void testUpdateQueue() throws Exception {
class DummySwitchListener implements IOFSwitchListener, IOFSwitchPortListener {
public int nAdded;
public int nRemoved;
public int nPortChanged;
+
public DummySwitchListener() {
nAdded = 0;
nRemoved = 0;
nPortChanged = 0;
}
+
public synchronized void addedSwitch(IOFSwitch sw) {
nAdded++;
notifyAll();
}
+
public synchronized void removedSwitch(IOFSwitch sw) {
nRemoved++;
notifyAll();
}
+
public String getName() {
return "dummy";
}
+
@Override
public void switchPortChanged(Long switchId) {
nPortChanged++;
notifyAll();
}
- @Override
- public void switchPortAdded(Long switchId, OFPhysicalPort port) {
- // TODO Auto-generated method stub
-
- }
- @Override
- public void switchPortRemoved(Long switchId, OFPhysicalPort port) {
- // TODO Auto-generated method stub
-
- }
+
+ @Override
+ public void switchPortAdded(Long switchId, OFPhysicalPort port) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void switchPortRemoved(Long switchId, OFPhysicalPort port) {
+ // TODO Auto-generated method stub
+
+ }
}
DummySwitchListener switchListener = new DummySwitchListener();
IOFSwitch sw = createMock(IOFSwitch.class);
@@ -446,37 +452,37 @@
replay(sw);
ControllerRunThread t = new ControllerRunThread();
t.start();
-
+
controller.addOFSwitchListener(switchListener);
- synchronized(switchListener) {
+ synchronized (switchListener) {
controller.updates.put(controller.new SwitchUpdate(sw,
- Controller.SwitchUpdateType.ADDED));
+ Controller.SwitchUpdateType.ADDED));
switchListener.wait(500);
- assertTrue("IOFSwitchListener.addedSwitch() was not called",
+ assertTrue("IOFSwitchListener.addedSwitch() was not called",
switchListener.nAdded == 1);
- controller.updates.put(controller.new SwitchUpdate(sw,
- Controller.SwitchUpdateType.REMOVED));
+ controller.updates.put(controller.new SwitchUpdate(sw,
+ Controller.SwitchUpdateType.REMOVED));
switchListener.wait(500);
- assertTrue("IOFSwitchListener.removedSwitch() was not called",
+ assertTrue("IOFSwitchListener.removedSwitch() was not called",
switchListener.nRemoved == 1);
- controller.updates.put(controller.new SwitchUpdate(sw,
- Controller.SwitchUpdateType.PORTCHANGED));
+ controller.updates.put(controller.new SwitchUpdate(sw,
+ Controller.SwitchUpdateType.PORTCHANGED));
switchListener.wait(500);
- assertTrue("IOFSwitchListener.switchPortChanged() was not called",
+ assertTrue("IOFSwitchListener.switchPortChanged() was not called",
switchListener.nPortChanged == 1);
}
}
/**
* Test notifications for controller node IP changes. This requires
- * synchronization between the main test thread and another thread
+ * synchronization between the main test thread and another thread
* that runs Controller's main loop and takes / handles updates. We
- * synchronize with wait(timeout) / notifyAll(). We check for the
+ * synchronize with wait(timeout) / notifyAll(). We check for the
* expected condition after the wait returns. However, if wait returns
* due to the timeout (or due to spurious awaking) and the check fails we
* might just not have waited long enough. Using a long enough timeout
- * mitigates this but we cannot get rid of the fundamental "issue".
- *
+ * mitigates this but we cannot get rid of the fundamental "issue".
+ *
* @throws Exception
*/
/*
@@ -609,13 +615,12 @@
expectedCurMap, controller.getControllerNodeIPs());
}
*/
-
@Test
public void testCheckSwitchReady() {
OFChannelState state = new OFChannelState();
Controller.OFChannelHandler chdlr = controller.new OFChannelHandler(state);
chdlr.sw = createMock(OFSwitchImpl.class);
-
+
// Wrong current state
// Should not go to READY
state.hsState = OFChannelState.HandshakeState.HELLO;
@@ -626,31 +631,31 @@
verify(chdlr.sw);
assertSame(OFChannelState.HandshakeState.HELLO, state.hsState);
reset(chdlr.sw);
-
+
// Have only config reply
state.hsState = OFChannelState.HandshakeState.FEATURES_REPLY;
state.hasDescription = false;
state.hasGetConfigReply = true;
- replay(chdlr.sw);
+ replay(chdlr.sw);
chdlr.checkSwitchReady();
verify(chdlr.sw);
assertSame(OFChannelState.HandshakeState.FEATURES_REPLY, state.hsState);
assertTrue(controller.connectedSwitches.isEmpty());
assertTrue(controller.activeSwitches.isEmpty());
reset(chdlr.sw);
-
+
// Have only desc reply
state.hsState = OFChannelState.HandshakeState.FEATURES_REPLY;
state.hasDescription = true;
state.hasGetConfigReply = false;
- replay(chdlr.sw);
+ replay(chdlr.sw);
chdlr.checkSwitchReady();
verify(chdlr.sw);
assertSame(OFChannelState.HandshakeState.FEATURES_REPLY, state.hsState);
assertTrue(controller.connectedSwitches.isEmpty());
assertTrue(controller.activeSwitches.isEmpty());
reset(chdlr.sw);
-
+
//////////////////////////////////////////
// Finally, everything is right. Should advance to READY
//////////////////////////////////////////
@@ -674,21 +679,21 @@
reset(controller.roleChanger);
controller.connectedSwitches.clear();
controller.activeSwitches.clear();
-
-
+
+
// Role support enabled.
state.hsState = OFChannelState.HandshakeState.FEATURES_REPLY;
controller.role = Role.MASTER;
expect(chdlr.sw.getStringId()).andReturn("SomeID").anyTimes();
expect(chdlr.sw.getId()).andReturn(42L).anyTimes();
- Capture<Collection<OFSwitchImpl>> swListCapture =
- new Capture<Collection<OFSwitchImpl>>();
- controller.roleChanger.submitRequest(capture(swListCapture),
- same(Role.SLAVE));
- Capture<Collection<OFSwitchImpl>> swListCapture2 =
+ Capture<Collection<OFSwitchImpl>> swListCapture =
new Capture<Collection<OFSwitchImpl>>();
- controller.roleChanger.submitRequest(capture(swListCapture2),
- same(Role.MASTER));
+ controller.roleChanger.submitRequest(capture(swListCapture),
+ same(Role.SLAVE));
+ Capture<Collection<OFSwitchImpl>> swListCapture2 =
+ new Capture<Collection<OFSwitchImpl>>();
+ controller.roleChanger.submitRequest(capture(swListCapture2),
+ same(Role.MASTER));
replay(controller.roleChanger, chdlr.sw);
chdlr.checkSwitchReady();
verify(controller.roleChanger, chdlr.sw);
@@ -701,29 +706,29 @@
assertTrue("swList must contain this switch", swList.contains(chdlr.sw));
}
-
+
@Test
public void testChannelDisconnected() throws Exception {
OFChannelState state = new OFChannelState();
state.hsState = OFChannelState.HandshakeState.READY;
Controller.OFChannelHandler chdlr = controller.new OFChannelHandler(state);
chdlr.sw = createMock(OFSwitchImpl.class);
-
+
// Switch is active
expect(chdlr.sw.getId()).andReturn(0L).anyTimes();
expect(chdlr.sw.getStringId()).andReturn("00:00:00:00:00:00:00:00")
- .anyTimes();
+ .anyTimes();
chdlr.sw.cancelAllStatisticsReplies();
chdlr.sw.setConnected(false);
expect(chdlr.sw.isConnected()).andReturn(true);
-
+
controller.connectedSwitches.add(chdlr.sw);
controller.activeSwitches.put(0L, chdlr.sw);
-
+
replay(chdlr.sw);
chdlr.channelDisconnected(null, null);
verify(chdlr.sw);
-
+
// Switch is connected but not active
reset(chdlr.sw);
expect(chdlr.sw.getId()).andReturn(0L).anyTimes();
@@ -731,14 +736,14 @@
replay(chdlr.sw);
chdlr.channelDisconnected(null, null);
verify(chdlr.sw);
-
+
// Not in ready state
state.hsState = HandshakeState.START;
reset(chdlr.sw);
replay(chdlr.sw);
chdlr.channelDisconnected(null, null);
verify(chdlr.sw);
-
+
// Switch is null
state.hsState = HandshakeState.READY;
chdlr.sw = null;
@@ -778,14 +783,14 @@
Controller.OFChannelHandler chdlr = controller.new OFChannelHandler(state);
chdlr.sw = createMock(OFSwitchImpl.class);
Channel ch = createMock(Channel.class);
-
+
// the error returned when role request message is not supported by sw
OFError msg = new OFError();
msg.setType(OFType.ERROR);
msg.setXid(xid);
msg.setErrorType(OFErrorType.OFPET_BAD_REQUEST);
msg.setErrorCode(OFBadRequestCode.OFPBRC_BAD_VENDOR);
-
+
// the switch connection should get disconnected when the controller is
// in SLAVE mode and the switch does not support role-request messages
state.firstRoleReplyReceived = false;
@@ -794,17 +799,17 @@
expect(chdlr.sw.deliverRoleRequestNotSupportedEx(xid)).andReturn(Role.SLAVE);
expect(chdlr.sw.getChannel()).andReturn(ch).anyTimes();
expect(ch.close()).andReturn(null);
-
+
replay(ch, chdlr.sw);
chdlr.processOFMessage(msg);
verify(ch, chdlr.sw);
- assertTrue("state.firstRoleReplyReceived must be true",
- state.firstRoleReplyReceived);
+ assertTrue("state.firstRoleReplyReceived must be true",
+ state.firstRoleReplyReceived);
assertTrue("activeSwitches must be empty",
- controller.activeSwitches.isEmpty());
+ controller.activeSwitches.isEmpty());
reset(ch, chdlr.sw);
-
-
+
+
// a different error message - should also reject role request
msg.setErrorType(OFErrorType.OFPET_BAD_REQUEST);
msg.setErrorCode(OFBadRequestCode.OFPBRC_EPERM);
@@ -815,16 +820,16 @@
expect(chdlr.sw.getChannel()).andReturn(ch).anyTimes();
expect(ch.close()).andReturn(null);
replay(ch, chdlr.sw);
-
+
chdlr.processOFMessage(msg);
verify(ch, chdlr.sw);
assertTrue("state.firstRoleReplyReceived must be True even with EPERM",
- state.firstRoleReplyReceived);
- assertTrue("activeSwitches must be empty",
- controller.activeSwitches.isEmpty());
+ state.firstRoleReplyReceived);
+ assertTrue("activeSwitches must be empty",
+ controller.activeSwitches.isEmpty());
reset(ch, chdlr.sw);
-
-
+
+
// We are MASTER, the switch should be added to the list of active
// switches.
state.firstRoleReplyReceived = false;
@@ -834,19 +839,19 @@
setupSwitchForAddSwitch(chdlr.sw, 0L);
chdlr.sw.clearAllFlowMods();
replay(ch, chdlr.sw);
-
+
chdlr.processOFMessage(msg);
verify(ch, chdlr.sw);
- assertTrue("state.firstRoleReplyReceived must be true",
- state.firstRoleReplyReceived);
+ assertTrue("state.firstRoleReplyReceived must be true",
+ state.firstRoleReplyReceived);
assertSame("activeSwitches must contain this switch",
- chdlr.sw, controller.activeSwitches.get(0L));
+ chdlr.sw, controller.activeSwitches.get(0L));
reset(ch, chdlr.sw);
}
-
-
- @Test
+
+
+ @Test
public void testVendorMessageUnknown() throws Exception {
// Check behavior with an unknown vendor id
OFChannelState state = new OFChannelState();
@@ -856,8 +861,8 @@
msg.setVendor(0);
chdlr.processOFMessage(msg);
}
-
-
+
+
// Helper function.
protected Controller.OFChannelHandler getChannelHandlerForRoleReplyTest() {
OFChannelState state = new OFChannelState();
@@ -866,23 +871,25 @@
chdlr.sw = createMock(OFSwitchImpl.class);
return chdlr;
}
-
+
// Helper function
protected OFVendor getRoleReplyMsgForRoleReplyTest(int xid, int nicira_role) {
OFVendor msg = new OFVendor();
msg.setXid(xid);
msg.setVendor(OFNiciraVendorData.NX_VENDOR_ID);
- OFRoleReplyVendorData roleReplyVendorData =
+ OFRoleReplyVendorData roleReplyVendorData =
new OFRoleReplyVendorData(OFRoleReplyVendorData.NXT_ROLE_REPLY);
msg.setVendorData(roleReplyVendorData);
roleReplyVendorData.setRole(nicira_role);
return msg;
}
-
- /** invalid role in role reply */
- @Test
- public void testNiciraRoleReplyInvalidRole()
- throws Exception {
+
+ /**
+ * invalid role in role reply
+ */
+ @Test
+ public void testNiciraRoleReplyInvalidRole()
+ throws Exception {
int xid = 424242;
Controller.OFChannelHandler chdlr = getChannelHandlerForRoleReplyTest();
Channel ch = createMock(Channel.class);
@@ -893,16 +900,18 @@
chdlr.processOFMessage(msg);
verify(chdlr.sw, ch);
}
-
- /** First role reply message received: transition from slave to master */
- @Test
- public void testNiciraRoleReplySlave2MasterFristTime()
- throws Exception {
+
+ /**
+ * First role reply message received: transition from slave to master
+ */
+ @Test
+ public void testNiciraRoleReplySlave2MasterFristTime()
+ throws Exception {
int xid = 424242;
Controller.OFChannelHandler chdlr = getChannelHandlerForRoleReplyTest();
OFVendor msg = getRoleReplyMsgForRoleReplyTest(xid,
- OFRoleReplyVendorData.NX_ROLE_MASTER);
-
+ OFRoleReplyVendorData.NX_ROLE_MASTER);
+
chdlr.sw.deliverRoleReply(xid, Role.MASTER);
expect(chdlr.sw.isActive()).andReturn(true);
setupSwitchForAddSwitch(chdlr.sw, 1L);
@@ -911,22 +920,24 @@
replay(chdlr.sw);
chdlr.processOFMessage(msg);
verify(chdlr.sw);
- assertTrue("state.firstRoleReplyReceived must be true",
- chdlr.state.firstRoleReplyReceived);
+ assertTrue("state.firstRoleReplyReceived must be true",
+ chdlr.state.firstRoleReplyReceived);
assertSame("activeSwitches must contain this switch",
- chdlr.sw, controller.activeSwitches.get(1L));
+ chdlr.sw, controller.activeSwitches.get(1L));
}
-
-
- /** Not first role reply message received: transition from slave to master */
- @Test
- public void testNiciraRoleReplySlave2MasterNotFristTime()
- throws Exception {
+
+
+ /**
+ * Not first role reply message received: transition from slave to master
+ */
+ @Test
+ public void testNiciraRoleReplySlave2MasterNotFristTime()
+ throws Exception {
int xid = 424242;
Controller.OFChannelHandler chdlr = getChannelHandlerForRoleReplyTest();
OFVendor msg = getRoleReplyMsgForRoleReplyTest(xid,
- OFRoleReplyVendorData.NX_ROLE_MASTER);
-
+ OFRoleReplyVendorData.NX_ROLE_MASTER);
+
chdlr.sw.deliverRoleReply(xid, Role.MASTER);
expect(chdlr.sw.isActive()).andReturn(true);
setupSwitchForAddSwitch(chdlr.sw, 1L);
@@ -935,21 +946,23 @@
replay(chdlr.sw);
chdlr.processOFMessage(msg);
verify(chdlr.sw);
- assertTrue("state.firstRoleReplyReceived must be true",
- chdlr.state.firstRoleReplyReceived);
+ assertTrue("state.firstRoleReplyReceived must be true",
+ chdlr.state.firstRoleReplyReceived);
assertSame("activeSwitches must contain this switch",
- chdlr.sw, controller.activeSwitches.get(1L));
+ chdlr.sw, controller.activeSwitches.get(1L));
}
-
- /** transition from slave to equal */
- @Test
- public void testNiciraRoleReplySlave2Equal()
- throws Exception {
+
+ /**
+ * transition from slave to equal
+ */
+ @Test
+ public void testNiciraRoleReplySlave2Equal()
+ throws Exception {
int xid = 424242;
Controller.OFChannelHandler chdlr = getChannelHandlerForRoleReplyTest();
OFVendor msg = getRoleReplyMsgForRoleReplyTest(xid,
- OFRoleReplyVendorData.NX_ROLE_OTHER);
-
+ OFRoleReplyVendorData.NX_ROLE_OTHER);
+
chdlr.sw.deliverRoleReply(xid, Role.EQUAL);
expect(chdlr.sw.isActive()).andReturn(true);
setupSwitchForAddSwitch(chdlr.sw, 1L);
@@ -958,72 +971,74 @@
replay(chdlr.sw);
chdlr.processOFMessage(msg);
verify(chdlr.sw);
- assertTrue("state.firstRoleReplyReceived must be true",
- chdlr.state.firstRoleReplyReceived);
+ assertTrue("state.firstRoleReplyReceived must be true",
+ chdlr.state.firstRoleReplyReceived);
assertSame("activeSwitches must contain this switch",
- chdlr.sw, controller.activeSwitches.get(1L));
- };
-
+ chdlr.sw, controller.activeSwitches.get(1L));
+ }
+
+ ;
+
@Test
/** Slave2Slave transition ==> no change */
- public void testNiciraRoleReplySlave2Slave() throws Exception{
+ public void testNiciraRoleReplySlave2Slave() throws Exception {
int xid = 424242;
Controller.OFChannelHandler chdlr = getChannelHandlerForRoleReplyTest();
- OFVendor msg = getRoleReplyMsgForRoleReplyTest(xid,
- OFRoleReplyVendorData.NX_ROLE_SLAVE);
-
+ OFVendor msg = getRoleReplyMsgForRoleReplyTest(xid,
+ OFRoleReplyVendorData.NX_ROLE_SLAVE);
+
chdlr.sw.deliverRoleReply(xid, Role.SLAVE);
expect(chdlr.sw.getId()).andReturn(1L).anyTimes();
expect(chdlr.sw.getStringId()).andReturn("00:00:00:00:00:00:00:01")
- .anyTimes();
+ .anyTimes();
expect(chdlr.sw.isActive()).andReturn(false);
// don't add switch to activeSwitches ==> slave2slave
chdlr.state.firstRoleReplyReceived = false;
replay(chdlr.sw);
chdlr.processOFMessage(msg);
verify(chdlr.sw);
- assertTrue("state.firstRoleReplyReceived must be true",
- chdlr.state.firstRoleReplyReceived);
- assertTrue("activeSwitches must be empty",
- controller.activeSwitches.isEmpty());
+ assertTrue("state.firstRoleReplyReceived must be true",
+ chdlr.state.firstRoleReplyReceived);
+ assertTrue("activeSwitches must be empty",
+ controller.activeSwitches.isEmpty());
}
-
+
@Test
/** Equal2Master transition ==> no change */
- public void testNiciraRoleReplyEqual2Master() throws Exception{
+ public void testNiciraRoleReplyEqual2Master() throws Exception {
int xid = 424242;
Controller.OFChannelHandler chdlr = getChannelHandlerForRoleReplyTest();
- OFVendor msg = getRoleReplyMsgForRoleReplyTest(xid,
- OFRoleReplyVendorData.NX_ROLE_MASTER);
-
+ OFVendor msg = getRoleReplyMsgForRoleReplyTest(xid,
+ OFRoleReplyVendorData.NX_ROLE_MASTER);
+
chdlr.sw.deliverRoleReply(xid, Role.MASTER);
expect(chdlr.sw.getId()).andReturn(1L).anyTimes();
expect(chdlr.sw.getStringId()).andReturn("00:00:00:00:00:00:00:01")
- .anyTimes();
+ .anyTimes();
expect(chdlr.sw.isActive()).andReturn(true);
controller.activeSwitches.put(1L, chdlr.sw);
chdlr.state.firstRoleReplyReceived = false;
replay(chdlr.sw);
chdlr.processOFMessage(msg);
verify(chdlr.sw);
- assertTrue("state.firstRoleReplyReceived must be true",
- chdlr.state.firstRoleReplyReceived);
+ assertTrue("state.firstRoleReplyReceived must be true",
+ chdlr.state.firstRoleReplyReceived);
assertSame("activeSwitches must contain this switch",
- chdlr.sw, controller.activeSwitches.get(1L));
+ chdlr.sw, controller.activeSwitches.get(1L));
}
-
- @Test
- public void testNiciraRoleReplyMaster2Slave()
- throws Exception {
+
+ @Test
+ public void testNiciraRoleReplyMaster2Slave()
+ throws Exception {
int xid = 424242;
Controller.OFChannelHandler chdlr = getChannelHandlerForRoleReplyTest();
- OFVendor msg = getRoleReplyMsgForRoleReplyTest(xid,
- OFRoleReplyVendorData.NX_ROLE_SLAVE);
-
+ OFVendor msg = getRoleReplyMsgForRoleReplyTest(xid,
+ OFRoleReplyVendorData.NX_ROLE_SLAVE);
+
chdlr.sw.deliverRoleReply(xid, Role.SLAVE);
expect(chdlr.sw.getId()).andReturn(1L).anyTimes();
expect(chdlr.sw.getStringId()).andReturn("00:00:00:00:00:00:00:01")
- .anyTimes();
+ .anyTimes();
controller.activeSwitches.put(1L, chdlr.sw);
expect(chdlr.sw.isActive()).andReturn(false);
expect(chdlr.sw.isConnected()).andReturn(true);
@@ -1032,15 +1047,16 @@
replay(chdlr.sw);
chdlr.processOFMessage(msg);
verify(chdlr.sw);
- assertTrue("state.firstRoleReplyReceived must be true",
- chdlr.state.firstRoleReplyReceived);
- assertTrue("activeSwitches must be empty",
- controller.activeSwitches.isEmpty());
+ assertTrue("state.firstRoleReplyReceived must be true",
+ chdlr.state.firstRoleReplyReceived);
+ assertTrue("activeSwitches must be empty",
+ controller.activeSwitches.isEmpty());
}
-
+
/**
* Tests that you can't remove a switch from the active
* switch list.
+ *
* @throws Exception
*/
@Test
@@ -1058,52 +1074,52 @@
assertTrue(exceptionThrown);
verify(sw);
}
-
+
public void verifyPortChangedUpdateInQueue(IOFSwitch sw) throws Exception {
assertEquals(1, controller.updates.size());
IUpdate update = controller.updates.take();
assertEquals(true, update instanceof SwitchUpdate);
- SwitchUpdate swUpdate = (SwitchUpdate)update;
+ SwitchUpdate swUpdate = (SwitchUpdate) update;
assertEquals(sw, swUpdate.sw);
assertEquals(SwitchUpdateType.PORTCHANGED, swUpdate.switchUpdateType);
}
-
+
public void verifyPortAddedUpdateInQueue(IOFSwitch sw) throws Exception {
assertEquals(2, controller.updates.size());
IUpdate update = controller.updates.take();
assertEquals(true, update instanceof SwitchUpdate);
- SwitchUpdate swUpdate = (SwitchUpdate)update;
+ SwitchUpdate swUpdate = (SwitchUpdate) update;
assertEquals(sw, swUpdate.sw);
assertEquals(SwitchUpdateType.PORTADDED, swUpdate.switchUpdateType);
verifyPortChangedUpdateInQueue(sw);
}
-
+
public void verifyPortRemovedUpdateInQueue(IOFSwitch sw) throws Exception {
assertEquals(2, controller.updates.size());
IUpdate update = controller.updates.take();
assertEquals(true, update instanceof SwitchUpdate);
- SwitchUpdate swUpdate = (SwitchUpdate)update;
+ SwitchUpdate swUpdate = (SwitchUpdate) update;
assertEquals(sw, swUpdate.sw);
assertEquals(SwitchUpdateType.PORTREMOVED, swUpdate.switchUpdateType);
verifyPortChangedUpdateInQueue(sw);
}
-
+
/*
* Test handlePortStatus()
* TODO: test correct updateStorage behavior!
*/
- @Test
+ @Test
public void testHandlePortStatus() throws Exception {
IOFSwitch sw = createMock(IOFSwitch.class);
expect(sw.getId()).andReturn(1L).anyTimes();
OFPhysicalPort port = new OFPhysicalPort();
port.setName("myPortName1");
- port.setPortNumber((short)42);
-
+ port.setPortNumber((short) 42);
+
OFPortStatus ofps = new OFPortStatus();
ofps.setDesc(port);
-
- ofps.setReason((byte)OFPortReason.OFPPR_ADD.ordinal());
+
+ ofps.setReason((byte) OFPortReason.OFPPR_ADD.ordinal());
sw.setPort(port);
expectLastCall().once();
replay(sw);
@@ -1111,9 +1127,9 @@
verify(sw);
verifyPortAddedUpdateInQueue(sw);
reset(sw);
-
+
// ONOS:Port is considered added if Link state is not down and not configured to be down
- ofps.setReason((byte)OFPortReason.OFPPR_MODIFY.ordinal());
+ ofps.setReason((byte) OFPortReason.OFPPR_MODIFY.ordinal());
sw.setPort(port);
expectLastCall().once();
replay(sw);
@@ -1121,9 +1137,9 @@
verify(sw);
verifyPortAddedUpdateInQueue(sw);
reset(sw);
-
+
// ONOS:Port is considered removed if Link state is down
- ofps.setReason((byte)OFPortReason.OFPPR_MODIFY.ordinal());
+ ofps.setReason((byte) OFPortReason.OFPPR_MODIFY.ordinal());
port.setState(OFPortState.OFPPS_LINK_DOWN.getValue());
sw.setPort(port);
expectLastCall().once();
@@ -1133,9 +1149,9 @@
verifyPortRemovedUpdateInQueue(sw);
reset(sw);
port.setState(0);// reset
-
+
// ONOS: .. or is configured to be down
- ofps.setReason((byte)OFPortReason.OFPPR_MODIFY.ordinal());
+ ofps.setReason((byte) OFPortReason.OFPPR_MODIFY.ordinal());
port.setConfig(OFPortConfig.OFPPC_PORT_DOWN.getValue());
sw.setPort(port);
expectLastCall().once();
@@ -1145,9 +1161,9 @@
verifyPortRemovedUpdateInQueue(sw);
reset(sw);
port.setConfig(0);// reset
-
-
- ofps.setReason((byte)OFPortReason.OFPPR_DELETE.ordinal());
+
+
+ ofps.setReason((byte) OFPortReason.OFPPR_DELETE.ordinal());
sw.deletePort(port.getPortNumber());
expectLastCall().once();
replay(sw);
diff --git a/src/test/java/net/floodlightcontroller/core/internal/OFSwitchImplTest.java b/src/test/java/net/floodlightcontroller/core/internal/OFSwitchImplTest.java
index 152d2f0..cf03551 100644
--- a/src/test/java/net/floodlightcontroller/core/internal/OFSwitchImplTest.java
+++ b/src/test/java/net/floodlightcontroller/core/internal/OFSwitchImplTest.java
@@ -31,8 +31,8 @@
public class OFSwitchImplTest extends FloodlightTestCase {
protected OFSwitchImpl sw;
-
-
+
+
@Before
public void setUp() throws Exception {
sw = new OFSwitchImpl();
@@ -44,10 +44,10 @@
sw.setFloodlightProvider(floodlightProvider);
}
-
+
public void doSendNxRoleRequest(Role role, int nx_role) throws Exception {
long cookie = System.nanoTime();
-
+
// verify that the correct OFMessage is sent
Capture<List<OFMessage>> msgCapture = new Capture<List<OFMessage>>();
expect(sw.channel.write(capture(msgCapture))).andReturn(null);
@@ -57,18 +57,18 @@
List<OFMessage> msgList = msgCapture.getValue();
assertEquals(1, msgList.size());
OFMessage msg = msgList.get(0);
- assertEquals("Transaction Ids must match", xid, msg.getXid());
+ assertEquals("Transaction Ids must match", xid, msg.getXid());
assertTrue("Message must be an OFVendor type", msg instanceof OFVendor);
assertEquals(OFType.VENDOR, msg.getType());
- OFVendor vendorMsg = (OFVendor)msg;
+ OFVendor vendorMsg = (OFVendor) msg;
assertEquals("Vendor message must be vendor Nicira",
- OFNiciraVendorData.NX_VENDOR_ID, vendorMsg.getVendor());
+ OFNiciraVendorData.NX_VENDOR_ID, vendorMsg.getVendor());
OFVendorData vendorData = vendorMsg.getVendorData();
assertTrue("Vendor Data must be an OFRoleRequestVendorData",
- vendorData instanceof OFRoleRequestVendorData);
- OFRoleRequestVendorData roleRequest = (OFRoleRequestVendorData)vendorData;
+ vendorData instanceof OFRoleRequestVendorData);
+ OFRoleRequestVendorData roleRequest = (OFRoleRequestVendorData) vendorData;
assertEquals(nx_role, roleRequest.getRole());
-
+
// Now verify that we've added the pending request correctly
// to the pending queue
assertEquals(1, sw.pendingRoleRequests.size());
@@ -78,23 +78,23 @@
assertEquals(cookie, pendingRoleRequest.cookie);
reset(sw.channel);
}
-
+
@Test
public void testSendNxRoleRequest() throws Exception {
doSendNxRoleRequest(Role.MASTER, OFRoleVendorData.NX_ROLE_MASTER);
doSendNxRoleRequest(Role.SLAVE, OFRoleVendorData.NX_ROLE_SLAVE);
doSendNxRoleRequest(Role.EQUAL, OFRoleVendorData.NX_ROLE_OTHER);
}
-
-
+
+
@Test
public void testDeliverRoleReplyOk() {
// test normal case
PendingRoleRequestEntry pending = new PendingRoleRequestEntry(
- (int)System.currentTimeMillis(), // arbitrary xid
- Role.MASTER,
- System.nanoTime() // arbitrary cookie
- );
+ (int) System.currentTimeMillis(), // arbitrary xid
+ Role.MASTER,
+ System.nanoTime() // arbitrary cookie
+ );
sw.pendingRoleRequests.add(pending);
replay(sw.channel);
sw.deliverRoleReply(pending.xid, pending.role);
@@ -103,15 +103,15 @@
assertEquals(pending.role, sw.role);
assertEquals(0, sw.pendingRoleRequests.size());
}
-
+
@Test
public void testDeliverRoleReplyOkRepeated() {
// test normal case. Not the first role reply
PendingRoleRequestEntry pending = new PendingRoleRequestEntry(
- (int)System.currentTimeMillis(), // arbitrary xid
- Role.MASTER,
- System.nanoTime() // arbitrary cookie
- );
+ (int) System.currentTimeMillis(), // arbitrary xid
+ Role.MASTER,
+ System.nanoTime() // arbitrary cookie
+ );
sw.setAttribute(IOFSwitch.SWITCH_SUPPORTS_NX_ROLE, true);
sw.pendingRoleRequests.add(pending);
replay(sw.channel);
@@ -121,7 +121,7 @@
assertEquals(pending.role, sw.role);
assertEquals(0, sw.pendingRoleRequests.size());
}
-
+
@Test
public void testDeliverRoleReplyNonePending() {
// nothing pending
@@ -131,32 +131,32 @@
verify(sw.channel);
assertEquals(0, sw.pendingRoleRequests.size());
}
-
+
@Test
public void testDeliverRoleReplyWrongXid() {
// wrong xid received
PendingRoleRequestEntry pending = new PendingRoleRequestEntry(
- (int)System.currentTimeMillis(), // arbitrary xid
- Role.MASTER,
- System.nanoTime() // arbitrary cookie
- );
+ (int) System.currentTimeMillis(), // arbitrary xid
+ Role.MASTER,
+ System.nanoTime() // arbitrary cookie
+ );
sw.pendingRoleRequests.add(pending);
expect(sw.channel.close()).andReturn(null);
replay(sw.channel);
- sw.deliverRoleReply(pending.xid+1, pending.role);
+ sw.deliverRoleReply(pending.xid + 1, pending.role);
verify(sw.channel);
assertEquals(null, sw.getAttribute(IOFSwitch.SWITCH_SUPPORTS_NX_ROLE));
assertEquals(0, sw.pendingRoleRequests.size());
}
-
+
@Test
public void testDeliverRoleReplyWrongRole() {
// correct xid but incorrect role received
PendingRoleRequestEntry pending = new PendingRoleRequestEntry(
- (int)System.currentTimeMillis(), // arbitrary xid
- Role.MASTER,
- System.nanoTime() // arbitrary cookie
- );
+ (int) System.currentTimeMillis(), // arbitrary xid
+ Role.MASTER,
+ System.nanoTime() // arbitrary cookie
+ );
sw.pendingRoleRequests.add(pending);
expect(sw.channel.close()).andReturn(null);
replay(sw.channel);
@@ -165,11 +165,11 @@
assertEquals(null, sw.getAttribute(IOFSwitch.SWITCH_SUPPORTS_NX_ROLE));
assertEquals(0, sw.pendingRoleRequests.size());
}
-
+
@Test
public void testCheckFirstPendingRoleRequestXid() {
PendingRoleRequestEntry pending = new PendingRoleRequestEntry(
- 54321, Role.MASTER, 232323);
+ 54321, Role.MASTER, 232323);
replay(sw.channel); // we don't expect any invocations
sw.pendingRoleRequests.add(pending);
assertEquals(true, sw.checkFirstPendingRoleRequestXid(54321));
@@ -178,11 +178,11 @@
assertEquals(false, sw.checkFirstPendingRoleRequestXid(54321));
verify(sw.channel);
}
-
+
@Test
public void testCheckFirstPendingRoleRequestCookie() {
PendingRoleRequestEntry pending = new PendingRoleRequestEntry(
- 54321, Role.MASTER, 232323);
+ 54321, Role.MASTER, 232323);
replay(sw.channel); // we don't expect any invocations
sw.pendingRoleRequests.add(pending);
assertEquals(true, sw.checkFirstPendingRoleRequestCookie(232323));
@@ -191,15 +191,15 @@
assertEquals(false, sw.checkFirstPendingRoleRequestCookie(232323));
verify(sw.channel);
}
-
+
@Test
- public void testDeliverRoleRequestNotSupported () {
+ public void testDeliverRoleRequestNotSupported() {
// normal case. xid is pending
PendingRoleRequestEntry pending = new PendingRoleRequestEntry(
- (int)System.currentTimeMillis(), // arbitrary xid
- Role.MASTER,
- System.nanoTime() // arbitrary cookie
- );
+ (int) System.currentTimeMillis(), // arbitrary xid
+ Role.MASTER,
+ System.nanoTime() // arbitrary cookie
+ );
sw.role = Role.SLAVE;
sw.pendingRoleRequests.add(pending);
replay(sw.channel);
@@ -209,7 +209,7 @@
assertEquals(null, sw.role);
assertEquals(0, sw.pendingRoleRequests.size());
}
-
+
@Test
public void testDeliverRoleRequestNotSupportedNonePending() {
// nothing pending
@@ -221,20 +221,20 @@
assertEquals(null, sw.role);
assertEquals(0, sw.pendingRoleRequests.size());
}
-
+
@Test
public void testDeliverRoleRequestNotSupportedWrongXid() {
// wrong xid received
PendingRoleRequestEntry pending = new PendingRoleRequestEntry(
- (int)System.currentTimeMillis(), // arbitrary xid
- Role.MASTER,
- System.nanoTime() // arbitrary cookie
- );
+ (int) System.currentTimeMillis(), // arbitrary xid
+ Role.MASTER,
+ System.nanoTime() // arbitrary cookie
+ );
sw.role = Role.SLAVE;
sw.pendingRoleRequests.add(pending);
expect(sw.channel.close()).andReturn(null);
replay(sw.channel);
- sw.deliverRoleRequestNotSupportedEx(pending.xid+1);
+ sw.deliverRoleRequestNotSupportedEx(pending.xid + 1);
verify(sw.channel);
assertEquals(null, sw.role);
assertEquals(0, sw.pendingRoleRequests.size());
diff --git a/src/test/java/net/floodlightcontroller/core/internal/RoleChangeCallbackTest.java b/src/test/java/net/floodlightcontroller/core/internal/RoleChangeCallbackTest.java
index 90eb68d..6e707ca 100644
--- a/src/test/java/net/floodlightcontroller/core/internal/RoleChangeCallbackTest.java
+++ b/src/test/java/net/floodlightcontroller/core/internal/RoleChangeCallbackTest.java
@@ -16,129 +16,133 @@
// Extends Controller class to access protected inner class
public class RoleChangeCallbackTest extends Controller {
- @Before
- public void setUp() throws Exception {
- }
+ @Before
+ public void setUp() throws Exception {
+ }
- @After
- public void tearDown() throws Exception {
- }
+ @After
+ public void tearDown() throws Exception {
+ }
- /**
- * Test if {@link RoleChangeCallback#controlChanged(long, boolean)} correctly calls {@link RoleChanger#submitRequest(Collection, net.floodlightcontroller.core.IFloodlightProviderService.Role)}
- * when connectedSwitch is not empty.
- * @throws Exception
- */
- @SuppressWarnings("unchecked")
- @Test
- public void testNormalSwitches() throws Exception {
- Long [] dpids = new Long [] { 1000L, 1001L, 1002L, 1003L };
- final long dpidExist = 1000L;
- final long dpidNotExist = 2000L;
-
- roleChanger = EasyMock.createMock(RoleChanger.class);
-
- // First call will be called with (dpidExist,true)
- roleChanger.submitRequest(EasyMock.anyObject(Collection.class), EasyMock.anyObject(Role.class));
- EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
- @Override
- public Object answer() throws Throwable {
- Collection<OFSwitchImpl> switches = (Collection<OFSwitchImpl>)EasyMock.getCurrentArguments()[0];
- Role role = (Role)EasyMock.getCurrentArguments()[1];
+ /**
+ * Test if {@link RoleChangeCallback#controlChanged(long, boolean)} correctly calls {@link RoleChanger#submitRequest(Collection, net.floodlightcontroller.core.IFloodlightProviderService.Role)}
+ * when connectedSwitch is not empty.
+ *
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testNormalSwitches() throws Exception {
+ Long[] dpids = new Long[]{1000L, 1001L, 1002L, 1003L};
+ final long dpidExist = 1000L;
+ final long dpidNotExist = 2000L;
- List<Long> dpids = new ArrayList<Long>();
-
- for(OFSwitchImpl sw : switches) {
- dpids.add(sw.getId());
- }
- assertTrue(dpids.contains(dpidExist));
- assertEquals(role, Role.MASTER);
-
- return null;
- }
- }).once();
+ roleChanger = EasyMock.createMock(RoleChanger.class);
- // Second call will be called with (dpidExist,false)
- roleChanger.submitRequest(EasyMock.anyObject(Collection.class), EasyMock.anyObject(Role.class));
- EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
- @Override
- public Object answer() throws Throwable {
- Collection<OFSwitchImpl> switches = (Collection<OFSwitchImpl>)EasyMock.getCurrentArguments()[0];
- Role role = (Role)EasyMock.getCurrentArguments()[1];
+ // First call will be called with (dpidExist,true)
+ roleChanger.submitRequest(EasyMock.anyObject(Collection.class), EasyMock.anyObject(Role.class));
+ EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+ @Override
+ public Object answer() throws Throwable {
+ Collection<OFSwitchImpl> switches = (Collection<OFSwitchImpl>) EasyMock.getCurrentArguments()[0];
+ Role role = (Role) EasyMock.getCurrentArguments()[1];
- List<Long> dpids = new ArrayList<Long>();
-
- for(OFSwitchImpl sw : switches) {
- dpids.add(sw.getId());
- }
- assertTrue(dpids.contains(dpidExist));
- assertEquals(role, Role.SLAVE);
-
- return null;
- }
- }).once();
+ List<Long> dpids = new ArrayList<Long>();
- EasyMock.replay(roleChanger);
-
- initNetwork(roleChanger, dpids);
-
- RoleChangeCallback callback = new RoleChangeCallback();
- callback.controlChanged(dpidExist, true);
- callback.controlChanged(dpidExist, false);
- callback.controlChanged(dpidNotExist, true);
- callback.controlChanged(dpidNotExist, false);
-
- EasyMock.verify(roleChanger);
- }
+ for (OFSwitchImpl sw : switches) {
+ dpids.add(sw.getId());
+ }
+ assertTrue(dpids.contains(dpidExist));
+ assertEquals(role, Role.MASTER);
- /**
- * Test if {@link RoleChangeCallback#controlChanged(long, boolean)} doesn't call RoleChanger methods
- * when connectedSwitch is empty.
- * @throws Exception
- */
- @Test
- public void testEmptySwitches() throws Exception {
- Long [] dpids = new Long [] {};
- final long dpidToTest = 1000L;
-
- roleChanger = EasyMock.createMock(RoleChanger.class);
- // roleChanger methods must not be used
- EasyMock.replay(roleChanger);
-
- initNetwork(roleChanger, dpids);
-
- RoleChangeCallback callback = new RoleChangeCallback();
- callback.controlChanged(dpidToTest, true);
- callback.controlChanged(dpidToTest, false);
-
- EasyMock.verify(roleChanger);
- }
-
- /**
- * Create mock OFSwitchImpl object.
- * @param id
- * @return
- */
- private OFSwitchImpl createOFSwitchImplMock(Long id) {
- OFSwitchImpl sw = EasyMock.createMock(OFSwitchImpl.class);
+ return null;
+ }
+ }).once();
- EasyMock.expect(sw.getId()).andReturn(id).anyTimes();
- EasyMock.replay(sw);
-
- return sw;
- }
-
- /**
- * Setup connectedSwitches
- * @param changer
- * @param ids
- * @throws Exception
- */
- private void initNetwork(RoleChanger changer, Long [] ids) throws Exception {
- connectedSwitches = new HashSet<OFSwitchImpl>();
-
- for(Long id : ids) {
- connectedSwitches.add(createOFSwitchImplMock(id));
- }
- }
+ // Second call will be called with (dpidExist,false)
+ roleChanger.submitRequest(EasyMock.anyObject(Collection.class), EasyMock.anyObject(Role.class));
+ EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+ @Override
+ public Object answer() throws Throwable {
+ Collection<OFSwitchImpl> switches = (Collection<OFSwitchImpl>) EasyMock.getCurrentArguments()[0];
+ Role role = (Role) EasyMock.getCurrentArguments()[1];
+
+ List<Long> dpids = new ArrayList<Long>();
+
+ for (OFSwitchImpl sw : switches) {
+ dpids.add(sw.getId());
+ }
+ assertTrue(dpids.contains(dpidExist));
+ assertEquals(role, Role.SLAVE);
+
+ return null;
+ }
+ }).once();
+
+ EasyMock.replay(roleChanger);
+
+ initNetwork(roleChanger, dpids);
+
+ RoleChangeCallback callback = new RoleChangeCallback();
+ callback.controlChanged(dpidExist, true);
+ callback.controlChanged(dpidExist, false);
+ callback.controlChanged(dpidNotExist, true);
+ callback.controlChanged(dpidNotExist, false);
+
+ EasyMock.verify(roleChanger);
+ }
+
+ /**
+ * Test if {@link RoleChangeCallback#controlChanged(long, boolean)} doesn't call RoleChanger methods
+ * when connectedSwitch is empty.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testEmptySwitches() throws Exception {
+ Long[] dpids = new Long[]{};
+ final long dpidToTest = 1000L;
+
+ roleChanger = EasyMock.createMock(RoleChanger.class);
+ // roleChanger methods must not be used
+ EasyMock.replay(roleChanger);
+
+ initNetwork(roleChanger, dpids);
+
+ RoleChangeCallback callback = new RoleChangeCallback();
+ callback.controlChanged(dpidToTest, true);
+ callback.controlChanged(dpidToTest, false);
+
+ EasyMock.verify(roleChanger);
+ }
+
+ /**
+ * Create mock OFSwitchImpl object.
+ *
+ * @param id
+ * @return
+ */
+ private OFSwitchImpl createOFSwitchImplMock(Long id) {
+ OFSwitchImpl sw = EasyMock.createMock(OFSwitchImpl.class);
+
+ EasyMock.expect(sw.getId()).andReturn(id).anyTimes();
+ EasyMock.replay(sw);
+
+ return sw;
+ }
+
+ /**
+ * Setup connectedSwitches
+ *
+ * @param changer
+ * @param ids
+ * @throws Exception
+ */
+ private void initNetwork(RoleChanger changer, Long[] ids) throws Exception {
+ connectedSwitches = new HashSet<OFSwitchImpl>();
+
+ for (Long id : ids) {
+ connectedSwitches.add(createOFSwitchImplMock(id));
+ }
+ }
}
diff --git a/src/test/java/net/floodlightcontroller/core/internal/RoleChangerTest.java b/src/test/java/net/floodlightcontroller/core/internal/RoleChangerTest.java
index 2b85221..9078665 100644
--- a/src/test/java/net/floodlightcontroller/core/internal/RoleChangerTest.java
+++ b/src/test/java/net/floodlightcontroller/core/internal/RoleChangerTest.java
@@ -25,195 +25,196 @@
public class RoleChangerTest {
public RoleChanger roleChanger;
-
+
@Before
public void setUp() throws Exception {
roleChanger = new RoleChanger();
}
-
+
/**
- * Send a role request for SLAVE to a switch that doesn't support it.
+ * Send a role request for SLAVE to a switch that doesn't support it.
* The connection should be closed.
*/
@Test
public void testSendRoleRequestSlaveNotSupported() {
LinkedList<OFSwitchImpl> switches = new LinkedList<OFSwitchImpl>();
-
+
// a switch that doesn't support role requests
OFSwitchImpl sw1 = EasyMock.createMock(OFSwitchImpl.class);
Channel channel1 = createMock(Channel.class);
expect(sw1.getChannel()).andReturn(channel1);
// No support for NX_ROLE
expect(sw1.getAttribute(IOFSwitch.SWITCH_SUPPORTS_NX_ROLE))
- .andReturn(false);
+ .andReturn(false);
expect(channel1.close()).andReturn(null);
switches.add(sw1);
-
+
replay(sw1, channel1);
roleChanger.sendRoleRequest(switches, Role.SLAVE, 123456);
verify(sw1, channel1);
-
+
// sendRoleRequest needs to remove the switch from the list since
// it closed its connection
assertTrue(switches.isEmpty());
}
-
+
/**
- * Send a role request for MASTER to a switch that doesn't support it.
+ * Send a role request for MASTER to a switch that doesn't support it.
* The connection should be closed.
*/
@Test
- @Ignore // FIXME: ONOS modified the behavior here to intentionally trigger OFS error.
+ @Ignore
+ // FIXME: ONOS modified the behavior here to intentionally trigger OFS error.
public void testSendRoleRequestMasterNotSupported() {
LinkedList<OFSwitchImpl> switches = new LinkedList<OFSwitchImpl>();
-
+
// a switch that doesn't support role requests
OFSwitchImpl sw1 = EasyMock.createMock(OFSwitchImpl.class);
// No support for NX_ROLE
expect(sw1.getAttribute(IOFSwitch.SWITCH_SUPPORTS_NX_ROLE))
- .andReturn(false);
+ .andReturn(false);
switches.add(sw1);
-
+
replay(sw1);
roleChanger.sendRoleRequest(switches, Role.MASTER, 123456);
verify(sw1);
-
+
assertEquals(1, switches.size());
}
-
+
/**
- * Send a role request a switch that supports it and one that
+ * Send a role request a switch that supports it and one that
* hasn't had a role request send to it yet
*/
@Test
- public void testSendRoleRequestErrorHandling () throws Exception {
+ public void testSendRoleRequestErrorHandling() throws Exception {
LinkedList<OFSwitchImpl> switches = new LinkedList<OFSwitchImpl>();
-
+
// a switch that supports role requests
OFSwitchImpl sw1 = EasyMock.createMock(OFSwitchImpl.class);
// No support for NX_ROLE
expect(sw1.getAttribute(IOFSwitch.SWITCH_SUPPORTS_NX_ROLE))
- .andReturn(true);
+ .andReturn(true);
expect(sw1.sendNxRoleRequest(Role.MASTER, 123456))
- .andThrow(new IOException()).once();
+ .andThrow(new IOException()).once();
Channel channel1 = createMock(Channel.class);
expect(sw1.getChannel()).andReturn(channel1);
expect(channel1.close()).andReturn(null);
switches.add(sw1);
-
+
replay(sw1);
roleChanger.sendRoleRequest(switches, Role.MASTER, 123456);
verify(sw1);
-
+
assertTrue(switches.isEmpty());
}
-
+
/**
- * Check error handling
+ * Check error handling
* hasn't had a role request send to it yet
*/
@Test
public void testSendRoleRequestSupported() throws Exception {
LinkedList<OFSwitchImpl> switches = new LinkedList<OFSwitchImpl>();
-
+
// a switch that supports role requests
OFSwitchImpl sw1 = EasyMock.createMock(OFSwitchImpl.class);
// No support for NX_ROLE
expect(sw1.getAttribute(IOFSwitch.SWITCH_SUPPORTS_NX_ROLE))
- .andReturn(true);
+ .andReturn(true);
expect(sw1.sendNxRoleRequest(Role.MASTER, 123456)).andReturn(1).once();
switches.add(sw1);
-
+
// a switch for which we don't have SUPPORTS_NX_ROLE yet
OFSwitchImpl sw2 = EasyMock.createMock(OFSwitchImpl.class);
// No support for NX_ROLE
expect(sw2.getAttribute(IOFSwitch.SWITCH_SUPPORTS_NX_ROLE))
- .andReturn(null);
+ .andReturn(null);
expect(sw2.sendNxRoleRequest(Role.MASTER, 123456)).andReturn(1).once();
switches.add(sw2);
-
-
+
+
replay(sw1, sw2);
roleChanger.sendRoleRequest(switches, Role.MASTER, 123456);
verify(sw1, sw2);
-
+
assertEquals(2, switches.size());
}
-
+
@Test
public void testVerifyRoleReplyReceived() {
LinkedList<OFSwitchImpl> switches = new LinkedList<OFSwitchImpl>();
-
+
// Add a switch that has received a role reply
OFSwitchImpl sw1 = EasyMock.createMock(OFSwitchImpl.class);
expect(sw1.checkFirstPendingRoleRequestCookie(123456))
- .andReturn(false).once();
+ .andReturn(false).once();
switches.add(sw1);
-
+
// Add a switch that has not yet received a role reply
OFSwitchImpl sw2 = EasyMock.createMock(OFSwitchImpl.class);
expect(sw2.checkFirstPendingRoleRequestCookie(123456))
- .andReturn(true).once();
+ .andReturn(true).once();
Channel channel2 = createMock(Channel.class);
expect(sw2.getChannel()).andReturn(channel2);
expect(channel2.close()).andReturn(null);
switches.add(sw2);
-
-
+
+
replay(sw1, sw2);
roleChanger.verifyRoleReplyReceived(switches, 123456);
verify(sw1, sw2);
-
+
assertEquals(2, switches.size());
}
-
+
@Test
public void testRoleChangeTask() {
@SuppressWarnings("unchecked")
- Collection<OFSwitchImpl> switches =
+ Collection<OFSwitchImpl> switches =
EasyMock.createMock(Collection.class);
long now = System.nanoTime();
- long dt1 = 10 * 1000*1000*1000L;
- long dt2 = 20 * 1000*1000*1000L;
- long dt3 = 15 * 1000*1000*1000L;
- RoleChangeTask t1 = new RoleChangeTask(switches, null, now+dt1);
- RoleChangeTask t2 = new RoleChangeTask(switches, null, now+dt2);
- RoleChangeTask t3 = new RoleChangeTask(switches, null, now+dt3);
-
+ long dt1 = 10 * 1000 * 1000 * 1000L;
+ long dt2 = 20 * 1000 * 1000 * 1000L;
+ long dt3 = 15 * 1000 * 1000 * 1000L;
+ RoleChangeTask t1 = new RoleChangeTask(switches, null, now + dt1);
+ RoleChangeTask t2 = new RoleChangeTask(switches, null, now + dt2);
+ RoleChangeTask t3 = new RoleChangeTask(switches, null, now + dt3);
+
// FIXME: cannot test comparison against self. grrr
//assertTrue( t1.compareTo(t1) <= 0 );
- assertTrue( t1.compareTo(t2) < 0 );
- assertTrue( t1.compareTo(t3) < 0 );
-
- assertTrue( t2.compareTo(t1) > 0 );
+ assertTrue(t1.compareTo(t2) < 0);
+ assertTrue(t1.compareTo(t3) < 0);
+
+ assertTrue(t2.compareTo(t1) > 0);
//assertTrue( t2.compareTo(t2) <= 0 );
- assertTrue( t2.compareTo(t3) > 0 );
+ assertTrue(t2.compareTo(t3) > 0);
}
-
+
@Test
public void testSubmitRequest() throws Exception {
LinkedList<OFSwitchImpl> switches = new LinkedList<OFSwitchImpl>();
- roleChanger.timeout = 500*1000*1000; // 500 ms
-
+ roleChanger.timeout = 500 * 1000 * 1000; // 500 ms
+
// a switch that supports role requests
OFSwitchImpl sw1 = EasyMock.createStrictMock(OFSwitchImpl.class);
// No support for NX_ROLE
expect(sw1.getAttribute(IOFSwitch.SWITCH_SUPPORTS_NX_ROLE))
- .andReturn(true);
+ .andReturn(true);
expect(sw1.sendNxRoleRequest(EasyMock.same(Role.MASTER), EasyMock.anyLong()))
- .andReturn(1);
+ .andReturn(1);
expect(sw1.getAttribute(IOFSwitch.SWITCH_SUPPORTS_NX_ROLE))
- .andReturn(true);
+ .andReturn(true);
expect(sw1.sendNxRoleRequest(EasyMock.same(Role.SLAVE), EasyMock.anyLong()))
- .andReturn(1);
+ .andReturn(1);
// The following calls happen for timeout handling:
expect(sw1.checkFirstPendingRoleRequestCookie(EasyMock.anyLong()))
- .andReturn(false);
+ .andReturn(false);
expect(sw1.checkFirstPendingRoleRequestCookie(EasyMock.anyLong()))
- .andReturn(false);
+ .andReturn(false);
switches.add(sw1);
-
-
+
+
replay(sw1);
roleChanger.submitRequest(switches, Role.MASTER);
roleChanger.submitRequest(switches, Role.SLAVE);
@@ -223,17 +224,17 @@
// Now there should be exactly one timeout task pending
assertEquals(2, roleChanger.pendingTasks.size());
// Make sure it's indeed a timeout task
- assertSame(RoleChanger.RoleChangeTask.Type.TIMEOUT,
- roleChanger.pendingTasks.peek().type);
+ assertSame(RoleChanger.RoleChangeTask.Type.TIMEOUT,
+ roleChanger.pendingTasks.peek().type);
// Check that RoleChanger indeed made a copy of switches collection
assertNotSame(switches, roleChanger.pendingTasks.peek().switches);
-
+
// Wait until the timeout triggers
// TODO: get rid of this sleep too.
Thread.sleep(500);
assertEquals(0, roleChanger.pendingTasks.size());
verify(sw1);
-
+
}
-
+
}
diff --git a/src/test/java/net/floodlightcontroller/core/module/FloodlightTestModuleLoader.java b/src/test/java/net/floodlightcontroller/core/module/FloodlightTestModuleLoader.java
index beb6d4f..b70405e 100644
--- a/src/test/java/net/floodlightcontroller/core/module/FloodlightTestModuleLoader.java
+++ b/src/test/java/net/floodlightcontroller/core/module/FloodlightTestModuleLoader.java
@@ -11,148 +11,152 @@
import org.slf4j.LoggerFactory;
public class FloodlightTestModuleLoader extends FloodlightModuleLoader {
- protected final static Logger log = LoggerFactory.getLogger(FloodlightTestModuleLoader.class);
-
- // List of default modules to use unless specified otherwise
- public static final Class<? extends IFloodlightModule> DEFAULT_FLOODLIGHT_PRPOVIDER =
- MockFloodlightProvider.class;
- public static final Class<? extends IFloodlightModule> DEFAULT_THREADPOOL =
- MockThreadPoolService.class;
-
-
- protected static final Collection<Class<? extends IFloodlightModule>> DEFAULT_MODULE_LIST;
-
- static {
- DEFAULT_MODULE_LIST = new ArrayList<Class<? extends IFloodlightModule>>();
- DEFAULT_MODULE_LIST.add(DEFAULT_FLOODLIGHT_PRPOVIDER);
- DEFAULT_MODULE_LIST.add(DEFAULT_THREADPOOL);
+ protected final static Logger log = LoggerFactory.getLogger(FloodlightTestModuleLoader.class);
- }
-
- protected IFloodlightModuleContext fmc;
-
- /**
- * Adds default modules to the list of modules to load. This is done
- * in order to avoid the module loader throwing errors about duplicate
- * modules and neither one is specified by the user.
- * @param userModules The list of user specified modules to add to.
- */
- protected void addDefaultModules(Collection<Class<? extends IFloodlightModule>> userModules) {
- Collection<Class<? extends IFloodlightModule>> defaultModules =
- new ArrayList<Class<? extends IFloodlightModule>>(DEFAULT_MODULE_LIST.size());
- defaultModules.addAll(DEFAULT_MODULE_LIST);
-
- Iterator<Class<? extends IFloodlightModule>> modIter = userModules.iterator();
- while (modIter.hasNext()) {
- Class<? extends IFloodlightModule> userMod = modIter.next();
- Iterator<Class<? extends IFloodlightModule>> dmIter = defaultModules.iterator();
- while (dmIter.hasNext()) {
- Class<? extends IFloodlightModule> dmMod = dmIter.next();
- Collection<Class<? extends IFloodlightService>> userModServs;
- Collection<Class<? extends IFloodlightService>> dmModServs;
- try {
- dmModServs = dmMod.newInstance().getModuleServices();
- userModServs = userMod.newInstance().getModuleServices();
- } catch (InstantiationException e) {
- log.error(e.getMessage());
- break;
- } catch (IllegalAccessException e) {
- log.error(e.getMessage());
- break;
- }
-
- // If either of these are null continue as they have no services
- if (dmModServs == null || userModServs == null) continue;
-
- // If the user supplied modules has a service
- // that is in the default module list we remove
- // the default module from the list.
- boolean shouldBreak = false;
- Iterator<Class<? extends IFloodlightService>> userModServsIter
- = userModServs.iterator();
- while (userModServsIter.hasNext()) {
- Class<? extends IFloodlightService> userModServIntf = userModServsIter.next();
- Iterator<Class<? extends IFloodlightService>> dmModsServsIter
- = dmModServs.iterator();
- while (dmModsServsIter.hasNext()) {
- Class<? extends IFloodlightService> dmModServIntf
- = dmModsServsIter.next();
-
- if (dmModServIntf.getCanonicalName().equals(
- userModServIntf.getCanonicalName())) {
- logger.debug("Removing default module {} because it was " +
- "overriden by an explicitly specified module",
- dmModServIntf.getCanonicalName());
- dmIter.remove();
- shouldBreak = true;
- break;
- }
- }
- if (shouldBreak) break;
- }
- if (shouldBreak) break;
- }
- }
-
- // Append the remaining default modules to the user specified ones.
- // This avoids the module loader throwing duplicate module errors.
- userModules.addAll(defaultModules);
- log.debug("Using module set " + userModules.toString());
- }
-
- /**
- * Sets up all modules and their dependencies.
- * @param modules The list of modules that the user wants to load.
- * @param mockedServices The list of services that will be mocked. Any
- * module that provides this service will not be loaded.
- */
- public void setupModules(Collection<Class<? extends IFloodlightModule>> modules,
- Collection<IFloodlightService> mockedServices) {
- addDefaultModules(modules);
- Collection<String> modulesAsString = new ArrayList<String>();
- for (Class<? extends IFloodlightModule> m : modules) {
- modulesAsString.add(m.getCanonicalName());
- }
-
- try {
- fmc = loadModulesFromList(modulesAsString, null, mockedServices);
- } catch (FloodlightModuleException e) {
- log.error(e.getMessage());
- }
- }
-
- /**
- * Gets the inited/started instance of a module from the context.
- * @param ifl The name if the module to get, i.e. "LearningSwitch.class".
- * @return The inited/started instance of the module.
- */
- public IFloodlightModule getModuleByName(Class<? extends IFloodlightModule> ifl) {
- Collection<IFloodlightModule> modules = fmc.getAllModules();
- for (IFloodlightModule m : modules) {
- if (ifl.getCanonicalName().equals(m.getClass().getCanonicalName())) {
- return m;
- }
- }
- return null;
- }
-
- /**
- * Gets an inited/started instance of a service from the context.
- * @param ifs The name of the service to get, i.e. "ITopologyService.class".
- * @return The inited/started instance of the service from teh context.
- */
- public IFloodlightService getModuleByService(Class<? extends IFloodlightService> ifs) {
- Collection<IFloodlightModule> modules = fmc.getAllModules();
- for (IFloodlightModule m : modules) {
- Collection<Class<? extends IFloodlightService>> mServs = m.getModuleServices();
- if (mServs == null) continue;
- for (Class<? extends IFloodlightService> mServClass : mServs) {
- if (mServClass.getCanonicalName().equals(ifs.getCanonicalName())) {
- assert(m instanceof IFloodlightService);
- return (IFloodlightService)m;
- }
- }
- }
- return null;
- }
+ // List of default modules to use unless specified otherwise
+ public static final Class<? extends IFloodlightModule> DEFAULT_FLOODLIGHT_PRPOVIDER =
+ MockFloodlightProvider.class;
+ public static final Class<? extends IFloodlightModule> DEFAULT_THREADPOOL =
+ MockThreadPoolService.class;
+
+
+ protected static final Collection<Class<? extends IFloodlightModule>> DEFAULT_MODULE_LIST;
+
+ static {
+ DEFAULT_MODULE_LIST = new ArrayList<Class<? extends IFloodlightModule>>();
+ DEFAULT_MODULE_LIST.add(DEFAULT_FLOODLIGHT_PRPOVIDER);
+ DEFAULT_MODULE_LIST.add(DEFAULT_THREADPOOL);
+
+ }
+
+ protected IFloodlightModuleContext fmc;
+
+ /**
+ * Adds default modules to the list of modules to load. This is done
+ * in order to avoid the module loader throwing errors about duplicate
+ * modules and neither one is specified by the user.
+ *
+ * @param userModules The list of user specified modules to add to.
+ */
+ protected void addDefaultModules(Collection<Class<? extends IFloodlightModule>> userModules) {
+ Collection<Class<? extends IFloodlightModule>> defaultModules =
+ new ArrayList<Class<? extends IFloodlightModule>>(DEFAULT_MODULE_LIST.size());
+ defaultModules.addAll(DEFAULT_MODULE_LIST);
+
+ Iterator<Class<? extends IFloodlightModule>> modIter = userModules.iterator();
+ while (modIter.hasNext()) {
+ Class<? extends IFloodlightModule> userMod = modIter.next();
+ Iterator<Class<? extends IFloodlightModule>> dmIter = defaultModules.iterator();
+ while (dmIter.hasNext()) {
+ Class<? extends IFloodlightModule> dmMod = dmIter.next();
+ Collection<Class<? extends IFloodlightService>> userModServs;
+ Collection<Class<? extends IFloodlightService>> dmModServs;
+ try {
+ dmModServs = dmMod.newInstance().getModuleServices();
+ userModServs = userMod.newInstance().getModuleServices();
+ } catch (InstantiationException e) {
+ log.error(e.getMessage());
+ break;
+ } catch (IllegalAccessException e) {
+ log.error(e.getMessage());
+ break;
+ }
+
+ // If either of these are null continue as they have no services
+ if (dmModServs == null || userModServs == null) continue;
+
+ // If the user supplied modules has a service
+ // that is in the default module list we remove
+ // the default module from the list.
+ boolean shouldBreak = false;
+ Iterator<Class<? extends IFloodlightService>> userModServsIter
+ = userModServs.iterator();
+ while (userModServsIter.hasNext()) {
+ Class<? extends IFloodlightService> userModServIntf = userModServsIter.next();
+ Iterator<Class<? extends IFloodlightService>> dmModsServsIter
+ = dmModServs.iterator();
+ while (dmModsServsIter.hasNext()) {
+ Class<? extends IFloodlightService> dmModServIntf
+ = dmModsServsIter.next();
+
+ if (dmModServIntf.getCanonicalName().equals(
+ userModServIntf.getCanonicalName())) {
+ logger.debug("Removing default module {} because it was " +
+ "overriden by an explicitly specified module",
+ dmModServIntf.getCanonicalName());
+ dmIter.remove();
+ shouldBreak = true;
+ break;
+ }
+ }
+ if (shouldBreak) break;
+ }
+ if (shouldBreak) break;
+ }
+ }
+
+ // Append the remaining default modules to the user specified ones.
+ // This avoids the module loader throwing duplicate module errors.
+ userModules.addAll(defaultModules);
+ log.debug("Using module set " + userModules.toString());
+ }
+
+ /**
+ * Sets up all modules and their dependencies.
+ *
+ * @param modules The list of modules that the user wants to load.
+ * @param mockedServices The list of services that will be mocked. Any
+ * module that provides this service will not be loaded.
+ */
+ public void setupModules(Collection<Class<? extends IFloodlightModule>> modules,
+ Collection<IFloodlightService> mockedServices) {
+ addDefaultModules(modules);
+ Collection<String> modulesAsString = new ArrayList<String>();
+ for (Class<? extends IFloodlightModule> m : modules) {
+ modulesAsString.add(m.getCanonicalName());
+ }
+
+ try {
+ fmc = loadModulesFromList(modulesAsString, null, mockedServices);
+ } catch (FloodlightModuleException e) {
+ log.error(e.getMessage());
+ }
+ }
+
+ /**
+ * Gets the inited/started instance of a module from the context.
+ *
+ * @param ifl The name if the module to get, i.e. "LearningSwitch.class".
+ * @return The inited/started instance of the module.
+ */
+ public IFloodlightModule getModuleByName(Class<? extends IFloodlightModule> ifl) {
+ Collection<IFloodlightModule> modules = fmc.getAllModules();
+ for (IFloodlightModule m : modules) {
+ if (ifl.getCanonicalName().equals(m.getClass().getCanonicalName())) {
+ return m;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Gets an inited/started instance of a service from the context.
+ *
+ * @param ifs The name of the service to get, i.e. "ITopologyService.class".
+ * @return The inited/started instance of the service from teh context.
+ */
+ public IFloodlightService getModuleByService(Class<? extends IFloodlightService> ifs) {
+ Collection<IFloodlightModule> modules = fmc.getAllModules();
+ for (IFloodlightModule m : modules) {
+ Collection<Class<? extends IFloodlightService>> mServs = m.getModuleServices();
+ if (mServs == null) continue;
+ for (Class<? extends IFloodlightService> mServClass : mServs) {
+ if (mServClass.getCanonicalName().equals(ifs.getCanonicalName())) {
+ assert (m instanceof IFloodlightService);
+ return (IFloodlightService) m;
+ }
+ }
+ }
+ return null;
+ }
}
diff --git a/src/test/java/net/floodlightcontroller/core/test/MockFloodlightProvider.java b/src/test/java/net/floodlightcontroller/core/test/MockFloodlightProvider.java
index 30ade50..5961037 100644
--- a/src/test/java/net/floodlightcontroller/core/test/MockFloodlightProvider.java
+++ b/src/test/java/net/floodlightcontroller/core/test/MockFloodlightProvider.java
@@ -1,19 +1,19 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.floodlightcontroller.core.test;
@@ -52,31 +52,30 @@
import org.slf4j.LoggerFactory;
/**
- *
* @author David Erickson (daviderickson@cs.stanford.edu)
*/
public class MockFloodlightProvider implements IFloodlightModule, IFloodlightProviderService {
protected final static Logger log = LoggerFactory.getLogger(MockFloodlightProvider.class);
- protected ConcurrentMap<OFType, ListenerDispatcher<OFType,IOFMessageListener>> listeners;
+ protected ConcurrentMap<OFType, ListenerDispatcher<OFType, IOFMessageListener>> listeners;
protected List<IOFSwitchListener> switchListeners;
protected Map<Long, IOFSwitch> switches;
protected BasicFactory factory;
/**
- *
+ *
*/
public MockFloodlightProvider() {
- listeners = new ConcurrentHashMap<OFType, ListenerDispatcher<OFType,
- IOFMessageListener>>();
+ listeners = new ConcurrentHashMap<OFType, ListenerDispatcher<OFType,
+ IOFMessageListener>>();
switches = new ConcurrentHashMap<Long, IOFSwitch>();
switchListeners = new CopyOnWriteArrayList<IOFSwitchListener>();
factory = new BasicFactory();
}
@Override
- public synchronized void addOFMessageListener(OFType type,
+ public synchronized void addOFMessageListener(OFType type,
IOFMessageListener listener) {
- ListenerDispatcher<OFType, IOFMessageListener> ldd =
+ ListenerDispatcher<OFType, IOFMessageListener> ldd =
listeners.get(type);
if (ldd == null) {
ldd = new ListenerDispatcher<OFType, IOFMessageListener>();
@@ -88,7 +87,7 @@
@Override
public synchronized void removeOFMessageListener(OFType type,
IOFMessageListener listener) {
- ListenerDispatcher<OFType, IOFMessageListener> ldd =
+ ListenerDispatcher<OFType, IOFMessageListener> ldd =
listeners.get(type);
if (ldd != null) {
ldd.removeListener(listener);
@@ -99,19 +98,19 @@
* @return the listeners
*/
public Map<OFType, List<IOFMessageListener>> getListeners() {
- Map<OFType, List<IOFMessageListener>> lers =
+ Map<OFType, List<IOFMessageListener>> lers =
new HashMap<OFType, List<IOFMessageListener>>();
- for(Entry<OFType, ListenerDispatcher<OFType, IOFMessageListener>> e :
+ for (Entry<OFType, ListenerDispatcher<OFType, IOFMessageListener>> e :
listeners.entrySet()) {
- lers.put(e.getKey(), e.getValue().getOrderedListeners());
- }
- return Collections.unmodifiableMap(lers);
+ lers.put(e.getKey(), e.getValue().getOrderedListeners());
+ }
+ return Collections.unmodifiableMap(lers);
}
public void clearListeners() {
this.listeners.clear();
}
-
+
@Override
public Map<Long, IOFSwitch> getSwitches() {
return this.switches;
@@ -134,18 +133,18 @@
public void dispatchMessage(IOFSwitch sw, OFMessage msg) {
dispatchMessage(sw, msg, new FloodlightContext());
}
-
+
public void dispatchMessage(IOFSwitch sw, OFMessage msg, FloodlightContext bc) {
List<IOFMessageListener> theListeners = listeners.get(msg.getType()).getOrderedListeners();
if (theListeners != null) {
Command result = Command.CONTINUE;
Iterator<IOFMessageListener> it = theListeners.iterator();
if (OFType.PACKET_IN.equals(msg.getType())) {
- OFPacketIn pi = (OFPacketIn)msg;
+ OFPacketIn pi = (OFPacketIn) msg;
Ethernet eth = new Ethernet();
eth.deserialize(pi.getPacketData(), 0, pi.getPacketData().length);
- IFloodlightProviderService.bcStore.put(bc,
- IFloodlightProviderService.CONTEXT_PI_PAYLOAD,
+ IFloodlightProviderService.bcStore.put(bc,
+ IFloodlightProviderService.CONTEXT_PI_PAYLOAD,
eth);
}
while (it.hasNext() && !Command.STOP.equals(result)) {
@@ -153,17 +152,17 @@
}
}
}
-
+
public void handleOutgoingMessage(IOFSwitch sw, OFMessage m, FloodlightContext bc) {
List<IOFMessageListener> msgListeners = null;
if (listeners.containsKey(m.getType())) {
msgListeners = listeners.get(m.getType()).getOrderedListeners();
}
-
- if (msgListeners != null) {
+
+ if (msgListeners != null) {
for (IOFMessageListener listener : msgListeners) {
if (listener instanceof IOFSwitchFilter) {
- if (!((IOFSwitchFilter)listener).isInterested(sw)) {
+ if (!((IOFSwitchFilter) listener).isInterested(sw)) {
continue;
}
}
@@ -173,9 +172,9 @@
}
}
}
-
+
public void handleOutgoingMessages(IOFSwitch sw, List<OFMessage> msglist, FloodlightContext bc) {
- for (OFMessage m:msglist) {
+ for (OFMessage m : msglist) {
handleOutgoingMessage(sw, m, bc);
}
}
@@ -186,7 +185,7 @@
public List<IOFSwitchListener> getSwitchListeners() {
return switchListeners;
}
-
+
public void terminate() {
}
@@ -195,14 +194,14 @@
dispatchMessage(sw, msg);
return true;
}
-
+
@Override
- public boolean injectOfMessage(IOFSwitch sw, OFMessage msg,
- FloodlightContext bContext) {
- dispatchMessage(sw, msg, bContext);
+ public boolean injectOfMessage(IOFSwitch sw, OFMessage msg,
+ FloodlightContext bContext) {
+ dispatchMessage(sw, msg, bContext);
return true;
}
-
+
@Override
public BasicFactory getOFMessageFactory() {
return factory;
@@ -223,9 +222,9 @@
@Override
public Map<Class<? extends IFloodlightService>, IFloodlightService>
- getServiceImpls() {
+ getServiceImpls() {
Map<Class<? extends IFloodlightService>,
- IFloodlightService> m =
+ IFloodlightService> m =
new HashMap<Class<? extends IFloodlightService>,
IFloodlightService>();
m.put(IFloodlightProviderService.class, this);
@@ -234,21 +233,21 @@
@Override
public Collection<Class<? extends IFloodlightService>>
- getModuleDependencies() {
+ getModuleDependencies() {
return null;
}
-
+
@Override
public void init(FloodlightModuleContext context)
- throws FloodlightModuleException {
+ throws FloodlightModuleException {
// TODO Auto-generated method stub
-
+
}
@Override
public void startUp(FloodlightModuleContext context) {
// TODO Auto-generated method stub
-
+
}
@Override
@@ -270,14 +269,14 @@
private void logListeners() {
for (Map.Entry<OFType,
- ListenerDispatcher<OFType,
- IOFMessageListener>> entry
- : listeners.entrySet()) {
-
+ ListenerDispatcher<OFType,
+ IOFMessageListener>> entry
+ : listeners.entrySet()) {
+
OFType type = entry.getKey();
- ListenerDispatcher<OFType, IOFMessageListener> ldd =
+ ListenerDispatcher<OFType, IOFMessageListener> ldd =
entry.getValue();
-
+
StringBuffer sb = new StringBuffer();
sb.append("OFListeners for ");
sb.append(type);
@@ -286,19 +285,19 @@
sb.append(l.getName());
sb.append(",");
}
- log.debug(sb.toString());
+ log.debug(sb.toString());
}
}
@Override
public void setAlwaysClearFlowsOnSwAdd(boolean value) {
// TODO Auto-generated method stub
-
+
}
- @Override
- public void publishUpdate(IUpdate update) {
- // TODO Auto-generated method stub
-
- }
+ @Override
+ public void publishUpdate(IUpdate update) {
+ // TODO Auto-generated method stub
+
+ }
}
diff --git a/src/test/java/net/floodlightcontroller/core/test/MockScheduledExecutor.java b/src/test/java/net/floodlightcontroller/core/test/MockScheduledExecutor.java
index 733ff1a..0a09863 100644
--- a/src/test/java/net/floodlightcontroller/core/test/MockScheduledExecutor.java
+++ b/src/test/java/net/floodlightcontroller/core/test/MockScheduledExecutor.java
@@ -1,19 +1,19 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.floodlightcontroller.core.test;
@@ -33,10 +33,10 @@
public class MockScheduledExecutor implements ScheduledExecutorService {
ScheduledExecutorService ses = null;
- public static class MockFuture<T> implements Future<T>,ScheduledFuture<T>{
+ public static class MockFuture<T> implements Future<T>, ScheduledFuture<T> {
T result;
ExecutionException e;
-
+
/**
* @param result
*/
@@ -44,7 +44,7 @@
super();
this.result = result;
}
-
+
/**
* @param result
*/
@@ -91,7 +91,7 @@
return 0;
}
}
-
+
@Override
public boolean awaitTermination(long arg0, TimeUnit arg1)
throws InterruptedException {
@@ -134,7 +134,7 @@
@Override
public <T> T invokeAny(Collection<? extends Callable<T>> arg0, long arg1,
- TimeUnit arg2) throws InterruptedException, ExecutionException,
+ TimeUnit arg2) throws InterruptedException, ExecutionException,
TimeoutException {
return invokeAny(arg0);
}
@@ -151,7 +151,7 @@
public boolean isTerminated() {
if (ses != null)
return ses.isTerminated();
-
+
return false;
}
@@ -191,7 +191,7 @@
public <T> Future<T> submit(Runnable arg0, T arg1) {
try {
arg0.run();
- return new MockFuture<T>((T)null);
+ return new MockFuture<T>((T) null);
} catch (Exception e) {
return new MockFuture<T>(new ExecutionException(e));
}
@@ -215,7 +215,7 @@
@Override
public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay,
- TimeUnit unit) {
+ TimeUnit unit) {
if (ses == null)
ses = Executors.newScheduledThreadPool(1);
try {
diff --git a/src/test/java/net/floodlightcontroller/core/test/MockThreadPoolService.java b/src/test/java/net/floodlightcontroller/core/test/MockThreadPoolService.java
index 67bee30..5b1823e 100644
--- a/src/test/java/net/floodlightcontroller/core/test/MockThreadPoolService.java
+++ b/src/test/java/net/floodlightcontroller/core/test/MockThreadPoolService.java
@@ -13,11 +13,11 @@
import net.floodlightcontroller.threadpool.IThreadPoolService;
public class MockThreadPoolService implements IFloodlightModule, IThreadPoolService {
-
+
protected ScheduledExecutorService mockExecutor = new MockScheduledExecutor();
/**
- * Return a mock executor that will simply execute each task
+ * Return a mock executor that will simply execute each task
* synchronously once.
*/
@Override
@@ -26,10 +26,10 @@
}
// IFloodlightModule
-
+
@Override
public Collection<Class<? extends IFloodlightService>> getModuleServices() {
- Collection<Class<? extends IFloodlightService>> l =
+ Collection<Class<? extends IFloodlightService>> l =
new ArrayList<Class<? extends IFloodlightService>>();
l.add(IThreadPoolService.class);
return l;
@@ -37,11 +37,11 @@
@Override
public Map<Class<? extends IFloodlightService>, IFloodlightService>
- getServiceImpls() {
+ getServiceImpls() {
Map<Class<? extends IFloodlightService>,
- IFloodlightService> m =
+ IFloodlightService> m =
new HashMap<Class<? extends IFloodlightService>,
- IFloodlightService>();
+ IFloodlightService>();
m.put(IThreadPoolService.class, this);
// We are the class that implements the service
return m;
@@ -49,14 +49,14 @@
@Override
public Collection<Class<? extends IFloodlightService>>
- getModuleDependencies() {
+ getModuleDependencies() {
// No dependencies
return null;
}
@Override
public void init(FloodlightModuleContext context)
- throws FloodlightModuleException {
+ throws FloodlightModuleException {
}
@Override
diff --git a/src/test/java/net/floodlightcontroller/core/test/PacketFactory.java b/src/test/java/net/floodlightcontroller/core/test/PacketFactory.java
index 1f7c3d7..77d6fa0 100644
--- a/src/test/java/net/floodlightcontroller/core/test/PacketFactory.java
+++ b/src/test/java/net/floodlightcontroller/core/test/PacketFactory.java
@@ -19,129 +19,131 @@
/**
* A class to that creates many types of L2/L3/L4 or OpenFlow packets.
* This is used in testing.
- * @author alexreimers
*
+ * @author alexreimers
*/
public class PacketFactory {
public static String broadcastMac = "ff:ff:ff:ff:ff:ff";
public static String broadcastIp = "255.255.255.255";
protected static BasicFactory OFMessageFactory = new BasicFactory();
-
+
/**
* Generates a DHCP request OFPacketIn.
+ *
* @param hostMac The host MAC address of for the request.
* @return An OFPacketIn that contains a DHCP request packet.
*/
public static OFPacketIn DhcpDiscoveryRequestOFPacketIn(MACAddress hostMac) {
byte[] serializedPacket = DhcpDiscoveryRequestEthernet(hostMac).serialize();
- return (((OFPacketIn)OFMessageFactory
+ return (((OFPacketIn) OFMessageFactory
.getMessage(OFType.PACKET_IN))
.setBufferId(OFPacketOut.BUFFER_ID_NONE)
.setInPort((short) 1)
.setPacketData(serializedPacket)
.setReason(OFPacketInReason.NO_MATCH)
- .setTotalLength((short)serializedPacket.length));
+ .setTotalLength((short) serializedPacket.length));
}
-
+
/**
* Generates a DHCP request Ethernet frame.
+ *
* @param hostMac The host MAC address of for the request.
* @returnAn An Ethernet frame that contains a DHCP request packet.
*/
public static Ethernet DhcpDiscoveryRequestEthernet(MACAddress hostMac) {
List<DHCPOption> optionList = new ArrayList<DHCPOption>();
-
+
byte[] requestValue = new byte[4];
requestValue[0] = requestValue[1] = requestValue[2] = requestValue[3] = 0;
- DHCPOption requestOption =
+ DHCPOption requestOption =
new DHCPOption()
- .setCode(DHCP.DHCPOptionCode.OptionCode_RequestedIP.
- getValue())
- .setLength((byte)4)
- .setData(requestValue);
-
+ .setCode(DHCP.DHCPOptionCode.OptionCode_RequestedIP.
+ getValue())
+ .setLength((byte) 4)
+ .setData(requestValue);
+
byte[] msgTypeValue = new byte[1];
msgTypeValue[0] = 1; // DHCP request
- DHCPOption msgTypeOption =
+ DHCPOption msgTypeOption =
new DHCPOption()
- .setCode(DHCP.DHCPOptionCode.OptionCode_MessageType.
- getValue())
- .setLength((byte)1)
- .setData(msgTypeValue);
-
+ .setCode(DHCP.DHCPOptionCode.OptionCode_MessageType.
+ getValue())
+ .setLength((byte) 1)
+ .setData(msgTypeValue);
+
byte[] reqParamValue = new byte[4];
reqParamValue[0] = 1; // subnet mask
reqParamValue[1] = 3; // Router
reqParamValue[2] = 6; // Domain Name Server
reqParamValue[3] = 42; // NTP Server
- DHCPOption reqParamOption =
+ DHCPOption reqParamOption =
new DHCPOption()
- .setCode(DHCP.DHCPOptionCode.OptionCode_RequestedParameters.
- getValue())
- .setLength((byte)4)
- .setData(reqParamValue);
-
+ .setCode(DHCP.DHCPOptionCode.OptionCode_RequestedParameters.
+ getValue())
+ .setLength((byte) 4)
+ .setData(reqParamValue);
+
byte[] clientIdValue = new byte[7];
clientIdValue[0] = 1; // Ethernet
- System.arraycopy(hostMac.toBytes(), 0,
- clientIdValue, 1, 6);
- DHCPOption clientIdOption =
+ System.arraycopy(hostMac.toBytes(), 0,
+ clientIdValue, 1, 6);
+ DHCPOption clientIdOption =
new DHCPOption()
- .setCode(DHCP.DHCPOptionCode.OptionCode_ClientID.
- getValue())
- .setLength((byte)7)
- .setData(clientIdValue);
-
- DHCPOption endOption =
+ .setCode(DHCP.DHCPOptionCode.OptionCode_ClientID.
+ getValue())
+ .setLength((byte) 7)
+ .setData(clientIdValue);
+
+ DHCPOption endOption =
new DHCPOption()
- .setCode(DHCP.DHCPOptionCode.OptionCode_END.
- getValue())
- .setLength((byte)0)
- .setData(null);
-
+ .setCode(DHCP.DHCPOptionCode.OptionCode_END.
+ getValue())
+ .setLength((byte) 0)
+ .setData(null);
+
optionList.add(requestOption);
optionList.add(msgTypeOption);
optionList.add(reqParamOption);
optionList.add(clientIdOption);
optionList.add(endOption);
-
+
Ethernet requestPacket = new Ethernet();
requestPacket.setSourceMACAddress(hostMac.toBytes())
- .setDestinationMACAddress(broadcastMac)
- .setEtherType(Ethernet.TYPE_IPv4)
- .setPayload(
- new IPv4()
- .setVersion((byte)4)
- .setDiffServ((byte)0)
- .setIdentification((short)100)
- .setFlags((byte)0)
- .setFragmentOffset((short)0)
- .setTtl((byte)250)
- .setProtocol(IPv4.PROTOCOL_UDP)
- .setChecksum((short)0)
- .setSourceAddress(0)
- .setDestinationAddress(broadcastIp)
+ .setDestinationMACAddress(broadcastMac)
+ .setEtherType(Ethernet.TYPE_IPv4)
.setPayload(
- new UDP()
- .setSourcePort(UDP.DHCP_CLIENT_PORT)
- .setDestinationPort(UDP.DHCP_SERVER_PORT)
- .setChecksum((short)0)
- .setPayload(
- new DHCP()
- .setOpCode(DHCP.OPCODE_REQUEST)
- .setHardwareType(DHCP.HWTYPE_ETHERNET)
- .setHardwareAddressLength((byte)6)
- .setHops((byte)0)
- .setTransactionId(0x00003d1d)
- .setSeconds((short)0)
- .setFlags((short)0)
- .setClientIPAddress(0)
- .setYourIPAddress(0)
- .setServerIPAddress(0)
- .setGatewayIPAddress(0)
- .setClientHardwareAddress(hostMac.toBytes())
- .setOptions(optionList))));
-
+ new IPv4()
+ .setVersion((byte) 4)
+ .setDiffServ((byte) 0)
+ .setIdentification((short) 100)
+ .setFlags((byte) 0)
+ .setFragmentOffset((short) 0)
+ .setTtl((byte) 250)
+ .setProtocol(IPv4.PROTOCOL_UDP)
+ .setChecksum((short) 0)
+ .setSourceAddress(0)
+ .setDestinationAddress(broadcastIp)
+ .setPayload(
+ new UDP()
+ .setSourcePort(UDP.DHCP_CLIENT_PORT)
+ .setDestinationPort(UDP.DHCP_SERVER_PORT)
+ .setChecksum((short) 0)
+ .setPayload(
+ new DHCP()
+ .setOpCode(DHCP.OPCODE_REQUEST)
+ .setHardwareType(DHCP.HWTYPE_ETHERNET)
+ .setHardwareAddressLength((byte) 6)
+ .setHops((byte) 0)
+ .setTransactionId(0x00003d1d)
+ .setSeconds((short) 0)
+ .setFlags((short) 0)
+ .setClientIPAddress(0)
+ .setYourIPAddress(0)
+ .setServerIPAddress(0)
+ .setGatewayIPAddress(0)
+ .setClientHardwareAddress(hostMac.toBytes())
+ .setOptions(optionList))));
+
return requestPacket;
}
}
diff --git a/src/test/java/net/floodlightcontroller/core/util/AppCookieTest.java b/src/test/java/net/floodlightcontroller/core/util/AppCookieTest.java
index 2c77d6a..e967107 100644
--- a/src/test/java/net/floodlightcontroller/core/util/AppCookieTest.java
+++ b/src/test/java/net/floodlightcontroller/core/util/AppCookieTest.java
@@ -1,19 +1,19 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.floodlightcontroller.core.util;
@@ -22,13 +22,13 @@
public class AppCookieTest extends FloodlightTestCase {
- public void testAppCookie(){
+ public void testAppCookie() {
int appID = 12;
int user = 12345;
long cookie = AppCookie.makeCookie(appID, user);
TestCase.assertEquals(appID, AppCookie.extractApp(cookie));
TestCase.assertEquals(user, AppCookie.extractUser(cookie));
-
+
// now ensure that we don't exceed our size
cookie = AppCookie.makeCookie(appID + 0x10000, user);
TestCase.assertEquals(appID, AppCookie.extractApp(cookie));
diff --git a/src/test/java/net/floodlightcontroller/core/util/MessageDispatcherTest.java b/src/test/java/net/floodlightcontroller/core/util/MessageDispatcherTest.java
index 3a1501a..21e5c4a 100644
--- a/src/test/java/net/floodlightcontroller/core/util/MessageDispatcherTest.java
+++ b/src/test/java/net/floodlightcontroller/core/util/MessageDispatcherTest.java
@@ -1,19 +1,19 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.floodlightcontroller.core.util;
@@ -39,24 +39,24 @@
expect(mock.getName()).andReturn(name).anyTimes();
return mock;
}
-
+
void addPrereqs(IOFMessageListener mock, String... deps) {
for (String dep : deps) {
expect(mock.isCallbackOrderingPrereq(OFType.PACKET_IN, dep)).andReturn(true).anyTimes();
}
}
-
+
void testOrdering(ArrayList<IOFMessageListener> inputListeners) {
- ListenerDispatcher<OFType, IOFMessageListener> ld =
+ ListenerDispatcher<OFType, IOFMessageListener> ld =
new ListenerDispatcher<OFType, IOFMessageListener>();
-
+
for (IOFMessageListener l : inputListeners) {
ld.addListener(OFType.PACKET_IN, l);
}
for (IOFMessageListener l : inputListeners) {
verify(l);
}
-
+
List<IOFMessageListener> result = ld.getOrderedListeners();
System.out.print("Ordering: ");
for (IOFMessageListener l : result) {
@@ -67,27 +67,27 @@
for (int ind_i = 0; ind_i < result.size(); ind_i++) {
IOFMessageListener i = result.get(ind_i);
- for (int ind_j = ind_i+1; ind_j < result.size(); ind_j++) {
+ for (int ind_j = ind_i + 1; ind_j < result.size(); ind_j++) {
IOFMessageListener j = result.get(ind_j);
-
- boolean orderwrong =
+
+ boolean orderwrong =
(i.isCallbackOrderingPrereq(OFType.PACKET_IN, j.getName()) ||
- j.isCallbackOrderingPostreq(OFType.PACKET_IN, i.getName()));
- assertFalse("Invalid order: " +
- ind_i + " (" + i.getName() + ") " +
- ind_j + " (" + j.getName() + ") ", orderwrong);
+ j.isCallbackOrderingPostreq(OFType.PACKET_IN, i.getName()));
+ assertFalse("Invalid order: " +
+ ind_i + " (" + i.getName() + ") " +
+ ind_j + " (" + j.getName() + ") ", orderwrong);
}
}
}
-
+
void randomTestOrdering(ArrayList<IOFMessageListener> mocks) {
Random rand = new Random(0);
- ArrayList<IOFMessageListener> random =
+ ArrayList<IOFMessageListener> random =
new ArrayList<IOFMessageListener>();
random.addAll(mocks);
for (int i = 0; i < 20; i++) {
for (int j = 0; j < random.size(); j++) {
- int ind = rand.nextInt(mocks.size()-1);
+ int ind = rand.nextInt(mocks.size() - 1);
IOFMessageListener tmp = random.get(j);
random.set(j, random.get(ind));
random.set(ind, tmp);
@@ -95,16 +95,16 @@
testOrdering(random);
}
}
-
+
@Test
public void testCallbackOrderingSimple() throws Exception {
- ArrayList<IOFMessageListener> mocks =
+ ArrayList<IOFMessageListener> mocks =
new ArrayList<IOFMessageListener>();
for (int i = 0; i < 10; i++) {
- mocks.add(createLMock(""+i));
+ mocks.add(createLMock("" + i));
}
for (int i = 1; i < 10; i++) {
- addPrereqs(mocks.get(i), ""+(i-1));
+ addPrereqs(mocks.get(i), "" + (i - 1));
}
for (IOFMessageListener l : mocks) {
replay(l);
@@ -114,36 +114,36 @@
@Test
public void testCallbackOrderingPartial() throws Exception {
- ArrayList<IOFMessageListener> mocks =
+ ArrayList<IOFMessageListener> mocks =
new ArrayList<IOFMessageListener>();
for (int i = 0; i < 10; i++) {
- mocks.add(createLMock(""+i));
+ mocks.add(createLMock("" + i));
}
for (int i = 1; i < 5; i++) {
- addPrereqs(mocks.get(i), ""+(i-1));
+ addPrereqs(mocks.get(i), "" + (i - 1));
}
for (int i = 6; i < 10; i++) {
- addPrereqs(mocks.get(i), ""+(i-1));
+ addPrereqs(mocks.get(i), "" + (i - 1));
}
for (IOFMessageListener l : mocks) {
replay(l);
}
randomTestOrdering(mocks);
}
-
+
@Test
public void testCallbackOrderingPartial2() throws Exception {
- ArrayList<IOFMessageListener> mocks =
+ ArrayList<IOFMessageListener> mocks =
new ArrayList<IOFMessageListener>();
for (int i = 0; i < 10; i++) {
- mocks.add(createLMock(""+i));
+ mocks.add(createLMock("" + i));
}
for (int i = 2; i < 5; i++) {
- addPrereqs(mocks.get(i), ""+(i-1));
+ addPrereqs(mocks.get(i), "" + (i - 1));
}
for (int i = 6; i < 9; i++) {
- addPrereqs(mocks.get(i), ""+(i-1));
+ addPrereqs(mocks.get(i), "" + (i - 1));
}
for (IOFMessageListener l : mocks) {
replay(l);
diff --git a/src/test/java/net/floodlightcontroller/core/util/SingletonTaskTest.java b/src/test/java/net/floodlightcontroller/core/util/SingletonTaskTest.java
index 9a29852..51a5260 100644
--- a/src/test/java/net/floodlightcontroller/core/util/SingletonTaskTest.java
+++ b/src/test/java/net/floodlightcontroller/core/util/SingletonTaskTest.java
@@ -1,19 +1,19 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.floodlightcontroller.core.util;
@@ -27,23 +27,23 @@
import org.junit.Test;
public class SingletonTaskTest extends FloodlightTestCase {
-
+
public int ran = 0;
public int finished = 0;
public long time = 0;
-
+
@Before
public void setup() {
ran = 0;
finished = 0;
time = 0;
}
-
+
@Test
public void testBasic() throws InterruptedException {
- ScheduledExecutorService ses =
- Executors.newSingleThreadScheduledExecutor();
-
+ ScheduledExecutorService ses =
+ Executors.newSingleThreadScheduledExecutor();
+
SingletonTask st1 = new SingletonTask(ses, new Runnable() {
@Override
public void run() {
@@ -53,14 +53,14 @@
st1.reschedule(0, null);
ses.shutdown();
ses.awaitTermination(5, TimeUnit.SECONDS);
-
+
assertEquals("Check that task ran", 1, ran);
}
@Test
public void testDelay() throws InterruptedException {
- ScheduledExecutorService ses =
- Executors.newSingleThreadScheduledExecutor();
+ ScheduledExecutorService ses =
+ Executors.newSingleThreadScheduledExecutor();
SingletonTask st1 = new SingletonTask(ses, new Runnable() {
@Override
@@ -72,19 +72,19 @@
long start = System.nanoTime();
st1.reschedule(10, TimeUnit.MILLISECONDS);
assertFalse("Check that task hasn't run yet", ran > 0);
-
+
ses.shutdown();
ses.awaitTermination(5, TimeUnit.SECONDS);
-
+
assertEquals("Check that task ran", 1, ran);
assertTrue("Check that time passed appropriately",
- (time - start) >= TimeUnit.NANOSECONDS.convert(10, TimeUnit.MILLISECONDS));
+ (time - start) >= TimeUnit.NANOSECONDS.convert(10, TimeUnit.MILLISECONDS));
}
@Test
public void testReschedule() throws InterruptedException {
- ScheduledExecutorService ses =
- Executors.newSingleThreadScheduledExecutor();
+ ScheduledExecutorService ses =
+ Executors.newSingleThreadScheduledExecutor();
final Object tc = this;
SingletonTask st1 = new SingletonTask(ses, new Runnable() {
@@ -121,10 +121,10 @@
st1.reschedule(20, TimeUnit.MILLISECONDS);
Thread.sleep(5);
assertFalse("Check that task hasn't run yet", ran > 0);
-
+
ses.shutdown();
ses.awaitTermination(5, TimeUnit.SECONDS);
-
+
assertEquals("Check that task ran only once", 1, ran);
assertTrue("Check that time passed appropriately: " + (time - start),
(time - start) >= TimeUnit.NANOSECONDS.convert(55, TimeUnit.MILLISECONDS));
@@ -132,8 +132,8 @@
@Test
public void testConcurrentAddDelay() throws InterruptedException {
- ScheduledExecutorService ses =
- Executors.newSingleThreadScheduledExecutor();
+ ScheduledExecutorService ses =
+ Executors.newSingleThreadScheduledExecutor();
final Object tc = this;
SingletonTask st1 = new SingletonTask(ses, new Runnable() {
@@ -153,7 +153,7 @@
}
}
});
-
+
long start = System.nanoTime();
st1.reschedule(5, TimeUnit.MILLISECONDS);
Thread.sleep(20);
@@ -171,20 +171,20 @@
assertTrue("Check task should run state false", !st1.context.taskShouldRun);
assertEquals("Check that task ran exactly twice", 2, ran);
assertEquals("Check that task finished exactly twice", 2, finished);
-
+
assertTrue("Check that time passed appropriately: " + (time - start),
(time - start) >= TimeUnit.NANOSECONDS.convert(130, TimeUnit.MILLISECONDS));
assertTrue("Check that time passed appropriately: " + (time - start),
(time - start) <= TimeUnit.NANOSECONDS.convert(160, TimeUnit.MILLISECONDS));
-
+
ses.shutdown();
ses.awaitTermination(5, TimeUnit.SECONDS);
}
@Test
public void testConcurrentAddDelay2() throws InterruptedException {
- ScheduledExecutorService ses =
- Executors.newSingleThreadScheduledExecutor();
+ ScheduledExecutorService ses =
+ Executors.newSingleThreadScheduledExecutor();
final Object tc = this;
SingletonTask st1 = new SingletonTask(ses, new Runnable() {
@@ -223,12 +223,12 @@
assertTrue("Check task should run state false", !st1.context.taskShouldRun);
assertEquals("Check that task ran exactly twice", 2, ran);
assertEquals("Check that task finished exactly twice", 2, finished);
-
+
assertTrue("Check that time passed appropriately: " + (time - start),
(time - start) >= TimeUnit.NANOSECONDS.convert(100, TimeUnit.MILLISECONDS));
assertTrue("Check that time passed appropriately: " + (time - start),
(time - start) <= TimeUnit.NANOSECONDS.convert(125, TimeUnit.MILLISECONDS));
-
+
ses.shutdown();
ses.awaitTermination(5, TimeUnit.SECONDS);
}
@@ -236,8 +236,8 @@
@Test
public void testConcurrentAddNoDelay() throws InterruptedException {
- ScheduledExecutorService ses =
- Executors.newSingleThreadScheduledExecutor();
+ ScheduledExecutorService ses =
+ Executors.newSingleThreadScheduledExecutor();
final Object tc = this;
SingletonTask st1 = new SingletonTask(ses, new Runnable() {
@@ -258,7 +258,7 @@
}
}
});
-
+
long start = System.nanoTime();
st1.reschedule(0, null);
Thread.sleep(20);
@@ -276,12 +276,12 @@
assertTrue("Check task should run state false", !st1.context.taskShouldRun);
assertEquals("Check that task ran exactly twice", 2, ran);
assertEquals("Check that task finished exactly twice", 2, finished);
-
+
assertTrue("Check that time passed appropriately: " + (time - start),
(time - start) >= TimeUnit.NANOSECONDS.convert(90, TimeUnit.MILLISECONDS));
assertTrue("Check that time passed appropriately: " + (time - start),
(time - start) <= TimeUnit.NANOSECONDS.convert(130, TimeUnit.MILLISECONDS));
-
+
ses.shutdown();
ses.awaitTermination(5, TimeUnit.SECONDS);
}
diff --git a/src/test/java/net/floodlightcontroller/test/FloodlightTestCase.java b/src/test/java/net/floodlightcontroller/test/FloodlightTestCase.java
index f96d374..523cb7e 100644
--- a/src/test/java/net/floodlightcontroller/test/FloodlightTestCase.java
+++ b/src/test/java/net/floodlightcontroller/test/FloodlightTestCase.java
@@ -1,19 +1,19 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.floodlightcontroller.test;
@@ -38,14 +38,14 @@
public void setMockFloodlightProvider(MockFloodlightProvider mockFloodlightProvider) {
this.mockFloodlightProvider = mockFloodlightProvider;
}
-
+
@Override
public void setUp() throws Exception {
mockFloodlightProvider = new MockFloodlightProvider();
}
-
+
@Test
public void testSanity() throws Exception {
- assertTrue(true);
+ assertTrue(true);
}
}
diff --git a/src/test/java/net/floodlightcontroller/util/MACAddressTest.java b/src/test/java/net/floodlightcontroller/util/MACAddressTest.java
index 2e8a793..6b81135 100644
--- a/src/test/java/net/floodlightcontroller/util/MACAddressTest.java
+++ b/src/test/java/net/floodlightcontroller/util/MACAddressTest.java
@@ -21,33 +21,33 @@
assertEquals(address,
MACAddress.valueOf(new byte[]{(byte) 0xFF, (byte) 0xFE, (byte) 0xFD, 0x10, 0x20, 0x30}));
assertEquals("ff:fe:fd:10:20:30", address.toString());
-
+
address = MACAddress.valueOf("00:11:22:aa:bb:cc");
assertEquals(address,
- MACAddress.valueOf(new byte[]{0x00, 0x11, 0x22, (byte)0xaa, (byte)0xbb, (byte)0xcc}));
+ MACAddress.valueOf(new byte[]{0x00, 0x11, 0x22, (byte) 0xaa, (byte) 0xbb, (byte) 0xcc}));
}
- @Test(expected=NumberFormatException.class)
+ @Test(expected = NumberFormatException.class)
public void testIllegalFormat() {
MACAddress.valueOf("0T:00:01:02:03:04");
}
- @Test(expected=IllegalArgumentException.class)
+ @Test(expected = IllegalArgumentException.class)
public void testLongStringFields() {
MACAddress.valueOf("00:01:02:03:04:05:06");
}
- @Test(expected=IllegalArgumentException.class)
+ @Test(expected = IllegalArgumentException.class)
public void testShortStringFields() {
MACAddress.valueOf("00:01:02:03:04");
}
- @Test(expected=IllegalArgumentException.class)
+ @Test(expected = IllegalArgumentException.class)
public void testLongByteFields() {
MACAddress.valueOf(new byte[]{0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06});
}
- @Test(expected=IllegalArgumentException.class)
+ @Test(expected = IllegalArgumentException.class)
public void testShortByteField() {
MACAddress.valueOf(new byte[]{0x01, 0x01, 0x02, 0x03, 0x04});
}
@@ -62,16 +62,16 @@
assertEquals(
1103823438081L,
- MACAddress.valueOf(new byte[] { (byte) 0x01, (byte) 0x01,
- (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01 }).toLong());
+ MACAddress.valueOf(new byte[]{(byte) 0x01, (byte) 0x01,
+ (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01}).toLong());
assertEquals(
141289400074368L,
- MACAddress.valueOf(new byte[] { (byte) 0x80, (byte) 0x80,
- (byte) 0x80, (byte) 0x80, (byte) 0x80, (byte) 0x80 }).toLong());
+ MACAddress.valueOf(new byte[]{(byte) 0x80, (byte) 0x80,
+ (byte) 0x80, (byte) 0x80, (byte) 0x80, (byte) 0x80}).toLong());
}
-
+
@Test
public void testIsBroadcast() {
assertTrue(MACAddress.valueOf("FF:FF:FF:FF:FF:FF").isBroadcast());
diff --git a/src/test/java/net/floodlightcontroller/util/OFMessageDamperMockSwitch.java b/src/test/java/net/floodlightcontroller/util/OFMessageDamperMockSwitch.java
index e3ded96..574dc23 100644
--- a/src/test/java/net/floodlightcontroller/util/OFMessageDamperMockSwitch.java
+++ b/src/test/java/net/floodlightcontroller/util/OFMessageDamperMockSwitch.java
@@ -28,54 +28,54 @@
/**
* A mock implementation of IFOSwitch we use for {@link OFMessageDamper}
- *
+ * <p/>
* We need to mock equals() and hashCode() but alas, EasyMock doesn't support
* this. Sigh. And of course this happens to be the interface with the most
- * methods.
- * @author gregor
+ * methods.
*
+ * @author gregor
*/
public class OFMessageDamperMockSwitch implements IOFSwitch {
OFMessage writtenMessage;
FloodlightContext writtenContext;
-
+
public OFMessageDamperMockSwitch() {
reset();
}
-
+
/* reset this mock. I.e., clear the stored message previously written */
public void reset() {
writtenMessage = null;
writtenContext = null;
}
-
+
/* assert that a message was written to this switch and that the
* written message and context matches the expected values
* @param expected
* @param expectedContext
*/
- public void assertMessageWasWritten(OFMessage expected,
+ public void assertMessageWasWritten(OFMessage expected,
FloodlightContext expectedContext) {
assertNotNull("No OFMessage was written", writtenMessage);
assertEquals(expected, writtenMessage);
assertEquals(expectedContext, writtenContext);
}
-
+
/*
* assert that no message was written
*/
public void assertNoMessageWritten() {
- assertNull("OFMessage was written but didn't expect one",
- writtenMessage);
- assertNull("There was a context but didn't expect one",
- writtenContext);
+ assertNull("OFMessage was written but didn't expect one",
+ writtenMessage);
+ assertNull("There was a context but didn't expect one",
+ writtenContext);
}
/*
* use hashCode() and equals() from Object
*/
-
-
+
+
//-------------------------------------------------------
// IOFSwitch: mocked methods
@Override
@@ -85,222 +85,222 @@
writtenContext = bc;
writtenMessage = m;
}
-
+
//-------------------------------------------------------
// IOFSwitch: not-implemented methods
@Override
- public void write(List<OFMessage> msglist, FloodlightContext bc)
+ public void write(List<OFMessage> msglist, FloodlightContext bc)
throws IOException {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public void disconnectOutputStream() {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public Channel getChannel() {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public void setFeaturesReply(OFFeaturesReply featuresReply) {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public void setSwitchProperties(OFDescriptionStatistics description) {
assertTrue("Unexpected method call", false);
// TODO Auto-generated method stub
}
-
+
@Override
public Collection<OFPhysicalPort> getEnabledPorts() {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public Collection<Short> getEnabledPortNumbers() {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public OFPhysicalPort getPort(short portNumber) {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public OFPhysicalPort getPort(String portName) {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public void setPort(OFPhysicalPort port) {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public void deletePort(short portNumber) {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public void deletePort(String portName) {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public Collection<OFPhysicalPort> getPorts() {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public boolean portEnabled(short portName) {
assertTrue("Unexpected method call", false);
return false;
}
-
+
@Override
public boolean portEnabled(String portName) {
assertTrue("Unexpected method call", false);
return false;
}
-
+
@Override
public boolean portEnabled(OFPhysicalPort port) {
assertTrue("Unexpected method call", false);
return false;
}
-
+
@Override
public long getId() {
assertTrue("Unexpected method call", false);
return 0;
}
-
+
@Override
public String getStringId() {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public Map<Object, Object> getAttributes() {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public Date getConnectedSince() {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public int getNextTransactionId() {
assertTrue("Unexpected method call", false);
return 0;
}
-
+
@Override
public Future<List<OFStatistics>>
- getStatistics(OFStatisticsRequest request) throws IOException {
+ getStatistics(OFStatisticsRequest request) throws IOException {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public boolean isConnected() {
assertTrue("Unexpected method call", false);
return false;
}
-
+
@Override
public void setConnected(boolean connected) {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public Role getRole() {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public boolean isActive() {
assertTrue("Unexpected method call", false);
return false;
}
-
+
@Override
public void deliverStatisticsReply(OFMessage reply) {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public void cancelStatisticsReply(int transactionId) {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public void cancelAllStatisticsReplies() {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public boolean hasAttribute(String name) {
assertTrue("Unexpected method call", false);
return false;
}
-
+
@Override
public Object getAttribute(String name) {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public void setAttribute(String name, Object value) {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public Object removeAttribute(String name) {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public void clearAllFlowMods() {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public boolean updateBroadcastCache(Long entry, Short port) {
assertTrue("Unexpected method call", false);
return false;
}
-
+
@Override
public Map<Short, Long> getPortBroadcastHits() {
assertTrue("Unexpected method call", false);
return null;
}
-
+
@Override
public void sendStatsQuery(OFStatisticsRequest request, int xid,
IOFMessageListener caller)
- throws IOException {
+ throws IOException {
assertTrue("Unexpected method call", false);
}
-
+
@Override
public void flush() {
assertTrue("Unexpected method call", false);
diff --git a/src/test/java/net/floodlightcontroller/util/OFMessageDamperTest.java b/src/test/java/net/floodlightcontroller/util/OFMessageDamperTest.java
index 1f39761..02cc535 100644
--- a/src/test/java/net/floodlightcontroller/util/OFMessageDamperTest.java
+++ b/src/test/java/net/floodlightcontroller/util/OFMessageDamperTest.java
@@ -20,50 +20,49 @@
OFMessageFactory factory;
OFMessageDamper damper;
FloodlightContext cntx;
-
+
OFMessageDamperMockSwitch sw1;
OFMessageDamperMockSwitch sw2;
-
+
OFEchoRequest echoRequst1;
OFEchoRequest echoRequst1Clone;
OFEchoRequest echoRequst2;
OFHello hello1;
OFHello hello2;
-
-
-
+
+
@Before
public void setUp() throws IOException {
factory = new BasicFactory();
cntx = new FloodlightContext();
-
+
sw1 = new OFMessageDamperMockSwitch();
sw2 = new OFMessageDamperMockSwitch();
-
- echoRequst1 = (OFEchoRequest)factory.getMessage(OFType.ECHO_REQUEST);
- echoRequst1.setPayload(new byte[] { 1 });
+
+ echoRequst1 = (OFEchoRequest) factory.getMessage(OFType.ECHO_REQUEST);
+ echoRequst1.setPayload(new byte[]{1});
echoRequst1Clone = (OFEchoRequest)
factory.getMessage(OFType.ECHO_REQUEST);
- echoRequst1Clone.setPayload(new byte[] { 1 });
- echoRequst2 = (OFEchoRequest)factory.getMessage(OFType.ECHO_REQUEST);
- echoRequst2.setPayload(new byte[] { 2 });
-
- hello1 = (OFHello)factory.getMessage(OFType.HELLO);
+ echoRequst1Clone.setPayload(new byte[]{1});
+ echoRequst2 = (OFEchoRequest) factory.getMessage(OFType.ECHO_REQUEST);
+ echoRequst2.setPayload(new byte[]{2});
+
+ hello1 = (OFHello) factory.getMessage(OFType.HELLO);
hello1.setXid(1);
- hello2 = (OFHello)factory.getMessage(OFType.HELLO);
+ hello2 = (OFHello) factory.getMessage(OFType.HELLO);
hello2.setXid(2);
-
+
}
-
- protected void doWrite(boolean expectWrite,
- OFMessageDamperMockSwitch sw,
+
+ protected void doWrite(boolean expectWrite,
+ OFMessageDamperMockSwitch sw,
OFMessage msg,
FloodlightContext cntx) throws IOException {
-
+
boolean result;
sw.reset();
result = damper.write(sw, msg, cntx);
-
+
if (expectWrite) {
assertEquals(true, result);
sw.assertMessageWasWritten(msg, cntx);
@@ -72,79 +71,77 @@
sw.assertNoMessageWritten();
}
}
-
-
+
+
@Test
public void testOneMessageType() throws IOException, InterruptedException {
int timeout = 50;
- int sleepTime = 60;
- damper = new OFMessageDamper(100,
- EnumSet.of(OFType.ECHO_REQUEST),
- timeout);
-
-
-
+ int sleepTime = 60;
+ damper = new OFMessageDamper(100,
+ EnumSet.of(OFType.ECHO_REQUEST),
+ timeout);
+
+
// echo requests should be dampened
doWrite(true, sw1, echoRequst1, cntx);
doWrite(false, sw1, echoRequst1, cntx);
doWrite(false, sw1, echoRequst1Clone, cntx);
doWrite(true, sw1, echoRequst2, cntx);
doWrite(false, sw1, echoRequst2, cntx);
-
+
// we don't dampen hellos. All should succeed
doWrite(true, sw1, hello1, cntx);
doWrite(true, sw1, hello1, cntx);
doWrite(true, sw1, hello1, cntx);
-
+
// echo request should also be dampened on sw2
doWrite(true, sw2, echoRequst1, cntx);
doWrite(false, sw2, echoRequst1, cntx);
doWrite(true, sw2, echoRequst2, cntx);
-
-
+
+
Thread.sleep(sleepTime);
doWrite(true, sw1, echoRequst1, cntx);
doWrite(true, sw2, echoRequst1, cntx);
-
+
}
-
+
@Test
public void testTwoMessageTypes() throws IOException, InterruptedException {
int timeout = 50;
- int sleepTime = 60;
- damper = new OFMessageDamper(100,
- EnumSet.of(OFType.ECHO_REQUEST,
- OFType.HELLO),
- timeout);
-
-
-
+ int sleepTime = 60;
+ damper = new OFMessageDamper(100,
+ EnumSet.of(OFType.ECHO_REQUEST,
+ OFType.HELLO),
+ timeout);
+
+
// echo requests should be dampened
doWrite(true, sw1, echoRequst1, cntx);
doWrite(false, sw1, echoRequst1, cntx);
doWrite(false, sw1, echoRequst1Clone, cntx);
doWrite(true, sw1, echoRequst2, cntx);
doWrite(false, sw1, echoRequst2, cntx);
-
+
// hello should be dampened as well
doWrite(true, sw1, hello1, cntx);
doWrite(false, sw1, hello1, cntx);
doWrite(false, sw1, hello1, cntx);
-
+
doWrite(true, sw1, hello2, cntx);
doWrite(false, sw1, hello2, cntx);
doWrite(false, sw1, hello2, cntx);
-
+
// echo request should also be dampened on sw2
doWrite(true, sw2, echoRequst1, cntx);
doWrite(false, sw2, echoRequst1, cntx);
doWrite(true, sw2, echoRequst2, cntx);
-
+
Thread.sleep(sleepTime);
doWrite(true, sw1, echoRequst1, cntx);
doWrite(true, sw2, echoRequst1, cntx);
doWrite(true, sw1, hello1, cntx);
doWrite(true, sw1, hello2, cntx);
}
-
+
}
diff --git a/src/test/java/net/floodlightcontroller/util/TimedCacheTest.java b/src/test/java/net/floodlightcontroller/util/TimedCacheTest.java
index 7f06c0d..331e0e6 100644
--- a/src/test/java/net/floodlightcontroller/util/TimedCacheTest.java
+++ b/src/test/java/net/floodlightcontroller/util/TimedCacheTest.java
@@ -8,7 +8,7 @@
public class TimedCacheTest {
public static class CacheEntry {
public int key;
-
+
public CacheEntry(int key) {
this.key = key;
}
@@ -35,56 +35,55 @@
return true;
}
}
-
+
protected TimedCache<CacheEntry> cache;
-
+
@Before
public void setUp() {
//
}
-
-
+
+
@Test
public void testCaching() throws InterruptedException {
int timeout = 50;
int timeToSleep = 60;
cache = new TimedCache<TimedCacheTest.CacheEntry>(100, timeout);
-
+
CacheEntry e1a = new CacheEntry(1);
CacheEntry e1b = new CacheEntry(1);
CacheEntry e1c = new CacheEntry(1);
CacheEntry e2 = new CacheEntry(2);
-
+
assertEquals(false, cache.update(e1a));
assertEquals(true, cache.update(e1a));
assertEquals(true, cache.update(e1b));
assertEquals(true, cache.update(e1c));
assertEquals(false, cache.update(e2));
assertEquals(true, cache.update(e2));
-
+
Thread.sleep(timeToSleep);
assertEquals(false, cache.update(e1a));
assertEquals(false, cache.update(e2));
}
-
+
@Test
public void testCapacity() throws InterruptedException {
int timeout = 5000;
cache = new TimedCache<TimedCacheTest.CacheEntry>(2, timeout);
-
+
// Testing the capacity is tricky since the capacity can be
// exceeded for short amounts of time, so we try to flood the cache
// to make sure the first entry is expired
CacheEntry e1 = new CacheEntry(1);
- for (int i=0; i < 100; i++) {
+ for (int i = 0; i < 100; i++) {
CacheEntry e = new CacheEntry(i);
cache.update(e);
}
-
+
// entry 1 should have been expired due to capacity limits
assertEquals(false, cache.update(e1));
}
-
-
-
+
+
}
diff --git a/src/test/java/net/onrc/onos/apps/bgproute/PatriciaTrieTest.java b/src/test/java/net/onrc/onos/apps/bgproute/PatriciaTrieTest.java
index 871c828..af59af5 100644
--- a/src/test/java/net/onrc/onos/apps/bgproute/PatriciaTrieTest.java
+++ b/src/test/java/net/onrc/onos/apps/bgproute/PatriciaTrieTest.java
@@ -15,190 +15,190 @@
public class PatriciaTrieTest {
- IPatriciaTrie<RibEntry> ptrie;
- Prefix[] prefixes;
- Map<Prefix, RibEntry> mappings;
-
- @Before
- public void setUp() throws Exception {
- ptrie = new PatriciaTrie<RibEntry>(32);
- mappings = new HashMap<Prefix, RibEntry>();
-
- prefixes = new Prefix[] {
- new Prefix("192.168.10.0", 24),
- new Prefix("192.168.8.0", 23),
- new Prefix("192.168.8.0", 22),
- new Prefix("192.0.0.0", 7),
- new Prefix("192.168.11.0", 24),
- new Prefix("10.0.23.128", 25),
- new Prefix("206.17.144.0", 20),
- new Prefix("9.17.0.0", 12),
- new Prefix("192.168.0.0", 16)
- };
-
- for (int i = 0; i < prefixes.length; i++) {
- mappings.put(prefixes[i], new RibEntry("192.168.10.101", "192.168.20." + i));
- ptrie.put(prefixes[i], new RibEntry("192.168.10.101", "192.168.20." + i));
- }
- }
+ IPatriciaTrie<RibEntry> ptrie;
+ Prefix[] prefixes;
+ Map<Prefix, RibEntry> mappings;
- @After
- public void tearDown() throws Exception {
- }
+ @Before
+ public void setUp() throws Exception {
+ ptrie = new PatriciaTrie<RibEntry>(32);
+ mappings = new HashMap<Prefix, RibEntry>();
- @Test
- public void testPut() {
- IPatriciaTrie<RibEntry> ptrie = new PatriciaTrie<RibEntry>(32);
-
- Prefix p1 = new Prefix("192.168.240.0", 20);
- RibEntry r1 = new RibEntry("192.168.10.101", "192.168.60.2");
- RibEntry retval = ptrie.put(p1, r1);
- assertNull(retval);
- retval = ptrie.lookup(p1);
- assertTrue(r1 == retval); //should be the same object
-
- Prefix p2 = new Prefix("192.160.0.0", 12);
- RibEntry r2 = new RibEntry("192.168.10.101", "192.168.20.1");
- retval = ptrie.put(p2, r2);
- assertNull(retval);
-
- Prefix p3 = new Prefix("192.168.208.0", 20);
- RibEntry r3 = new RibEntry("192.168.10.101", "192.168.30.1");
- retval = ptrie.put(p3, r3);
- assertNull(retval);
-
- //Insert a new RibEntry entry over a previous one
- RibEntry r3new = new RibEntry("192.168.10.101", "192.168.60.2");
- retval = ptrie.put(p3, r3new);
- assertNotNull(retval);
- assertTrue(retval.equals(r3));
- assertTrue(retval == r3); //should be the same object
-
- //Now we have an aggregate node with prefix 192.168.192.0/18.
- //We will insert a RibEntry at this prefix
- Prefix p4 = new Prefix("192.168.192.0", 18);
- RibEntry r4 = new RibEntry("192.168.10.101", "192.168.40.1");
- retval = ptrie.put(p4, r4);
- assertNull(retval);
- retval = ptrie.lookup(p4);
- assertTrue(retval == r4); //should be the same object
- }
+ prefixes = new Prefix[]{
+ new Prefix("192.168.10.0", 24),
+ new Prefix("192.168.8.0", 23),
+ new Prefix("192.168.8.0", 22),
+ new Prefix("192.0.0.0", 7),
+ new Prefix("192.168.11.0", 24),
+ new Prefix("10.0.23.128", 25),
+ new Prefix("206.17.144.0", 20),
+ new Prefix("9.17.0.0", 12),
+ new Prefix("192.168.0.0", 16)
+ };
- @Test
- public void testLookup() {
- for (Map.Entry<Prefix, RibEntry> entry : mappings.entrySet()) {
- RibEntry r = ptrie.lookup(entry.getKey());
- assertTrue(entry.getValue().equals(r));
- }
-
- //These are aggregate nodes in the tree. Shouldn't be returned by lookup
- Prefix p1 = new Prefix("0.0.0.0", 0);
- RibEntry retval = ptrie.lookup(p1);
- assertNull(retval);
-
- //We'll put a RibEntry at an aggregate node and check if lookup returns correctly
- Prefix p2 = new Prefix("192.0.0.0", 4);
- RibEntry r2 = new RibEntry("192.168.10.101", "192.168.60.1");
- retval = ptrie.put(p2, r2);
- assertNull(retval);
- retval = ptrie.lookup(p2);
- assertTrue(retval.equals(r2));
- }
+ for (int i = 0; i < prefixes.length; i++) {
+ mappings.put(prefixes[i], new RibEntry("192.168.10.101", "192.168.20." + i));
+ ptrie.put(prefixes[i], new RibEntry("192.168.10.101", "192.168.20." + i));
+ }
+ }
- //@Ignore
- @Test
- public void testMatch() {
- Prefix p1 = new Prefix("192.168.10.30", 32);
- Prefix p2 = new Prefix("192.168.10.30", 31);
- Prefix p3 = new Prefix("192.168.8.241", 32);
- Prefix p4 = new Prefix("1.0.0.0", 32);
- Prefix p5 = new Prefix("192.168.8.0", 22);
- Prefix p6 = new Prefix("192.168.8.0", 21);
-
- assertTrue(ptrie.match(p1).equals(mappings.get(prefixes[0])));
- assertTrue(ptrie.match(p2).equals(mappings.get(prefixes[0])));
- assertTrue(ptrie.match(p3).equals(mappings.get(prefixes[1])));
- assertNull(ptrie.match(p4));
- assertTrue(ptrie.match(p5).equals(mappings.get(prefixes[2])));
- //System.out.println(ptrie.match(p6).getNextHop().getHostAddress());
- assertTrue(ptrie.match(p6).equals(mappings.get(prefixes[8])));
-
-
- //TODO more extensive tests
- //fail("Not yet implemented");
- }
+ @After
+ public void tearDown() throws Exception {
+ }
- @Test
- public void testRemove() {
- Prefix p1 = new Prefix("192.168.8.0", 23);
- RibEntry retval = ptrie.lookup(p1);
- assertNotNull(retval);
- boolean success = ptrie.remove(p1, retval);
- assertTrue(success);
-
- Prefix p2 = new Prefix("192.168.8.0", 22);
- Prefix p3 = new Prefix("192.168.10.0", 24);
-
- //Test it does the right thing with null arguments
- success = ptrie.remove(null, null);
- assertFalse(success);
- success = ptrie.remove(p2, null);
- assertFalse(success);
-
- //Check other prefixes are still there
- retval = ptrie.lookup(p2);
- assertNotNull(retval);
- retval = ptrie.lookup(p3);
- assertNotNull(retval);
-
- Prefix p4 = new Prefix("9.17.0.0", 12);
- retval = ptrie.lookup(p4);
- assertNotNull(retval);
- success = ptrie.remove(p4, retval);
- assertTrue(success);
- success = ptrie.remove(p4, retval);
- assertFalse(success);
-
- //Check other prefixes are still there
- retval = ptrie.lookup(p2);
- assertNotNull(retval);
- retval = ptrie.lookup(p3);
- assertNotNull(retval);
-
- Prefix p5 = new Prefix("192.0.0.0", 7);
- retval = ptrie.lookup(p5);
- assertNotNull(retval);
- success = ptrie.remove(p5, retval);
- assertTrue(success);
-
- //Check other prefixes are still there
- retval = ptrie.lookup(p2);
- assertNotNull(retval);
- retval = ptrie.lookup(p3);
- assertNotNull(retval);
-
-
- }
+ @Test
+ public void testPut() {
+ IPatriciaTrie<RibEntry> ptrie = new PatriciaTrie<RibEntry>(32);
- @Test(expected=java.util.NoSuchElementException.class)
- public void testIterator() {
- int[] order = new int[] {7, 5, 3, 8, 2, 1, 0, 4, 6};
-
- Iterator<IPatriciaTrie.Entry<RibEntry>> it = ptrie.iterator();
- int i = 0;
- assertTrue(it.hasNext());
- while (it.hasNext()) {
- IPatriciaTrie.Entry<RibEntry> entry = it.next();
- assertTrue(entry.getPrefix().equals(prefixes[order[i]]));
- i++;
- }
- assertFalse(it.hasNext());
- assertTrue(i == order.length);
-
- IPatriciaTrie<RibEntry> pt = new PatriciaTrie<RibEntry>(32);
- Iterator<IPatriciaTrie.Entry<RibEntry>> it2 = pt.iterator();
- assertFalse(it2.hasNext());
- it.next(); //throws NoSuchElementException
- }
+ Prefix p1 = new Prefix("192.168.240.0", 20);
+ RibEntry r1 = new RibEntry("192.168.10.101", "192.168.60.2");
+ RibEntry retval = ptrie.put(p1, r1);
+ assertNull(retval);
+ retval = ptrie.lookup(p1);
+ assertTrue(r1 == retval); //should be the same object
+
+ Prefix p2 = new Prefix("192.160.0.0", 12);
+ RibEntry r2 = new RibEntry("192.168.10.101", "192.168.20.1");
+ retval = ptrie.put(p2, r2);
+ assertNull(retval);
+
+ Prefix p3 = new Prefix("192.168.208.0", 20);
+ RibEntry r3 = new RibEntry("192.168.10.101", "192.168.30.1");
+ retval = ptrie.put(p3, r3);
+ assertNull(retval);
+
+ //Insert a new RibEntry entry over a previous one
+ RibEntry r3new = new RibEntry("192.168.10.101", "192.168.60.2");
+ retval = ptrie.put(p3, r3new);
+ assertNotNull(retval);
+ assertTrue(retval.equals(r3));
+ assertTrue(retval == r3); //should be the same object
+
+ //Now we have an aggregate node with prefix 192.168.192.0/18.
+ //We will insert a RibEntry at this prefix
+ Prefix p4 = new Prefix("192.168.192.0", 18);
+ RibEntry r4 = new RibEntry("192.168.10.101", "192.168.40.1");
+ retval = ptrie.put(p4, r4);
+ assertNull(retval);
+ retval = ptrie.lookup(p4);
+ assertTrue(retval == r4); //should be the same object
+ }
+
+ @Test
+ public void testLookup() {
+ for (Map.Entry<Prefix, RibEntry> entry : mappings.entrySet()) {
+ RibEntry r = ptrie.lookup(entry.getKey());
+ assertTrue(entry.getValue().equals(r));
+ }
+
+ //These are aggregate nodes in the tree. Shouldn't be returned by lookup
+ Prefix p1 = new Prefix("0.0.0.0", 0);
+ RibEntry retval = ptrie.lookup(p1);
+ assertNull(retval);
+
+ //We'll put a RibEntry at an aggregate node and check if lookup returns correctly
+ Prefix p2 = new Prefix("192.0.0.0", 4);
+ RibEntry r2 = new RibEntry("192.168.10.101", "192.168.60.1");
+ retval = ptrie.put(p2, r2);
+ assertNull(retval);
+ retval = ptrie.lookup(p2);
+ assertTrue(retval.equals(r2));
+ }
+
+ //@Ignore
+ @Test
+ public void testMatch() {
+ Prefix p1 = new Prefix("192.168.10.30", 32);
+ Prefix p2 = new Prefix("192.168.10.30", 31);
+ Prefix p3 = new Prefix("192.168.8.241", 32);
+ Prefix p4 = new Prefix("1.0.0.0", 32);
+ Prefix p5 = new Prefix("192.168.8.0", 22);
+ Prefix p6 = new Prefix("192.168.8.0", 21);
+
+ assertTrue(ptrie.match(p1).equals(mappings.get(prefixes[0])));
+ assertTrue(ptrie.match(p2).equals(mappings.get(prefixes[0])));
+ assertTrue(ptrie.match(p3).equals(mappings.get(prefixes[1])));
+ assertNull(ptrie.match(p4));
+ assertTrue(ptrie.match(p5).equals(mappings.get(prefixes[2])));
+ //System.out.println(ptrie.match(p6).getNextHop().getHostAddress());
+ assertTrue(ptrie.match(p6).equals(mappings.get(prefixes[8])));
+
+
+ //TODO more extensive tests
+ //fail("Not yet implemented");
+ }
+
+ @Test
+ public void testRemove() {
+ Prefix p1 = new Prefix("192.168.8.0", 23);
+ RibEntry retval = ptrie.lookup(p1);
+ assertNotNull(retval);
+ boolean success = ptrie.remove(p1, retval);
+ assertTrue(success);
+
+ Prefix p2 = new Prefix("192.168.8.0", 22);
+ Prefix p3 = new Prefix("192.168.10.0", 24);
+
+ //Test it does the right thing with null arguments
+ success = ptrie.remove(null, null);
+ assertFalse(success);
+ success = ptrie.remove(p2, null);
+ assertFalse(success);
+
+ //Check other prefixes are still there
+ retval = ptrie.lookup(p2);
+ assertNotNull(retval);
+ retval = ptrie.lookup(p3);
+ assertNotNull(retval);
+
+ Prefix p4 = new Prefix("9.17.0.0", 12);
+ retval = ptrie.lookup(p4);
+ assertNotNull(retval);
+ success = ptrie.remove(p4, retval);
+ assertTrue(success);
+ success = ptrie.remove(p4, retval);
+ assertFalse(success);
+
+ //Check other prefixes are still there
+ retval = ptrie.lookup(p2);
+ assertNotNull(retval);
+ retval = ptrie.lookup(p3);
+ assertNotNull(retval);
+
+ Prefix p5 = new Prefix("192.0.0.0", 7);
+ retval = ptrie.lookup(p5);
+ assertNotNull(retval);
+ success = ptrie.remove(p5, retval);
+ assertTrue(success);
+
+ //Check other prefixes are still there
+ retval = ptrie.lookup(p2);
+ assertNotNull(retval);
+ retval = ptrie.lookup(p3);
+ assertNotNull(retval);
+
+
+ }
+
+ @Test(expected = java.util.NoSuchElementException.class)
+ public void testIterator() {
+ int[] order = new int[]{7, 5, 3, 8, 2, 1, 0, 4, 6};
+
+ Iterator<IPatriciaTrie.Entry<RibEntry>> it = ptrie.iterator();
+ int i = 0;
+ assertTrue(it.hasNext());
+ while (it.hasNext()) {
+ IPatriciaTrie.Entry<RibEntry> entry = it.next();
+ assertTrue(entry.getPrefix().equals(prefixes[order[i]]));
+ i++;
+ }
+ assertFalse(it.hasNext());
+ assertTrue(i == order.length);
+
+ IPatriciaTrie<RibEntry> pt = new PatriciaTrie<RibEntry>(32);
+ Iterator<IPatriciaTrie.Entry<RibEntry>> it2 = pt.iterator();
+ assertFalse(it2.hasNext());
+ it.next(); //throws NoSuchElementException
+ }
}
diff --git a/src/test/java/net/onrc/onos/apps/bgproute/PrefixTest.java b/src/test/java/net/onrc/onos/apps/bgproute/PrefixTest.java
index 3b9bef2..8c4b8d5 100644
--- a/src/test/java/net/onrc/onos/apps/bgproute/PrefixTest.java
+++ b/src/test/java/net/onrc/onos/apps/bgproute/PrefixTest.java
@@ -12,92 +12,90 @@
public class PrefixTest {
- @Before
- public void setUp() throws Exception {
- }
+ @Before
+ public void setUp() throws Exception {
+ }
- @After
- public void tearDown() throws Exception {
- }
+ @After
+ public void tearDown() throws Exception {
+ }
- @Test
- public void testPrefixByteArray() {
- byte[] b1 = new byte[] {(byte)0x8f, (byte)0xa0, (byte)0x00, (byte)0x00};
- byte[] b2 = new byte[] {(byte)0x8f, (byte)0xa0, (byte)0xff, (byte)0xff};
- byte[] b3 = new byte[] {(byte)0x8f, (byte)0xac, (byte)0x00, (byte)0x00};
- byte[] b4 = new byte[] {(byte)0x8f, (byte)0xa0, (byte)0x00, (byte)0x00};
-
- Prefix p1 = new Prefix(b1, 12);
- Prefix p2 = new Prefix(b2, 12);
- Prefix p3 = new Prefix(b3, 12);
- Prefix p4 = new Prefix(b4, 11);
-
- //Have different byte arrays, but should be equal after construction
- assertTrue(p1.equals(p2));
- assertTrue(p2.equals(p3));
-
- //Same byte array, but should be false
- assertFalse(p1.equals(p4));
-
- assertTrue(Arrays.equals(p1.getAddress(), p3.getAddress()));
- assertTrue(p1.toString().equals(p2.toString()));
- assertTrue(Arrays.equals(p1.getAddress(), p4.getAddress()));
- assertFalse(p1.toString().equals(p4.toString()));
- }
+ @Test
+ public void testPrefixByteArray() {
+ byte[] b1 = new byte[]{(byte) 0x8f, (byte) 0xa0, (byte) 0x00, (byte) 0x00};
+ byte[] b2 = new byte[]{(byte) 0x8f, (byte) 0xa0, (byte) 0xff, (byte) 0xff};
+ byte[] b3 = new byte[]{(byte) 0x8f, (byte) 0xac, (byte) 0x00, (byte) 0x00};
+ byte[] b4 = new byte[]{(byte) 0x8f, (byte) 0xa0, (byte) 0x00, (byte) 0x00};
- @Test
- public void testPrefixString() {
- Prefix p1 = new Prefix("192.168.166.0", 24);
- Prefix p2 = new Prefix("192.168.166.0", 23);
- Prefix p3 = new Prefix("192.168.166.128", 24);
- Prefix p4 = new Prefix("192.168.166.128", 25);
-
- assertFalse(p1.equals(p2));
- assertTrue(Arrays.equals(p1.getAddress(), p2.getAddress()));
-
- assertTrue(p1.equals(p3));
- assertTrue(Arrays.equals(p1.getAddress(), p2.getAddress()));
-
- assertFalse(p3.equals(p4));
- assertFalse(Arrays.equals(p3.getAddress(), p4.getAddress()));
-
- assertTrue(p1.toString().equals(p3.toString()));
- assertEquals(p1.hashCode(), p3.hashCode());
- }
+ Prefix p1 = new Prefix(b1, 12);
+ Prefix p2 = new Prefix(b2, 12);
+ Prefix p3 = new Prefix(b3, 12);
+ Prefix p4 = new Prefix(b4, 11);
- @Test
- public void testPrefixReturnsSame() {
- //Create a prefix of all 1s for each prefix length.
- //Check that Prefix doesn't mangle it
- int MAX_PREFIX_LENGTH = 32;
- for (int prefixLength = 1; prefixLength <= MAX_PREFIX_LENGTH; prefixLength++) {
- byte address[] = new byte[MAX_PREFIX_LENGTH/Byte.SIZE];
-
- int lastByte = (prefixLength - 1) / Byte.SIZE;
- int lastBit = (prefixLength - 1) % Byte.SIZE;
-
- for (int j = 0; j < address.length; j++) {
- if (j < lastByte) {
- address[j] = (byte)0xff;
- }
- else if (j == lastByte) {
- byte b = 0;
- byte msb = (byte) 0x80;
- for (int k = 0; k < Byte.SIZE; k++) {
- if (k <= lastBit) {
- b |= (msb >> k);
- }
- }
- address[j] = b;
- }
- else {
- address[j] = 0;
- }
- }
-
- Prefix p = new Prefix(address, prefixLength);
- System.out.println(p.printAsBits());
- assertTrue(Arrays.equals(address, p.getAddress()));
- }
- }
+ //Have different byte arrays, but should be equal after construction
+ assertTrue(p1.equals(p2));
+ assertTrue(p2.equals(p3));
+
+ //Same byte array, but should be false
+ assertFalse(p1.equals(p4));
+
+ assertTrue(Arrays.equals(p1.getAddress(), p3.getAddress()));
+ assertTrue(p1.toString().equals(p2.toString()));
+ assertTrue(Arrays.equals(p1.getAddress(), p4.getAddress()));
+ assertFalse(p1.toString().equals(p4.toString()));
+ }
+
+ @Test
+ public void testPrefixString() {
+ Prefix p1 = new Prefix("192.168.166.0", 24);
+ Prefix p2 = new Prefix("192.168.166.0", 23);
+ Prefix p3 = new Prefix("192.168.166.128", 24);
+ Prefix p4 = new Prefix("192.168.166.128", 25);
+
+ assertFalse(p1.equals(p2));
+ assertTrue(Arrays.equals(p1.getAddress(), p2.getAddress()));
+
+ assertTrue(p1.equals(p3));
+ assertTrue(Arrays.equals(p1.getAddress(), p2.getAddress()));
+
+ assertFalse(p3.equals(p4));
+ assertFalse(Arrays.equals(p3.getAddress(), p4.getAddress()));
+
+ assertTrue(p1.toString().equals(p3.toString()));
+ assertEquals(p1.hashCode(), p3.hashCode());
+ }
+
+ @Test
+ public void testPrefixReturnsSame() {
+ //Create a prefix of all 1s for each prefix length.
+ //Check that Prefix doesn't mangle it
+ int MAX_PREFIX_LENGTH = 32;
+ for (int prefixLength = 1; prefixLength <= MAX_PREFIX_LENGTH; prefixLength++) {
+ byte address[] = new byte[MAX_PREFIX_LENGTH / Byte.SIZE];
+
+ int lastByte = (prefixLength - 1) / Byte.SIZE;
+ int lastBit = (prefixLength - 1) % Byte.SIZE;
+
+ for (int j = 0; j < address.length; j++) {
+ if (j < lastByte) {
+ address[j] = (byte) 0xff;
+ } else if (j == lastByte) {
+ byte b = 0;
+ byte msb = (byte) 0x80;
+ for (int k = 0; k < Byte.SIZE; k++) {
+ if (k <= lastBit) {
+ b |= (msb >> k);
+ }
+ }
+ address[j] = b;
+ } else {
+ address[j] = 0;
+ }
+ }
+
+ Prefix p = new Prefix(address, prefixLength);
+ System.out.println(p.printAsBits());
+ assertTrue(Arrays.equals(address, p.getAddress()));
+ }
+ }
}
diff --git a/src/test/java/net/onrc/onos/apps/bgproute/PtreeTest.java b/src/test/java/net/onrc/onos/apps/bgproute/PtreeTest.java
index 0f820c2..f0fd40a 100644
--- a/src/test/java/net/onrc/onos/apps/bgproute/PtreeTest.java
+++ b/src/test/java/net/onrc/onos/apps/bgproute/PtreeTest.java
@@ -21,208 +21,208 @@
import com.google.common.net.InetAddresses;
public class PtreeTest {
-
- private Logger log = LoggerFactory.getLogger(PtreeTest.class);
-
- private Ptree ptree;
- private PatriciaTrie<RibEntry> ooptrie;
-
- private Map<String, byte[]> byteAddresses;
- @Before
- public void setUp() throws Exception {
- ptree = new Ptree(32);
- ooptrie = new PatriciaTrie<RibEntry>(32);
-
- String[] strPrefixes = {
- "192.168.10.0/24",
- "192.168.10.0/23",
- "192.168.10.0/22",
- "192.0.0.0/7",
- "192.168.11.0/24",
- "10.0.23.128/25",
- "206.17.144.0/20",
- "9.17.0.0/12",
- "192.168.0.0/16"
- };
-
- byteAddresses = new HashMap<String, byte[]>(strPrefixes.length+10);
- for (String prefix : strPrefixes) {
- String address = prefix.split("/")[0];
- int prefixLength = Integer.parseInt(prefix.split("/")[1]);
- byteAddresses.put(prefix, InetAddresses.forString(address).getAddress());
-
- PtreeNode node = ptree.acquire(byteAddresses.get(prefix), prefixLength);
- node.rib = new RibEntry("192.168.10.101", "192.168.60.1");
- ooptrie.put(new Prefix(byteAddresses.get(prefix), prefixLength),
- new RibEntry("192.168.10.101", "192.168.60.1"));
- }
- }
+ private Logger log = LoggerFactory.getLogger(PtreeTest.class);
- @After
- public void tearDown() throws Exception {
- }
+ private Ptree ptree;
+ private PatriciaTrie<RibEntry> ooptrie;
- @Ignore
- @Test
- public void testAcquireByteArray() {
- fail("Not yet implemented");
- }
+ private Map<String, byte[]> byteAddresses;
- @Ignore
- @Test
- public void testAcquireByteArrayInt() {
- //First let's test an empty Ptree
- Ptree localPtree = new Ptree(32);
- PtreeNode node = localPtree.acquire(new byte[] {0x00, 0x00, 0x00, 0x00});
- assertTrue(node != null && node.rib == null);
-
- //Now let's look at the prepopulated tree
- String testPrefix = "206.17.144.0/20";
- PtreeNode existingNode = ptree.acquire(byteAddresses.get(testPrefix), 20);
- printByteArray(existingNode.key);
- printByteArray(byteAddresses.get(testPrefix));
- assertTrue(existingNode != null && existingNode.rib == null);
-
- assertTrue(Arrays.equals(existingNode.key, byteAddresses.get(testPrefix)));
- }
+ @Before
+ public void setUp() throws Exception {
+ ptree = new Ptree(32);
+ ooptrie = new PatriciaTrie<RibEntry>(32);
- @Test
- public void testLookup() {
- String prefix1 = "192.168.10.12";
- int length1 = 29;
- PtreeNode node1 = ptree.lookup(InetAddresses.forString(prefix1).getAddress(), length1);
-
- //There should be no direct match
- assertTrue(node1 == null);
-
- log.debug("{} null: {}", "node1", node1 == null ? "true" : "false");
-
- String prefix2 = "206.17.144.0";
- int length2 = 20;
- PtreeNode node2 = ptree.lookup(InetAddresses.forString(prefix2).getAddress(), length2);
-
- assertTrue(node2 != null);
- assertTrue(Arrays.equals(node2.key, byteAddresses.get(prefix2 + "/" + length2)));
-
- log.debug("{} null: {}", "node2", node2 == null ? "true" : "false");
- if (node2 != null) {
- log.debug("{} key: {}, keybits: {}", new Object[] {"node2", node2.key, node2.keyBits});
- }
-
- String prefix3 = "192.0.0.0";
- int length3 = 7;
- PtreeNode node3 = ptree.lookup(InetAddresses.forString(prefix3).getAddress(), length3);
- assertTrue(node3 != null);
- }
+ String[] strPrefixes = {
+ "192.168.10.0/24",
+ "192.168.10.0/23",
+ "192.168.10.0/22",
+ "192.0.0.0/7",
+ "192.168.11.0/24",
+ "10.0.23.128/25",
+ "206.17.144.0/20",
+ "9.17.0.0/12",
+ "192.168.0.0/16"
+ };
- @Test
- public void testMatch() {
- String prefix1 = "192.168.10.12";
- int length1 = 29;
- PtreeNode node1 = ptree.match(InetAddresses.forString(prefix1).getAddress(), length1);
-
- //There should be no direct match, but we should get the covering prefix
- assertTrue(node1 != null);
- assertTrue(Arrays.equals(node1.key, byteAddresses.get("192.168.10.0/24")));
-
- log.debug("{} null: {}", "node1", node1 == null ? "true" : "false");
- if (node1 != null) {
- log.debug("{} key: {}, keybits: {}", new Object[] {"node1", node1.key, node1.keyBits});
- }
- }
-
- @Ignore
- @Test
- public void testTraverse() {
-
- String expected = "[0, 0, 0, 0]/0\n";
- expected += "[8, 0, 0, 0]/6\n";
- expected += "[9, 17, 0, 0]/12\n";
- expected += "[10, 0, 23, -128]/25\n";
- expected += "[-64, 0, 0, 0]/4\n";
- expected += "[-64, -88, 0, 0]/16\n";
- expected += "[-64, -88, 8, 0]/22\n";
- expected += "[-64, -88, 10, 0]/23\n";
- expected += "[-64, -88, 10, 0]/24\n";
- expected += "[-64, -88, 11, 0]/24\n";
- expected += "[-50, 17, -112, 0]/20\n";
-
- PtreeNode node;
- String result = "";
-
- for (node = ptree.begin(); node != null; node = ptree.next(node)) {
- result += printByteArray(node.key) + "/" + node.keyBits + "\n";
- }
-
- assertEquals(expected, result);
- }
+ byteAddresses = new HashMap<String, byte[]>(strPrefixes.length + 10);
+ for (String prefix : strPrefixes) {
+ String address = prefix.split("/")[0];
+ int prefixLength = Integer.parseInt(prefix.split("/")[1]);
+ byteAddresses.put(prefix, InetAddresses.forString(address).getAddress());
- @Ignore
- @Test
- public void testBegin() {
- fail("Not yet implemented");
- }
+ PtreeNode node = ptree.acquire(byteAddresses.get(prefix), prefixLength);
+ node.rib = new RibEntry("192.168.10.101", "192.168.60.1");
+ ooptrie.put(new Prefix(byteAddresses.get(prefix), prefixLength),
+ new RibEntry("192.168.10.101", "192.168.60.1"));
+ }
+ }
- @Ignore
- @Test
- public void testNext() {
- fail("Not yet implemented");
- }
+ @After
+ public void tearDown() throws Exception {
+ }
- @Ignore
- @Test
- public void testDelReference() {
- fail("Not yet implemented");
- }
-
- @Ignore
- @Test
- public void testMisc() {
- int bitIndex = -1;
- int index = (int)(bitIndex / Byte.SIZE);
- int bit = (int)(bitIndex % Byte.SIZE);
-
- log.debug("index {} bit {}", index, bit);
- log.debug("percent {}", 1%8);
-
- //PtreeNode node1 = new PtreeNode(new byte[] {0x0, 0x0, 0x0, 0x0}, 0, 4);
- PtreeNode node1 = new PtreeNode(null, 0, 4);
- log.debug("node1: key {}, keybits {}", printByteArray(node1.key), node1.keyBits);
-
- //PtreeNode node2 = new PtreeNode(new byte[] {(byte)0xff, (byte)0xff, (byte)0xff, (byte)0xff},
- PtreeNode node2 = new PtreeNode(null,
- 32, 4);
- log.debug("node2: key {}, keybits {}", printByteArray(node2.key), node2.keyBits);
- }
-
- @Test
- public void testIteration() {
- Iterator<IPatriciaTrie.Entry<RibEntry>> it = ooptrie.iterator();
-
- while (it.hasNext()) {
- IPatriciaTrie.Entry<RibEntry> entry = it.next();
- log.debug("PatriciaTrie prefix {} \t {}", entry.getPrefix(), entry.getPrefix().printAsBits());
- }
-
- try {
- PtreeNode node;
- for (node = ptree.begin(); node != null; node = ptree.next(node)) {
- log.debug("Ptree prefix {}/{}", InetAddress.getByAddress(node.key).getHostAddress(), node.keyBits);
- }
- } catch (UnknownHostException e) {
-
- }
- }
-
- private String printByteArray(byte[] array) {
- String result = "[";
- for (byte b : array) {
- result += b + ", ";
- }
- result = result.substring(0, result.length() - 2);
- result += "]";
- return result;
- }
+ @Ignore
+ @Test
+ public void testAcquireByteArray() {
+ fail("Not yet implemented");
+ }
+
+ @Ignore
+ @Test
+ public void testAcquireByteArrayInt() {
+ //First let's test an empty Ptree
+ Ptree localPtree = new Ptree(32);
+ PtreeNode node = localPtree.acquire(new byte[]{0x00, 0x00, 0x00, 0x00});
+ assertTrue(node != null && node.rib == null);
+
+ //Now let's look at the prepopulated tree
+ String testPrefix = "206.17.144.0/20";
+ PtreeNode existingNode = ptree.acquire(byteAddresses.get(testPrefix), 20);
+ printByteArray(existingNode.key);
+ printByteArray(byteAddresses.get(testPrefix));
+ assertTrue(existingNode != null && existingNode.rib == null);
+
+ assertTrue(Arrays.equals(existingNode.key, byteAddresses.get(testPrefix)));
+ }
+
+ @Test
+ public void testLookup() {
+ String prefix1 = "192.168.10.12";
+ int length1 = 29;
+ PtreeNode node1 = ptree.lookup(InetAddresses.forString(prefix1).getAddress(), length1);
+
+ //There should be no direct match
+ assertTrue(node1 == null);
+
+ log.debug("{} null: {}", "node1", node1 == null ? "true" : "false");
+
+ String prefix2 = "206.17.144.0";
+ int length2 = 20;
+ PtreeNode node2 = ptree.lookup(InetAddresses.forString(prefix2).getAddress(), length2);
+
+ assertTrue(node2 != null);
+ assertTrue(Arrays.equals(node2.key, byteAddresses.get(prefix2 + "/" + length2)));
+
+ log.debug("{} null: {}", "node2", node2 == null ? "true" : "false");
+ if (node2 != null) {
+ log.debug("{} key: {}, keybits: {}", new Object[]{"node2", node2.key, node2.keyBits});
+ }
+
+ String prefix3 = "192.0.0.0";
+ int length3 = 7;
+ PtreeNode node3 = ptree.lookup(InetAddresses.forString(prefix3).getAddress(), length3);
+ assertTrue(node3 != null);
+ }
+
+ @Test
+ public void testMatch() {
+ String prefix1 = "192.168.10.12";
+ int length1 = 29;
+ PtreeNode node1 = ptree.match(InetAddresses.forString(prefix1).getAddress(), length1);
+
+ //There should be no direct match, but we should get the covering prefix
+ assertTrue(node1 != null);
+ assertTrue(Arrays.equals(node1.key, byteAddresses.get("192.168.10.0/24")));
+
+ log.debug("{} null: {}", "node1", node1 == null ? "true" : "false");
+ if (node1 != null) {
+ log.debug("{} key: {}, keybits: {}", new Object[]{"node1", node1.key, node1.keyBits});
+ }
+ }
+
+ @Ignore
+ @Test
+ public void testTraverse() {
+
+ String expected = "[0, 0, 0, 0]/0\n";
+ expected += "[8, 0, 0, 0]/6\n";
+ expected += "[9, 17, 0, 0]/12\n";
+ expected += "[10, 0, 23, -128]/25\n";
+ expected += "[-64, 0, 0, 0]/4\n";
+ expected += "[-64, -88, 0, 0]/16\n";
+ expected += "[-64, -88, 8, 0]/22\n";
+ expected += "[-64, -88, 10, 0]/23\n";
+ expected += "[-64, -88, 10, 0]/24\n";
+ expected += "[-64, -88, 11, 0]/24\n";
+ expected += "[-50, 17, -112, 0]/20\n";
+
+ PtreeNode node;
+ String result = "";
+
+ for (node = ptree.begin(); node != null; node = ptree.next(node)) {
+ result += printByteArray(node.key) + "/" + node.keyBits + "\n";
+ }
+
+ assertEquals(expected, result);
+ }
+
+ @Ignore
+ @Test
+ public void testBegin() {
+ fail("Not yet implemented");
+ }
+
+ @Ignore
+ @Test
+ public void testNext() {
+ fail("Not yet implemented");
+ }
+
+ @Ignore
+ @Test
+ public void testDelReference() {
+ fail("Not yet implemented");
+ }
+
+ @Ignore
+ @Test
+ public void testMisc() {
+ int bitIndex = -1;
+ int index = (int) (bitIndex / Byte.SIZE);
+ int bit = (int) (bitIndex % Byte.SIZE);
+
+ log.debug("index {} bit {}", index, bit);
+ log.debug("percent {}", 1 % 8);
+
+ //PtreeNode node1 = new PtreeNode(new byte[] {0x0, 0x0, 0x0, 0x0}, 0, 4);
+ PtreeNode node1 = new PtreeNode(null, 0, 4);
+ log.debug("node1: key {}, keybits {}", printByteArray(node1.key), node1.keyBits);
+
+ //PtreeNode node2 = new PtreeNode(new byte[] {(byte)0xff, (byte)0xff, (byte)0xff, (byte)0xff},
+ PtreeNode node2 = new PtreeNode(null,
+ 32, 4);
+ log.debug("node2: key {}, keybits {}", printByteArray(node2.key), node2.keyBits);
+ }
+
+ @Test
+ public void testIteration() {
+ Iterator<IPatriciaTrie.Entry<RibEntry>> it = ooptrie.iterator();
+
+ while (it.hasNext()) {
+ IPatriciaTrie.Entry<RibEntry> entry = it.next();
+ log.debug("PatriciaTrie prefix {} \t {}", entry.getPrefix(), entry.getPrefix().printAsBits());
+ }
+
+ try {
+ PtreeNode node;
+ for (node = ptree.begin(); node != null; node = ptree.next(node)) {
+ log.debug("Ptree prefix {}/{}", InetAddress.getByAddress(node.key).getHostAddress(), node.keyBits);
+ }
+ } catch (UnknownHostException e) {
+
+ }
+ }
+
+ private String printByteArray(byte[] array) {
+ String result = "[";
+ for (byte b : array) {
+ result += b + ", ";
+ }
+ result = result.substring(0, result.length() - 2);
+ result += "]";
+ return result;
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/datastore/hazelcast/HZTableTest.java b/src/test/java/net/onrc/onos/core/datastore/hazelcast/HZTableTest.java
index fcbe599..39e7e9f 100644
--- a/src/test/java/net/onrc/onos/core/datastore/hazelcast/HZTableTest.java
+++ b/src/test/java/net/onrc/onos/core/datastore/hazelcast/HZTableTest.java
@@ -28,344 +28,343 @@
public class HZTableTest {
@Rule
- public TestName name= new TestName();
+ public TestName name = new TestName();
static final String TEST_TABLE_NAME = "TableForUnitTest";
HZTable table;
@Before
public void setUp() throws Exception {
- table = (HZTable) HZClient.getClient().getTable(TEST_TABLE_NAME);
+ table = (HZTable) HZClient.getClient().getTable(TEST_TABLE_NAME);
}
@After
public void tearDown() throws Exception {
- HZClient.getClient().dropTable(table);
+ HZClient.getClient().dropTable(table);
}
public void assertEntryInTable(final byte[] key, final byte[] value, final long version) {
- VersionedValue valueblob = table.getBackendMap().get(key);
- assertNotNull(valueblob);
- assertArrayEquals(value, valueblob.getValue());
- assertEquals(version, valueblob.getVersion());
+ VersionedValue valueblob = table.getBackendMap().get(key);
+ assertNotNull(valueblob);
+ assertArrayEquals(value, valueblob.getValue());
+ assertEquals(version, valueblob.getVersion());
}
public void assertKeyNotInTable(final byte[] key) {
- VersionedValue valueblob = table.getBackendMap().get(key);
- assertNull(valueblob);
+ VersionedValue valueblob = table.getBackendMap().get(key);
+ assertNull(valueblob);
}
@Test
public void testGetInitialVersion() {
- final long version1 = HZTable.getInitialVersion();
- assertNotEquals(HZClient.VERSION_NONEXISTENT,version1);
+ final long version1 = HZTable.getInitialVersion();
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version1);
- final long version2 = HZTable.getInitialVersion();
- assertNotEquals(HZClient.VERSION_NONEXISTENT, version2);
- assertNotEquals(version1, version2);
+ final long version2 = HZTable.getInitialVersion();
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version2);
+ assertNotEquals(version1, version2);
}
@Test
public void testGetNextVersion() {
- final long nextVersion = HZTable.getNextVersion(1);
- assertNotEquals(nextVersion, HZClient.VERSION_NONEXISTENT);
- assertNotEquals(nextVersion, 1);
+ final long nextVersion = HZTable.getNextVersion(1);
+ assertNotEquals(nextVersion, HZClient.VERSION_NONEXISTENT);
+ assertNotEquals(nextVersion, 1);
- final long nextVersion1 = HZTable.getNextVersion(Long.MAX_VALUE);
- assertNotEquals(nextVersion1, HZClient.VERSION_NONEXISTENT);
- assertNotEquals(nextVersion1, Long.MAX_VALUE);
+ final long nextVersion1 = HZTable.getNextVersion(Long.MAX_VALUE);
+ assertNotEquals(nextVersion1, HZClient.VERSION_NONEXISTENT);
+ assertNotEquals(nextVersion1, Long.MAX_VALUE);
- final long nextVersion11 = HZTable.getNextVersion(HZClient.VERSION_NONEXISTENT-1);
- assertNotEquals(nextVersion11, HZClient.VERSION_NONEXISTENT);
- assertNotEquals(nextVersion11, HZClient.VERSION_NONEXISTENT-1);
+ final long nextVersion11 = HZTable.getNextVersion(HZClient.VERSION_NONEXISTENT - 1);
+ assertNotEquals(nextVersion11, HZClient.VERSION_NONEXISTENT);
+ assertNotEquals(nextVersion11, HZClient.VERSION_NONEXISTENT - 1);
}
@Ignore // nothing to test for now
@Test
public void testHZTable() {
- fail("Not yet implemented");
+ fail("Not yet implemented");
}
@Test
public void testGetTableName() {
- assertEquals(TEST_TABLE_NAME, table.getTableName());
+ assertEquals(TEST_TABLE_NAME, table.getTableName());
}
@Test
public void testVERSION_NONEXISTENT() {
- assertEquals(HZClient.VERSION_NONEXISTENT, table.VERSION_NONEXISTENT());
+ assertEquals(HZClient.VERSION_NONEXISTENT, table.VERSION_NONEXISTENT());
}
@Test
public void testGetTableId() {
- // for Hazelcast implementation IKVTableID is table itself
- assertEquals(table, table.getTableId());
+ // for Hazelcast implementation IKVTableID is table itself
+ assertEquals(table, table.getTableId());
}
@Test
public void testCreate() throws ObjectExistsException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
- final long version = table.create(key, value);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,version);
+ final long version = table.create(key, value);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version);
- assertEntryInTable(key, value, version);
+ assertEntryInTable(key, value, version);
}
@Test(expected = ObjectExistsException.class)
public void testCreateConflict() throws ObjectExistsException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
- final long version = table.create(key, value);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,version);
+ final long version = table.create(key, value);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version);
- assertEntryInTable(key, value, version);
+ assertEntryInTable(key, value, version);
- table.create(key, value);
- fail("Should have thrown exception");
+ table.create(key, value);
+ fail("Should have thrown exception");
}
@Test
public void testForceCreate() {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
- final long version = table.forceCreate(key, value);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,version);
- assertEntryInTable(key, value, version);
+ final long version = table.forceCreate(key, value);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version);
+ assertEntryInTable(key, value, version);
- final long version1 = table.forceCreate(key, value);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,version1);
- assertNotEquals(version, version1);
- assertEntryInTable(key, value, version1);
+ final long version1 = table.forceCreate(key, value);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version1);
+ assertNotEquals(version, version1);
+ assertEntryInTable(key, value, version1);
}
@Test
public void testRead() throws ObjectDoesntExistException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
- // put data to read
- final long version = table.forceCreate(key, value);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,version);
- assertEntryInTable(key, value, version);
+ // put data to read
+ final long version = table.forceCreate(key, value);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version);
+ assertEntryInTable(key, value, version);
- // test body
- final IKVEntry readValue = table.read(key);
- assertArrayEquals(key, readValue.getKey());
- assertArrayEquals(value, readValue.getValue());
- assertEquals(version, readValue.getVersion());
+ // test body
+ final IKVEntry readValue = table.read(key);
+ assertArrayEquals(key, readValue.getKey());
+ assertArrayEquals(value, readValue.getValue());
+ assertEquals(version, readValue.getVersion());
}
@Test(expected = ObjectDoesntExistException.class)
public void testReadNotExist() throws ObjectDoesntExistException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- table.read(key);
- fail("Should have thrown exception");
+ table.read(key);
+ fail("Should have thrown exception");
}
@Test
public void testUpdateByteArrayByteArrayLongSuccess() throws ObjectDoesntExistException, WrongVersionException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
- final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
- // put data to update
- final long oldVersion = table.forceCreate(key, oldValue);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,oldVersion);
- assertEntryInTable(key, oldValue, oldVersion);
+ // put data to update
+ final long oldVersion = table.forceCreate(key, oldValue);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, oldVersion);
+ assertEntryInTable(key, oldValue, oldVersion);
- final long version = table.update(key, value, oldVersion);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,version);
- assertEntryInTable(key, value, version);
+ final long version = table.update(key, value, oldVersion);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version);
+ assertEntryInTable(key, value, version);
}
@Test(expected = ObjectDoesntExistException.class)
public void testUpdateByteArrayByteArrayLongFailNoOldValue() throws ObjectDoesntExistException, WrongVersionException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
- final long oldVersion = 0xDEAD;
+ final long oldVersion = 0xDEAD;
- final long version = table.update(key, value, oldVersion);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,version);
- assertEntryInTable(key, value, version);
+ final long version = table.update(key, value, oldVersion);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version);
+ assertEntryInTable(key, value, version);
}
@Test(expected = WrongVersionException.class)
public void testUpdateByteArrayByteArrayLongFailWrongVersion() throws ObjectDoesntExistException, WrongVersionException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
- final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
- // put data to update
- final long oldVersion = table.forceCreate(key, oldValue);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,oldVersion);
- assertEntryInTable(key, oldValue, oldVersion);
- // some one updates (from different thread/process in reality)
- table.forceCreate(key, oldValue);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,oldVersion);
+ // put data to update
+ final long oldVersion = table.forceCreate(key, oldValue);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, oldVersion);
+ assertEntryInTable(key, oldValue, oldVersion);
+ // some one updates (from different thread/process in reality)
+ table.forceCreate(key, oldValue);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, oldVersion);
- table.update(key, value, oldVersion);
- fail("Should have thrown exception");
+ table.update(key, value, oldVersion);
+ fail("Should have thrown exception");
}
@Test
public void testUpdateByteArrayByteArraySuccess() throws ObjectDoesntExistException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
- final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
- // put data to update
- final long oldVersion = table.forceCreate(key, oldValue);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,oldVersion);
- assertEntryInTable(key, oldValue, oldVersion);
+ // put data to update
+ final long oldVersion = table.forceCreate(key, oldValue);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, oldVersion);
+ assertEntryInTable(key, oldValue, oldVersion);
- final long version = table.update(key, value);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,version);
- assertEntryInTable(key, value, version);
+ final long version = table.update(key, value);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version);
+ assertEntryInTable(key, value, version);
}
@Test(expected = ObjectDoesntExistException.class)
public void testUpdateByteArrayByteArrayFailNoOldValue() throws ObjectDoesntExistException, WrongVersionException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
- final long version = table.update(key, value);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,version);
- assertEntryInTable(key, value, version);
- fail("Should have thrown exception");
+ final long version = table.update(key, value);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version);
+ assertEntryInTable(key, value, version);
+ fail("Should have thrown exception");
}
@Test
public void testUpdateByteArrayByteArraySuccessIgnoreVersion() throws ObjectDoesntExistException, WrongVersionException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
- final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] value = "SomeValue".getBytes(StandardCharsets.UTF_8);
- // put data to update
- final long oldVersion = table.forceCreate(key, oldValue);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,oldVersion);
- assertEntryInTable(key, oldValue, oldVersion);
- // someone updates (from different thread/process in reality)
- table.forceCreate(key, oldValue);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,oldVersion);
+ // put data to update
+ final long oldVersion = table.forceCreate(key, oldValue);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, oldVersion);
+ assertEntryInTable(key, oldValue, oldVersion);
+ // someone updates (from different thread/process in reality)
+ table.forceCreate(key, oldValue);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, oldVersion);
- final long version = table.update(key, value);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,version);
- assertEntryInTable(key, value, version);
+ final long version = table.update(key, value);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version);
+ assertEntryInTable(key, value, version);
}
@Test
public void testDelete() throws ObjectDoesntExistException, WrongVersionException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
- // put data to delete
- final long oldVersion = table.forceCreate(key, oldValue);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,oldVersion);
- assertEntryInTable(key, oldValue, oldVersion);
+ // put data to delete
+ final long oldVersion = table.forceCreate(key, oldValue);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, oldVersion);
+ assertEntryInTable(key, oldValue, oldVersion);
- long version = table.delete(key, oldVersion);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,oldVersion);
- assertEquals(oldVersion, version);
- assertKeyNotInTable(key);
+ long version = table.delete(key, oldVersion);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, oldVersion);
+ assertEquals(oldVersion, version);
+ assertKeyNotInTable(key);
}
@Test(expected = ObjectDoesntExistException.class)
public void testDeleteFailNoEntry() throws ObjectDoesntExistException, WrongVersionException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final long oldVersion = 0xDEAD;
+ final long oldVersion = 0xDEAD;
- try {
- table.delete(key, oldVersion);
- } catch (ObjectDoesntExistException | WrongVersionException e) {
- assertKeyNotInTable(key);
- throw e;
- }
- fail("Should have thrown exception");
+ try {
+ table.delete(key, oldVersion);
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ assertKeyNotInTable(key);
+ throw e;
+ }
+ fail("Should have thrown exception");
}
@Test(expected = WrongVersionException.class)
public void testDeleteFailWrongVersion() throws ObjectDoesntExistException, WrongVersionException {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
- // put data to delete
- final long oldVersion = table.forceCreate(key, oldValue);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,oldVersion);
- assertEntryInTable(key, oldValue, oldVersion);
- // someone updates (from different thread/process in reality)
- final long latestVersion = table.forceCreate(key, oldValue);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,latestVersion);
+ // put data to delete
+ final long oldVersion = table.forceCreate(key, oldValue);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, oldVersion);
+ assertEntryInTable(key, oldValue, oldVersion);
+ // someone updates (from different thread/process in reality)
+ final long latestVersion = table.forceCreate(key, oldValue);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, latestVersion);
- try {
- table.delete(key, oldVersion);
- } catch (ObjectDoesntExistException | WrongVersionException e) {
- assertEntryInTable(key, oldValue, latestVersion);
- throw e;
- }
- fail("Should have thrown exception");
+ try {
+ table.delete(key, oldVersion);
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ assertEntryInTable(key, oldValue, latestVersion);
+ throw e;
+ }
+ fail("Should have thrown exception");
}
-
@Test
public void testForceDelete() {
- final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
- final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
+ final byte[] key = name.getMethodName().getBytes(StandardCharsets.UTF_8);
+ final byte[] oldValue = "OldValue".getBytes(StandardCharsets.UTF_8);
- // put data to delete
- final long oldVersion = table.forceCreate(key, oldValue);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,oldVersion);
- assertEntryInTable(key, oldValue, oldVersion);
+ // put data to delete
+ final long oldVersion = table.forceCreate(key, oldValue);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, oldVersion);
+ assertEntryInTable(key, oldValue, oldVersion);
- long version = table.forceDelete(key);
- assertNotEquals(HZClient.VERSION_NONEXISTENT,oldVersion);
- assertEquals(oldVersion, version);
- assertKeyNotInTable(key);
+ long version = table.forceDelete(key);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, oldVersion);
+ assertEquals(oldVersion, version);
+ assertKeyNotInTable(key);
}
@Test
public void testGetAllEntries() {
- final int DATASETSIZE = 100;
- final Map<byte[], VersionedValue> testdata = new TreeMap<>(ByteArrayComparator.BYTEARRAY_COMPARATOR);
- for(int i = 0 ; i < DATASETSIZE ; ++i) {
- final byte[] key = (name.getMethodName()+i).getBytes(StandardCharsets.UTF_8);
- final byte[] value = ("Value"+i).getBytes(StandardCharsets.UTF_8);
+ final int DATASETSIZE = 100;
+ final Map<byte[], VersionedValue> testdata = new TreeMap<>(ByteArrayComparator.BYTEARRAY_COMPARATOR);
+ for (int i = 0; i < DATASETSIZE; ++i) {
+ final byte[] key = (name.getMethodName() + i).getBytes(StandardCharsets.UTF_8);
+ final byte[] value = ("Value" + i).getBytes(StandardCharsets.UTF_8);
- // put data to delete
- final long version = table.forceCreate(key, value);
- assertNotEquals(HZClient.VERSION_NONEXISTENT, version);
- assertEntryInTable(key, value, version);
+ // put data to delete
+ final long version = table.forceCreate(key, value);
+ assertNotEquals(HZClient.VERSION_NONEXISTENT, version);
+ assertEntryInTable(key, value, version);
- testdata.put(key, new VersionedValue(value, version));
- }
+ testdata.put(key, new VersionedValue(value, version));
+ }
- Iterable<IKVEntry> datastore = table.getAllEntries();
- for( IKVEntry entry : datastore ) {
- VersionedValue expectedValue = testdata.get(entry.getKey());
- assertNotNull(expectedValue);
- assertArrayEquals(expectedValue.getValue(), entry.getValue());
- assertEquals(expectedValue.getVersion(), entry.getVersion());
+ Iterable<IKVEntry> datastore = table.getAllEntries();
+ for (IKVEntry entry : datastore) {
+ VersionedValue expectedValue = testdata.get(entry.getKey());
+ assertNotNull(expectedValue);
+ assertArrayEquals(expectedValue.getValue(), entry.getValue());
+ assertEquals(expectedValue.getVersion(), entry.getVersion());
- testdata.remove(entry.getKey());
- }
+ testdata.remove(entry.getKey());
+ }
- assertTrue(testdata.isEmpty());
+ assertTrue(testdata.isEmpty());
}
@Test
public void testToString() {
- assertEquals("[HZTable " + TEST_TABLE_NAME + "]", table.toString());
+ assertEquals("[HZTable " + TEST_TABLE_NAME + "]", table.toString());
}
}
diff --git a/src/test/java/net/onrc/onos/core/datastore/topology/KVSwitchNoDataStoreTest.java b/src/test/java/net/onrc/onos/core/datastore/topology/KVSwitchNoDataStoreTest.java
index 54eaf8c..b538aca 100644
--- a/src/test/java/net/onrc/onos/core/datastore/topology/KVSwitchNoDataStoreTest.java
+++ b/src/test/java/net/onrc/onos/core/datastore/topology/KVSwitchNoDataStoreTest.java
@@ -14,72 +14,72 @@
@Test
public void testGetDpidFromKeyByteArray() {
- // reference bytes
- final byte[] key = KVSwitch.getSwitchID(0x1L);
+ // reference bytes
+ final byte[] key = KVSwitch.getSwitchID(0x1L);
- assertEquals(0x1L, KVSwitch.getDpidFromKey(key));
+ assertEquals(0x1L, KVSwitch.getDpidFromKey(key));
}
@Test
public void testGetDpidFromKeyByteBuffer() {
- // reference bytes
- final ByteBuffer key = ByteBuffer.wrap(KVSwitch.getSwitchID(0x1L));
+ // reference bytes
+ final ByteBuffer key = ByteBuffer.wrap(KVSwitch.getSwitchID(0x1L));
- assertEquals(0x1L, KVSwitch.getDpidFromKey(key));
+ assertEquals(0x1L, KVSwitch.getDpidFromKey(key));
}
@Test
public void testCreateFromKeyByteArray() {
- // reference bytes
- Long dpid = Long.valueOf(0x1L);
- final byte[] key = KVSwitch.getSwitchID(dpid);
+ // reference bytes
+ Long dpid = Long.valueOf(0x1L);
+ final byte[] key = KVSwitch.getSwitchID(dpid);
- KVSwitch sw = KVSwitch.createFromKey(key);
- assertNotNull(sw);
- assertEquals(dpid, sw.getDpid());
+ KVSwitch sw = KVSwitch.createFromKey(key);
+ assertNotNull(sw);
+ assertEquals(dpid, sw.getDpid());
}
@Test
public void testGetStatus() {
- KVSwitch sw = new KVSwitch(0x1L);
+ KVSwitch sw = new KVSwitch(0x1L);
- assertEquals(STATUS.INACTIVE, sw.getStatus());
+ assertEquals(STATUS.INACTIVE, sw.getStatus());
}
@Test
public void testSetStatus() {
- KVSwitch sw = new KVSwitch(0x1L);
- assertEquals(STATUS.INACTIVE, sw.getStatus());
+ KVSwitch sw = new KVSwitch(0x1L);
+ assertEquals(STATUS.INACTIVE, sw.getStatus());
- sw.setStatus(STATUS.ACTIVE);
- assertEquals(STATUS.ACTIVE, sw.getStatus());
+ sw.setStatus(STATUS.ACTIVE);
+ assertEquals(STATUS.ACTIVE, sw.getStatus());
}
@Test
public void testGetDpid() {
- Long dpid = 0x1L;
- KVSwitch sw = new KVSwitch(dpid);
- assertEquals(dpid, sw.getDpid());
+ Long dpid = 0x1L;
+ KVSwitch sw = new KVSwitch(dpid);
+ assertEquals(dpid, sw.getDpid());
}
@Test
public void testGetId() {
- // reference bytes
- Long dpid = Long.valueOf(0x1L);
- final byte[] key = KVSwitch.getSwitchID(dpid);
+ // reference bytes
+ Long dpid = Long.valueOf(0x1L);
+ final byte[] key = KVSwitch.getSwitchID(dpid);
- KVSwitch sw = KVSwitch.createFromKey(key);
- assertArrayEquals(key, sw.getId());
+ KVSwitch sw = KVSwitch.createFromKey(key);
+ assertArrayEquals(key, sw.getId());
}
@Test
public void testToString() {
- final String expected = "[" + "KVSwitch"
- + " 0x" + 1 + " STATUS:" + STATUS.INACTIVE + "]";
+ final String expected = "[" + "KVSwitch"
+ + " 0x" + 1 + " STATUS:" + STATUS.INACTIVE + "]";
- Long dpid = 0x1L;
- KVSwitch sw = new KVSwitch(dpid);
+ Long dpid = 0x1L;
+ KVSwitch sw = new KVSwitch(dpid);
- assertEquals(expected, sw.toString());
+ assertEquals(expected, sw.toString());
}
}
diff --git a/src/test/java/net/onrc/onos/core/datastore/topology/KVSwitchTest.java b/src/test/java/net/onrc/onos/core/datastore/topology/KVSwitchTest.java
index 58b30a3..ba25903 100644
--- a/src/test/java/net/onrc/onos/core/datastore/topology/KVSwitchTest.java
+++ b/src/test/java/net/onrc/onos/core/datastore/topology/KVSwitchTest.java
@@ -27,181 +27,182 @@
@Before
public void setUp() throws Exception {
- switchTable = DataStoreClient.getClient().getTable(KVSwitch.GLOBAL_SWITCH_TABLE_NAME);
- sw1 = new KVSwitch(dpid1);
+ switchTable = DataStoreClient.getClient().getTable(KVSwitch.GLOBAL_SWITCH_TABLE_NAME);
+ sw1 = new KVSwitch(dpid1);
}
@After
public void tearDown() throws Exception {
- DataStoreClient.getClient().dropTable(switchTable);
+ DataStoreClient.getClient().dropTable(switchTable);
}
public KVSwitch assertSwitchInDataStore(final Long dpid, final STATUS status) {
- try {
- final KVSwitch sw = new KVSwitch(dpid);
- sw.read();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
- assertEquals(dpid, sw.getDpid());
- assertEquals(status, sw.getStatus());
- return sw;
- } catch (ObjectDoesntExistException e) {
- fail("Switch was not written to datastore");
- }
- return null;
+ try {
+ final KVSwitch sw = new KVSwitch(dpid);
+ sw.read();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+ assertEquals(dpid, sw.getDpid());
+ assertEquals(status, sw.getStatus());
+ return sw;
+ } catch (ObjectDoesntExistException e) {
+ fail("Switch was not written to datastore");
+ }
+ return null;
}
+
public void assertSwitchNotInDataStore(final Long dpid) {
- final KVSwitch sw = new KVSwitch(dpid);
- try {
- sw.read();
- fail("Switch was not supposed to be there in datastore");
- } catch (ObjectDoesntExistException e) {
- }
+ final KVSwitch sw = new KVSwitch(dpid);
+ try {
+ sw.read();
+ fail("Switch was not supposed to be there in datastore");
+ } catch (ObjectDoesntExistException e) {
+ }
}
@Test
public void testGetAllSwitches() throws ObjectExistsException {
- final int NUM_SWITCHES = 100;
- Map<Long,KVSwitch> expected = new HashMap<>();
- for (long dpid = 1 ; dpid <= NUM_SWITCHES ; ++dpid) {
- KVSwitch sw = new KVSwitch(dpid);
- sw.setStatus(STATUS.ACTIVE);
- sw.create();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
- expected.put(sw.getDpid(), sw);
- }
+ final int NUM_SWITCHES = 100;
+ Map<Long, KVSwitch> expected = new HashMap<>();
+ for (long dpid = 1; dpid <= NUM_SWITCHES; ++dpid) {
+ KVSwitch sw = new KVSwitch(dpid);
+ sw.setStatus(STATUS.ACTIVE);
+ sw.create();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+ expected.put(sw.getDpid(), sw);
+ }
- Iterable<KVSwitch> switches = KVSwitch.getAllSwitches();
+ Iterable<KVSwitch> switches = KVSwitch.getAllSwitches();
- for (KVSwitch sw : switches) {
- KVSwitch expectedSw = expected.get(sw.getDpid());
- assertNotNull(expectedSw);
- assertEquals(expectedSw.getDpid(), sw.getDpid());
- assertEquals(expectedSw.getStatus(), sw.getStatus());
- assertEquals(expectedSw.getVersion(), sw.getVersion());
+ for (KVSwitch sw : switches) {
+ KVSwitch expectedSw = expected.get(sw.getDpid());
+ assertNotNull(expectedSw);
+ assertEquals(expectedSw.getDpid(), sw.getDpid());
+ assertEquals(expectedSw.getStatus(), sw.getStatus());
+ assertEquals(expectedSw.getVersion(), sw.getVersion());
- assertArrayEquals(expectedSw.getKey(), sw.getKey());
- }
+ assertArrayEquals(expectedSw.getKey(), sw.getKey());
+ }
}
@Test
public void testCreate() throws ObjectExistsException {
- sw1.setStatus(STATUS.ACTIVE);
- sw1.create();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+ sw1.setStatus(STATUS.ACTIVE);
+ sw1.create();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
- assertEquals(dpid1, sw1.getDpid());
- assertEquals(STATUS.ACTIVE, sw1.getStatus());
+ assertEquals(dpid1, sw1.getDpid());
+ assertEquals(STATUS.ACTIVE, sw1.getStatus());
- assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
+ assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
}
@Test(expected = ObjectExistsException.class)
public void testCreateFailAlreadyExist() throws ObjectExistsException {
- // setup pre-existing Switch
- KVSwitch sw = new KVSwitch(dpid1);
- sw.forceCreate();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
- assertSwitchInDataStore(dpid1, STATUS.INACTIVE);
+ // setup pre-existing Switch
+ KVSwitch sw = new KVSwitch(dpid1);
+ sw.forceCreate();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+ assertSwitchInDataStore(dpid1, STATUS.INACTIVE);
- sw1.setStatus(STATUS.ACTIVE);
- sw1.create();
- fail("Should have thrown an exception");
+ sw1.setStatus(STATUS.ACTIVE);
+ sw1.create();
+ fail("Should have thrown an exception");
}
@Test
public void testForceCreate() {
- // setup pre-existing Switch
- KVSwitch sw = new KVSwitch(dpid1);
- sw.forceCreate();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
- assertSwitchInDataStore(dpid1, STATUS.INACTIVE);
+ // setup pre-existing Switch
+ KVSwitch sw = new KVSwitch(dpid1);
+ sw.forceCreate();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+ assertSwitchInDataStore(dpid1, STATUS.INACTIVE);
- sw1.setStatus(STATUS.ACTIVE);
- sw1.forceCreate();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+ sw1.setStatus(STATUS.ACTIVE);
+ sw1.forceCreate();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
- assertEquals(dpid1, sw1.getDpid());
- assertEquals(STATUS.ACTIVE, sw1.getStatus());
- assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
+ assertEquals(dpid1, sw1.getDpid());
+ assertEquals(STATUS.ACTIVE, sw1.getStatus());
+ assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
}
@Test
public void testRead() throws ObjectDoesntExistException {
- // setup pre-existing Switch
- KVSwitch sw = new KVSwitch(dpid1);
- sw.setStatus(STATUS.ACTIVE);
- sw.forceCreate();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
- assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
+ // setup pre-existing Switch
+ KVSwitch sw = new KVSwitch(dpid1);
+ sw.setStatus(STATUS.ACTIVE);
+ sw.forceCreate();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+ assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
- sw1.read();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
- assertEquals(sw.getVersion(), sw1.getVersion());
- assertEquals(dpid1, sw1.getDpid());
- assertEquals(STATUS.ACTIVE, sw1.getStatus());
+ sw1.read();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+ assertEquals(sw.getVersion(), sw1.getVersion());
+ assertEquals(dpid1, sw1.getDpid());
+ assertEquals(STATUS.ACTIVE, sw1.getStatus());
}
@Test(expected = ObjectDoesntExistException.class)
public void testReadFailNoExist() throws ObjectDoesntExistException {
- sw1.read();
- fail("Should have thrown an exception");
+ sw1.read();
+ fail("Should have thrown an exception");
}
@Test
public void testUpdate() throws ObjectDoesntExistException, WrongVersionException {
- // setup pre-existing Switch
- KVSwitch sw = new KVSwitch(dpid1);
- sw.setStatus(STATUS.ACTIVE);
- sw.forceCreate();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
- assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
+ // setup pre-existing Switch
+ KVSwitch sw = new KVSwitch(dpid1);
+ sw.setStatus(STATUS.ACTIVE);
+ sw.forceCreate();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+ assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
- sw1.read();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+ sw1.read();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
- sw1.setStatus(STATUS.INACTIVE);
- sw1.update();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
- assertNotEquals(sw.getVersion(), sw1.getVersion());
- assertEquals(dpid1, sw1.getDpid());
- assertEquals(STATUS.INACTIVE, sw1.getStatus());
+ sw1.setStatus(STATUS.INACTIVE);
+ sw1.update();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+ assertNotEquals(sw.getVersion(), sw1.getVersion());
+ assertEquals(dpid1, sw1.getDpid());
+ assertEquals(STATUS.INACTIVE, sw1.getStatus());
}
@Test
public void testDelete() throws ObjectDoesntExistException, WrongVersionException {
- // setup pre-existing Switch
- KVSwitch sw = new KVSwitch(dpid1);
- sw.setStatus(STATUS.ACTIVE);
- sw.forceCreate();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
- assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
+ // setup pre-existing Switch
+ KVSwitch sw = new KVSwitch(dpid1);
+ sw.setStatus(STATUS.ACTIVE);
+ sw.forceCreate();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+ assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
- try {
- sw1.read();
- } catch (ObjectDoesntExistException e) {
- fail("Failed reading switch to delete");
- }
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
- sw1.delete();
- assertSwitchNotInDataStore(dpid1);
+ try {
+ sw1.read();
+ } catch (ObjectDoesntExistException e) {
+ fail("Failed reading switch to delete");
+ }
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+ sw1.delete();
+ assertSwitchNotInDataStore(dpid1);
}
@Test
public void testForceDelete() {
- // setup pre-existing Switch
- KVSwitch sw = new KVSwitch(dpid1);
- sw.setStatus(STATUS.ACTIVE);
- sw.forceCreate();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
- assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
+ // setup pre-existing Switch
+ KVSwitch sw = new KVSwitch(dpid1);
+ sw.setStatus(STATUS.ACTIVE);
+ sw.forceCreate();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+ assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
- sw1.forceDelete();
- assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+ sw1.forceDelete();
+ assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
}
}
diff --git a/src/test/java/net/onrc/onos/core/datastore/topology/KVTopologyTest.java b/src/test/java/net/onrc/onos/core/datastore/topology/KVTopologyTest.java
index 2de84e5..d9c2478 100644
--- a/src/test/java/net/onrc/onos/core/datastore/topology/KVTopologyTest.java
+++ b/src/test/java/net/onrc/onos/core/datastore/topology/KVTopologyTest.java
@@ -36,7 +36,7 @@
static final long VERSION_NONEXISTENT = DataStoreClient.getClient().VERSION_NONEXISTENT();
- private static final byte[] DEVICE2_MAC_SW2P2 = new byte[] { 6, 5, 4, 3, 2, 1, 0 };
+ private static final byte[] DEVICE2_MAC_SW2P2 = new byte[]{6, 5, 4, 3, 2, 1, 0};
private static final Long SW2_PORTNO2 = 2L;
@@ -44,7 +44,7 @@
private static final Long DPID2 = 0x2L;
- private static final byte[] DEVICE1_MAC_SW1P1 = new byte[] { 0, 1, 2, 3, 4, 5, 6 };
+ private static final byte[] DEVICE1_MAC_SW1P1 = new byte[]{0, 1, 2, 3, 4, 5, 6};
private static final Long SW1_PORTNO2 = 2L;
@@ -55,377 +55,377 @@
@Before
@After
public void wipeTopology() throws Exception {
- IKVTable switchTable = DataStoreClient.getClient().getTable(KVSwitch.GLOBAL_SWITCH_TABLE_NAME);
- DataStoreClient.getClient().dropTable(switchTable);
+ IKVTable switchTable = DataStoreClient.getClient().getTable(KVSwitch.GLOBAL_SWITCH_TABLE_NAME);
+ DataStoreClient.getClient().dropTable(switchTable);
- IKVTable portTable = DataStoreClient.getClient().getTable(KVPort.GLOBAL_PORT_TABLE_NAME);
- DataStoreClient.getClient().dropTable(portTable);
+ IKVTable portTable = DataStoreClient.getClient().getTable(KVPort.GLOBAL_PORT_TABLE_NAME);
+ DataStoreClient.getClient().dropTable(portTable);
- IKVTable linkTable = DataStoreClient.getClient().getTable(KVLink.GLOBAL_LINK_TABLE_NAME);
- DataStoreClient.getClient().dropTable(linkTable);
+ IKVTable linkTable = DataStoreClient.getClient().getTable(KVLink.GLOBAL_LINK_TABLE_NAME);
+ DataStoreClient.getClient().dropTable(linkTable);
- IKVTable deviceTable = DataStoreClient.getClient().getTable(KVDevice.GLOBAL_DEVICE_TABLE_NAME);
- DataStoreClient.getClient().dropTable(deviceTable);
+ IKVTable deviceTable = DataStoreClient.getClient().getTable(KVDevice.GLOBAL_DEVICE_TABLE_NAME);
+ DataStoreClient.getClient().dropTable(deviceTable);
}
@Test
public void basic_switch_test() {
- // create switch 0x1
- try {
- KVSwitch sw = new KVSwitch(DPID1);
- sw.setStatus(KVSwitch.STATUS.ACTIVE);
- sw.create();
- assertNotEquals(VERSION_NONEXISTENT, sw.getVersion());
- assertEquals(DPID1, sw.getDpid());
- assertEquals(KVSwitch.STATUS.ACTIVE, sw.getStatus());
- } catch (ObjectExistsException e) {
- e.printStackTrace();
- fail("Create Switch Failed " + e);
- }
+ // create switch 0x1
+ try {
+ KVSwitch sw = new KVSwitch(DPID1);
+ sw.setStatus(KVSwitch.STATUS.ACTIVE);
+ sw.create();
+ assertNotEquals(VERSION_NONEXISTENT, sw.getVersion());
+ assertEquals(DPID1, sw.getDpid());
+ assertEquals(KVSwitch.STATUS.ACTIVE, sw.getStatus());
+ } catch (ObjectExistsException e) {
+ e.printStackTrace();
+ fail("Create Switch Failed " + e);
+ }
- // read switch 0x1
- KVSwitch swRead = new KVSwitch(DPID1);
- try {
- swRead.read();
- assertNotEquals(VERSION_NONEXISTENT, swRead.getVersion());
- assertEquals(DPID1, swRead.getDpid());
- assertEquals(KVSwitch.STATUS.ACTIVE, swRead.getStatus());
- } catch (ObjectDoesntExistException e) {
- e.printStackTrace();
- fail("Reading Switch Failed " + e);
- }
+ // read switch 0x1
+ KVSwitch swRead = new KVSwitch(DPID1);
+ try {
+ swRead.read();
+ assertNotEquals(VERSION_NONEXISTENT, swRead.getVersion());
+ assertEquals(DPID1, swRead.getDpid());
+ assertEquals(KVSwitch.STATUS.ACTIVE, swRead.getStatus());
+ } catch (ObjectDoesntExistException e) {
+ e.printStackTrace();
+ fail("Reading Switch Failed " + e);
+ }
- // and update 0x1
- swRead.setStatus(KVSwitch.STATUS.INACTIVE);
- try {
- swRead.update();
- assertNotEquals(VERSION_NONEXISTENT, swRead.getVersion());
- assertEquals(DPID1, swRead.getDpid());
- assertEquals(KVSwitch.STATUS.INACTIVE, swRead.getStatus());
- } catch (ObjectDoesntExistException | WrongVersionException e) {
- e.printStackTrace();
- fail("Updating Switch Failed " + e);
- }
+ // and update 0x1
+ swRead.setStatus(KVSwitch.STATUS.INACTIVE);
+ try {
+ swRead.update();
+ assertNotEquals(VERSION_NONEXISTENT, swRead.getVersion());
+ assertEquals(DPID1, swRead.getDpid());
+ assertEquals(KVSwitch.STATUS.INACTIVE, swRead.getStatus());
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ e.printStackTrace();
+ fail("Updating Switch Failed " + e);
+ }
- // read 0x1 again and delete
- KVSwitch swRead2 = new KVSwitch(DPID1);
- try {
- swRead2.read();
- assertNotEquals(VERSION_NONEXISTENT, swRead2.getVersion());
- assertEquals(DPID1, swRead2.getDpid());
- assertEquals(KVSwitch.STATUS.INACTIVE, swRead2.getStatus());
- } catch (ObjectDoesntExistException e) {
- e.printStackTrace();
- fail("Reading Switch Again Failed " + e);
- }
+ // read 0x1 again and delete
+ KVSwitch swRead2 = new KVSwitch(DPID1);
+ try {
+ swRead2.read();
+ assertNotEquals(VERSION_NONEXISTENT, swRead2.getVersion());
+ assertEquals(DPID1, swRead2.getDpid());
+ assertEquals(KVSwitch.STATUS.INACTIVE, swRead2.getStatus());
+ } catch (ObjectDoesntExistException e) {
+ e.printStackTrace();
+ fail("Reading Switch Again Failed " + e);
+ }
- try {
- swRead2.delete();
- assertNotEquals(VERSION_NONEXISTENT, swRead2.getVersion());
- } catch (ObjectDoesntExistException | WrongVersionException e) {
- e.printStackTrace();
- fail("Deleting Switch Failed " + e);
- }
+ try {
+ swRead2.delete();
+ assertNotEquals(VERSION_NONEXISTENT, swRead2.getVersion());
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ e.printStackTrace();
+ fail("Deleting Switch Failed " + e);
+ }
- // make sure 0x1 is deleted
- KVObject swRead3 = new KVSwitch(DPID1);
- try {
- swRead3.read();
- fail(swRead3 + " was supposed to be deleted, but read succeed");
- } catch (ObjectDoesntExistException e) {
- System.out.println("-- " + swRead3 + " not found as expected--");
- e.printStackTrace(System.out);
- System.out.println("---------------------------------------");
- }
+ // make sure 0x1 is deleted
+ KVObject swRead3 = new KVSwitch(DPID1);
+ try {
+ swRead3.read();
+ fail(swRead3 + " was supposed to be deleted, but read succeed");
+ } catch (ObjectDoesntExistException e) {
+ System.out.println("-- " + swRead3 + " not found as expected--");
+ e.printStackTrace(System.out);
+ System.out.println("---------------------------------------");
+ }
}
@Test
public void topology_setup_and_tear_down() {
- topology_setup();
- topology_walk();
- topology_delete();
+ topology_setup();
+ topology_walk();
+ topology_delete();
}
private static void topology_setup() {
- // d1 - s1p1 - s1 - s1p2 - s2p1 - s2 - s2p2
+ // d1 - s1p1 - s1 - s1p2 - s2p1 - s2 - s2p2
- KVSwitch sw1 = new KVSwitch(DPID1);
- sw1.setStatus(KVSwitch.STATUS.ACTIVE);
- try {
- sw1.create();
- assertNotEquals(VERSION_NONEXISTENT, sw1.getVersion());
- assertEquals(DPID1, sw1.getDpid());
- assertEquals(KVSwitch.STATUS.ACTIVE, sw1.getStatus());
- } catch (ObjectExistsException e) {
- e.printStackTrace();
- fail("Switch creation failed " + e);
- }
+ KVSwitch sw1 = new KVSwitch(DPID1);
+ sw1.setStatus(KVSwitch.STATUS.ACTIVE);
+ try {
+ sw1.create();
+ assertNotEquals(VERSION_NONEXISTENT, sw1.getVersion());
+ assertEquals(DPID1, sw1.getDpid());
+ assertEquals(KVSwitch.STATUS.ACTIVE, sw1.getStatus());
+ } catch (ObjectExistsException e) {
+ e.printStackTrace();
+ fail("Switch creation failed " + e);
+ }
- KVPort sw1p1 = new KVPort(DPID1, SW1_PORTNO1);
- sw1p1.setStatus(KVPort.STATUS.ACTIVE);
- KVPort sw1p2 = new KVPort(DPID1, SW1_PORTNO2);
- sw1p2.setStatus(KVPort.STATUS.ACTIVE);
- try {
- sw1p1.create();
- assertNotEquals(VERSION_NONEXISTENT, sw1p1.getVersion());
- assertEquals(DPID1, sw1p1.getDpid());
- assertEquals(SW1_PORTNO1, sw1p1.getNumber());
- assertEquals(KVPort.STATUS.ACTIVE, sw1p1.getStatus());
+ KVPort sw1p1 = new KVPort(DPID1, SW1_PORTNO1);
+ sw1p1.setStatus(KVPort.STATUS.ACTIVE);
+ KVPort sw1p2 = new KVPort(DPID1, SW1_PORTNO2);
+ sw1p2.setStatus(KVPort.STATUS.ACTIVE);
+ try {
+ sw1p1.create();
+ assertNotEquals(VERSION_NONEXISTENT, sw1p1.getVersion());
+ assertEquals(DPID1, sw1p1.getDpid());
+ assertEquals(SW1_PORTNO1, sw1p1.getNumber());
+ assertEquals(KVPort.STATUS.ACTIVE, sw1p1.getStatus());
- sw1p2.create();
- assertNotEquals(VERSION_NONEXISTENT, sw1p2.getVersion());
- assertEquals(DPID1, sw1p2.getDpid());
- assertEquals(SW1_PORTNO2, sw1p2.getNumber());
- assertEquals(KVPort.STATUS.ACTIVE, sw1p2.getStatus());
- } catch (ObjectExistsException e) {
- e.printStackTrace();
- fail("Port creation failed " + e);
- }
+ sw1p2.create();
+ assertNotEquals(VERSION_NONEXISTENT, sw1p2.getVersion());
+ assertEquals(DPID1, sw1p2.getDpid());
+ assertEquals(SW1_PORTNO2, sw1p2.getNumber());
+ assertEquals(KVPort.STATUS.ACTIVE, sw1p2.getStatus());
+ } catch (ObjectExistsException e) {
+ e.printStackTrace();
+ fail("Port creation failed " + e);
+ }
- try {
- sw1.update();
- assertNotEquals(VERSION_NONEXISTENT, sw1.getVersion());
- assertEquals(DPID1, sw1.getDpid());
- assertEquals(KVSwitch.STATUS.ACTIVE, sw1.getStatus());
- } catch (ObjectDoesntExistException | WrongVersionException e) {
- e.printStackTrace();
- fail("Switch update failed " + e);
- }
+ try {
+ sw1.update();
+ assertNotEquals(VERSION_NONEXISTENT, sw1.getVersion());
+ assertEquals(DPID1, sw1.getDpid());
+ assertEquals(KVSwitch.STATUS.ACTIVE, sw1.getStatus());
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ e.printStackTrace();
+ fail("Switch update failed " + e);
+ }
- KVDevice d1 = new KVDevice(DEVICE1_MAC_SW1P1);
- d1.addPortId(sw1p1.getId());
+ KVDevice d1 = new KVDevice(DEVICE1_MAC_SW1P1);
+ d1.addPortId(sw1p1.getId());
- try {
- d1.create();
- assertNotEquals(VERSION_NONEXISTENT, d1.getVersion());
- assertEquals(1, d1.getAllPortIds().size());
- assertArrayEquals(sw1p1.getId(), d1.getAllPortIds().iterator().next());
+ try {
+ d1.create();
+ assertNotEquals(VERSION_NONEXISTENT, d1.getVersion());
+ assertEquals(1, d1.getAllPortIds().size());
+ assertArrayEquals(sw1p1.getId(), d1.getAllPortIds().iterator().next());
- try {
- sw1p1.update();
- assertNotEquals(VERSION_NONEXISTENT, sw1p1.getVersion());
- assertEquals(DPID1, sw1p1.getDpid());
- assertEquals(SW1_PORTNO1, sw1p1.getNumber());
- assertEquals(KVPort.STATUS.ACTIVE, sw1p1.getStatus());
- } catch (ObjectDoesntExistException | WrongVersionException e) {
- e.printStackTrace();
- fail("Link update failed " + e);
- }
- } catch (ObjectExistsException e) {
- e.printStackTrace();
- fail("Device creation failed " + e);
- }
+ try {
+ sw1p1.update();
+ assertNotEquals(VERSION_NONEXISTENT, sw1p1.getVersion());
+ assertEquals(DPID1, sw1p1.getDpid());
+ assertEquals(SW1_PORTNO1, sw1p1.getNumber());
+ assertEquals(KVPort.STATUS.ACTIVE, sw1p1.getStatus());
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ e.printStackTrace();
+ fail("Link update failed " + e);
+ }
+ } catch (ObjectExistsException e) {
+ e.printStackTrace();
+ fail("Device creation failed " + e);
+ }
- KVSwitch sw2 = new KVSwitch(DPID2);
- sw2.setStatus(KVSwitch.STATUS.ACTIVE);
- KVPort sw2p1 = new KVPort(DPID2, SW2_PORTNO1);
- sw2p1.setStatus(KVPort.STATUS.ACTIVE);
- KVPort sw2p2 = new KVPort(DPID2, SW2_PORTNO2);
- sw2p2.setStatus(KVPort.STATUS.ACTIVE);
+ KVSwitch sw2 = new KVSwitch(DPID2);
+ sw2.setStatus(KVSwitch.STATUS.ACTIVE);
+ KVPort sw2p1 = new KVPort(DPID2, SW2_PORTNO1);
+ sw2p1.setStatus(KVPort.STATUS.ACTIVE);
+ KVPort sw2p2 = new KVPort(DPID2, SW2_PORTNO2);
+ sw2p2.setStatus(KVPort.STATUS.ACTIVE);
- KVDevice d2 = new KVDevice(DEVICE2_MAC_SW2P2);
- d2.addPortId(sw2p2.getId());
+ KVDevice d2 = new KVDevice(DEVICE2_MAC_SW2P2);
+ d2.addPortId(sw2p2.getId());
- IKVClient client = DataStoreClient.getClient();
+ IKVClient client = DataStoreClient.getClient();
- List<WriteOp> groupOp = Arrays.asList(
- sw2.createOp(client), sw2p1.createOp(client),
- sw2p2.createOp(client), d2.createOp(client) );
- boolean failed = KVObject.multiWrite(groupOp);
- if (failed) {
- for ( WriteOp op : groupOp ) {
- System.err.println(op);
- }
- fail("Some of Switch/Port/Device creation failed");
- } else {
- assertNotEquals(VERSION_NONEXISTENT, sw2.getVersion());
- assertEquals(DPID2, sw2.getDpid());
- assertEquals(KVSwitch.STATUS.ACTIVE, sw2.getStatus());
+ List<WriteOp> groupOp = Arrays.asList(
+ sw2.createOp(client), sw2p1.createOp(client),
+ sw2p2.createOp(client), d2.createOp(client));
+ boolean failed = KVObject.multiWrite(groupOp);
+ if (failed) {
+ for (WriteOp op : groupOp) {
+ System.err.println(op);
+ }
+ fail("Some of Switch/Port/Device creation failed");
+ } else {
+ assertNotEquals(VERSION_NONEXISTENT, sw2.getVersion());
+ assertEquals(DPID2, sw2.getDpid());
+ assertEquals(KVSwitch.STATUS.ACTIVE, sw2.getStatus());
- assertNotEquals(VERSION_NONEXISTENT, sw2p1.getVersion());
- assertEquals(DPID2, sw2p1.getDpid());
- assertEquals(SW2_PORTNO1, sw2p1.getNumber());
- assertEquals(KVPort.STATUS.ACTIVE, sw2p1.getStatus());
+ assertNotEquals(VERSION_NONEXISTENT, sw2p1.getVersion());
+ assertEquals(DPID2, sw2p1.getDpid());
+ assertEquals(SW2_PORTNO1, sw2p1.getNumber());
+ assertEquals(KVPort.STATUS.ACTIVE, sw2p1.getStatus());
- assertNotEquals(VERSION_NONEXISTENT, sw2p2.getVersion());
- assertEquals(DPID2, sw2p2.getDpid());
- assertEquals(SW2_PORTNO2, sw2p2.getNumber());
- assertEquals(KVPort.STATUS.ACTIVE, sw2p2.getStatus());
+ assertNotEquals(VERSION_NONEXISTENT, sw2p2.getVersion());
+ assertEquals(DPID2, sw2p2.getDpid());
+ assertEquals(SW2_PORTNO2, sw2p2.getNumber());
+ assertEquals(KVPort.STATUS.ACTIVE, sw2p2.getStatus());
- assertNotEquals(VERSION_NONEXISTENT, d2.getVersion());
- assertEquals(1, d2.getAllPortIds().size());
- assertArrayEquals(sw2p2.getId(), d2.getAllPortIds().iterator().next());
- }
+ assertNotEquals(VERSION_NONEXISTENT, d2.getVersion());
+ assertEquals(1, d2.getAllPortIds().size());
+ assertArrayEquals(sw2p2.getId(), d2.getAllPortIds().iterator().next());
+ }
- KVLink l1 = new KVLink(DPID1, SW1_PORTNO2, DPID2, SW2_PORTNO1);
- l1.setStatus(KVLink.STATUS.ACTIVE);
+ KVLink l1 = new KVLink(DPID1, SW1_PORTNO2, DPID2, SW2_PORTNO1);
+ l1.setStatus(KVLink.STATUS.ACTIVE);
- try {
- l1.create();
- assertNotEquals(VERSION_NONEXISTENT, l1.getVersion());
- assertEquals(KVLink.STATUS.ACTIVE, l1.getStatus());
- assertArrayEquals(sw1.getId(), l1.getSrc().getSwitchID());
- assertArrayEquals(sw1p2.getId(), l1.getSrc().getPortID());
- assertArrayEquals(sw2.getId(), l1.getDst().getSwitchID());
- assertArrayEquals(sw2p1.getId(), l1.getDst().getPortID());
+ try {
+ l1.create();
+ assertNotEquals(VERSION_NONEXISTENT, l1.getVersion());
+ assertEquals(KVLink.STATUS.ACTIVE, l1.getStatus());
+ assertArrayEquals(sw1.getId(), l1.getSrc().getSwitchID());
+ assertArrayEquals(sw1p2.getId(), l1.getSrc().getPortID());
+ assertArrayEquals(sw2.getId(), l1.getDst().getSwitchID());
+ assertArrayEquals(sw2p1.getId(), l1.getDst().getPortID());
- try {
- sw1p2.update();
- assertNotEquals(VERSION_NONEXISTENT, sw1p2.getVersion());
- assertEquals(DPID1, sw1p2.getDpid());
- assertEquals(SW1_PORTNO2, sw1p2.getNumber());
- assertEquals(KVPort.STATUS.ACTIVE, sw1p2.getStatus());
+ try {
+ sw1p2.update();
+ assertNotEquals(VERSION_NONEXISTENT, sw1p2.getVersion());
+ assertEquals(DPID1, sw1p2.getDpid());
+ assertEquals(SW1_PORTNO2, sw1p2.getNumber());
+ assertEquals(KVPort.STATUS.ACTIVE, sw1p2.getStatus());
- sw2p1.update();
- assertNotEquals(VERSION_NONEXISTENT, sw2p1.getVersion());
- assertEquals(DPID2, sw2p1.getDpid());
- assertEquals(SW2_PORTNO1, sw2p1.getNumber());
- assertEquals(KVPort.STATUS.ACTIVE, sw2p1.getStatus());
- } catch (ObjectDoesntExistException | WrongVersionException e) {
- e.printStackTrace();
- fail("Port update failed " + e);
- }
- } catch (ObjectExistsException e) {
- e.printStackTrace();
- fail("Link creation failed " + e);
- }
+ sw2p1.update();
+ assertNotEquals(VERSION_NONEXISTENT, sw2p1.getVersion());
+ assertEquals(DPID2, sw2p1.getDpid());
+ assertEquals(SW2_PORTNO1, sw2p1.getNumber());
+ assertEquals(KVPort.STATUS.ACTIVE, sw2p1.getStatus());
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ e.printStackTrace();
+ fail("Port update failed " + e);
+ }
+ } catch (ObjectExistsException e) {
+ e.printStackTrace();
+ fail("Link creation failed " + e);
+ }
}
private static void topology_walk() {
- Iterable<KVSwitch> swIt = KVSwitch.getAllSwitches();
- List<Long> switchesExpected = new ArrayList<>(Arrays.asList(DPID1, DPID2));
+ Iterable<KVSwitch> swIt = KVSwitch.getAllSwitches();
+ List<Long> switchesExpected = new ArrayList<>(Arrays.asList(DPID1, DPID2));
- System.out.println("Enumerating Switches start");
- for (KVSwitch sw : swIt) {
- System.out.println(sw + " @ " + sw.getVersion());
- assertNotEquals(VERSION_NONEXISTENT, sw.getVersion());
- assertEquals(KVSwitch.STATUS.ACTIVE, sw.getStatus());
- assertThat(sw.getDpid(), is(anyOf(equalTo(DPID1), equalTo(DPID2))));
- assertThat(switchesExpected, hasItem(sw.getDpid()));
- switchesExpected.remove(sw.getDpid());
- }
- System.out.println("Enumerating Switches end");
+ System.out.println("Enumerating Switches start");
+ for (KVSwitch sw : swIt) {
+ System.out.println(sw + " @ " + sw.getVersion());
+ assertNotEquals(VERSION_NONEXISTENT, sw.getVersion());
+ assertEquals(KVSwitch.STATUS.ACTIVE, sw.getStatus());
+ assertThat(sw.getDpid(), is(anyOf(equalTo(DPID1), equalTo(DPID2))));
+ assertThat(switchesExpected, hasItem(sw.getDpid()));
+ switchesExpected.remove(sw.getDpid());
+ }
+ System.out.println("Enumerating Switches end");
- KVSwitch sw1 = new KVSwitch(DPID1);
- try {
- sw1.read();
- assertNotEquals(VERSION_NONEXISTENT, sw1.getVersion());
- assertEquals(DPID1, sw1.getDpid());
- assertEquals(KVSwitch.STATUS.ACTIVE, sw1.getStatus());
- } catch (ObjectDoesntExistException e) {
- e.printStackTrace();
- fail("Reading switch failed " + e);
- }
+ KVSwitch sw1 = new KVSwitch(DPID1);
+ try {
+ sw1.read();
+ assertNotEquals(VERSION_NONEXISTENT, sw1.getVersion());
+ assertEquals(DPID1, sw1.getDpid());
+ assertEquals(KVSwitch.STATUS.ACTIVE, sw1.getStatus());
+ } catch (ObjectDoesntExistException e) {
+ e.printStackTrace();
+ fail("Reading switch failed " + e);
+ }
- KVSwitch sw2 = new KVSwitch(DPID2);
- if (KVObject.multiRead( Arrays.asList(sw2) )) {
- fail("Failed to read switch " + sw2);
- } else {
- assertNotEquals(VERSION_NONEXISTENT, sw2.getVersion());
- assertEquals(DPID2, sw2.getDpid());
- assertEquals(KVSwitch.STATUS.ACTIVE, sw2.getStatus());
- }
+ KVSwitch sw2 = new KVSwitch(DPID2);
+ if (KVObject.multiRead(Arrays.asList(sw2))) {
+ fail("Failed to read switch " + sw2);
+ } else {
+ assertNotEquals(VERSION_NONEXISTENT, sw2.getVersion());
+ assertEquals(DPID2, sw2.getDpid());
+ assertEquals(KVSwitch.STATUS.ACTIVE, sw2.getStatus());
+ }
- // DPID -> [port_no]
- @SuppressWarnings("serial")
- Map<Long,List<Long>> expectedPorts = new HashMap<Long,List<Long>>() {{
- put(DPID1, new ArrayList<>(Arrays.asList(SW1_PORTNO1, SW1_PORTNO2)));
- put(DPID2, new ArrayList<>(Arrays.asList(SW2_PORTNO1, SW2_PORTNO2)));
- }};
+ // DPID -> [port_no]
+ @SuppressWarnings("serial")
+ Map<Long, List<Long>> expectedPorts = new HashMap<Long, List<Long>>() {{
+ put(DPID1, new ArrayList<>(Arrays.asList(SW1_PORTNO1, SW1_PORTNO2)));
+ put(DPID2, new ArrayList<>(Arrays.asList(SW2_PORTNO1, SW2_PORTNO2)));
+ }};
- for (KVPort port : KVPort.getAllPorts()) {
- System.out.println(port + " @ " + port.getVersion());
- assertNotEquals(VERSION_NONEXISTENT, port.getVersion());
- assertEquals(KVPort.STATUS.ACTIVE, port.getStatus());
- assertThat(port.getDpid(), is(anyOf(equalTo(DPID1), equalTo(DPID2))));
- assertThat(port.getNumber(), is(anyOf(equalTo(SW1_PORTNO1), equalTo(SW1_PORTNO2))));
+ for (KVPort port : KVPort.getAllPorts()) {
+ System.out.println(port + " @ " + port.getVersion());
+ assertNotEquals(VERSION_NONEXISTENT, port.getVersion());
+ assertEquals(KVPort.STATUS.ACTIVE, port.getStatus());
+ assertThat(port.getDpid(), is(anyOf(equalTo(DPID1), equalTo(DPID2))));
+ assertThat(port.getNumber(), is(anyOf(equalTo(SW1_PORTNO1), equalTo(SW1_PORTNO2))));
- assertThat(expectedPorts, hasKey(port.getDpid()));
- assertThat(expectedPorts.get(port.getDpid()), hasItem(port.getNumber()));
- expectedPorts.get(port.getDpid()).remove(port.getNumber());
- }
+ assertThat(expectedPorts, hasKey(port.getDpid()));
+ assertThat(expectedPorts.get(port.getDpid()), hasItem(port.getNumber()));
+ expectedPorts.get(port.getDpid()).remove(port.getNumber());
+ }
- // DeviceID -> PortID
- @SuppressWarnings("serial")
- Map<byte[], byte[]> expectedDevice = new TreeMap<byte[], byte[]>(ByteArrayComparator.BYTEARRAY_COMPARATOR) {{
- put(DEVICE1_MAC_SW1P1, KVPort.getPortID(DPID1, SW1_PORTNO1));
- put(DEVICE2_MAC_SW2P2, KVPort.getPortID(DPID2, SW2_PORTNO2));
- }};
+ // DeviceID -> PortID
+ @SuppressWarnings("serial")
+ Map<byte[], byte[]> expectedDevice = new TreeMap<byte[], byte[]>(ByteArrayComparator.BYTEARRAY_COMPARATOR) {{
+ put(DEVICE1_MAC_SW1P1, KVPort.getPortID(DPID1, SW1_PORTNO1));
+ put(DEVICE2_MAC_SW2P2, KVPort.getPortID(DPID2, SW2_PORTNO2));
+ }};
- for (KVDevice device : KVDevice.getAllDevices()) {
- System.out.println(device + " @ " + device.getVersion());
- assertNotEquals(VERSION_NONEXISTENT, device.getVersion());
+ for (KVDevice device : KVDevice.getAllDevices()) {
+ System.out.println(device + " @ " + device.getVersion());
+ assertNotEquals(VERSION_NONEXISTENT, device.getVersion());
- assertThat(expectedDevice, hasKey(device.getMac()));
- assertThat(device.getAllPortIds(), hasItem(expectedDevice.get(device.getMac())));
- expectedDevice.remove(device.getMac());
- }
+ assertThat(expectedDevice, hasKey(device.getMac()));
+ assertThat(device.getAllPortIds(), hasItem(expectedDevice.get(device.getMac())));
+ expectedDevice.remove(device.getMac());
+ }
- for (KVLink link : KVLink.getAllLinks()) {
- System.out.println(link + " @ " + link.getVersion());
- assertNotEquals(VERSION_NONEXISTENT, link.getVersion());
+ for (KVLink link : KVLink.getAllLinks()) {
+ System.out.println(link + " @ " + link.getVersion());
+ assertNotEquals(VERSION_NONEXISTENT, link.getVersion());
- // there is currently only 1 link SW1P2->SW2P1
- assertEquals(DPID1, link.getSrc().dpid);
- assertEquals(SW1_PORTNO2, link.getSrc().number);
- assertEquals(DPID2, link.getDst().dpid);
- assertEquals(SW2_PORTNO1, link.getDst().number);
- }
+ // there is currently only 1 link SW1P2->SW2P1
+ assertEquals(DPID1, link.getSrc().dpid);
+ assertEquals(SW1_PORTNO2, link.getSrc().number);
+ assertEquals(DPID2, link.getDst().dpid);
+ assertEquals(SW2_PORTNO1, link.getDst().number);
+ }
}
private static void topology_delete() {
- for (KVSwitch sw : KVSwitch.getAllSwitches()) {
- try {
- sw.read();
- sw.delete();
- assertNotEquals(VERSION_NONEXISTENT, sw.getVersion());
- } catch (ObjectDoesntExistException | WrongVersionException e) {
- e.printStackTrace();
- fail("Delete Switch Failed " + e);
- }
- }
+ for (KVSwitch sw : KVSwitch.getAllSwitches()) {
+ try {
+ sw.read();
+ sw.delete();
+ assertNotEquals(VERSION_NONEXISTENT, sw.getVersion());
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ e.printStackTrace();
+ fail("Delete Switch Failed " + e);
+ }
+ }
- for (KVPort p : KVPort.getAllPorts()) {
- try {
- p.read();
- p.delete();
- assertNotEquals(VERSION_NONEXISTENT, p.getVersion());
- } catch (ObjectDoesntExistException | WrongVersionException e) {
- e.printStackTrace();
- fail("Delete Port Failed " + e);
- }
- }
+ for (KVPort p : KVPort.getAllPorts()) {
+ try {
+ p.read();
+ p.delete();
+ assertNotEquals(VERSION_NONEXISTENT, p.getVersion());
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ e.printStackTrace();
+ fail("Delete Port Failed " + e);
+ }
+ }
- for (KVDevice d : KVDevice.getAllDevices()) {
- d.forceDelete();
- assertNotEquals(VERSION_NONEXISTENT, d.getVersion());
- }
+ for (KVDevice d : KVDevice.getAllDevices()) {
+ d.forceDelete();
+ assertNotEquals(VERSION_NONEXISTENT, d.getVersion());
+ }
- for (KVLink l : KVLink.getAllLinks()) {
- try {
- l.read();
- l.delete();
- assertNotEquals(VERSION_NONEXISTENT, l.getVersion());
- } catch (ObjectDoesntExistException | WrongVersionException e) {
- e.printStackTrace();
- fail("Delete Link Failed " + e);
- }
- }
+ for (KVLink l : KVLink.getAllLinks()) {
+ try {
+ l.read();
+ l.delete();
+ assertNotEquals(VERSION_NONEXISTENT, l.getVersion());
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ e.printStackTrace();
+ fail("Delete Link Failed " + e);
+ }
+ }
}
public static void main(final String[] argv) {
- topology_setup();
- topology_walk();
- topology_delete();
+ topology_setup();
+ topology_walk();
+ topology_delete();
- System.exit(0);
+ System.exit(0);
}
}
diff --git a/src/test/java/net/onrc/onos/core/flowprogrammer/FlowPusherTest.java b/src/test/java/net/onrc/onos/core/flowprogrammer/FlowPusherTest.java
index be7834c..1c25e75 100644
--- a/src/test/java/net/onrc/onos/core/flowprogrammer/FlowPusherTest.java
+++ b/src/test/java/net/onrc/onos/core/flowprogrammer/FlowPusherTest.java
@@ -41,515 +41,517 @@
import org.openflow.protocol.factory.BasicFactory;
public class FlowPusherTest {
- private FlowPusher pusher;
- private FloodlightContext context;
- private FloodlightModuleContext modContext;
- private BasicFactory factory;
- private OFMessageDamper damper;
- private IFloodlightProviderService flProviderService;
- private IThreadPoolService threadPoolService;
+ private FlowPusher pusher;
+ private FloodlightContext context;
+ private FloodlightModuleContext modContext;
+ private BasicFactory factory;
+ private OFMessageDamper damper;
+ private IFloodlightProviderService flProviderService;
+ private IThreadPoolService threadPoolService;
- /**
- * Test single OFMessage is correctly sent to single switch via MessageDamper.
- */
- @Test
- public void testAddMessage() {
- beginInitMock();
-
- OFMessage msg = EasyMock.createMock(OFMessage.class);
- EasyMock.expect(msg.getXid()).andReturn(1).anyTimes();
- EasyMock.expect(msg.getLength()).andReturn((short)100).anyTimes();
- EasyMock.replay(msg);
-
- IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
- EasyMock.expect(sw.getId()).andReturn((long)1).anyTimes();
- sw.flush();
- EasyMock.expectLastCall().once();
- EasyMock.replay(sw);
-
- try {
- EasyMock.expect(damper.write(EasyMock.eq(sw), EasyMock.eq(msg), EasyMock.eq(context)))
- .andReturn(true).once();
- } catch (IOException e1) {
- fail("Failed in OFMessageDamper#write()");
- }
-
- endInitMock();
- initPusher(1);
-
- boolean add_result = pusher.add(sw, msg);
- assertTrue(add_result);
-
- try {
- // wait until message is processed.
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- fail("Failed in Thread.sleep()");
- }
- EasyMock.verify(msg);
- EasyMock.verify(sw);
- verifyAll();
-
- pusher.stop();
- }
-
- /**
- * Test bunch of OFMessages are correctly sent to single switch via MessageDamper.
- */
- @Test
- public void testMassiveAddMessage() {
- final int NUM_MSG = 10000;
-
- beginInitMock();
+ /**
+ * Test single OFMessage is correctly sent to single switch via MessageDamper.
+ */
+ @Test
+ public void testAddMessage() {
+ beginInitMock();
- IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
- EasyMock.expect(sw.getId()).andReturn((long)1).anyTimes();
- sw.flush();
- EasyMock.expectLastCall().atLeastOnce();
- EasyMock.replay(sw);
-
- List<OFMessage> messages = new ArrayList<OFMessage>();
-
- for (int i = 0; i < NUM_MSG; ++i) {
- OFMessage msg = EasyMock.createMock(OFMessage.class);
- EasyMock.expect(msg.getXid()).andReturn(i).anyTimes();
- EasyMock.expect(msg.getLength()).andReturn((short)100).anyTimes();
- EasyMock.replay(msg);
- messages.add(msg);
-
- try {
- EasyMock.expect(damper.write(EasyMock.eq(sw), EasyMock.eq(msg), EasyMock.eq(context)))
- .andReturn(true).once();
- } catch (IOException e1) {
- fail("Failed in OFMessageDamper#write()");
- }
- }
-
- endInitMock();
- initPusher(1);
-
- for (OFMessage msg : messages) {
- boolean add_result = pusher.add(sw, msg);
- assertTrue(add_result);
- }
-
- try {
- // wait until message is processed.
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- fail("Failed in Thread.sleep()");
- }
-
- for (OFMessage msg : messages) {
- EasyMock.verify(msg);
- }
- EasyMock.verify(sw);
- verifyAll();
-
- pusher.stop();
- }
-
- /**
- * Test bunch of OFMessages are correctly sent to multiple switches with single threads.
- */
- @Test
- public void testMultiSwitchAddMessage() {
- final int NUM_SWITCH = 10;
- final int NUM_MSG = 100; // messages per thread
-
- beginInitMock();
+ OFMessage msg = EasyMock.createMock(OFMessage.class);
+ EasyMock.expect(msg.getXid()).andReturn(1).anyTimes();
+ EasyMock.expect(msg.getLength()).andReturn((short) 100).anyTimes();
+ EasyMock.replay(msg);
- Map<IOFSwitch, List<OFMessage>> sw_map = new HashMap<IOFSwitch, List<OFMessage>>();
- for (int i = 0; i < NUM_SWITCH; ++i) {
- IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
- EasyMock.expect(sw.getId()).andReturn((long)i).anyTimes();
- sw.flush();
- EasyMock.expectLastCall().atLeastOnce();
- EasyMock.replay(sw);
-
- List<OFMessage> messages = new ArrayList<OFMessage>();
-
- for (int j = 0; j < NUM_MSG; ++j) {
- OFMessage msg = EasyMock.createMock(OFMessage.class);
- EasyMock.expect(msg.getXid()).andReturn(j).anyTimes();
- EasyMock.expect(msg.getLength()).andReturn((short)100).anyTimes();
- EasyMock.replay(msg);
- messages.add(msg);
-
- try {
- EasyMock.expect(damper.write(EasyMock.eq(sw), EasyMock.eq(msg), EasyMock.eq(context)))
- .andReturn(true).once();
- } catch (IOException e1) {
- fail("Failed in OFMessageDamper#write()");
- }
- }
- sw_map.put(sw, messages);
- }
-
- endInitMock();
- initPusher(1);
-
- for (IOFSwitch sw : sw_map.keySet()) {
- for (OFMessage msg : sw_map.get(sw)) {
- boolean add_result = pusher.add(sw, msg);
- assertTrue(add_result);
- }
- }
-
- try {
- // wait until message is processed.
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- fail("Failed in Thread.sleep()");
- }
-
- for (IOFSwitch sw : sw_map.keySet()) {
- for (OFMessage msg : sw_map.get(sw)) {
- EasyMock.verify(msg);
- }
-
- EasyMock.verify(sw);
- }
- verifyAll();
+ IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
+ EasyMock.expect(sw.getId()).andReturn((long) 1).anyTimes();
+ sw.flush();
+ EasyMock.expectLastCall().once();
+ EasyMock.replay(sw);
- pusher.stop();
- }
-
- /**
- * Test bunch of OFMessages are correctly sent to multiple switches using multiple threads.
- */
- @Test
- public void testMultiThreadedAddMessage() {
- final int NUM_THREAD = 10;
- final int NUM_MSG = 100; // messages per thread
-
- beginInitMock();
+ try {
+ EasyMock.expect(damper.write(EasyMock.eq(sw), EasyMock.eq(msg), EasyMock.eq(context)))
+ .andReturn(true).once();
+ } catch (IOException e1) {
+ fail("Failed in OFMessageDamper#write()");
+ }
- Map<IOFSwitch, List<OFMessage>> sw_map = new HashMap<IOFSwitch, List<OFMessage>>();
- for (int i = 0; i < NUM_THREAD; ++i) {
- IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
- EasyMock.expect(sw.getId()).andReturn((long)i).anyTimes();
- sw.flush();
- EasyMock.expectLastCall().atLeastOnce();
- EasyMock.replay(sw);
-
- List<OFMessage> messages = new ArrayList<OFMessage>();
-
- for (int j = 0; j < NUM_MSG; ++j) {
- OFMessage msg = EasyMock.createMock(OFMessage.class);
- EasyMock.expect(msg.getXid()).andReturn(j).anyTimes();
- EasyMock.expect(msg.getLength()).andReturn((short)100).anyTimes();
- EasyMock.replay(msg);
- messages.add(msg);
-
- try {
- EasyMock.expect(damper.write(EasyMock.eq(sw), EasyMock.eq(msg), EasyMock.eq(context)))
- .andReturn(true).once();
- } catch (IOException e1) {
- fail("Failed in OFMessageDamper#write()");
- }
- }
- sw_map.put(sw, messages);
- }
-
- endInitMock();
- initPusher(NUM_THREAD);
-
- for (IOFSwitch sw : sw_map.keySet()) {
- for (OFMessage msg : sw_map.get(sw)) {
- boolean add_result = pusher.add(sw, msg);
- assertTrue(add_result);
- }
- }
-
- try {
- // wait until message is processed.
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- fail("Failed in Thread.sleep()");
- }
-
- for (IOFSwitch sw : sw_map.keySet()) {
- for (OFMessage msg : sw_map.get(sw)) {
- EasyMock.verify(msg);
- }
-
- EasyMock.verify(sw);
- }
- verifyAll();
+ endInitMock();
+ initPusher(1);
- pusher.stop();
- }
-
- private long barrierTime = 0;
- /**
- * Test rate limitation of messages works correctly.
- */
- @Test
- public void testRateLimitedAddMessage() {
- final long LIMIT_RATE = 100; // [bytes/ms]
- final int NUM_MSG = 1000;
-
- // Accuracy of FlowPusher's rate calculation can't be measured by unit test
- // because switch doesn't return BARRIER_REPLY.
- // In unit test we use approximate way to measure rate. This value is
- // acceptable margin of measured rate.
- final double ACCEPTABLE_RATE = LIMIT_RATE * 1.2;
-
- beginInitMock();
+ boolean add_result = pusher.add(sw, msg);
+ assertTrue(add_result);
- IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
- EasyMock.expect(sw.getId()).andReturn((long)1).anyTimes();
- sw.flush();
- EasyMock.expectLastCall().atLeastOnce();
- prepareBarrier(sw);
- EasyMock.replay(sw);
-
- List<OFMessage> messages = new ArrayList<OFMessage>();
-
- for (int i = 0; i < NUM_MSG; ++i) {
- OFMessage msg = EasyMock.createMock(OFMessage.class);
- EasyMock.expect(msg.getXid()).andReturn(1).anyTimes();
- EasyMock.expect(msg.getLength()).andReturn((short)100).anyTimes();
- EasyMock.expect(msg.getLengthU()).andReturn(100).anyTimes();
- EasyMock.replay(msg);
- messages.add(msg);
-
- try {
- EasyMock.expect(damper.write(EasyMock.eq(sw), EasyMock.eq(msg), EasyMock.eq(context)))
- .andReturn(true).once();
- } catch (IOException e) {
- fail("Failed in OFMessageDamper#write()");
- }
- }
-
- try {
- EasyMock.expect(damper.write(EasyMock.eq(sw), (OFMessage)EasyMock.anyObject(), EasyMock.eq(context)))
- .andAnswer(new IAnswer<Boolean>() {
- @Override
- public Boolean answer() throws Throwable {
- OFMessage msg = (OFMessage)EasyMock.getCurrentArguments()[1];
- if (msg.getType() == OFType.BARRIER_REQUEST) {
- barrierTime = System.currentTimeMillis();
- }
- return true;
- }
- }).once();
- } catch (IOException e1) {
- fail("Failed in OFMessageDamper#write()");
- }
+ try {
+ // wait until message is processed.
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ fail("Failed in Thread.sleep()");
+ }
+ EasyMock.verify(msg);
+ EasyMock.verify(sw);
+ verifyAll();
- endInitMock();
- initPusher(1);
-
- pusher.createQueue(sw);
- pusher.setRate(sw, LIMIT_RATE);
-
- long beginTime = System.currentTimeMillis();
- for (OFMessage msg : messages) {
- boolean add_result = pusher.add(sw, msg);
- assertTrue(add_result);
- }
-
- pusher.barrierAsync(sw);
+ pusher.stop();
+ }
- try {
- do {
- Thread.sleep(1000);
- } while (barrierTime == 0);
- } catch (InterruptedException e) {
- fail("Failed to sleep");
- }
-
- double measured_rate = NUM_MSG * 100 / (barrierTime - beginTime);
- assertTrue(measured_rate < ACCEPTABLE_RATE);
-
- for (OFMessage msg : messages) {
- EasyMock.verify(msg);
- }
- EasyMock.verify(sw);
- verifyAll();
+ /**
+ * Test bunch of OFMessages are correctly sent to single switch via MessageDamper.
+ */
+ @Test
+ public void testMassiveAddMessage() {
+ final int NUM_MSG = 10000;
- pusher.stop();
- }
+ beginInitMock();
- /**
- * Test barrier message is correctly sent to a switch.
- */
- @Test
- public void testBarrierMessage() {
- beginInitMock();
-
- IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
- EasyMock.expect(sw.getId()).andReturn((long)1).anyTimes();
- sw.flush();
- EasyMock.expectLastCall().atLeastOnce();
- prepareBarrier(sw);
- EasyMock.replay(sw);
+ IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
+ EasyMock.expect(sw.getId()).andReturn((long) 1).anyTimes();
+ sw.flush();
+ EasyMock.expectLastCall().atLeastOnce();
+ EasyMock.replay(sw);
- try {
- EasyMock.expect(damper.write(EasyMock.eq(sw), (OFMessage)EasyMock.anyObject(), EasyMock.eq(context)))
- .andReturn(true).once();
- } catch (IOException e1) {
- fail("Failed in OFMessageDamper#write()");
- }
+ List<OFMessage> messages = new ArrayList<OFMessage>();
- endInitMock();
- initPusher(1);
+ for (int i = 0; i < NUM_MSG; ++i) {
+ OFMessage msg = EasyMock.createMock(OFMessage.class);
+ EasyMock.expect(msg.getXid()).andReturn(i).anyTimes();
+ EasyMock.expect(msg.getLength()).andReturn((short) 100).anyTimes();
+ EasyMock.replay(msg);
+ messages.add(msg);
- OFBarrierReplyFuture future = pusher.barrierAsync(sw);
-
- assertNotNull(future);
-
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- fail("Failed to sleep");
- }
-
- verifyAll();
+ try {
+ EasyMock.expect(damper.write(EasyMock.eq(sw), EasyMock.eq(msg), EasyMock.eq(context)))
+ .andReturn(true).once();
+ } catch (IOException e1) {
+ fail("Failed in OFMessageDamper#write()");
+ }
+ }
- pusher.stop();
- }
-
- static final int XID_TO_VERIFY = 100;
- static final long DPID_TO_VERIFY = 10;
- /**
- * Test FlowObject is correctly converted to message and is sent to a switch.
- */
- @SuppressWarnings("unchecked")
- @Test
- public void testAddFlow() {
- // instantiate required objects
- FlowEntry flowEntry1 = new FlowEntry();
- flowEntry1.setDpid(new Dpid(DPID_TO_VERIFY));
- flowEntry1.setFlowId(new FlowId(1));
- flowEntry1.setInPort(new Port((short) 1));
- flowEntry1.setOutPort(new Port((short) 11));
- flowEntry1.setFlowEntryId(new FlowEntryId(1));
- flowEntry1.setFlowEntryMatch(new FlowEntryMatch());
- flowEntry1.setFlowEntryActions(new FlowEntryActions());
- flowEntry1.setFlowEntryErrorState(new FlowEntryErrorState());
- flowEntry1.setFlowEntryUserState(FlowEntryUserState.FE_USER_ADD);
-
- beginInitMock();
-
- OFFlowMod msg = EasyMock.createMock(OFFlowMod.class);
- EasyMock.expect(msg.setIdleTimeout(EasyMock.anyShort())).andReturn(msg);
- EasyMock.expect(msg.setHardTimeout(EasyMock.anyShort())).andReturn(msg);
- EasyMock.expect(msg.setPriority(EasyMock.anyShort())).andReturn(msg);
- EasyMock.expect(msg.setBufferId(EasyMock.anyInt())).andReturn(msg);
- EasyMock.expect(msg.setCookie(EasyMock.anyLong())).andReturn(msg);
- EasyMock.expect(msg.setCommand(EasyMock.anyShort())).andReturn(msg);
- EasyMock.expect(msg.setMatch(EasyMock.anyObject(OFMatch.class))).andReturn(msg);
- EasyMock.expect(msg.setActions((List<OFAction>)EasyMock.anyObject())).andReturn(msg);
- EasyMock.expect(msg.setLengthU(EasyMock.anyShort())).andReturn(msg);
- EasyMock.expect(msg.setOutPort(EasyMock.anyShort())).andReturn(msg).atLeastOnce();
- EasyMock.expect(msg.getXid()).andReturn(XID_TO_VERIFY).anyTimes();
- EasyMock.expect(msg.getType()).andReturn(OFType.FLOW_MOD).anyTimes();
- EasyMock.expect(msg.getLength()).andReturn((short)100).anyTimes();
- EasyMock.replay(msg);
-
- EasyMock.expect(factory.getMessage(EasyMock.eq(OFType.FLOW_MOD))).andReturn(msg);
+ endInitMock();
+ initPusher(1);
- IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
- EasyMock.expect(sw.getId()).andReturn(DPID_TO_VERIFY).anyTimes();
- EasyMock.expect(sw.getStringId()).andReturn("1").anyTimes();
- sw.flush();
- EasyMock.expectLastCall().once();
-
- try {
- EasyMock.expect(damper.write(EasyMock.eq(sw), EasyMock.anyObject(OFMessage.class), EasyMock.eq(context)))
- .andAnswer(new IAnswer<Boolean>() {
- @Override
- public Boolean answer() throws Throwable {
- OFMessage msg = (OFMessage)EasyMock.getCurrentArguments()[1];
- if (msg.getType() == OFType.FLOW_MOD) {
- assertEquals(msg.getXid(), XID_TO_VERIFY);
- }
- return true;
- }
- }).atLeastOnce();
- } catch (IOException e1) {
- fail("Failed in OFMessageDamper#write()");
- }
-
- EasyMock.replay(sw);
-
- endInitMock();
- initPusher(1);
+ for (OFMessage msg : messages) {
+ boolean add_result = pusher.add(sw, msg);
+ assertTrue(add_result);
+ }
- pusher.pushFlowEntry(sw, flowEntry1);
-
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- fail("Failed to sleep");
- }
-
- EasyMock.verify(sw);
- verifyAll();
+ try {
+ // wait until message is processed.
+ Thread.sleep(5000);
+ } catch (InterruptedException e) {
+ fail("Failed in Thread.sleep()");
+ }
- pusher.stop();
- }
-
- private void beginInitMock() {
- context = EasyMock.createMock(FloodlightContext.class);
- modContext = EasyMock.createMock(FloodlightModuleContext.class);
- factory = EasyMock.createMock(BasicFactory.class);
- damper = EasyMock.createMock(OFMessageDamper.class);
- flProviderService = EasyMock.createMock(IFloodlightProviderService.class);
- threadPoolService = EasyMock.createMock(IThreadPoolService.class);
-
- EasyMock.expect(modContext.getServiceImpl(EasyMock.eq(IThreadPoolService.class)))
- .andReturn(threadPoolService).once();
- EasyMock.expect(modContext.getServiceImpl(EasyMock.eq(IFloodlightProviderService.class)))
- .andReturn(flProviderService).once();
- flProviderService.addOFMessageListener(EasyMock.eq(OFType.BARRIER_REPLY),
- (FlowPusher) EasyMock.anyObject());
- EasyMock.expectLastCall().once();
-
- ScheduledExecutorService executor = EasyMock.createMock(ScheduledExecutorService.class);
- EasyMock.expect(executor.schedule((Runnable)EasyMock.anyObject(), EasyMock.anyLong(),
- (TimeUnit)EasyMock.anyObject())).andReturn(null).once();
- EasyMock.replay(executor);
- EasyMock.expect(threadPoolService.getScheduledExecutor()).andReturn(executor).anyTimes();
- }
-
- private void endInitMock() {
- EasyMock.replay(threadPoolService);
- EasyMock.replay(flProviderService);
- EasyMock.replay(damper);
- EasyMock.replay(factory);
- EasyMock.replay(modContext);
- EasyMock.replay(context);
- }
-
- private void verifyAll() {
- EasyMock.verify(threadPoolService);
- EasyMock.verify(flProviderService);
- EasyMock.verify(damper);
- EasyMock.verify(factory);
- EasyMock.verify(modContext);
- EasyMock.verify(context);
- }
-
- private void initPusher(int num_thread) {
- pusher = new FlowPusher(num_thread);
- pusher.init(context, modContext, factory, damper);
- pusher.start();
- }
-
- private void prepareBarrier(IOFSwitch sw) {
- OFBarrierRequest req = EasyMock.createMock(OFBarrierRequest.class);
- req.setXid(EasyMock.anyInt());
- EasyMock.expectLastCall().once();
- EasyMock.expect(req.getXid()).andReturn(1).anyTimes();
- EasyMock.expect(req.getType()).andReturn(OFType.BARRIER_REQUEST).anyTimes();
- EasyMock.expect(req.getLength()).andReturn((short)100).anyTimes();
- EasyMock.replay(req);
- EasyMock.expect(factory.getMessage(EasyMock.eq(OFType.BARRIER_REQUEST))).andReturn(req).anyTimes();
- EasyMock.expect(sw.getNextTransactionId()).andReturn(1);
- }
-
+ for (OFMessage msg : messages) {
+ EasyMock.verify(msg);
+ }
+ EasyMock.verify(sw);
+ verifyAll();
+
+ pusher.stop();
+ }
+
+ /**
+ * Test bunch of OFMessages are correctly sent to multiple switches with single threads.
+ */
+ @Test
+ public void testMultiSwitchAddMessage() {
+ final int NUM_SWITCH = 10;
+ final int NUM_MSG = 100; // messages per thread
+
+ beginInitMock();
+
+ Map<IOFSwitch, List<OFMessage>> sw_map = new HashMap<IOFSwitch, List<OFMessage>>();
+ for (int i = 0; i < NUM_SWITCH; ++i) {
+ IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
+ EasyMock.expect(sw.getId()).andReturn((long) i).anyTimes();
+ sw.flush();
+ EasyMock.expectLastCall().atLeastOnce();
+ EasyMock.replay(sw);
+
+ List<OFMessage> messages = new ArrayList<OFMessage>();
+
+ for (int j = 0; j < NUM_MSG; ++j) {
+ OFMessage msg = EasyMock.createMock(OFMessage.class);
+ EasyMock.expect(msg.getXid()).andReturn(j).anyTimes();
+ EasyMock.expect(msg.getLength()).andReturn((short) 100).anyTimes();
+ EasyMock.replay(msg);
+ messages.add(msg);
+
+ try {
+ EasyMock.expect(damper.write(EasyMock.eq(sw), EasyMock.eq(msg), EasyMock.eq(context)))
+ .andReturn(true).once();
+ } catch (IOException e1) {
+ fail("Failed in OFMessageDamper#write()");
+ }
+ }
+ sw_map.put(sw, messages);
+ }
+
+ endInitMock();
+ initPusher(1);
+
+ for (IOFSwitch sw : sw_map.keySet()) {
+ for (OFMessage msg : sw_map.get(sw)) {
+ boolean add_result = pusher.add(sw, msg);
+ assertTrue(add_result);
+ }
+ }
+
+ try {
+ // wait until message is processed.
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ fail("Failed in Thread.sleep()");
+ }
+
+ for (IOFSwitch sw : sw_map.keySet()) {
+ for (OFMessage msg : sw_map.get(sw)) {
+ EasyMock.verify(msg);
+ }
+
+ EasyMock.verify(sw);
+ }
+ verifyAll();
+
+ pusher.stop();
+ }
+
+ /**
+ * Test bunch of OFMessages are correctly sent to multiple switches using multiple threads.
+ */
+ @Test
+ public void testMultiThreadedAddMessage() {
+ final int NUM_THREAD = 10;
+ final int NUM_MSG = 100; // messages per thread
+
+ beginInitMock();
+
+ Map<IOFSwitch, List<OFMessage>> sw_map = new HashMap<IOFSwitch, List<OFMessage>>();
+ for (int i = 0; i < NUM_THREAD; ++i) {
+ IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
+ EasyMock.expect(sw.getId()).andReturn((long) i).anyTimes();
+ sw.flush();
+ EasyMock.expectLastCall().atLeastOnce();
+ EasyMock.replay(sw);
+
+ List<OFMessage> messages = new ArrayList<OFMessage>();
+
+ for (int j = 0; j < NUM_MSG; ++j) {
+ OFMessage msg = EasyMock.createMock(OFMessage.class);
+ EasyMock.expect(msg.getXid()).andReturn(j).anyTimes();
+ EasyMock.expect(msg.getLength()).andReturn((short) 100).anyTimes();
+ EasyMock.replay(msg);
+ messages.add(msg);
+
+ try {
+ EasyMock.expect(damper.write(EasyMock.eq(sw), EasyMock.eq(msg), EasyMock.eq(context)))
+ .andReturn(true).once();
+ } catch (IOException e1) {
+ fail("Failed in OFMessageDamper#write()");
+ }
+ }
+ sw_map.put(sw, messages);
+ }
+
+ endInitMock();
+ initPusher(NUM_THREAD);
+
+ for (IOFSwitch sw : sw_map.keySet()) {
+ for (OFMessage msg : sw_map.get(sw)) {
+ boolean add_result = pusher.add(sw, msg);
+ assertTrue(add_result);
+ }
+ }
+
+ try {
+ // wait until message is processed.
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ fail("Failed in Thread.sleep()");
+ }
+
+ for (IOFSwitch sw : sw_map.keySet()) {
+ for (OFMessage msg : sw_map.get(sw)) {
+ EasyMock.verify(msg);
+ }
+
+ EasyMock.verify(sw);
+ }
+ verifyAll();
+
+ pusher.stop();
+ }
+
+ private long barrierTime = 0;
+
+ /**
+ * Test rate limitation of messages works correctly.
+ */
+ @Test
+ public void testRateLimitedAddMessage() {
+ final long LIMIT_RATE = 100; // [bytes/ms]
+ final int NUM_MSG = 1000;
+
+ // Accuracy of FlowPusher's rate calculation can't be measured by unit test
+ // because switch doesn't return BARRIER_REPLY.
+ // In unit test we use approximate way to measure rate. This value is
+ // acceptable margin of measured rate.
+ final double ACCEPTABLE_RATE = LIMIT_RATE * 1.2;
+
+ beginInitMock();
+
+ IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
+ EasyMock.expect(sw.getId()).andReturn((long) 1).anyTimes();
+ sw.flush();
+ EasyMock.expectLastCall().atLeastOnce();
+ prepareBarrier(sw);
+ EasyMock.replay(sw);
+
+ List<OFMessage> messages = new ArrayList<OFMessage>();
+
+ for (int i = 0; i < NUM_MSG; ++i) {
+ OFMessage msg = EasyMock.createMock(OFMessage.class);
+ EasyMock.expect(msg.getXid()).andReturn(1).anyTimes();
+ EasyMock.expect(msg.getLength()).andReturn((short) 100).anyTimes();
+ EasyMock.expect(msg.getLengthU()).andReturn(100).anyTimes();
+ EasyMock.replay(msg);
+ messages.add(msg);
+
+ try {
+ EasyMock.expect(damper.write(EasyMock.eq(sw), EasyMock.eq(msg), EasyMock.eq(context)))
+ .andReturn(true).once();
+ } catch (IOException e) {
+ fail("Failed in OFMessageDamper#write()");
+ }
+ }
+
+ try {
+ EasyMock.expect(damper.write(EasyMock.eq(sw), (OFMessage) EasyMock.anyObject(), EasyMock.eq(context)))
+ .andAnswer(new IAnswer<Boolean>() {
+ @Override
+ public Boolean answer() throws Throwable {
+ OFMessage msg = (OFMessage) EasyMock.getCurrentArguments()[1];
+ if (msg.getType() == OFType.BARRIER_REQUEST) {
+ barrierTime = System.currentTimeMillis();
+ }
+ return true;
+ }
+ }).once();
+ } catch (IOException e1) {
+ fail("Failed in OFMessageDamper#write()");
+ }
+
+ endInitMock();
+ initPusher(1);
+
+ pusher.createQueue(sw);
+ pusher.setRate(sw, LIMIT_RATE);
+
+ long beginTime = System.currentTimeMillis();
+ for (OFMessage msg : messages) {
+ boolean add_result = pusher.add(sw, msg);
+ assertTrue(add_result);
+ }
+
+ pusher.barrierAsync(sw);
+
+ try {
+ do {
+ Thread.sleep(1000);
+ } while (barrierTime == 0);
+ } catch (InterruptedException e) {
+ fail("Failed to sleep");
+ }
+
+ double measured_rate = NUM_MSG * 100 / (barrierTime - beginTime);
+ assertTrue(measured_rate < ACCEPTABLE_RATE);
+
+ for (OFMessage msg : messages) {
+ EasyMock.verify(msg);
+ }
+ EasyMock.verify(sw);
+ verifyAll();
+
+ pusher.stop();
+ }
+
+ /**
+ * Test barrier message is correctly sent to a switch.
+ */
+ @Test
+ public void testBarrierMessage() {
+ beginInitMock();
+
+ IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
+ EasyMock.expect(sw.getId()).andReturn((long) 1).anyTimes();
+ sw.flush();
+ EasyMock.expectLastCall().atLeastOnce();
+ prepareBarrier(sw);
+ EasyMock.replay(sw);
+
+ try {
+ EasyMock.expect(damper.write(EasyMock.eq(sw), (OFMessage) EasyMock.anyObject(), EasyMock.eq(context)))
+ .andReturn(true).once();
+ } catch (IOException e1) {
+ fail("Failed in OFMessageDamper#write()");
+ }
+
+ endInitMock();
+ initPusher(1);
+
+ OFBarrierReplyFuture future = pusher.barrierAsync(sw);
+
+ assertNotNull(future);
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ fail("Failed to sleep");
+ }
+
+ verifyAll();
+
+ pusher.stop();
+ }
+
+ static final int XID_TO_VERIFY = 100;
+ static final long DPID_TO_VERIFY = 10;
+
+ /**
+ * Test FlowObject is correctly converted to message and is sent to a switch.
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testAddFlow() {
+ // instantiate required objects
+ FlowEntry flowEntry1 = new FlowEntry();
+ flowEntry1.setDpid(new Dpid(DPID_TO_VERIFY));
+ flowEntry1.setFlowId(new FlowId(1));
+ flowEntry1.setInPort(new Port((short) 1));
+ flowEntry1.setOutPort(new Port((short) 11));
+ flowEntry1.setFlowEntryId(new FlowEntryId(1));
+ flowEntry1.setFlowEntryMatch(new FlowEntryMatch());
+ flowEntry1.setFlowEntryActions(new FlowEntryActions());
+ flowEntry1.setFlowEntryErrorState(new FlowEntryErrorState());
+ flowEntry1.setFlowEntryUserState(FlowEntryUserState.FE_USER_ADD);
+
+ beginInitMock();
+
+ OFFlowMod msg = EasyMock.createMock(OFFlowMod.class);
+ EasyMock.expect(msg.setIdleTimeout(EasyMock.anyShort())).andReturn(msg);
+ EasyMock.expect(msg.setHardTimeout(EasyMock.anyShort())).andReturn(msg);
+ EasyMock.expect(msg.setPriority(EasyMock.anyShort())).andReturn(msg);
+ EasyMock.expect(msg.setBufferId(EasyMock.anyInt())).andReturn(msg);
+ EasyMock.expect(msg.setCookie(EasyMock.anyLong())).andReturn(msg);
+ EasyMock.expect(msg.setCommand(EasyMock.anyShort())).andReturn(msg);
+ EasyMock.expect(msg.setMatch(EasyMock.anyObject(OFMatch.class))).andReturn(msg);
+ EasyMock.expect(msg.setActions((List<OFAction>) EasyMock.anyObject())).andReturn(msg);
+ EasyMock.expect(msg.setLengthU(EasyMock.anyShort())).andReturn(msg);
+ EasyMock.expect(msg.setOutPort(EasyMock.anyShort())).andReturn(msg).atLeastOnce();
+ EasyMock.expect(msg.getXid()).andReturn(XID_TO_VERIFY).anyTimes();
+ EasyMock.expect(msg.getType()).andReturn(OFType.FLOW_MOD).anyTimes();
+ EasyMock.expect(msg.getLength()).andReturn((short) 100).anyTimes();
+ EasyMock.replay(msg);
+
+ EasyMock.expect(factory.getMessage(EasyMock.eq(OFType.FLOW_MOD))).andReturn(msg);
+
+ IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
+ EasyMock.expect(sw.getId()).andReturn(DPID_TO_VERIFY).anyTimes();
+ EasyMock.expect(sw.getStringId()).andReturn("1").anyTimes();
+ sw.flush();
+ EasyMock.expectLastCall().once();
+
+ try {
+ EasyMock.expect(damper.write(EasyMock.eq(sw), EasyMock.anyObject(OFMessage.class), EasyMock.eq(context)))
+ .andAnswer(new IAnswer<Boolean>() {
+ @Override
+ public Boolean answer() throws Throwable {
+ OFMessage msg = (OFMessage) EasyMock.getCurrentArguments()[1];
+ if (msg.getType() == OFType.FLOW_MOD) {
+ assertEquals(msg.getXid(), XID_TO_VERIFY);
+ }
+ return true;
+ }
+ }).atLeastOnce();
+ } catch (IOException e1) {
+ fail("Failed in OFMessageDamper#write()");
+ }
+
+ EasyMock.replay(sw);
+
+ endInitMock();
+ initPusher(1);
+
+ pusher.pushFlowEntry(sw, flowEntry1);
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ fail("Failed to sleep");
+ }
+
+ EasyMock.verify(sw);
+ verifyAll();
+
+ pusher.stop();
+ }
+
+ private void beginInitMock() {
+ context = EasyMock.createMock(FloodlightContext.class);
+ modContext = EasyMock.createMock(FloodlightModuleContext.class);
+ factory = EasyMock.createMock(BasicFactory.class);
+ damper = EasyMock.createMock(OFMessageDamper.class);
+ flProviderService = EasyMock.createMock(IFloodlightProviderService.class);
+ threadPoolService = EasyMock.createMock(IThreadPoolService.class);
+
+ EasyMock.expect(modContext.getServiceImpl(EasyMock.eq(IThreadPoolService.class)))
+ .andReturn(threadPoolService).once();
+ EasyMock.expect(modContext.getServiceImpl(EasyMock.eq(IFloodlightProviderService.class)))
+ .andReturn(flProviderService).once();
+ flProviderService.addOFMessageListener(EasyMock.eq(OFType.BARRIER_REPLY),
+ (FlowPusher) EasyMock.anyObject());
+ EasyMock.expectLastCall().once();
+
+ ScheduledExecutorService executor = EasyMock.createMock(ScheduledExecutorService.class);
+ EasyMock.expect(executor.schedule((Runnable) EasyMock.anyObject(), EasyMock.anyLong(),
+ (TimeUnit) EasyMock.anyObject())).andReturn(null).once();
+ EasyMock.replay(executor);
+ EasyMock.expect(threadPoolService.getScheduledExecutor()).andReturn(executor).anyTimes();
+ }
+
+ private void endInitMock() {
+ EasyMock.replay(threadPoolService);
+ EasyMock.replay(flProviderService);
+ EasyMock.replay(damper);
+ EasyMock.replay(factory);
+ EasyMock.replay(modContext);
+ EasyMock.replay(context);
+ }
+
+ private void verifyAll() {
+ EasyMock.verify(threadPoolService);
+ EasyMock.verify(flProviderService);
+ EasyMock.verify(damper);
+ EasyMock.verify(factory);
+ EasyMock.verify(modContext);
+ EasyMock.verify(context);
+ }
+
+ private void initPusher(int num_thread) {
+ pusher = new FlowPusher(num_thread);
+ pusher.init(context, modContext, factory, damper);
+ pusher.start();
+ }
+
+ private void prepareBarrier(IOFSwitch sw) {
+ OFBarrierRequest req = EasyMock.createMock(OFBarrierRequest.class);
+ req.setXid(EasyMock.anyInt());
+ EasyMock.expectLastCall().once();
+ EasyMock.expect(req.getXid()).andReturn(1).anyTimes();
+ EasyMock.expect(req.getType()).andReturn(OFType.BARRIER_REQUEST).anyTimes();
+ EasyMock.expect(req.getLength()).andReturn((short) 100).anyTimes();
+ EasyMock.replay(req);
+ EasyMock.expect(factory.getMessage(EasyMock.eq(OFType.BARRIER_REQUEST))).andReturn(req).anyTimes();
+ EasyMock.expect(sw.getNextTransactionId()).andReturn(1);
+ }
+
}
diff --git a/src/test/java/net/onrc/onos/core/flowprogrammer/FlowSynchronizerTest.java b/src/test/java/net/onrc/onos/core/flowprogrammer/FlowSynchronizerTest.java
index 9222a8a..2d97d4f 100644
--- a/src/test/java/net/onrc/onos/core/flowprogrammer/FlowSynchronizerTest.java
+++ b/src/test/java/net/onrc/onos/core/flowprogrammer/FlowSynchronizerTest.java
@@ -37,286 +37,290 @@
@RunWith(PowerMockRunner.class)
@PrepareForTest({FlowSynchronizer.class})
public class FlowSynchronizerTest {
- private FlowPusher pusher;
- private FlowSynchronizer sync;
- private List<Long> idAdded;
- private List<Long> idRemoved;
+ private FlowPusher pusher;
+ private FlowSynchronizer sync;
+ private List<Long> idAdded;
+ private List<Long> idRemoved;
- @Before
- public void setUp() throws Exception {
- idAdded = new ArrayList<Long>();
- idRemoved = new ArrayList<Long>();
-
- pusher = EasyMock.createMock(FlowPusher.class);
- EasyMock.expect(pusher.suspend(EasyMock.anyObject(IOFSwitch.class))).andReturn(true).anyTimes();
- EasyMock.expect(pusher.resume(EasyMock.anyObject(IOFSwitch.class))).andReturn(true).anyTimes();
- pusher.add(EasyMock.anyObject(IOFSwitch.class), EasyMock.anyObject(OFMessage.class),
- EasyMock.eq(MsgPriority.HIGH));
- EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
- @Override
- public Object answer() throws Throwable {
- OFMessage msg = (OFMessage)EasyMock.getCurrentArguments()[1];
- if (msg.getType().equals(OFType.FLOW_MOD)) {
- OFFlowMod fm = (OFFlowMod)msg;
- if (fm.getCommand() == OFFlowMod.OFPFC_DELETE_STRICT) {
- idRemoved.add(fm.getCookie());
- }
- }
- return null;
- }
- }).anyTimes();
- pusher.pushFlowEntry(EasyMock.anyObject(IOFSwitch.class), EasyMock.anyObject(FlowEntry.class),
- EasyMock.eq(MsgPriority.HIGH));
- EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
- @Override
- public Object answer() throws Throwable {
- FlowEntry flow = (FlowEntry)EasyMock.getCurrentArguments()[1];
- idAdded.add(flow.flowEntryId().value());
- return null;
- }
- }).anyTimes();
- EasyMock.replay(pusher);
- }
+ @Before
+ public void setUp() throws Exception {
+ idAdded = new ArrayList<Long>();
+ idRemoved = new ArrayList<Long>();
- @After
- public void tearDown() throws Exception {
- }
+ pusher = EasyMock.createMock(FlowPusher.class);
+ EasyMock.expect(pusher.suspend(EasyMock.anyObject(IOFSwitch.class))).andReturn(true).anyTimes();
+ EasyMock.expect(pusher.resume(EasyMock.anyObject(IOFSwitch.class))).andReturn(true).anyTimes();
+ pusher.add(EasyMock.anyObject(IOFSwitch.class), EasyMock.anyObject(OFMessage.class),
+ EasyMock.eq(MsgPriority.HIGH));
+ EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+ @Override
+ public Object answer() throws Throwable {
+ OFMessage msg = (OFMessage) EasyMock.getCurrentArguments()[1];
+ if (msg.getType().equals(OFType.FLOW_MOD)) {
+ OFFlowMod fm = (OFFlowMod) msg;
+ if (fm.getCommand() == OFFlowMod.OFPFC_DELETE_STRICT) {
+ idRemoved.add(fm.getCookie());
+ }
+ }
+ return null;
+ }
+ }).anyTimes();
+ pusher.pushFlowEntry(EasyMock.anyObject(IOFSwitch.class), EasyMock.anyObject(FlowEntry.class),
+ EasyMock.eq(MsgPriority.HIGH));
+ EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+ @Override
+ public Object answer() throws Throwable {
+ FlowEntry flow = (FlowEntry) EasyMock.getCurrentArguments()[1];
+ idAdded.add(flow.flowEntryId().value());
+ return null;
+ }
+ }).anyTimes();
+ EasyMock.replay(pusher);
+ }
- /**
- * Test that synchronization doesn't affect anything in case either DB and
- * flow table has the same entries.
- */
- @Test
- public void testStable() {
- // Create mock of flow table : flow 1
- IOFSwitch sw = createMockSwitch(new long[] {1});
-
- // Create mock of flow entries : flow 1
- initMockGraph(new long[] {1});
-
- // synchronize
- doSynchronization(sw);
-
- // check if flow is not changed
- assertEquals(0, idAdded.size());
- assertEquals(0, idRemoved.size());
- }
+ @After
+ public void tearDown() throws Exception {
+ }
- /**
- * Test that an flow is added in case DB has an extra FlowEntry.
- */
- @Test
- public void testSingleAdd() {
- // Create mock of flow table : null
- IOFSwitch sw = createMockSwitch(new long[] {});
-
- // Create mock of flow entries : flow 1
- initMockGraph(new long[] {1});
-
- // synchronize
- doSynchronization(sw);
-
- // check if single flow is installed
- assertEquals(1, idAdded.size());
- assertTrue(idAdded.contains((long)1));
- assertEquals(0, idRemoved.size());
- }
+ /**
+ * Test that synchronization doesn't affect anything in case either DB and
+ * flow table has the same entries.
+ */
+ @Test
+ public void testStable() {
+ // Create mock of flow table : flow 1
+ IOFSwitch sw = createMockSwitch(new long[]{1});
- /**
- * Test that an flow is deleted in case switch has an extra FlowEntry.
- */
- @Test
- public void testSingleDelete() {
- // Create mock of flow table : flow 1
- IOFSwitch sw = createMockSwitch(new long[] {1});
-
- // Create mock of flow entries : null
- initMockGraph(new long[] {});
-
- // synchronize
- doSynchronization(sw);
-
- // check if single flow is deleted
- assertEquals(0, idAdded.size());
- assertEquals(1, idRemoved.size());
- assertTrue(idRemoved.contains((long)1));
- }
-
- /**
- * Test that appropriate flows are added and other appropriate flows are deleted
- * in case flows in DB are overlapping flows in switch.
- */
- @Test
- public void testMixed() {
- // Create mock of flow table : flow 1,2,3
- IOFSwitch sw = createMockSwitch(new long[] {1,2,3});
-
- // Create mock of flow entries : flow 2,3,4,5
- initMockGraph(new long[] {2,3,4,5});
-
- // synchronize
- doSynchronization(sw);
-
- // check if two flows {4,5} is installed and one flow {1} is deleted
- assertEquals(2, idAdded.size());
- assertTrue(idAdded.contains((long)4));
- assertTrue(idAdded.contains((long)5));
- assertEquals(1, idRemoved.size());
- assertTrue(idRemoved.contains((long)1));
- }
-
+ // Create mock of flow entries : flow 1
+ initMockGraph(new long[]{1});
- @Test
- public void testMassive() {
- // Create mock of flow table : flow 0-1999
- long [] swIdList = new long [2000];
- for (long i = 0; i < 2000; ++i) {
- swIdList[(int)i] = i;
- }
- IOFSwitch sw = createMockSwitch(swIdList);
-
- // Create mock of flow entries : flow 1500-3499
- long [] dbIdList = new long [2000];
- for (long i = 0; i < 2000; ++i) {
- dbIdList[(int)i] = 1500 + i;
- }
- initMockGraph(dbIdList);
+ // synchronize
+ doSynchronization(sw);
- // synchronize
- doSynchronization(sw);
-
- // check if 1500 flows {2000-3499} is installed and 1500 flows {0,...,1499} is deleted
- assertEquals(1500, idAdded.size());
- for (long i = 2000; i < 3500; ++i) {
- assertTrue(idAdded.contains(i));
- }
- assertEquals(1500, idRemoved.size());
- for (long i = 0; i < 1500; ++i) {
- assertTrue(idRemoved.contains(i));
- }
- }
+ // check if flow is not changed
+ assertEquals(0, idAdded.size());
+ assertEquals(0, idRemoved.size());
+ }
- /**
- * Create mock IOFSwitch with flow table which has arbitrary flows.
- * @param cookieList List of FlowEntry IDs switch has.
- * @return Mock object.
- */
- private IOFSwitch createMockSwitch(long[] cookieList) {
- IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
- EasyMock.expect(sw.getId()).andReturn((long)1).anyTimes();
-
- List<OFStatistics> stats = new ArrayList<OFStatistics>();
- for (long cookie : cookieList) {
- stats.add(createReply(cookie));
- }
-
- @SuppressWarnings("unchecked")
- Future<List<OFStatistics>> future = EasyMock.createMock(Future.class);
- try {
- EasyMock.expect(future.get()).andReturn(stats).once();
- } catch (InterruptedException e1) {
- fail("Failed in Future#get()");
- } catch (ExecutionException e1) {
- fail("Failed in Future#get()");
- }
- EasyMock.replay(future);
-
- try {
- EasyMock.expect(sw.getStatistics(EasyMock.anyObject(OFStatisticsRequest.class)))
- .andReturn(future).once();
- } catch (IOException e) {
- fail("Failed in IOFSwitch#getStatistics()");
- }
-
- EasyMock.replay(sw);
- return sw;
- }
-
- /**
- * Create single OFFlowStatisticsReply object which is actually obtained from switch.
- * @param cookie Cookie value, which indicates ID of FlowEntry installed to switch.
- * @return Created object.
- */
- private OFFlowStatisticsReply createReply(long cookie) {
- OFFlowStatisticsReply stat = new OFFlowStatisticsReply();
- OFMatch match = new OFMatch();
-
- stat.setCookie(cookie);
- stat.setMatch(match);
- stat.setPriority((short)1);
+ /**
+ * Test that an flow is added in case DB has an extra FlowEntry.
+ */
+ @Test
+ public void testSingleAdd() {
+ // Create mock of flow table : null
+ IOFSwitch sw = createMockSwitch(new long[]{});
- return stat;
- }
-
- /**
- * Create mock FlowDatabaseOperation to mock DB.
- * @param idList List of FlowEntry IDs stored in DB.
- */
- private void initMockGraph(long[] idList) {
- /*
- * TODO: The old FlowDatabaseOperation class is gone, so the method
- * below needs to be rewritten.
- */
- /*
- List<IFlowEntry> flowEntryList = new ArrayList<IFlowEntry>();
-
- for (long id : idList) {
- IFlowEntry entry = EasyMock.createMock(IFlowEntry.class);
- EasyMock.expect(entry.getFlowEntryId()).andReturn(String.valueOf(id)).anyTimes();
- EasyMock.replay(entry);
- flowEntryList.add(entry);
- }
-
- ISwitchObject swObj = EasyMock.createMock(ISwitchObject.class);
- EasyMock.expect(swObj.getFlowEntries()).andReturn(flowEntryList).once();
- EasyMock.replay(swObj);
-
- DBOperation mockOp = PowerMock.createMock(DBOperation.class);
- EasyMock.expect(mockOp.searchSwitch(EasyMock.anyObject(String.class))).andReturn(swObj).once();
-
- PowerMock.mockStatic(FlowDatabaseOperation.class);
- for (IFlowEntry entry : flowEntryList) {
- EasyMock.expect(FlowDatabaseOperation.extractFlowEntry(EasyMock.eq(entry)))
- .andAnswer(new IAnswer<FlowEntry>() {
- @Override
- public FlowEntry answer() throws Throwable {
- IFlowEntry iflow = (IFlowEntry)EasyMock.getCurrentArguments()[0];
- long flowEntryId = Long.valueOf(iflow.getFlowEntryId());
-
- FlowEntry flow = EasyMock.createMock(FlowEntry.class);
- EasyMock.expect(flow.flowEntryId()).andReturn(new FlowEntryId(flowEntryId)).anyTimes();
- EasyMock.replay(flow);
- return flow;
- }
-
- }).anyTimes();
- EasyMock.expect(mockOp.searchFlowEntry(EasyMock.eq(new FlowEntryId(entry.getFlowEntryId()))))
- .andReturn(entry);
- }
- PowerMock.replay(FlowDatabaseOperation.class);
- EasyMock.replay(mockOp);
-
- try {
- PowerMock.expectNew(DBOperation.class).andReturn(mockOp);
- } catch (Exception e) {
- fail("Failed to create DBOperation");
- }
- PowerMock.replay(DBOperation.class);
- */
- }
-
- /**
- * Instantiate FlowSynchronizer and sync flows.
- * @param sw Target IOFSwitch object
- */
- private void doSynchronization(IOFSwitch sw) {
- sync = new FlowSynchronizer();
- sync.init(pusher);
- Future<SyncResult> future = sync.synchronize(sw);
- try {
- future.get();
- } catch (Exception e) {
- fail("Failed to Future#get()");
- }
- }
+ // Create mock of flow entries : flow 1
+ initMockGraph(new long[]{1});
+
+ // synchronize
+ doSynchronization(sw);
+
+ // check if single flow is installed
+ assertEquals(1, idAdded.size());
+ assertTrue(idAdded.contains((long) 1));
+ assertEquals(0, idRemoved.size());
+ }
+
+ /**
+ * Test that an flow is deleted in case switch has an extra FlowEntry.
+ */
+ @Test
+ public void testSingleDelete() {
+ // Create mock of flow table : flow 1
+ IOFSwitch sw = createMockSwitch(new long[]{1});
+
+ // Create mock of flow entries : null
+ initMockGraph(new long[]{});
+
+ // synchronize
+ doSynchronization(sw);
+
+ // check if single flow is deleted
+ assertEquals(0, idAdded.size());
+ assertEquals(1, idRemoved.size());
+ assertTrue(idRemoved.contains((long) 1));
+ }
+
+ /**
+ * Test that appropriate flows are added and other appropriate flows are deleted
+ * in case flows in DB are overlapping flows in switch.
+ */
+ @Test
+ public void testMixed() {
+ // Create mock of flow table : flow 1,2,3
+ IOFSwitch sw = createMockSwitch(new long[]{1, 2, 3});
+
+ // Create mock of flow entries : flow 2,3,4,5
+ initMockGraph(new long[]{2, 3, 4, 5});
+
+ // synchronize
+ doSynchronization(sw);
+
+ // check if two flows {4,5} is installed and one flow {1} is deleted
+ assertEquals(2, idAdded.size());
+ assertTrue(idAdded.contains((long) 4));
+ assertTrue(idAdded.contains((long) 5));
+ assertEquals(1, idRemoved.size());
+ assertTrue(idRemoved.contains((long) 1));
+ }
+
+
+ @Test
+ public void testMassive() {
+ // Create mock of flow table : flow 0-1999
+ long[] swIdList = new long[2000];
+ for (long i = 0; i < 2000; ++i) {
+ swIdList[(int) i] = i;
+ }
+ IOFSwitch sw = createMockSwitch(swIdList);
+
+ // Create mock of flow entries : flow 1500-3499
+ long[] dbIdList = new long[2000];
+ for (long i = 0; i < 2000; ++i) {
+ dbIdList[(int) i] = 1500 + i;
+ }
+ initMockGraph(dbIdList);
+
+ // synchronize
+ doSynchronization(sw);
+
+ // check if 1500 flows {2000-3499} is installed and 1500 flows {0,...,1499} is deleted
+ assertEquals(1500, idAdded.size());
+ for (long i = 2000; i < 3500; ++i) {
+ assertTrue(idAdded.contains(i));
+ }
+ assertEquals(1500, idRemoved.size());
+ for (long i = 0; i < 1500; ++i) {
+ assertTrue(idRemoved.contains(i));
+ }
+ }
+
+ /**
+ * Create mock IOFSwitch with flow table which has arbitrary flows.
+ *
+ * @param cookieList List of FlowEntry IDs switch has.
+ * @return Mock object.
+ */
+ private IOFSwitch createMockSwitch(long[] cookieList) {
+ IOFSwitch sw = EasyMock.createMock(IOFSwitch.class);
+ EasyMock.expect(sw.getId()).andReturn((long) 1).anyTimes();
+
+ List<OFStatistics> stats = new ArrayList<OFStatistics>();
+ for (long cookie : cookieList) {
+ stats.add(createReply(cookie));
+ }
+
+ @SuppressWarnings("unchecked")
+ Future<List<OFStatistics>> future = EasyMock.createMock(Future.class);
+ try {
+ EasyMock.expect(future.get()).andReturn(stats).once();
+ } catch (InterruptedException e1) {
+ fail("Failed in Future#get()");
+ } catch (ExecutionException e1) {
+ fail("Failed in Future#get()");
+ }
+ EasyMock.replay(future);
+
+ try {
+ EasyMock.expect(sw.getStatistics(EasyMock.anyObject(OFStatisticsRequest.class)))
+ .andReturn(future).once();
+ } catch (IOException e) {
+ fail("Failed in IOFSwitch#getStatistics()");
+ }
+
+ EasyMock.replay(sw);
+ return sw;
+ }
+
+ /**
+ * Create single OFFlowStatisticsReply object which is actually obtained from switch.
+ *
+ * @param cookie Cookie value, which indicates ID of FlowEntry installed to switch.
+ * @return Created object.
+ */
+ private OFFlowStatisticsReply createReply(long cookie) {
+ OFFlowStatisticsReply stat = new OFFlowStatisticsReply();
+ OFMatch match = new OFMatch();
+
+ stat.setCookie(cookie);
+ stat.setMatch(match);
+ stat.setPriority((short) 1);
+
+ return stat;
+ }
+
+ /**
+ * Create mock FlowDatabaseOperation to mock DB.
+ *
+ * @param idList List of FlowEntry IDs stored in DB.
+ */
+ private void initMockGraph(long[] idList) {
+ /*
+ * TODO: The old FlowDatabaseOperation class is gone, so the method
+ * below needs to be rewritten.
+ */
+ /*
+ List<IFlowEntry> flowEntryList = new ArrayList<IFlowEntry>();
+
+ for (long id : idList) {
+ IFlowEntry entry = EasyMock.createMock(IFlowEntry.class);
+ EasyMock.expect(entry.getFlowEntryId()).andReturn(String.valueOf(id)).anyTimes();
+ EasyMock.replay(entry);
+ flowEntryList.add(entry);
+ }
+
+ ISwitchObject swObj = EasyMock.createMock(ISwitchObject.class);
+ EasyMock.expect(swObj.getFlowEntries()).andReturn(flowEntryList).once();
+ EasyMock.replay(swObj);
+
+ DBOperation mockOp = PowerMock.createMock(DBOperation.class);
+ EasyMock.expect(mockOp.searchSwitch(EasyMock.anyObject(String.class))).andReturn(swObj).once();
+
+ PowerMock.mockStatic(FlowDatabaseOperation.class);
+ for (IFlowEntry entry : flowEntryList) {
+ EasyMock.expect(FlowDatabaseOperation.extractFlowEntry(EasyMock.eq(entry)))
+ .andAnswer(new IAnswer<FlowEntry>() {
+ @Override
+ public FlowEntry answer() throws Throwable {
+ IFlowEntry iflow = (IFlowEntry)EasyMock.getCurrentArguments()[0];
+ long flowEntryId = Long.valueOf(iflow.getFlowEntryId());
+
+ FlowEntry flow = EasyMock.createMock(FlowEntry.class);
+ EasyMock.expect(flow.flowEntryId()).andReturn(new FlowEntryId(flowEntryId)).anyTimes();
+ EasyMock.replay(flow);
+ return flow;
+ }
+
+ }).anyTimes();
+ EasyMock.expect(mockOp.searchFlowEntry(EasyMock.eq(new FlowEntryId(entry.getFlowEntryId()))))
+ .andReturn(entry);
+ }
+ PowerMock.replay(FlowDatabaseOperation.class);
+ EasyMock.replay(mockOp);
+
+ try {
+ PowerMock.expectNew(DBOperation.class).andReturn(mockOp);
+ } catch (Exception e) {
+ fail("Failed to create DBOperation");
+ }
+ PowerMock.replay(DBOperation.class);
+ */
+ }
+
+ /**
+ * Instantiate FlowSynchronizer and sync flows.
+ *
+ * @param sw Target IOFSwitch object
+ */
+ private void doSynchronization(IOFSwitch sw) {
+ sync = new FlowSynchronizer();
+ sync.init(pusher);
+ Future<SyncResult> future = sync.synchronize(sw);
+ try {
+ future.get();
+ } catch (Exception e) {
+ fail("Failed to Future#get()");
+ }
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/intent/ConstrainedBFSTreeTest.java b/src/test/java/net/onrc/onos/core/intent/ConstrainedBFSTreeTest.java
index be9f344..1a12cf9 100644
--- a/src/test/java/net/onrc/onos/core/intent/ConstrainedBFSTreeTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/ConstrainedBFSTreeTest.java
@@ -3,6 +3,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+
import net.onrc.onos.core.intent.IntentOperation.Operator;
import net.onrc.onos.core.topology.LinkEvent;
import net.onrc.onos.core.topology.Path;
@@ -15,132 +16,131 @@
* @author Toshio Koide (t-koide@onlab.us)
*/
public class ConstrainedBFSTreeTest {
- static long LOCAL_PORT = 0xFFFEL;
+ static long LOCAL_PORT = 0xFFFEL;
- @Before
- public void setUp() throws Exception {
- }
+ @Before
+ public void setUp() throws Exception {
+ }
- @After
- public void tearDown() throws Exception {
- }
+ @After
+ public void tearDown() throws Exception {
+ }
- @Test
- public void testCreate() {
- MockNetworkGraph graph = new MockNetworkGraph();
- graph.createSampleTopology1();
- ConstrainedBFSTree tree = new ConstrainedBFSTree(graph.getSwitch(1L));
- assertNotNull(tree);
- }
+ @Test
+ public void testCreate() {
+ MockNetworkGraph graph = new MockNetworkGraph();
+ graph.createSampleTopology1();
+ ConstrainedBFSTree tree = new ConstrainedBFSTree(graph.getSwitch(1L));
+ assertNotNull(tree);
+ }
- @Test
- public void testCreateConstrained() {
- MockNetworkGraph graph = new MockNetworkGraph();
- graph.createSampleTopology1();
- PathIntentMap intents = new PathIntentMap();
- ConstrainedBFSTree tree = new ConstrainedBFSTree(graph.getSwitch(1L), intents, 1000.0);
- assertNotNull(tree);
- }
+ @Test
+ public void testCreateConstrained() {
+ MockNetworkGraph graph = new MockNetworkGraph();
+ graph.createSampleTopology1();
+ PathIntentMap intents = new PathIntentMap();
+ ConstrainedBFSTree tree = new ConstrainedBFSTree(graph.getSwitch(1L), intents, 1000.0);
+ assertNotNull(tree);
+ }
- @Test
- public void testGetPath() {
- MockNetworkGraph graph = new MockNetworkGraph();
- graph.createSampleTopology1();
- ConstrainedBFSTree tree = new ConstrainedBFSTree(graph.getSwitch(1L));
- Path path11 = tree.getPath(graph.getSwitch(1L));
- Path path12 = tree.getPath(graph.getSwitch(2L));
- Path path13 = tree.getPath(graph.getSwitch(3L));
- Path path14 = tree.getPath(graph.getSwitch(4L));
+ @Test
+ public void testGetPath() {
+ MockNetworkGraph graph = new MockNetworkGraph();
+ graph.createSampleTopology1();
+ ConstrainedBFSTree tree = new ConstrainedBFSTree(graph.getSwitch(1L));
+ Path path11 = tree.getPath(graph.getSwitch(1L));
+ Path path12 = tree.getPath(graph.getSwitch(2L));
+ Path path13 = tree.getPath(graph.getSwitch(3L));
+ Path path14 = tree.getPath(graph.getSwitch(4L));
- assertNotNull(path11);
- assertEquals(0, path11.size());
+ assertNotNull(path11);
+ assertEquals(0, path11.size());
- assertNotNull(path12);
- assertEquals(1, path12.size());
- assertEquals(new LinkEvent(graph.getLink(1L, 12L)), path12.get(0));
+ assertNotNull(path12);
+ assertEquals(1, path12.size());
+ assertEquals(new LinkEvent(graph.getLink(1L, 12L)), path12.get(0));
- assertNotNull(path13);
- assertEquals(2, path13.size());
- if (path13.get(0).getDst().getDpid() == 2L) {
- assertEquals(new LinkEvent(graph.getLink(1L, 12L)), path13.get(0));
- assertEquals(new LinkEvent(graph.getLink(2L, 23L)), path13.get(1));
- }
- else {
- assertEquals(new LinkEvent(graph.getLink(1L, 14L)), path13.get(0));
- assertEquals(new LinkEvent(graph.getLink(4L, 43L)), path13.get(1));
- }
+ assertNotNull(path13);
+ assertEquals(2, path13.size());
+ if (path13.get(0).getDst().getDpid() == 2L) {
+ assertEquals(new LinkEvent(graph.getLink(1L, 12L)), path13.get(0));
+ assertEquals(new LinkEvent(graph.getLink(2L, 23L)), path13.get(1));
+ } else {
+ assertEquals(new LinkEvent(graph.getLink(1L, 14L)), path13.get(0));
+ assertEquals(new LinkEvent(graph.getLink(4L, 43L)), path13.get(1));
+ }
- assertNotNull(path14);
- assertEquals(1, path14.size());
- assertEquals(new LinkEvent(graph.getLink(1L, 14L)), path14.get(0));
- }
+ assertNotNull(path14);
+ assertEquals(1, path14.size());
+ assertEquals(new LinkEvent(graph.getLink(1L, 14L)), path14.get(0));
+ }
- @Test
- public void testGetPathNull() {
- MockNetworkGraph graph = new MockNetworkGraph();
- graph.createSampleTopology1();
- graph.removeLink(1L, 12L, 2L, 21L);
- graph.removeLink(1L, 14L, 4L, 41L);
- // now, there is no path from switch 1, but to switch1
+ @Test
+ public void testGetPathNull() {
+ MockNetworkGraph graph = new MockNetworkGraph();
+ graph.createSampleTopology1();
+ graph.removeLink(1L, 12L, 2L, 21L);
+ graph.removeLink(1L, 14L, 4L, 41L);
+ // now, there is no path from switch 1, but to switch1
- ConstrainedBFSTree tree1 = new ConstrainedBFSTree(graph.getSwitch(1L));
- Path path12 = tree1.getPath(graph.getSwitch(2L));
- Path path13 = tree1.getPath(graph.getSwitch(3L));
- Path path14 = tree1.getPath(graph.getSwitch(4L));
+ ConstrainedBFSTree tree1 = new ConstrainedBFSTree(graph.getSwitch(1L));
+ Path path12 = tree1.getPath(graph.getSwitch(2L));
+ Path path13 = tree1.getPath(graph.getSwitch(3L));
+ Path path14 = tree1.getPath(graph.getSwitch(4L));
- ConstrainedBFSTree tree2 = new ConstrainedBFSTree(graph.getSwitch(2L));
- Path path21 = tree2.getPath(graph.getSwitch(1L));
+ ConstrainedBFSTree tree2 = new ConstrainedBFSTree(graph.getSwitch(2L));
+ Path path21 = tree2.getPath(graph.getSwitch(1L));
- assertNull(path12);
- assertNull(path13);
- assertNull(path14);
- assertNotNull(path21);
- assertEquals(1, path21.size());
- assertEquals(new LinkEvent(graph.getLink(2L, 21L)), path21.get(0));
- }
+ assertNull(path12);
+ assertNull(path13);
+ assertNull(path14);
+ assertNotNull(path21);
+ assertEquals(1, path21.size());
+ assertEquals(new LinkEvent(graph.getLink(2L, 21L)), path21.get(0));
+ }
- @Test
- public void testGetConstrainedPath() {
- MockNetworkGraph graph = new MockNetworkGraph();
- graph.createSampleTopology1();
- PathIntentMap intents = new PathIntentMap();
- IntentOperationList intentOps = new IntentOperationList();
+ @Test
+ public void testGetConstrainedPath() {
+ MockNetworkGraph graph = new MockNetworkGraph();
+ graph.createSampleTopology1();
+ PathIntentMap intents = new PathIntentMap();
+ IntentOperationList intentOps = new IntentOperationList();
- // create constrained shortest path intents that have the same source destination ports
- ConstrainedShortestPathIntent intent1 = new ConstrainedShortestPathIntent(
- "1", 1L, LOCAL_PORT, 0x111L, 2L, LOCAL_PORT, 0x222L, 600.0);
- ConstrainedShortestPathIntent intent2 = new ConstrainedShortestPathIntent(
- "2", 1L, LOCAL_PORT, 0x333L, 2L, LOCAL_PORT, 0x444L, 600.0);
+ // create constrained shortest path intents that have the same source destination ports
+ ConstrainedShortestPathIntent intent1 = new ConstrainedShortestPathIntent(
+ "1", 1L, LOCAL_PORT, 0x111L, 2L, LOCAL_PORT, 0x222L, 600.0);
+ ConstrainedShortestPathIntent intent2 = new ConstrainedShortestPathIntent(
+ "2", 1L, LOCAL_PORT, 0x333L, 2L, LOCAL_PORT, 0x444L, 600.0);
- // calculate path of the intent1
- ConstrainedBFSTree tree = new ConstrainedBFSTree(graph.getSwitch(1L), intents, 600.0);
- Path path1 = tree.getPath(graph.getSwitch(2L));
+ // calculate path of the intent1
+ ConstrainedBFSTree tree = new ConstrainedBFSTree(graph.getSwitch(1L), intents, 600.0);
+ Path path1 = tree.getPath(graph.getSwitch(2L));
- assertNotNull(path1);
- assertEquals(1, path1.size());
- assertEquals(new LinkEvent(graph.getLink(1L, 12L)), path1.get(0));
+ assertNotNull(path1);
+ assertEquals(1, path1.size());
+ assertEquals(new LinkEvent(graph.getLink(1L, 12L)), path1.get(0));
- PathIntent pathIntent1 = new PathIntent("pi1", path1, 600.0, intent1);
- intentOps.add(Operator.ADD, pathIntent1);
- intents.executeOperations(intentOps);
+ PathIntent pathIntent1 = new PathIntent("pi1", path1, 600.0, intent1);
+ intentOps.add(Operator.ADD, pathIntent1);
+ intents.executeOperations(intentOps);
- // calculate path of the intent2
- tree = new ConstrainedBFSTree(graph.getSwitch(1L), intents, 600.0);
- Path path2 = tree.getPath(graph.getSwitch(2L));
+ // calculate path of the intent2
+ tree = new ConstrainedBFSTree(graph.getSwitch(1L), intents, 600.0);
+ Path path2 = tree.getPath(graph.getSwitch(2L));
- assertNotNull(path2);
- assertEquals(2, path2.size());
- assertEquals(new LinkEvent(graph.getLink(1L, 14L)), path2.get(0));
- assertEquals(new LinkEvent(graph.getLink(4L, 42L)), path2.get(1));
+ assertNotNull(path2);
+ assertEquals(2, path2.size());
+ assertEquals(new LinkEvent(graph.getLink(1L, 14L)), path2.get(0));
+ assertEquals(new LinkEvent(graph.getLink(4L, 42L)), path2.get(1));
- PathIntent pathIntent2 = new PathIntent("pi2", path2, 600.0, intent2);
- intentOps.add(Operator.ADD, pathIntent2);
- intents.executeOperations(intentOps);
+ PathIntent pathIntent2 = new PathIntent("pi2", path2, 600.0, intent2);
+ intentOps.add(Operator.ADD, pathIntent2);
+ intents.executeOperations(intentOps);
- // calculate path of the intent3
- tree = new ConstrainedBFSTree(graph.getSwitch(1L), intents, 600.0);
- Path path3 = tree.getPath(graph.getSwitch(2L));
+ // calculate path of the intent3
+ tree = new ConstrainedBFSTree(graph.getSwitch(1L), intents, 600.0);
+ Path path3 = tree.getPath(graph.getSwitch(2L));
- assertNull(path3);
- }
+ assertNull(path3);
+ }
}
\ No newline at end of file
diff --git a/src/test/java/net/onrc/onos/core/intent/ConstrainedShortestPathIntentTest.java b/src/test/java/net/onrc/onos/core/intent/ConstrainedShortestPathIntentTest.java
index e7df8d5..6b13f6d 100644
--- a/src/test/java/net/onrc/onos/core/intent/ConstrainedShortestPathIntentTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/ConstrainedShortestPathIntentTest.java
@@ -1,6 +1,7 @@
package net.onrc.onos.core.intent;
import static org.junit.Assert.assertEquals;
+
import net.onrc.onos.core.util.serializers.KryoFactory;
import org.junit.After;
@@ -15,52 +16,52 @@
* @author Toshio Koide (t-koide@onlab.us)
*/
public class ConstrainedShortestPathIntentTest {
- @Before
- public void setUp() throws Exception {
- }
+ @Before
+ public void setUp() throws Exception {
+ }
- @After
- public void tearDown() throws Exception {
- }
+ @After
+ public void tearDown() throws Exception {
+ }
- @Test
- public void testCreate() {
- ConstrainedShortestPathIntent intent1 =
- new ConstrainedShortestPathIntent("1", 2L, 3L, 4L, 5L, 6L, 7L, 1000.0);
+ @Test
+ public void testCreate() {
+ ConstrainedShortestPathIntent intent1 =
+ new ConstrainedShortestPathIntent("1", 2L, 3L, 4L, 5L, 6L, 7L, 1000.0);
- assertEquals("1", intent1.getId());
- assertEquals(2L, intent1.getSrcSwitchDpid());
- assertEquals(3L, intent1.getSrcPortNumber());
- assertEquals(4L, intent1.getSrcMac());
- assertEquals(5L, intent1.getDstSwitchDpid());
- assertEquals(6L, intent1.getDstPortNumber());
- assertEquals(7L, intent1.getDstMac());
- assertEquals(1000.0, intent1.getBandwidth(), 0.0);
- }
+ assertEquals("1", intent1.getId());
+ assertEquals(2L, intent1.getSrcSwitchDpid());
+ assertEquals(3L, intent1.getSrcPortNumber());
+ assertEquals(4L, intent1.getSrcMac());
+ assertEquals(5L, intent1.getDstSwitchDpid());
+ assertEquals(6L, intent1.getDstPortNumber());
+ assertEquals(7L, intent1.getDstMac());
+ assertEquals(1000.0, intent1.getBandwidth(), 0.0);
+ }
- @Test
- public void testKryo() {
- KryoFactory factory = new KryoFactory();
- Kryo kryo = factory.newKryo();
- Output output = new Output(1000);
+ @Test
+ public void testKryo() {
+ KryoFactory factory = new KryoFactory();
+ Kryo kryo = factory.newKryo();
+ Output output = new Output(1000);
- ConstrainedShortestPathIntent intent1 =
- new ConstrainedShortestPathIntent("1", 2L, 3L, 4L, 5L, 6L, 7L, 1000.0);
- kryo.writeObject(output, intent1);
+ ConstrainedShortestPathIntent intent1 =
+ new ConstrainedShortestPathIntent("1", 2L, 3L, 4L, 5L, 6L, 7L, 1000.0);
+ kryo.writeObject(output, intent1);
- output.close();
- byte bytes[] = output.toBytes();
+ output.close();
+ byte bytes[] = output.toBytes();
- Input input = new Input(bytes);
- ConstrainedShortestPathIntent intent2 = kryo.readObject(input, ConstrainedShortestPathIntent.class);
- input.close();
- assertEquals("1", intent2.getId());
- assertEquals(2L, intent2.getSrcSwitchDpid());
- assertEquals(3L, intent2.getSrcPortNumber());
- assertEquals(4L, intent2.getSrcMac());
- assertEquals(5L, intent2.getDstSwitchDpid());
- assertEquals(6L, intent2.getDstPortNumber());
- assertEquals(7L, intent2.getDstMac());
- assertEquals(1000.0, intent2.getBandwidth(), 0.0);
- }
+ Input input = new Input(bytes);
+ ConstrainedShortestPathIntent intent2 = kryo.readObject(input, ConstrainedShortestPathIntent.class);
+ input.close();
+ assertEquals("1", intent2.getId());
+ assertEquals(2L, intent2.getSrcSwitchDpid());
+ assertEquals(3L, intent2.getSrcPortNumber());
+ assertEquals(4L, intent2.getSrcMac());
+ assertEquals(5L, intent2.getDstSwitchDpid());
+ assertEquals(6L, intent2.getDstPortNumber());
+ assertEquals(7L, intent2.getDstMac());
+ assertEquals(1000.0, intent2.getBandwidth(), 0.0);
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/intent/ErrorIntentTest.java b/src/test/java/net/onrc/onos/core/intent/ErrorIntentTest.java
index 81f8991..82b6061 100644
--- a/src/test/java/net/onrc/onos/core/intent/ErrorIntentTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/ErrorIntentTest.java
@@ -1,6 +1,7 @@
package net.onrc.onos.core.intent;
import static org.junit.Assert.assertEquals;
+
import net.onrc.onos.core.intent.ErrorIntent.ErrorType;
import org.junit.After;
@@ -9,6 +10,7 @@
/**
* Unit tests for the ErrorIntent class.
+ *
* @author Toshio Koide (t-koide@onlab.us)
*/
public class ErrorIntentTest {
diff --git a/src/test/java/net/onrc/onos/core/intent/IntentMapTest.java b/src/test/java/net/onrc/onos/core/intent/IntentMapTest.java
index 46cfff1..5a6c9fa 100644
--- a/src/test/java/net/onrc/onos/core/intent/IntentMapTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/IntentMapTest.java
@@ -3,6 +3,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
+
import net.onrc.onos.core.intent.ErrorIntent.ErrorType;
import net.onrc.onos.core.intent.Intent.IntentState;
import net.onrc.onos.core.intent.IntentMap.ChangedEventType;
@@ -18,221 +19,221 @@
*/
public class IntentMapTest {
- @Before
- public void setUp() throws Exception {
- }
+ @Before
+ public void setUp() throws Exception {
+ }
- @After
- public void tearDown() throws Exception {
- }
+ @After
+ public void tearDown() throws Exception {
+ }
- @Test
- public void testCreate() {
- IntentMap intents = new IntentMap();
- assertEquals(0, intents.getAllIntents().size());
- }
+ @Test
+ public void testCreate() {
+ IntentMap intents = new IntentMap();
+ assertEquals(0, intents.getAllIntents().size());
+ }
- @Test
- public void testChangedEventCreate() {
- IntentMap intents = new IntentMap();
- IntentMap.ChangedEvent event = intents.new ChangedEvent(
- ChangedEventType.ADDED,
- new Intent("id1"));
- assertEquals(ChangedEventType.ADDED, event.eventType);
- assertEquals("id1", event.intent.getId());
- }
+ @Test
+ public void testChangedEventCreate() {
+ IntentMap intents = new IntentMap();
+ IntentMap.ChangedEvent event = intents.new ChangedEvent(
+ ChangedEventType.ADDED,
+ new Intent("id1"));
+ assertEquals(ChangedEventType.ADDED, event.eventType);
+ assertEquals("id1", event.intent.getId());
+ }
- @Test
- public void testAddOperations() {
- IntentMap intents = new IntentMap();
- assertEquals(0, intents.getAllIntents().size());
+ @Test
+ public void testAddOperations() {
+ IntentMap intents = new IntentMap();
+ assertEquals(0, intents.getAllIntents().size());
- Intent intent1 = new Intent("1");
- ShortestPathIntent intent2 =
- new ShortestPathIntent("2", 21L, 22L, 23L, 24L, 25L, 26L);
- ConstrainedShortestPathIntent intent3 =
- new ConstrainedShortestPathIntent("3", 31L, 32L, 33L, 34L, 35L, 36L, 1000.0);
+ Intent intent1 = new Intent("1");
+ ShortestPathIntent intent2 =
+ new ShortestPathIntent("2", 21L, 22L, 23L, 24L, 25L, 26L);
+ ConstrainedShortestPathIntent intent3 =
+ new ConstrainedShortestPathIntent("3", 31L, 32L, 33L, 34L, 35L, 36L, 1000.0);
- IntentOperationList operations = new IntentOperationList();
- operations.add(Operator.ADD, intent1);
- operations.add(Operator.ADD, intent2);
- operations.add(Operator.ADD, intent3);
- assertEquals(3, operations.size());
+ IntentOperationList operations = new IntentOperationList();
+ operations.add(Operator.ADD, intent1);
+ operations.add(Operator.ADD, intent2);
+ operations.add(Operator.ADD, intent3);
+ assertEquals(3, operations.size());
- intents.executeOperations(operations);
- assertEquals(3, intents.getAllIntents().size());
- assertSame(intent1, intents.getIntent("1"));
- assertSame(intent2, intents.getIntent("2"));
- assertSame(intent3, intents.getIntent("3"));
- }
+ intents.executeOperations(operations);
+ assertEquals(3, intents.getAllIntents().size());
+ assertSame(intent1, intents.getIntent("1"));
+ assertSame(intent2, intents.getIntent("2"));
+ assertSame(intent3, intents.getIntent("3"));
+ }
- @Test
- public void testAddOperationsOverwrite() {
- IntentMap intents = new IntentMap();
+ @Test
+ public void testAddOperationsOverwrite() {
+ IntentMap intents = new IntentMap();
- Intent intent1 = new Intent("1");
- Intent intent2 = new Intent("2");
- Intent intent3 = new Intent("3");
- Intent intent4 = new Intent("1");
- Intent intent5 = new Intent("2");
- Intent intent6 = new Intent("4");
+ Intent intent1 = new Intent("1");
+ Intent intent2 = new Intent("2");
+ Intent intent3 = new Intent("3");
+ Intent intent4 = new Intent("1");
+ Intent intent5 = new Intent("2");
+ Intent intent6 = new Intent("4");
- IntentOperationList operations = new IntentOperationList();
- operations.add(Operator.ADD, intent1);
- operations.add(Operator.ADD, intent2);
- operations.add(Operator.ADD, intent3);
- assertEquals(3, operations.size());
+ IntentOperationList operations = new IntentOperationList();
+ operations.add(Operator.ADD, intent1);
+ operations.add(Operator.ADD, intent2);
+ operations.add(Operator.ADD, intent3);
+ assertEquals(3, operations.size());
- intents.executeOperations(operations);
- assertEquals(3, intents.getAllIntents().size());
- assertSame(intent1, intents.getIntent("1"));
- assertSame(intent2, intents.getIntent("2"));
- assertSame(intent3, intents.getIntent("3"));
+ intents.executeOperations(operations);
+ assertEquals(3, intents.getAllIntents().size());
+ assertSame(intent1, intents.getIntent("1"));
+ assertSame(intent2, intents.getIntent("2"));
+ assertSame(intent3, intents.getIntent("3"));
- operations.clear();
- operations.add(Operator.ADD, intent4);
- operations.add(Operator.ADD, intent5);
- operations.add(Operator.ADD, intent6);
- assertEquals(3, operations.size());
+ operations.clear();
+ operations.add(Operator.ADD, intent4);
+ operations.add(Operator.ADD, intent5);
+ operations.add(Operator.ADD, intent6);
+ assertEquals(3, operations.size());
- intents.executeOperations(operations);
- assertEquals(4, intents.getAllIntents().size());
- assertSame(intent4, intents.getIntent("1"));
- assertSame(intent5, intents.getIntent("2"));
- assertSame(intent3, intents.getIntent("3"));
- assertSame(intent6, intents.getIntent("4"));
- }
+ intents.executeOperations(operations);
+ assertEquals(4, intents.getAllIntents().size());
+ assertSame(intent4, intents.getIntent("1"));
+ assertSame(intent5, intents.getIntent("2"));
+ assertSame(intent3, intents.getIntent("3"));
+ assertSame(intent6, intents.getIntent("4"));
+ }
- @Test
- public void testRemoveOperation() {
- IntentMap intents = new IntentMap();
+ @Test
+ public void testRemoveOperation() {
+ IntentMap intents = new IntentMap();
- Intent intent1 = new Intent("1");
- ShortestPathIntent intent2 =
- new ShortestPathIntent("2", 21L, 22L, 23L, 24L, 25L, 26L);
- ConstrainedShortestPathIntent intent3 =
- new ConstrainedShortestPathIntent("3", 31L, 32L, 33L, 34L, 35L, 36L, 1000.0);
+ Intent intent1 = new Intent("1");
+ ShortestPathIntent intent2 =
+ new ShortestPathIntent("2", 21L, 22L, 23L, 24L, 25L, 26L);
+ ConstrainedShortestPathIntent intent3 =
+ new ConstrainedShortestPathIntent("3", 31L, 32L, 33L, 34L, 35L, 36L, 1000.0);
- IntentOperationList operations = new IntentOperationList();
- operations.add(Operator.ADD, intent1);
- operations.add(Operator.ADD, intent2);
- operations.add(Operator.ADD, intent3);
- intents.executeOperations(operations);
- assertEquals(3, intents.getAllIntents().size());
- assertSame(intent1, intents.getIntent("1"));
- assertSame(intent2, intents.getIntent("2"));
- assertSame(intent3, intents.getIntent("3"));
+ IntentOperationList operations = new IntentOperationList();
+ operations.add(Operator.ADD, intent1);
+ operations.add(Operator.ADD, intent2);
+ operations.add(Operator.ADD, intent3);
+ intents.executeOperations(operations);
+ assertEquals(3, intents.getAllIntents().size());
+ assertSame(intent1, intents.getIntent("1"));
+ assertSame(intent2, intents.getIntent("2"));
+ assertSame(intent3, intents.getIntent("3"));
- operations.clear();
- operations.add(Operator.REMOVE, new Intent("1"));
- operations.add(Operator.REMOVE, new Intent("3"));
- intents.executeOperations(operations);
- assertEquals(3, intents.getAllIntents().size());
- assertSame(intent1, intents.getIntent("1"));
- assertSame(intent2, intents.getIntent("2"));
- assertSame(intent3, intents.getIntent("3"));
- assertEquals(IntentState.DEL_REQ, intents.getIntent("1").getState());
- assertEquals(IntentState.CREATED, intents.getIntent("2").getState());
- assertEquals(IntentState.DEL_REQ, intents.getIntent("3").getState());
- }
+ operations.clear();
+ operations.add(Operator.REMOVE, new Intent("1"));
+ operations.add(Operator.REMOVE, new Intent("3"));
+ intents.executeOperations(operations);
+ assertEquals(3, intents.getAllIntents().size());
+ assertSame(intent1, intents.getIntent("1"));
+ assertSame(intent2, intents.getIntent("2"));
+ assertSame(intent3, intents.getIntent("3"));
+ assertEquals(IntentState.DEL_REQ, intents.getIntent("1").getState());
+ assertEquals(IntentState.CREATED, intents.getIntent("2").getState());
+ assertEquals(IntentState.DEL_REQ, intents.getIntent("3").getState());
+ }
- @Test
- public void testErrorOperation() {
- IntentMap intents = new IntentMap();
- IntentOperationList operations = new IntentOperationList();
- operations.add(Operator.ADD, new Intent("1", IntentState.CREATED));
- operations.add(Operator.ADD, new Intent("2", IntentState.INST_REQ));
- operations.add(Operator.ADD, new Intent("3", IntentState.INST_ACK));
- operations.add(Operator.ADD, new Intent("4", IntentState.INST_NACK));
- operations.add(Operator.ADD, new Intent("5", IntentState.REROUTE_REQ));
- operations.add(Operator.ADD, new Intent("6", IntentState.DEL_REQ));
- operations.add(Operator.ADD, new Intent("7", IntentState.DEL_ACK));
- operations.add(Operator.ADD, new Intent("8", IntentState.DEL_PENDING));
- intents.executeOperations(operations);
- assertEquals(8, intents.getAllIntents().size());
+ @Test
+ public void testErrorOperation() {
+ IntentMap intents = new IntentMap();
+ IntentOperationList operations = new IntentOperationList();
+ operations.add(Operator.ADD, new Intent("1", IntentState.CREATED));
+ operations.add(Operator.ADD, new Intent("2", IntentState.INST_REQ));
+ operations.add(Operator.ADD, new Intent("3", IntentState.INST_ACK));
+ operations.add(Operator.ADD, new Intent("4", IntentState.INST_NACK));
+ operations.add(Operator.ADD, new Intent("5", IntentState.REROUTE_REQ));
+ operations.add(Operator.ADD, new Intent("6", IntentState.DEL_REQ));
+ operations.add(Operator.ADD, new Intent("7", IntentState.DEL_ACK));
+ operations.add(Operator.ADD, new Intent("8", IntentState.DEL_PENDING));
+ intents.executeOperations(operations);
+ assertEquals(8, intents.getAllIntents().size());
- operations.clear();
- operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("1")));
- operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("2")));
- operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("3")));
- operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("4")));
- operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("5")));
- operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("6")));
- operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("7")));
- operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("8")));
- intents.executeOperations(operations);
+ operations.clear();
+ operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("1")));
+ operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("2")));
+ operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("3")));
+ operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("4")));
+ operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("5")));
+ operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("6")));
+ operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("7")));
+ operations.add(Operator.ERROR, new ErrorIntent(ErrorType.PATH_NOT_FOUND, "", new Intent("8")));
+ intents.executeOperations(operations);
- assertEquals(IntentState.INST_NACK, intents.getIntent("1").getState());
- assertEquals(IntentState.INST_NACK, intents.getIntent("2").getState());
- assertEquals(IntentState.INST_NACK, intents.getIntent("3").getState());
- assertEquals(IntentState.INST_NACK, intents.getIntent("4").getState());
- assertEquals(IntentState.INST_NACK, intents.getIntent("5").getState());
- assertEquals(IntentState.DEL_PENDING, intents.getIntent("6").getState());
- assertEquals(IntentState.DEL_ACK, intents.getIntent("7").getState());
- assertEquals(IntentState.DEL_PENDING, intents.getIntent("8").getState());
- }
+ assertEquals(IntentState.INST_NACK, intents.getIntent("1").getState());
+ assertEquals(IntentState.INST_NACK, intents.getIntent("2").getState());
+ assertEquals(IntentState.INST_NACK, intents.getIntent("3").getState());
+ assertEquals(IntentState.INST_NACK, intents.getIntent("4").getState());
+ assertEquals(IntentState.INST_NACK, intents.getIntent("5").getState());
+ assertEquals(IntentState.DEL_PENDING, intents.getIntent("6").getState());
+ assertEquals(IntentState.DEL_ACK, intents.getIntent("7").getState());
+ assertEquals(IntentState.DEL_PENDING, intents.getIntent("8").getState());
+ }
- @Test
- public void testPurge() {
- IntentMap intents = new IntentMap();
- IntentOperationList operations = new IntentOperationList();
- operations.add(Operator.ADD, new Intent("1", IntentState.CREATED));
- operations.add(Operator.ADD, new Intent("2", IntentState.INST_REQ));
- operations.add(Operator.ADD, new Intent("3", IntentState.INST_ACK));
- operations.add(Operator.ADD, new Intent("4", IntentState.INST_NACK));
- operations.add(Operator.ADD, new Intent("5", IntentState.REROUTE_REQ));
- operations.add(Operator.ADD, new Intent("6", IntentState.DEL_REQ));
- operations.add(Operator.ADD, new Intent("7", IntentState.DEL_ACK));
- operations.add(Operator.ADD, new Intent("8", IntentState.DEL_PENDING));
- intents.executeOperations(operations);
- assertEquals(8, intents.getAllIntents().size());
+ @Test
+ public void testPurge() {
+ IntentMap intents = new IntentMap();
+ IntentOperationList operations = new IntentOperationList();
+ operations.add(Operator.ADD, new Intent("1", IntentState.CREATED));
+ operations.add(Operator.ADD, new Intent("2", IntentState.INST_REQ));
+ operations.add(Operator.ADD, new Intent("3", IntentState.INST_ACK));
+ operations.add(Operator.ADD, new Intent("4", IntentState.INST_NACK));
+ operations.add(Operator.ADD, new Intent("5", IntentState.REROUTE_REQ));
+ operations.add(Operator.ADD, new Intent("6", IntentState.DEL_REQ));
+ operations.add(Operator.ADD, new Intent("7", IntentState.DEL_ACK));
+ operations.add(Operator.ADD, new Intent("8", IntentState.DEL_PENDING));
+ intents.executeOperations(operations);
+ assertEquals(8, intents.getAllIntents().size());
- intents.purge();
+ intents.purge();
- assertEquals(6, intents.getAllIntents().size());
- assertEquals("1", intents.getIntent("1").getId());
- assertEquals("2", intents.getIntent("2").getId());
- assertEquals("3", intents.getIntent("3").getId());
- assertNull(intents.getIntent("4"));
- assertEquals("5", intents.getIntent("5").getId());
- assertEquals("6", intents.getIntent("6").getId());
- assertNull("7", intents.getIntent("7"));
- assertEquals("8", intents.getIntent("8").getId());
- }
+ assertEquals(6, intents.getAllIntents().size());
+ assertEquals("1", intents.getIntent("1").getId());
+ assertEquals("2", intents.getIntent("2").getId());
+ assertEquals("3", intents.getIntent("3").getId());
+ assertNull(intents.getIntent("4"));
+ assertEquals("5", intents.getIntent("5").getId());
+ assertEquals("6", intents.getIntent("6").getId());
+ assertNull("7", intents.getIntent("7"));
+ assertEquals("8", intents.getIntent("8").getId());
+ }
- @Test
- public void testChangeStates() {
- IntentMap intents = new IntentMap();
- IntentOperationList operations = new IntentOperationList();
- operations.add(Operator.ADD, new Intent("1", IntentState.CREATED));
- operations.add(Operator.ADD, new Intent("2", IntentState.INST_REQ));
- operations.add(Operator.ADD, new Intent("3", IntentState.INST_ACK));
- operations.add(Operator.ADD, new Intent("4", IntentState.INST_NACK));
- operations.add(Operator.ADD, new Intent("5", IntentState.REROUTE_REQ));
- operations.add(Operator.ADD, new Intent("6", IntentState.DEL_REQ));
- operations.add(Operator.ADD, new Intent("7", IntentState.DEL_ACK));
- operations.add(Operator.ADD, new Intent("8", IntentState.DEL_PENDING));
- intents.executeOperations(operations);
- assertEquals(8, intents.getAllIntents().size());
+ @Test
+ public void testChangeStates() {
+ IntentMap intents = new IntentMap();
+ IntentOperationList operations = new IntentOperationList();
+ operations.add(Operator.ADD, new Intent("1", IntentState.CREATED));
+ operations.add(Operator.ADD, new Intent("2", IntentState.INST_REQ));
+ operations.add(Operator.ADD, new Intent("3", IntentState.INST_ACK));
+ operations.add(Operator.ADD, new Intent("4", IntentState.INST_NACK));
+ operations.add(Operator.ADD, new Intent("5", IntentState.REROUTE_REQ));
+ operations.add(Operator.ADD, new Intent("6", IntentState.DEL_REQ));
+ operations.add(Operator.ADD, new Intent("7", IntentState.DEL_ACK));
+ operations.add(Operator.ADD, new Intent("8", IntentState.DEL_PENDING));
+ intents.executeOperations(operations);
+ assertEquals(8, intents.getAllIntents().size());
- IntentStateList states = new IntentStateList();
- states.put("8", IntentState.CREATED);
- states.put("1", IntentState.INST_REQ);
- states.put("2", IntentState.INST_ACK);
- states.put("3", IntentState.INST_NACK);
- states.put("4", IntentState.REROUTE_REQ);
- states.put("5", IntentState.DEL_REQ);
- states.put("6", IntentState.DEL_ACK);
- states.put("7", IntentState.DEL_PENDING);
- intents.changeStates(states);
+ IntentStateList states = new IntentStateList();
+ states.put("8", IntentState.CREATED);
+ states.put("1", IntentState.INST_REQ);
+ states.put("2", IntentState.INST_ACK);
+ states.put("3", IntentState.INST_NACK);
+ states.put("4", IntentState.REROUTE_REQ);
+ states.put("5", IntentState.DEL_REQ);
+ states.put("6", IntentState.DEL_ACK);
+ states.put("7", IntentState.DEL_PENDING);
+ intents.changeStates(states);
- assertEquals(IntentState.INST_REQ, intents.getIntent("1").getState());
- assertEquals(IntentState.INST_ACK, intents.getIntent("2").getState());
- assertEquals(IntentState.INST_NACK, intents.getIntent("3").getState());
- assertEquals(IntentState.REROUTE_REQ, intents.getIntent("4").getState());
- assertEquals(IntentState.DEL_REQ, intents.getIntent("5").getState());
- assertEquals(IntentState.DEL_ACK, intents.getIntent("6").getState());
- assertEquals(IntentState.DEL_PENDING, intents.getIntent("7").getState());
- assertEquals(IntentState.CREATED, intents.getIntent("8").getState());
- }
+ assertEquals(IntentState.INST_REQ, intents.getIntent("1").getState());
+ assertEquals(IntentState.INST_ACK, intents.getIntent("2").getState());
+ assertEquals(IntentState.INST_NACK, intents.getIntent("3").getState());
+ assertEquals(IntentState.REROUTE_REQ, intents.getIntent("4").getState());
+ assertEquals(IntentState.DEL_REQ, intents.getIntent("5").getState());
+ assertEquals(IntentState.DEL_ACK, intents.getIntent("6").getState());
+ assertEquals(IntentState.DEL_PENDING, intents.getIntent("7").getState());
+ assertEquals(IntentState.CREATED, intents.getIntent("8").getState());
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/intent/IntentOperationListTest.java b/src/test/java/net/onrc/onos/core/intent/IntentOperationListTest.java
index 711cef8..2d09a8d 100644
--- a/src/test/java/net/onrc/onos/core/intent/IntentOperationListTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/IntentOperationListTest.java
@@ -1,6 +1,7 @@
package net.onrc.onos.core.intent;
import static org.junit.Assert.assertEquals;
+
import net.onrc.onos.core.topology.LinkEvent;
import net.onrc.onos.core.topology.Path;
import net.onrc.onos.core.util.serializers.KryoFactory;
@@ -18,53 +19,53 @@
*/
public class IntentOperationListTest {
- @Before
- public void setUp() throws Exception {
- }
+ @Before
+ public void setUp() throws Exception {
+ }
- @After
- public void tearDown() throws Exception {
- }
+ @After
+ public void tearDown() throws Exception {
+ }
- @Test
- public void test() {
- IntentOperationList opList = new IntentOperationList();
+ @Test
+ public void test() {
+ IntentOperationList opList = new IntentOperationList();
- ConstrainedShortestPathIntent cspIntent1 =
- new ConstrainedShortestPathIntent("1", 2L, 3L, 4L, 5L, 6L, 7L, 1000.0);
+ ConstrainedShortestPathIntent cspIntent1 =
+ new ConstrainedShortestPathIntent("1", 2L, 3L, 4L, 5L, 6L, 7L, 1000.0);
- Path path = new Path();
- path.add(new LinkEvent(1L, 2L, 3L, 4L));
- path.add(new LinkEvent(5L, 6L, 7L, 8L));
- path.add(new LinkEvent(9L, 0L, 1L, 2L));
+ Path path = new Path();
+ path.add(new LinkEvent(1L, 2L, 3L, 4L));
+ path.add(new LinkEvent(5L, 6L, 7L, 8L));
+ path.add(new LinkEvent(9L, 0L, 1L, 2L));
- PathIntent pathIntent1 = new PathIntent("11", path, 123.45, cspIntent1);
- opList.add(IntentOperation.Operator.ADD, pathIntent1);
- opList.add(IntentOperation.Operator.REMOVE, new Intent("22"));
+ PathIntent pathIntent1 = new PathIntent("11", path, 123.45, cspIntent1);
+ opList.add(IntentOperation.Operator.ADD, pathIntent1);
+ opList.add(IntentOperation.Operator.REMOVE, new Intent("22"));
- KryoFactory factory = new KryoFactory();
- Kryo kryo = factory.newKryo();
- Output output = new Output(1024);
- kryo.writeObject(output, opList);
- output.close();
+ KryoFactory factory = new KryoFactory();
+ Kryo kryo = factory.newKryo();
+ Output output = new Output(1024);
+ kryo.writeObject(output, opList);
+ output.close();
- byte[] bytes = output.toBytes();
+ byte[] bytes = output.toBytes();
- Input input = new Input(bytes);
- IntentOperationList rcvOpList = kryo.readObject(input, IntentOperationList.class);
+ Input input = new Input(bytes);
+ IntentOperationList rcvOpList = kryo.readObject(input, IntentOperationList.class);
- assertEquals(2, rcvOpList.size());
+ assertEquals(2, rcvOpList.size());
- IntentOperation op1 = rcvOpList.get(0);
- IntentOperation op2 = rcvOpList.get(1);
+ IntentOperation op1 = rcvOpList.get(0);
+ IntentOperation op2 = rcvOpList.get(1);
- assertEquals(IntentOperation.Operator.ADD, op1.operator);
- PathIntent intent1 = (PathIntent) op1.intent;
- assertEquals("11", intent1.getId());
- assertEquals(3, intent1.getPath().size());
+ assertEquals(IntentOperation.Operator.ADD, op1.operator);
+ PathIntent intent1 = (PathIntent) op1.intent;
+ assertEquals("11", intent1.getId());
+ assertEquals(3, intent1.getPath().size());
- assertEquals(IntentOperation.Operator.REMOVE, op2.operator);
- Intent intent2 = op2.intent;
- assertEquals("22", intent2.getId());
- }
+ assertEquals(IntentOperation.Operator.REMOVE, op2.operator);
+ Intent intent2 = op2.intent;
+ assertEquals("22", intent2.getId());
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/intent/IntentOperationTest.java b/src/test/java/net/onrc/onos/core/intent/IntentOperationTest.java
index 5092f16..6519508 100644
--- a/src/test/java/net/onrc/onos/core/intent/IntentOperationTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/IntentOperationTest.java
@@ -1,6 +1,7 @@
package net.onrc.onos.core.intent;
import static org.junit.Assert.assertEquals;
+
import net.onrc.onos.core.intent.IntentOperation.Operator;
import org.junit.After;
@@ -9,6 +10,7 @@
/**
* Unit tests for the IntentOperation class.
+ *
* @author Toshio Koide (t-koide@onlab.us)
*/
public class IntentOperationTest {
diff --git a/src/test/java/net/onrc/onos/core/intent/IntentTest.java b/src/test/java/net/onrc/onos/core/intent/IntentTest.java
index d63ddea..64139a4 100644
--- a/src/test/java/net/onrc/onos/core/intent/IntentTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/IntentTest.java
@@ -12,68 +12,68 @@
* @author Toshio Koide (t-koide@onlab.us)
*/
public class IntentTest {
- @Test
- public void testCreateIntent() {
- Intent intent = new Intent("id");
- assertEquals("id", intent.getId());
- assertEquals(Intent.IntentState.CREATED, intent.getState());
- }
+ @Test
+ public void testCreateIntent() {
+ Intent intent = new Intent("id");
+ assertEquals("id", intent.getId());
+ assertEquals(Intent.IntentState.CREATED, intent.getState());
+ }
- @Test
- public void testCreateIntentWithState() {
- Intent intent = new Intent("id", Intent.IntentState.INST_REQ);
- assertEquals("id", intent.getId());
- assertEquals(Intent.IntentState.INST_REQ, intent.getState());
- }
+ @Test
+ public void testCreateIntentWithState() {
+ Intent intent = new Intent("id", Intent.IntentState.INST_REQ);
+ assertEquals("id", intent.getId());
+ assertEquals(Intent.IntentState.INST_REQ, intent.getState());
+ }
- @Test
- public void testSetState() {
- Intent intent = new Intent("id");
+ @Test
+ public void testSetState() {
+ Intent intent = new Intent("id");
- intent.setState(Intent.IntentState.INST_REQ);
- assertEquals(Intent.IntentState.INST_REQ, intent.getState());
+ intent.setState(Intent.IntentState.INST_REQ);
+ assertEquals(Intent.IntentState.INST_REQ, intent.getState());
- intent.setState(Intent.IntentState.DEL_REQ);
- assertEquals(Intent.IntentState.DEL_REQ, intent.getState());
- }
+ intent.setState(Intent.IntentState.DEL_REQ);
+ assertEquals(Intent.IntentState.DEL_REQ, intent.getState());
+ }
- @Test
- public void testEquals() {
- Intent intent1 = new Intent("id1");
- Intent intent2 = new Intent("id1");
- Intent intent3 = new Intent("id2");
- Intent intent4 = new Intent("id2");
+ @Test
+ public void testEquals() {
+ Intent intent1 = new Intent("id1");
+ Intent intent2 = new Intent("id1");
+ Intent intent3 = new Intent("id2");
+ Intent intent4 = new Intent("id2");
- assertEquals(intent1, intent2);
- assertEquals(intent3, intent4);
+ assertEquals(intent1, intent2);
+ assertEquals(intent3, intent4);
- assertFalse(intent1.equals(intent3));
- assertFalse(intent3.equals(intent1));
+ assertFalse(intent1.equals(intent3));
+ assertFalse(intent3.equals(intent1));
- intent1.setState(Intent.IntentState.INST_ACK);
- intent2.setState(Intent.IntentState.INST_NACK);
- assertEquals(intent1, intent2);
- }
+ intent1.setState(Intent.IntentState.INST_ACK);
+ intent2.setState(Intent.IntentState.INST_NACK);
+ assertEquals(intent1, intent2);
+ }
- @Test
- public void testHashCode() {
- Intent intent1 = new Intent("id1");
- intent1.setState(Intent.IntentState.INST_ACK);
- Intent intent2 = new Intent("id1");
- intent2.setState(Intent.IntentState.INST_NACK);
- Intent intent3 = new Intent("id2");
- Intent intent4 = new Intent("id2");
+ @Test
+ public void testHashCode() {
+ Intent intent1 = new Intent("id1");
+ intent1.setState(Intent.IntentState.INST_ACK);
+ Intent intent2 = new Intent("id1");
+ intent2.setState(Intent.IntentState.INST_NACK);
+ Intent intent3 = new Intent("id2");
+ Intent intent4 = new Intent("id2");
- HashSet<Intent> intents = new HashSet<>();
- intents.add(intent1);
- intents.add(intent2);
- intents.add(intent3);
- intents.add(intent4);
+ HashSet<Intent> intents = new HashSet<>();
+ intents.add(intent1);
+ intents.add(intent2);
+ intents.add(intent3);
+ intents.add(intent4);
- assertEquals(2, intents.size());
- assertTrue(intents.contains(intent1));
- assertTrue(intents.contains(intent2));
- assertTrue(intents.contains(intent3));
- assertTrue(intents.contains(intent4));
- }
+ assertEquals(2, intents.size());
+ assertTrue(intents.contains(intent1));
+ assertTrue(intents.contains(intent2));
+ assertTrue(intents.contains(intent3));
+ assertTrue(intents.contains(intent4));
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/intent/MockNetworkGraph.java b/src/test/java/net/onrc/onos/core/intent/MockNetworkGraph.java
index 3b40259..b2435d6 100644
--- a/src/test/java/net/onrc/onos/core/intent/MockNetworkGraph.java
+++ b/src/test/java/net/onrc/onos/core/intent/MockNetworkGraph.java
@@ -15,85 +15,86 @@
* @author Toshio Koide (t-koide@onlab.us)
*/
public class MockNetworkGraph extends NetworkGraphImpl {
- public static Long LOCAL_PORT = 0xFFFEL;
- public SwitchImpl sw1, sw2, sw3, sw4;
+ public static Long LOCAL_PORT = 0xFFFEL;
+ public SwitchImpl sw1, sw2, sw3, sw4;
- class DetachableLinkImpl extends LinkImpl {
- public DetachableLinkImpl(NetworkGraph graph, Port srcPort, Port dstPort) {
- super(graph, srcPort, dstPort);
- }
+ class DetachableLinkImpl extends LinkImpl {
+ public DetachableLinkImpl(NetworkGraph graph, Port srcPort, Port dstPort) {
+ super(graph, srcPort, dstPort);
+ }
- public void detachFromGraph() {
- unsetFromPorts();
- }
- }
- public Switch addSwitch(Long switchId) {
- SwitchImpl sw = new SwitchImpl(this, switchId);
- this.putSwitch(sw);
- return sw;
- }
+ public void detachFromGraph() {
+ unsetFromPorts();
+ }
+ }
- public Link addLink(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
- return new DetachableLinkImpl(
- this,
- getSwitch(srcDpid).getPort(srcPortNo),
- getSwitch(dstDpid).getPort(dstPortNo));
- }
+ public Switch addSwitch(Long switchId) {
+ SwitchImpl sw = new SwitchImpl(this, switchId);
+ this.putSwitch(sw);
+ return sw;
+ }
- public Link[] addBidirectionalLinks(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
- Link[] links = new Link[2];
- links[0] = addLink(srcDpid, srcPortNo, dstDpid, dstPortNo);
- links[1] = addLink(dstDpid, dstPortNo, srcDpid, srcPortNo);
+ public Link addLink(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
+ return new DetachableLinkImpl(
+ this,
+ getSwitch(srcDpid).getPort(srcPortNo),
+ getSwitch(dstDpid).getPort(dstPortNo));
+ }
- return links;
- }
+ public Link[] addBidirectionalLinks(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
+ Link[] links = new Link[2];
+ links[0] = addLink(srcDpid, srcPortNo, dstDpid, dstPortNo);
+ links[1] = addLink(dstDpid, dstPortNo, srcDpid, srcPortNo);
- /**
- * create sample topology of 4 switches and 5 bidirectional links.
- * <pre>
- * [1] --- [2]
- * | / |
- * | / |
- * [4] --- [3]
- * </pre>
- */
- public void createSampleTopology1() {
- sw1 = (SwitchImpl) addSwitch(1L);
- sw1.addPort(LOCAL_PORT);
- sw2 = (SwitchImpl) addSwitch(2L);
- sw2.addPort(LOCAL_PORT);
- sw3 = (SwitchImpl) addSwitch(3L);
- sw3.addPort(LOCAL_PORT);
- sw4 = (SwitchImpl) addSwitch(4L);
- sw4.addPort(LOCAL_PORT);
+ return links;
+ }
- sw1.addPort(12L); // sw1 -> sw2
- sw1.addPort(14L); // sw1 -> sw4
- sw2.addPort(21L); // sw2 -> sw1
- sw2.addPort(23L); // sw2 -> sw3
- sw2.addPort(24L); // sw2 -> sw4
- sw3.addPort(32L); // sw3 -> sw2
- sw3.addPort(34L); // sw3 -> sw4
- sw4.addPort(41L); // sw4 -> sw1
- sw4.addPort(42L); // sw4 -> sw2
- sw4.addPort(43L); // sw4 -> sw3
+ /**
+ * create sample topology of 4 switches and 5 bidirectional links.
+ * <pre>
+ * [1] --- [2]
+ * | / |
+ * | / |
+ * [4] --- [3]
+ * </pre>
+ */
+ public void createSampleTopology1() {
+ sw1 = (SwitchImpl) addSwitch(1L);
+ sw1.addPort(LOCAL_PORT);
+ sw2 = (SwitchImpl) addSwitch(2L);
+ sw2.addPort(LOCAL_PORT);
+ sw3 = (SwitchImpl) addSwitch(3L);
+ sw3.addPort(LOCAL_PORT);
+ sw4 = (SwitchImpl) addSwitch(4L);
+ sw4.addPort(LOCAL_PORT);
- addBidirectionalLinks(1L, 12L, 2L, 21L);
- addBidirectionalLinks(2L, 23L, 3L, 32L);
- addBidirectionalLinks(3L, 34L, 4L, 43L);
- addBidirectionalLinks(4L, 41L, 1L, 14L);
- addBidirectionalLinks(2L, 24L, 4L, 42L);
+ sw1.addPort(12L); // sw1 -> sw2
+ sw1.addPort(14L); // sw1 -> sw4
+ sw2.addPort(21L); // sw2 -> sw1
+ sw2.addPort(23L); // sw2 -> sw3
+ sw2.addPort(24L); // sw2 -> sw4
+ sw3.addPort(32L); // sw3 -> sw2
+ sw3.addPort(34L); // sw3 -> sw4
+ sw4.addPort(41L); // sw4 -> sw1
+ sw4.addPort(42L); // sw4 -> sw2
+ sw4.addPort(43L); // sw4 -> sw3
- // set capacity of all links to 1000Mbps
- for (Link link: getLinks()) {
- ((LinkImpl)link).setCapacity(1000.0);
- }
- }
+ addBidirectionalLinks(1L, 12L, 2L, 21L);
+ addBidirectionalLinks(2L, 23L, 3L, 32L);
+ addBidirectionalLinks(3L, 34L, 4L, 43L);
+ addBidirectionalLinks(4L, 41L, 1L, 14L);
+ addBidirectionalLinks(2L, 24L, 4L, 42L);
- public void removeLink(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
- DetachableLinkImpl link = (DetachableLinkImpl)getSwitch(srcDpid).getPort(srcPortNo).getOutgoingLink();
- if (link.getDstSwitch().getDpid().equals(dstDpid) && link.getDstPort().getNumber().equals(dstPortNo)) {
- link.detachFromGraph();
- }
- }
+ // set capacity of all links to 1000Mbps
+ for (Link link : getLinks()) {
+ ((LinkImpl) link).setCapacity(1000.0);
+ }
+ }
+
+ public void removeLink(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
+ DetachableLinkImpl link = (DetachableLinkImpl) getSwitch(srcDpid).getPort(srcPortNo).getOutgoingLink();
+ if (link.getDstSwitch().getDpid().equals(dstDpid) && link.getDstPort().getNumber().equals(dstPortNo)) {
+ link.detachFromGraph();
+ }
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/intent/PathIntentMapTest.java b/src/test/java/net/onrc/onos/core/intent/PathIntentMapTest.java
index bbf17a0..a67d2b5 100644
--- a/src/test/java/net/onrc/onos/core/intent/PathIntentMapTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/PathIntentMapTest.java
@@ -20,181 +20,181 @@
import org.junit.Test;
public class PathIntentMapTest {
- Link link12, link23, link24;
- Switch sw1, sw2, sw3, sw4;
- Port port11, port22, port21, port23, port31, port41;
- Path path1, path2;
- PathIntent intent1, intent2;
+ Link link12, link23, link24;
+ Switch sw1, sw2, sw3, sw4;
+ Port port11, port22, port21, port23, port31, port41;
+ Path path1, path2;
+ PathIntent intent1, intent2;
- @Before
- public void setUp() throws Exception {
- sw1 = createMock(Switch.class);
- sw2 = createMock(Switch.class);
- sw3 = createMock(Switch.class);
- sw4 = createMock(Switch.class);
- expect(sw1.getDpid()).andReturn(1L).anyTimes();
- expect(sw2.getDpid()).andReturn(2L).anyTimes();
- expect(sw3.getDpid()).andReturn(3L).anyTimes();
- expect(sw4.getDpid()).andReturn(4L).anyTimes();
- replay(sw1);
- replay(sw2);
- replay(sw3);
- replay(sw4);
+ @Before
+ public void setUp() throws Exception {
+ sw1 = createMock(Switch.class);
+ sw2 = createMock(Switch.class);
+ sw3 = createMock(Switch.class);
+ sw4 = createMock(Switch.class);
+ expect(sw1.getDpid()).andReturn(1L).anyTimes();
+ expect(sw2.getDpid()).andReturn(2L).anyTimes();
+ expect(sw3.getDpid()).andReturn(3L).anyTimes();
+ expect(sw4.getDpid()).andReturn(4L).anyTimes();
+ replay(sw1);
+ replay(sw2);
+ replay(sw3);
+ replay(sw4);
- port11 = createMock(Port.class);
- port22 = createMock(Port.class);
- port21 = createMock(Port.class);
- port23 = createMock(Port.class);
- port31 = createMock(Port.class);
- port41 = createMock(Port.class);
- expect(port11.getNumber()).andReturn(1L).anyTimes();
- expect(port22.getNumber()).andReturn(2L).anyTimes();
- expect(port21.getNumber()).andReturn(1L).anyTimes();
- expect(port23.getNumber()).andReturn(3L).anyTimes();
- expect(port31.getNumber()).andReturn(1L).anyTimes();
- expect(port41.getNumber()).andReturn(1L).anyTimes();
- replay(port11);
- replay(port22);
- replay(port21);
- replay(port23);
- replay(port31);
- replay(port41);
+ port11 = createMock(Port.class);
+ port22 = createMock(Port.class);
+ port21 = createMock(Port.class);
+ port23 = createMock(Port.class);
+ port31 = createMock(Port.class);
+ port41 = createMock(Port.class);
+ expect(port11.getNumber()).andReturn(1L).anyTimes();
+ expect(port22.getNumber()).andReturn(2L).anyTimes();
+ expect(port21.getNumber()).andReturn(1L).anyTimes();
+ expect(port23.getNumber()).andReturn(3L).anyTimes();
+ expect(port31.getNumber()).andReturn(1L).anyTimes();
+ expect(port41.getNumber()).andReturn(1L).anyTimes();
+ replay(port11);
+ replay(port22);
+ replay(port21);
+ replay(port23);
+ replay(port31);
+ replay(port41);
- link12 = createMock(Link.class);
- link23 = createMock(Link.class);
- link24 = createMock(Link.class);
- expect(link12.getCapacity()).andReturn(1000.0).anyTimes();
- expect(link23.getCapacity()).andReturn(1000.0).anyTimes();
- expect(link24.getCapacity()).andReturn(1000.0).anyTimes();
- expect(link12.getSrcSwitch()).andReturn(sw1).anyTimes();
- expect(link23.getSrcSwitch()).andReturn(sw2).anyTimes();
- expect(link24.getSrcSwitch()).andReturn(sw2).anyTimes();
- expect(link12.getSrcPort()).andReturn(port11).anyTimes();
- expect(link23.getSrcPort()).andReturn(port21).anyTimes();
- expect(link24.getSrcPort()).andReturn(port23).anyTimes();
- expect(link12.getDstSwitch()).andReturn(sw2).anyTimes();
- expect(link23.getDstSwitch()).andReturn(sw3).anyTimes();
- expect(link24.getDstSwitch()).andReturn(sw4).anyTimes();
- expect(link12.getDstPort()).andReturn(port22).anyTimes();
- expect(link23.getDstPort()).andReturn(port31).anyTimes();
- expect(link24.getDstPort()).andReturn(port41).anyTimes();
- replay(link12);
- replay(link23);
- replay(link24);
+ link12 = createMock(Link.class);
+ link23 = createMock(Link.class);
+ link24 = createMock(Link.class);
+ expect(link12.getCapacity()).andReturn(1000.0).anyTimes();
+ expect(link23.getCapacity()).andReturn(1000.0).anyTimes();
+ expect(link24.getCapacity()).andReturn(1000.0).anyTimes();
+ expect(link12.getSrcSwitch()).andReturn(sw1).anyTimes();
+ expect(link23.getSrcSwitch()).andReturn(sw2).anyTimes();
+ expect(link24.getSrcSwitch()).andReturn(sw2).anyTimes();
+ expect(link12.getSrcPort()).andReturn(port11).anyTimes();
+ expect(link23.getSrcPort()).andReturn(port21).anyTimes();
+ expect(link24.getSrcPort()).andReturn(port23).anyTimes();
+ expect(link12.getDstSwitch()).andReturn(sw2).anyTimes();
+ expect(link23.getDstSwitch()).andReturn(sw3).anyTimes();
+ expect(link24.getDstSwitch()).andReturn(sw4).anyTimes();
+ expect(link12.getDstPort()).andReturn(port22).anyTimes();
+ expect(link23.getDstPort()).andReturn(port31).anyTimes();
+ expect(link24.getDstPort()).andReturn(port41).anyTimes();
+ replay(link12);
+ replay(link23);
+ replay(link24);
- path1 = new Path();
- path1.add(new LinkEvent(link12));
- path1.add(new LinkEvent(link23));
+ path1 = new Path();
+ path1.add(new LinkEvent(link12));
+ path1.add(new LinkEvent(link23));
- path2 = new Path();
- path2.add(new LinkEvent(link12));
- path2.add(new LinkEvent(link24));
+ path2 = new Path();
+ path2.add(new LinkEvent(link12));
+ path2.add(new LinkEvent(link24));
- intent1 = new PathIntent("1", path1, 400.0, new Intent("_1"));
- intent2 = new PathIntent("2", path2, 400.0, new Intent("_2"));
- }
+ intent1 = new PathIntent("1", path1, 400.0, new Intent("_1"));
+ intent2 = new PathIntent("2", path2, 400.0, new Intent("_2"));
+ }
- @After
- public void tearDown() throws Exception {
- }
+ @After
+ public void tearDown() throws Exception {
+ }
- @Test
- public void testCreate() {
- PathIntentMap intents = new PathIntentMap();
- assertEquals(0, intents.getAllIntents().size());
- }
+ @Test
+ public void testCreate() {
+ PathIntentMap intents = new PathIntentMap();
+ assertEquals(0, intents.getAllIntents().size());
+ }
- @Test
- public void testGetIntentsByDpid() {
- IntentOperationList operations = new IntentOperationList();
- operations.add(Operator.ADD, intent1);
- operations.add(Operator.ADD, intent2);
- assertEquals(2, operations.size());
+ @Test
+ public void testGetIntentsByDpid() {
+ IntentOperationList operations = new IntentOperationList();
+ operations.add(Operator.ADD, intent1);
+ operations.add(Operator.ADD, intent2);
+ assertEquals(2, operations.size());
- PathIntentMap intents = new PathIntentMap();
- intents.executeOperations(operations);
- assertEquals(2, intents.getAllIntents().size());
+ PathIntentMap intents = new PathIntentMap();
+ intents.executeOperations(operations);
+ assertEquals(2, intents.getAllIntents().size());
- Collection<PathIntent> pathIntents = intents.getIntentsByDpid(1L);
- assertEquals(2, pathIntents.size());
- assertTrue(pathIntents.contains(intent1));
- assertTrue(pathIntents.contains(intent2));
+ Collection<PathIntent> pathIntents = intents.getIntentsByDpid(1L);
+ assertEquals(2, pathIntents.size());
+ assertTrue(pathIntents.contains(intent1));
+ assertTrue(pathIntents.contains(intent2));
- pathIntents = intents.getIntentsByDpid(2L);
- assertEquals(2, pathIntents.size());
- assertTrue(pathIntents.contains(intent1));
- assertTrue(pathIntents.contains(intent2));
+ pathIntents = intents.getIntentsByDpid(2L);
+ assertEquals(2, pathIntents.size());
+ assertTrue(pathIntents.contains(intent1));
+ assertTrue(pathIntents.contains(intent2));
- pathIntents = intents.getIntentsByDpid(3L);
- assertEquals(1, pathIntents.size());
- assertTrue(pathIntents.contains(intent1));
+ pathIntents = intents.getIntentsByDpid(3L);
+ assertEquals(1, pathIntents.size());
+ assertTrue(pathIntents.contains(intent1));
- pathIntents = intents.getIntentsByDpid(4L);
- assertEquals(1, pathIntents.size());
- assertTrue(pathIntents.contains(intent2));
- }
+ pathIntents = intents.getIntentsByDpid(4L);
+ assertEquals(1, pathIntents.size());
+ assertTrue(pathIntents.contains(intent2));
+ }
- @Test
- public void testGetPathIntentsByPort() {
- IntentOperationList operations = new IntentOperationList();
- operations.add(Operator.ADD, intent1);
- operations.add(Operator.ADD, intent2);
- assertEquals(2, operations.size());
+ @Test
+ public void testGetPathIntentsByPort() {
+ IntentOperationList operations = new IntentOperationList();
+ operations.add(Operator.ADD, intent1);
+ operations.add(Operator.ADD, intent2);
+ assertEquals(2, operations.size());
- PathIntentMap intents = new PathIntentMap();
- intents.executeOperations(operations);
- assertEquals(2, intents.getAllIntents().size());
+ PathIntentMap intents = new PathIntentMap();
+ intents.executeOperations(operations);
+ assertEquals(2, intents.getAllIntents().size());
- Collection<PathIntent> pathIntents = intents.getIntentsByPort(1L, 1L);
- assertEquals(2, pathIntents.size());
- assertTrue(pathIntents.contains(intent1));
- assertTrue(pathIntents.contains(intent2));
+ Collection<PathIntent> pathIntents = intents.getIntentsByPort(1L, 1L);
+ assertEquals(2, pathIntents.size());
+ assertTrue(pathIntents.contains(intent1));
+ assertTrue(pathIntents.contains(intent2));
- pathIntents = intents.getIntentsByPort(2L, 1L);
- assertEquals(1, pathIntents.size());
- assertTrue(pathIntents.contains(intent1));
+ pathIntents = intents.getIntentsByPort(2L, 1L);
+ assertEquals(1, pathIntents.size());
+ assertTrue(pathIntents.contains(intent1));
- pathIntents = intents.getIntentsByPort(2L, 3L);
- assertEquals(1, pathIntents.size());
- assertTrue(pathIntents.contains(intent2));
- }
+ pathIntents = intents.getIntentsByPort(2L, 3L);
+ assertEquals(1, pathIntents.size());
+ assertTrue(pathIntents.contains(intent2));
+ }
- @Test
- public void testGetPathIntentsByLink() {
- IntentOperationList operations = new IntentOperationList();
- operations.add(Operator.ADD, intent1);
- operations.add(Operator.ADD, intent2);
- assertEquals(2, operations.size());
+ @Test
+ public void testGetPathIntentsByLink() {
+ IntentOperationList operations = new IntentOperationList();
+ operations.add(Operator.ADD, intent1);
+ operations.add(Operator.ADD, intent2);
+ assertEquals(2, operations.size());
- PathIntentMap intents = new PathIntentMap();
- intents.executeOperations(operations);
- assertEquals(2, intents.getAllIntents().size());
+ PathIntentMap intents = new PathIntentMap();
+ intents.executeOperations(operations);
+ assertEquals(2, intents.getAllIntents().size());
- Collection<PathIntent> pathIntents = intents.getIntentsByLink(new LinkEvent(link12));
- assertEquals(2, pathIntents.size());
- assertTrue(pathIntents.contains(intent1));
- assertTrue(pathIntents.contains(intent2));
+ Collection<PathIntent> pathIntents = intents.getIntentsByLink(new LinkEvent(link12));
+ assertEquals(2, pathIntents.size());
+ assertTrue(pathIntents.contains(intent1));
+ assertTrue(pathIntents.contains(intent2));
- pathIntents = intents.getIntentsByLink(new LinkEvent(link23));
- assertEquals(1, pathIntents.size());
- assertTrue(pathIntents.contains(intent1));
+ pathIntents = intents.getIntentsByLink(new LinkEvent(link23));
+ assertEquals(1, pathIntents.size());
+ assertTrue(pathIntents.contains(intent1));
- pathIntents = intents.getIntentsByLink(new LinkEvent(link24));
- assertEquals(1, pathIntents.size());
- assertTrue(pathIntents.contains(intent2));
- }
+ pathIntents = intents.getIntentsByLink(new LinkEvent(link24));
+ assertEquals(1, pathIntents.size());
+ assertTrue(pathIntents.contains(intent2));
+ }
- @Test
- public void testGetAvailableBandwidth() {
- IntentOperationList operations = new IntentOperationList();
- operations.add(Operator.ADD, intent1);
- operations.add(Operator.ADD, intent2);
- assertEquals(2, operations.size());
+ @Test
+ public void testGetAvailableBandwidth() {
+ IntentOperationList operations = new IntentOperationList();
+ operations.add(Operator.ADD, intent1);
+ operations.add(Operator.ADD, intent2);
+ assertEquals(2, operations.size());
- PathIntentMap intents = new PathIntentMap();
- intents.executeOperations(operations);
- assertEquals(2, intents.getAllIntents().size());
+ PathIntentMap intents = new PathIntentMap();
+ intents.executeOperations(operations);
+ assertEquals(2, intents.getAllIntents().size());
- assertEquals(200.0, intents.getAvailableBandwidth(link12), 0.0);
- }
+ assertEquals(200.0, intents.getAvailableBandwidth(link12), 0.0);
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/intent/PathIntentTest.java b/src/test/java/net/onrc/onos/core/intent/PathIntentTest.java
index 499c362..1b400df 100644
--- a/src/test/java/net/onrc/onos/core/intent/PathIntentTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/PathIntentTest.java
@@ -1,6 +1,7 @@
package net.onrc.onos.core.intent;
import static org.junit.Assert.assertEquals;
+
import net.onrc.onos.core.topology.LinkEvent;
import net.onrc.onos.core.topology.Path;
import net.onrc.onos.core.util.serializers.KryoFactory;
@@ -17,85 +18,85 @@
* @author Toshio Koide (t-koide@onlab.us)
*/
public class PathIntentTest {
- @Before
- public void setUp() throws Exception {
- }
+ @Before
+ public void setUp() throws Exception {
+ }
- @After
- public void tearDown() throws Exception {
- }
+ @After
+ public void tearDown() throws Exception {
+ }
- @Test
- public void testCreateFirstId() {
- String id = PathIntent.createFirstId("100");
- assertEquals("100___0", id);
- }
+ @Test
+ public void testCreateFirstId() {
+ String id = PathIntent.createFirstId("100");
+ assertEquals("100___0", id);
+ }
- @Test
- public void testCreateNextId() {
- String id = PathIntent.createNextId("100___999");
- assertEquals("100___1000", id);
- }
+ @Test
+ public void testCreateNextId() {
+ String id = PathIntent.createNextId("100___999");
+ assertEquals("100___1000", id);
+ }
- @Test
- public void test() {
- KryoFactory factory = new KryoFactory();
- Kryo kryo = factory.newKryo();
- Output output = new Output(1024);
+ @Test
+ public void test() {
+ KryoFactory factory = new KryoFactory();
+ Kryo kryo = factory.newKryo();
+ Output output = new Output(1024);
- ConstrainedShortestPathIntent cspIntent1 =
- new ConstrainedShortestPathIntent("1", 2L, 3L, 4L, 5L, 6L, 7L, 1000.0);
+ ConstrainedShortestPathIntent cspIntent1 =
+ new ConstrainedShortestPathIntent("1", 2L, 3L, 4L, 5L, 6L, 7L, 1000.0);
- Path path = new Path();
- path.add(new LinkEvent(1L, 1L, 2L, 2L));
- path.add(new LinkEvent(2L, 1L, 3L, 2L));
- path.add(new LinkEvent(3L, 1L, 4L, 2L));
+ Path path = new Path();
+ path.add(new LinkEvent(1L, 1L, 2L, 2L));
+ path.add(new LinkEvent(2L, 1L, 3L, 2L));
+ path.add(new LinkEvent(3L, 1L, 4L, 2L));
- PathIntent pathIntent1 = new PathIntent("11", path, 123.45, cspIntent1);
+ PathIntent pathIntent1 = new PathIntent("11", path, 123.45, cspIntent1);
- kryo.writeObject(output, pathIntent1);
- output.close();
+ kryo.writeObject(output, pathIntent1);
+ output.close();
- Input input = new Input(output.toBytes());
+ Input input = new Input(output.toBytes());
- // create pathIntent from bytes
+ // create pathIntent from bytes
- PathIntent pathIntent2 =
- kryo.readObject(input, PathIntent.class);
- input.close();
+ PathIntent pathIntent2 =
+ kryo.readObject(input, PathIntent.class);
+ input.close();
- // check
+ // check
- assertEquals("11", pathIntent2.getId());
- Path path2 = pathIntent2.getPath();
+ assertEquals("11", pathIntent2.getId());
+ Path path2 = pathIntent2.getPath();
- assertEquals(Long.valueOf(1L), path2.get(0).getSrc().getDpid());
- assertEquals(Long.valueOf(1L), path2.get(0).getSrc().getNumber());
- assertEquals(Long.valueOf(2L), path2.get(0).getDst().getDpid());
- assertEquals(Long.valueOf(2L), path2.get(0).getDst().getNumber());
+ assertEquals(Long.valueOf(1L), path2.get(0).getSrc().getDpid());
+ assertEquals(Long.valueOf(1L), path2.get(0).getSrc().getNumber());
+ assertEquals(Long.valueOf(2L), path2.get(0).getDst().getDpid());
+ assertEquals(Long.valueOf(2L), path2.get(0).getDst().getNumber());
- assertEquals(Long.valueOf(2L), path2.get(1).getSrc().getDpid());
- assertEquals(Long.valueOf(1L), path2.get(1).getSrc().getNumber());
- assertEquals(Long.valueOf(3L), path2.get(1).getDst().getDpid());
- assertEquals(Long.valueOf(2L), path2.get(1).getDst().getNumber());
+ assertEquals(Long.valueOf(2L), path2.get(1).getSrc().getDpid());
+ assertEquals(Long.valueOf(1L), path2.get(1).getSrc().getNumber());
+ assertEquals(Long.valueOf(3L), path2.get(1).getDst().getDpid());
+ assertEquals(Long.valueOf(2L), path2.get(1).getDst().getNumber());
- assertEquals(Long.valueOf(3L), path2.get(2).getSrc().getDpid());
- assertEquals(Long.valueOf(1L), path2.get(2).getSrc().getNumber());
- assertEquals(Long.valueOf(4L), path2.get(2).getDst().getDpid());
- assertEquals(Long.valueOf(2L), path2.get(2).getDst().getNumber());
+ assertEquals(Long.valueOf(3L), path2.get(2).getSrc().getDpid());
+ assertEquals(Long.valueOf(1L), path2.get(2).getSrc().getNumber());
+ assertEquals(Long.valueOf(4L), path2.get(2).getDst().getDpid());
+ assertEquals(Long.valueOf(2L), path2.get(2).getDst().getNumber());
- assertEquals(123.45, pathIntent2.getBandwidth(), 0.0);
+ assertEquals(123.45, pathIntent2.getBandwidth(), 0.0);
- ConstrainedShortestPathIntent cspIntent2 =
- (ConstrainedShortestPathIntent) pathIntent2.getParentIntent();
+ ConstrainedShortestPathIntent cspIntent2 =
+ (ConstrainedShortestPathIntent) pathIntent2.getParentIntent();
- assertEquals("1", cspIntent2.getId());
- assertEquals(2L, cspIntent2.getSrcSwitchDpid());
- assertEquals(3L, cspIntent2.getSrcPortNumber());
- assertEquals(4L, cspIntent2.getSrcMac());
- assertEquals(5L, cspIntent2.getDstSwitchDpid());
- assertEquals(6L, cspIntent2.getDstPortNumber());
- assertEquals(7L, cspIntent2.getDstMac());
- assertEquals(1000.0, cspIntent2.getBandwidth(), 0.0);
- }
+ assertEquals("1", cspIntent2.getId());
+ assertEquals(2L, cspIntent2.getSrcSwitchDpid());
+ assertEquals(3L, cspIntent2.getSrcPortNumber());
+ assertEquals(4L, cspIntent2.getSrcMac());
+ assertEquals(5L, cspIntent2.getDstSwitchDpid());
+ assertEquals(6L, cspIntent2.getDstPortNumber());
+ assertEquals(7L, cspIntent2.getDstMac());
+ assertEquals(1000.0, cspIntent2.getBandwidth(), 0.0);
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/intent/ShortestPathIntentTest.java b/src/test/java/net/onrc/onos/core/intent/ShortestPathIntentTest.java
index 2adc57f..87397c0 100644
--- a/src/test/java/net/onrc/onos/core/intent/ShortestPathIntentTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/ShortestPathIntentTest.java
@@ -14,36 +14,36 @@
* @author Toshio Koide (t-koide@onlab.us)
*/
public class ShortestPathIntentTest {
- @Before
- public void setUp() throws Exception {
- }
+ @Before
+ public void setUp() throws Exception {
+ }
- @After
- public void tearDown() throws Exception {
- }
+ @After
+ public void tearDown() throws Exception {
+ }
- @Test
- public void test() {
- Kryo kryo = new Kryo();
- Output output = new Output(1024);
+ @Test
+ public void test() {
+ Kryo kryo = new Kryo();
+ Output output = new Output(1024);
- ShortestPathIntent intent1 =
- new ShortestPathIntent("1", 2L, 3L, 4L, 5L, 6L, 7L);
+ ShortestPathIntent intent1 =
+ new ShortestPathIntent("1", 2L, 3L, 4L, 5L, 6L, 7L);
- kryo.writeObject(output, intent1);
- output.close();
+ kryo.writeObject(output, intent1);
+ output.close();
- Input input = new Input(output.toBytes());
- ShortestPathIntent intent2 =
- kryo.readObject(input, ShortestPathIntent.class);
- input.close();
+ Input input = new Input(output.toBytes());
+ ShortestPathIntent intent2 =
+ kryo.readObject(input, ShortestPathIntent.class);
+ input.close();
- assertEquals("1", intent2.getId());
- assertEquals(2L, intent2.getSrcSwitchDpid());
- assertEquals(3L, intent2.getSrcPortNumber());
- assertEquals(4L, intent2.getSrcMac());
- assertEquals(5L, intent2.getDstSwitchDpid());
- assertEquals(6L, intent2.getDstPortNumber());
- assertEquals(7L, intent2.getDstMac());
- }
+ assertEquals("1", intent2.getId());
+ assertEquals(2L, intent2.getSrcSwitchDpid());
+ assertEquals(3L, intent2.getSrcPortNumber());
+ assertEquals(4L, intent2.getSrcMac());
+ assertEquals(5L, intent2.getDstSwitchDpid());
+ assertEquals(6L, intent2.getDstPortNumber());
+ assertEquals(7L, intent2.getDstMac());
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java b/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
index 3532abc..93f01ca 100644
--- a/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
@@ -52,13 +52,12 @@
/**
* @author Ray Milkey (ray@onlab.us)
- *
- * Unit tests for the Path Calculation Runtime module (PathCalcRuntimeModule).
- * These test cases check the results of creating paths, deleting paths, and
- * rerouting paths. The network graph, controller registry, and data grid are
- * mocked out. The individual tests check the high level intents and the
- * resulting operation lists to be sure they match the intended APIs.
- *
+ * <p/>
+ * Unit tests for the Path Calculation Runtime module (PathCalcRuntimeModule).
+ * These test cases check the results of creating paths, deleting paths, and
+ * rerouting paths. The network graph, controller registry, and data grid are
+ * mocked out. The individual tests check the high level intents and the
+ * resulting operation lists to be sure they match the intended APIs.
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(PathCalcRuntimeModule.class)
@@ -139,7 +138,7 @@
@Override
public boolean matchesSafely(Collection<Intent> intents) {
assertThat(intents,
- hasItem(Matchers.<Intent>hasProperty("id", equalTo(id))));
+ hasItem(Matchers.<Intent>hasProperty("id", equalTo(id))));
return true;
}
@@ -155,6 +154,7 @@
/**
* Factory method to create an Intent entry Matcher. Returns a matcher
* for the Intent with the given id.
+ *
* @param id id of the intent to match
* @return Matcher object
*/
@@ -203,7 +203,7 @@
Description mismatchDescription) {
if (intent != null) {
mismatchDescription.appendText("was ").
- appendText(intent.getState().toString());
+ appendText(intent.getState().toString());
} else {
mismatchDescription.appendText("that intent was not found");
}
@@ -215,7 +215,7 @@
* Factory method to create a Matcher for an IntentMap that looks for an
* Intent with a given id and state.
*
- * @param id id of the Intent to match
+ * @param id id of the Intent to match
* @param state if the Intent is found, its state must match this
* @return Matcher object
*/
@@ -239,7 +239,7 @@
* Test the result of executing a path calculation on an
* Intent Operation List which contains a path that references a
* non-existent switch.
- *
+ * <p/>
* A 3 path list is created where one of the paths references a switch
* that is not in the topology. The test checks that the resulting
* Operation List has entries for the 2 correct paths, and that the
@@ -302,7 +302,7 @@
/**
* Test the result of executing a path calculation on an
* Intent Operation List and then removing one of the switches.
- *
+ * <p/>
* A 3 path list is created and then one of the paths is removed.
* The test checks that the resulting Operation List is correct,
* and that the high level intents contain a proper "delete requested"
@@ -315,13 +315,13 @@
final IntentOperationList opList = new IntentOperationList();
opList.add(Operator.ADD,
new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L,
- LOCAL_PORT));
+ LOCAL_PORT));
opList.add(Operator.ADD,
new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L,
- LOCAL_PORT));
+ LOCAL_PORT));
opList.add(Operator.ADD,
new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L,
- LOCAL_PORT));
+ LOCAL_PORT));
// compile high-level intent operations into low-level intent
// operations (calculate paths)
@@ -351,15 +351,15 @@
// Check that switch 1 was correctly processed
assertThat(highLevelIntents,
- hasIntentWithIdAndState("1", IntentState.INST_REQ));
+ hasIntentWithIdAndState("1", IntentState.INST_REQ));
// Check that switch 2 was correctly processed
assertThat(highLevelIntents,
- hasIntentWithIdAndState("2", IntentState.INST_REQ));
+ hasIntentWithIdAndState("2", IntentState.INST_REQ));
// Check that switch 3 was correctly processed
assertThat(highLevelIntents,
- hasIntentWithIdAndState("3", IntentState.INST_REQ));
+ hasIntentWithIdAndState("3", IntentState.INST_REQ));
// Now delete one path and check the results
final IntentOperationList opListForRemoval = new IntentOperationList();
@@ -402,7 +402,7 @@
/**
* Test the result of executing a path calculation on an
* Intent Operation List and then forcing a reroute.
- *
+ * <p/>
* A 3 path list is created and then one of the links is removed.
* The test checks that the resulting Operation List is correct,
* and that the high level intents contain a proper "reroute requested"
@@ -415,15 +415,15 @@
final IntentOperationList opList = new IntentOperationList();
final ShortestPathIntent pathIntent1 =
new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L,
- LOCAL_PORT);
+ LOCAL_PORT);
opList.add(Operator.ADD, pathIntent1);
opList.add(Operator.ADD,
new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L,
- LOCAL_PORT));
+ LOCAL_PORT));
opList.add(Operator.ADD,
new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L,
- LOCAL_PORT));
+ LOCAL_PORT));
// compile high-level intent operations into low-level intent
// operations (calculate paths)
@@ -453,15 +453,15 @@
// Check that switch 1 was correctly processed
assertThat(highLevelIntents,
- hasIntentWithIdAndState("1", IntentState.INST_REQ));
+ hasIntentWithIdAndState("1", IntentState.INST_REQ));
// Check that switch 2 was correctly processed
assertThat(highLevelIntents,
- hasIntentWithIdAndState("2", IntentState.INST_REQ));
+ hasIntentWithIdAndState("2", IntentState.INST_REQ));
// Check that switch 3 was correctly processed
assertThat(highLevelIntents,
- hasIntentWithIdAndState("3", IntentState.INST_REQ));
+ hasIntentWithIdAndState("3", IntentState.INST_REQ));
// Now add a different path to one of the switches path and check
// the results
diff --git a/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java b/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
index 645ffe5..fbb7313 100755
--- a/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
@@ -50,257 +50,257 @@
@RunWith(PowerMockRunner.class)
@PrepareForTest(PathCalcRuntimeModule.class)
public class UseCaseTest {
- private NetworkGraph g;
- private FloodlightModuleContext modContext;
- private IDatagridService datagridService;
- private INetworkGraphService networkGraphService;
- private IControllerRegistryService controllerRegistryService;
- private PersistIntent persistIntent;
- @SuppressWarnings("rawtypes")
- private IEventChannel eventChannel;
+ private NetworkGraph g;
+ private FloodlightModuleContext modContext;
+ private IDatagridService datagridService;
+ private INetworkGraphService networkGraphService;
+ private IControllerRegistryService controllerRegistryService;
+ private PersistIntent persistIntent;
+ @SuppressWarnings("rawtypes")
+ private IEventChannel eventChannel;
- private static Long LOCAL_PORT = 0xFFFEL;
+ private static Long LOCAL_PORT = 0xFFFEL;
- @SuppressWarnings("unchecked")
- @Before
- public void setUp() throws Exception {
- MockNetworkGraph graph = new MockNetworkGraph();
- graph.createSampleTopology1();
- g = graph;
+ @SuppressWarnings("unchecked")
+ @Before
+ public void setUp() throws Exception {
+ MockNetworkGraph graph = new MockNetworkGraph();
+ graph.createSampleTopology1();
+ g = graph;
- datagridService = createMock(IDatagridService.class);
- networkGraphService = createMock(INetworkGraphService.class);
- controllerRegistryService = createMock(IControllerRegistryService.class);
- modContext = createMock(FloodlightModuleContext.class);
- eventChannel = createMock(IEventChannel.class);
- persistIntent = PowerMock.createMock(PersistIntent.class);
+ datagridService = createMock(IDatagridService.class);
+ networkGraphService = createMock(INetworkGraphService.class);
+ controllerRegistryService = createMock(IControllerRegistryService.class);
+ modContext = createMock(FloodlightModuleContext.class);
+ eventChannel = createMock(IEventChannel.class);
+ persistIntent = PowerMock.createMock(PersistIntent.class);
- PowerMock.expectNew(PersistIntent.class,
- anyObject(IControllerRegistryService.class),
- anyObject(INetworkGraphService.class)).andReturn(persistIntent);
+ PowerMock.expectNew(PersistIntent.class,
+ anyObject(IControllerRegistryService.class),
+ anyObject(INetworkGraphService.class)).andReturn(persistIntent);
- expect(modContext.getServiceImpl(IDatagridService.class))
- .andReturn(datagridService).once();
- expect(modContext.getServiceImpl(INetworkGraphService.class))
- .andReturn(networkGraphService).once();
- expect(modContext.getServiceImpl(IControllerRegistryService.class))
- .andReturn(controllerRegistryService).once();
- expect(persistIntent.getKey()).andReturn(1L).anyTimes();
- expect(persistIntent.persistIfLeader(eq(1L),
- anyObject(IntentOperationList.class))).andReturn(true).anyTimes();
+ expect(modContext.getServiceImpl(IDatagridService.class))
+ .andReturn(datagridService).once();
+ expect(modContext.getServiceImpl(INetworkGraphService.class))
+ .andReturn(networkGraphService).once();
+ expect(modContext.getServiceImpl(IControllerRegistryService.class))
+ .andReturn(controllerRegistryService).once();
+ expect(persistIntent.getKey()).andReturn(1L).anyTimes();
+ expect(persistIntent.persistIfLeader(eq(1L),
+ anyObject(IntentOperationList.class))).andReturn(true).anyTimes();
- expect(networkGraphService.getNetworkGraph()).andReturn(g).anyTimes();
- networkGraphService.registerNetworkGraphListener(anyObject(INetworkGraphListener.class));
- expectLastCall();
+ expect(networkGraphService.getNetworkGraph()).andReturn(g).anyTimes();
+ networkGraphService.registerNetworkGraphListener(anyObject(INetworkGraphListener.class));
+ expectLastCall();
- expect(datagridService.createChannel("onos.pathintent", Long.class, IntentOperationList.class))
- .andReturn(eventChannel).once();
+ expect(datagridService.createChannel("onos.pathintent", Long.class, IntentOperationList.class))
+ .andReturn(eventChannel).once();
- expect(datagridService.addListener(
- eq("onos.pathintent_state"),
- anyObject(IEventChannelListener.class),
- eq(Long.class),
- eq(IntentStateList.class)))
- .andReturn(eventChannel).once();
+ expect(datagridService.addListener(
+ eq("onos.pathintent_state"),
+ anyObject(IEventChannelListener.class),
+ eq(Long.class),
+ eq(IntentStateList.class)))
+ .andReturn(eventChannel).once();
- replay(datagridService);
- replay(networkGraphService);
- replay(modContext);
- replay(controllerRegistryService);
- PowerMock.replay(persistIntent, PersistIntent.class);
- }
+ replay(datagridService);
+ replay(networkGraphService);
+ replay(modContext);
+ replay(controllerRegistryService);
+ PowerMock.replay(persistIntent, PersistIntent.class);
+ }
- @After
- public void tearDown() {
- verify(datagridService);
- verify(networkGraphService);
- verify(modContext);
- verify(controllerRegistryService);
- PowerMock.verify(persistIntent, PersistIntent.class);
- }
+ @After
+ public void tearDown() {
+ verify(datagridService);
+ verify(networkGraphService);
+ verify(modContext);
+ verify(controllerRegistryService);
+ PowerMock.verify(persistIntent, PersistIntent.class);
+ }
- private void showResult(PathIntentMap intents) {
- for (Intent intent: intents.getAllIntents()) {
- PathIntent pathIntent = (PathIntent)intent;
- System.out.println("Path intent:" + pathIntent);
- System.out.println("Parent intent: " + pathIntent.getParentIntent().toString());
- }
- }
+ private void showResult(PathIntentMap intents) {
+ for (Intent intent : intents.getAllIntents()) {
+ PathIntent pathIntent = (PathIntent) intent;
+ System.out.println("Path intent:" + pathIntent);
+ System.out.println("Parent intent: " + pathIntent.getParentIntent().toString());
+ }
+ }
- @Test
- public void createShortestPaths() throws FloodlightModuleException {
- // create shortest path intents
- IntentOperationList opList = new IntentOperationList();
- opList.add(Operator.ADD, new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT));
- opList.add(Operator.ADD, new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT));
- opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
+ @Test
+ public void createShortestPaths() throws FloodlightModuleException {
+ // create shortest path intents
+ IntentOperationList opList = new IntentOperationList();
+ opList.add(Operator.ADD, new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT));
+ opList.add(Operator.ADD, new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT));
+ opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
- // compile high-level intent operations into low-level intent operations (calculate paths)
- PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
- runtime1.init(modContext);
- runtime1.startUp(modContext);
- IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
+ // compile high-level intent operations into low-level intent operations (calculate paths)
+ PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
+ runtime1.init(modContext);
+ runtime1.startUp(modContext);
+ IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
- // compile low-level intents into flow entry installation plan
- PlanCalcRuntime runtime2 = new PlanCalcRuntime();
- List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
+ // compile low-level intents into flow entry installation plan
+ PlanCalcRuntime runtime2 = new PlanCalcRuntime();
+ List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
- // show results
- showResult((PathIntentMap) runtime1.getPathIntents());
- System.out.println(plan);
- }
+ // show results
+ showResult((PathIntentMap) runtime1.getPathIntents());
+ System.out.println(plan);
+ }
- @Test
- public void createConstrainedShortestPaths() throws FloodlightModuleException {
- // create constrained shortest path intents
- IntentOperationList opList = new IntentOperationList();
- opList.add(Operator.ADD, new ConstrainedShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT, 400.0));
- opList.add(Operator.ADD, new ConstrainedShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT, 400.0));
- opList.add(Operator.ADD, new ConstrainedShortestPathIntent("3", 2L, 24L, LOCAL_PORT, 4L, 42L, LOCAL_PORT, 400.0));
- opList.add(Operator.ADD, new ConstrainedShortestPathIntent("4", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT, 400.0));
- opList.add(Operator.ADD, new ConstrainedShortestPathIntent("5", 3L, 34L, LOCAL_PORT, 4L, 43L, LOCAL_PORT, 400.0));
+ @Test
+ public void createConstrainedShortestPaths() throws FloodlightModuleException {
+ // create constrained shortest path intents
+ IntentOperationList opList = new IntentOperationList();
+ opList.add(Operator.ADD, new ConstrainedShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT, 400.0));
+ opList.add(Operator.ADD, new ConstrainedShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT, 400.0));
+ opList.add(Operator.ADD, new ConstrainedShortestPathIntent("3", 2L, 24L, LOCAL_PORT, 4L, 42L, LOCAL_PORT, 400.0));
+ opList.add(Operator.ADD, new ConstrainedShortestPathIntent("4", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT, 400.0));
+ opList.add(Operator.ADD, new ConstrainedShortestPathIntent("5", 3L, 34L, LOCAL_PORT, 4L, 43L, LOCAL_PORT, 400.0));
- // compile high-level intent operations into low-level intent operations (calculate paths)
- PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
- runtime1.init(modContext);
- runtime1.startUp(modContext);
- IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
+ // compile high-level intent operations into low-level intent operations (calculate paths)
+ PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
+ runtime1.init(modContext);
+ runtime1.startUp(modContext);
+ IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
- // compile low-level intents into flow entry installation plan
- PlanCalcRuntime runtime2 = new PlanCalcRuntime();
- List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
+ // compile low-level intents into flow entry installation plan
+ PlanCalcRuntime runtime2 = new PlanCalcRuntime();
+ List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
- // show results
- showResult((PathIntentMap) runtime1.getPathIntents());
- System.out.println(plan);
- }
+ // show results
+ showResult((PathIntentMap) runtime1.getPathIntents());
+ System.out.println(plan);
+ }
- @Test
- public void createMixedShortestPaths() throws FloodlightModuleException {
- // create constrained & best effort shortest path intents
- IntentOperationList opList = new IntentOperationList();
- opList.add(Operator.ADD, new ConstrainedShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT, 400.0));
- opList.add(Operator.ADD, new ConstrainedShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT, 400.0));
- opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 24L, LOCAL_PORT, 4L, 42L, LOCAL_PORT));
- opList.add(Operator.ADD, new ShortestPathIntent("4", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
- opList.add(Operator.ADD, new ConstrainedShortestPathIntent("5", 3L, 34L, LOCAL_PORT, 4L, 43L, LOCAL_PORT, 400.0));
+ @Test
+ public void createMixedShortestPaths() throws FloodlightModuleException {
+ // create constrained & best effort shortest path intents
+ IntentOperationList opList = new IntentOperationList();
+ opList.add(Operator.ADD, new ConstrainedShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT, 400.0));
+ opList.add(Operator.ADD, new ConstrainedShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT, 400.0));
+ opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 24L, LOCAL_PORT, 4L, 42L, LOCAL_PORT));
+ opList.add(Operator.ADD, new ShortestPathIntent("4", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
+ opList.add(Operator.ADD, new ConstrainedShortestPathIntent("5", 3L, 34L, LOCAL_PORT, 4L, 43L, LOCAL_PORT, 400.0));
- // compile high-level intent operations into low-level intent operations (calculate paths)
- PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
- runtime1.init(modContext);
- runtime1.startUp(modContext);
- IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
+ // compile high-level intent operations into low-level intent operations (calculate paths)
+ PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
+ runtime1.init(modContext);
+ runtime1.startUp(modContext);
+ IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
- // compile low-level intents into flow entry installation plan
- PlanCalcRuntime runtime2 = new PlanCalcRuntime();
- List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
+ // compile low-level intents into flow entry installation plan
+ PlanCalcRuntime runtime2 = new PlanCalcRuntime();
+ List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
- // show results
- showResult((PathIntentMap) runtime1.getPathIntents());
- System.out.println(plan);
- }
+ // show results
+ showResult((PathIntentMap) runtime1.getPathIntents());
+ System.out.println(plan);
+ }
- @Test
- public void rerouteShortestPaths() throws FloodlightModuleException {
- List<SwitchEvent> addedSwitchEvents = new LinkedList<>();
- List<SwitchEvent> removedSwitchEvents = new LinkedList<>();
- List<PortEvent> addedPortEvents = new LinkedList<>();
- List<PortEvent> removedPortEvents = new LinkedList<>();
- List<LinkEvent> addedLinkEvents = new LinkedList<>();
- List<LinkEvent> removedLinkEvents = new LinkedList<>();
- List<DeviceEvent> addedDeviceEvents = new LinkedList<>();
- List<DeviceEvent> removedDeviceEvents = new LinkedList<>();
+ @Test
+ public void rerouteShortestPaths() throws FloodlightModuleException {
+ List<SwitchEvent> addedSwitchEvents = new LinkedList<>();
+ List<SwitchEvent> removedSwitchEvents = new LinkedList<>();
+ List<PortEvent> addedPortEvents = new LinkedList<>();
+ List<PortEvent> removedPortEvents = new LinkedList<>();
+ List<LinkEvent> addedLinkEvents = new LinkedList<>();
+ List<LinkEvent> removedLinkEvents = new LinkedList<>();
+ List<DeviceEvent> addedDeviceEvents = new LinkedList<>();
+ List<DeviceEvent> removedDeviceEvents = new LinkedList<>();
- // create shortest path intents
- IntentOperationList opList = new IntentOperationList();
- opList.add(Operator.ADD, new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT));
- opList.add(Operator.ADD, new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT));
- opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
+ // create shortest path intents
+ IntentOperationList opList = new IntentOperationList();
+ opList.add(Operator.ADD, new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT));
+ opList.add(Operator.ADD, new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT));
+ opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
- // compile high-level intent operations into low-level intent operations (calculate paths)
- PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
- runtime1.init(modContext);
- runtime1.startUp(modContext);
- IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
+ // compile high-level intent operations into low-level intent operations (calculate paths)
+ PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
+ runtime1.init(modContext);
+ runtime1.startUp(modContext);
+ IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
- // compile low-level intents into flow entry installation plan
- PlanCalcRuntime runtime2 = new PlanCalcRuntime();
- List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
+ // compile low-level intents into flow entry installation plan
+ PlanCalcRuntime runtime2 = new PlanCalcRuntime();
+ List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
- // show results step1
- showResult((PathIntentMap) runtime1.getPathIntents());
- System.out.println(plan);
+ // show results step1
+ showResult((PathIntentMap) runtime1.getPathIntents());
+ System.out.println(plan);
- // TODO this state changes should be triggered by notification of plan module
- IntentStateList states = new IntentStateList();
- states.put("1", IntentState.INST_ACK);
- states.put("2", IntentState.INST_ACK);
- states.put("3", IntentState.INST_ACK);
- runtime1.getHighLevelIntents().changeStates(states);
- states.clear();
- states.put("1___0", IntentState.INST_ACK);
- states.put("2___0", IntentState.INST_ACK);
- states.put("3___0", IntentState.INST_ACK);
- runtime1.getPathIntents().changeStates(states);
+ // TODO this state changes should be triggered by notification of plan module
+ IntentStateList states = new IntentStateList();
+ states.put("1", IntentState.INST_ACK);
+ states.put("2", IntentState.INST_ACK);
+ states.put("3", IntentState.INST_ACK);
+ runtime1.getHighLevelIntents().changeStates(states);
+ states.clear();
+ states.put("1___0", IntentState.INST_ACK);
+ states.put("2___0", IntentState.INST_ACK);
+ states.put("3___0", IntentState.INST_ACK);
+ runtime1.getPathIntents().changeStates(states);
- // link down
- ((MockNetworkGraph)g).removeLink(1L, 12L, 2L, 21L); // This link is used by the intent "1"
- ((MockNetworkGraph)g).removeLink(2L, 21L, 1L, 12L);
- LinkEvent linkEvent1 = new LinkEvent(1L, 12L, 2L, 21L);
- LinkEvent linkEvent2 = new LinkEvent(2L, 21L, 1L, 12L);
- removedLinkEvents.clear();
- removedLinkEvents.add(linkEvent1);
- removedLinkEvents.add(linkEvent2);
- runtime1.networkGraphEvents(
- addedSwitchEvents,
- removedSwitchEvents,
- addedPortEvents,
- removedPortEvents,
- addedLinkEvents,
- removedLinkEvents,
- addedDeviceEvents,
- removedDeviceEvents);
- System.out.println("Link goes down.");
+ // link down
+ ((MockNetworkGraph) g).removeLink(1L, 12L, 2L, 21L); // This link is used by the intent "1"
+ ((MockNetworkGraph) g).removeLink(2L, 21L, 1L, 12L);
+ LinkEvent linkEvent1 = new LinkEvent(1L, 12L, 2L, 21L);
+ LinkEvent linkEvent2 = new LinkEvent(2L, 21L, 1L, 12L);
+ removedLinkEvents.clear();
+ removedLinkEvents.add(linkEvent1);
+ removedLinkEvents.add(linkEvent2);
+ runtime1.networkGraphEvents(
+ addedSwitchEvents,
+ removedSwitchEvents,
+ addedPortEvents,
+ removedPortEvents,
+ addedLinkEvents,
+ removedLinkEvents,
+ addedDeviceEvents,
+ removedDeviceEvents);
+ System.out.println("Link goes down.");
- // show results step2
- showResult((PathIntentMap) runtime1.getPathIntents());
- // TODO: show results of plan computation
- }
+ // show results step2
+ showResult((PathIntentMap) runtime1.getPathIntents());
+ // TODO: show results of plan computation
+ }
- @Test
- public void createAndRemoveShortestPaths() throws FloodlightModuleException {
- // create shortest path intents
- IntentOperationList opList = new IntentOperationList();
- opList.add(Operator.ADD, new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT));
- opList.add(Operator.ADD, new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT));
- opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
+ @Test
+ public void createAndRemoveShortestPaths() throws FloodlightModuleException {
+ // create shortest path intents
+ IntentOperationList opList = new IntentOperationList();
+ opList.add(Operator.ADD, new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT));
+ opList.add(Operator.ADD, new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT));
+ opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
- // compile high-level intent operations into low-level intent operations (calculate paths)
- PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
- runtime1.init(modContext);
- runtime1.startUp(modContext);
- IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
+ // compile high-level intent operations into low-level intent operations (calculate paths)
+ PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
+ runtime1.init(modContext);
+ runtime1.startUp(modContext);
+ IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
- // compile low-level intents into flow entry installation plan
- PlanCalcRuntime runtime2 = new PlanCalcRuntime();
- List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
+ // compile low-level intents into flow entry installation plan
+ PlanCalcRuntime runtime2 = new PlanCalcRuntime();
+ List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
- // show results
- showResult((PathIntentMap) runtime1.getPathIntents());
- System.out.println(plan);
+ // show results
+ showResult((PathIntentMap) runtime1.getPathIntents());
+ System.out.println(plan);
- // create remove operations
- opList.clear();
- opList.add(Operator.REMOVE, new Intent("1"));
- opList.add(Operator.REMOVE, new Intent("2"));
+ // create remove operations
+ opList.clear();
+ opList.add(Operator.REMOVE, new Intent("1"));
+ opList.add(Operator.REMOVE, new Intent("2"));
- // compile
- runtime1.executeIntentOperations(opList);
+ // compile
+ runtime1.executeIntentOperations(opList);
- // show results
- showResult((PathIntentMap) runtime1.getPathIntents());
- System.out.println(plan);
- }
+ // show results
+ showResult((PathIntentMap) runtime1.getPathIntents());
+ System.out.println(plan);
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/linkdiscovery/internal/LinkDiscoveryManagerTest.java b/src/test/java/net/onrc/onos/core/linkdiscovery/internal/LinkDiscoveryManagerTest.java
index 0ebb6de..da9d30b 100644
--- a/src/test/java/net/onrc/onos/core/linkdiscovery/internal/LinkDiscoveryManagerTest.java
+++ b/src/test/java/net/onrc/onos/core/linkdiscovery/internal/LinkDiscoveryManagerTest.java
@@ -1,19 +1,19 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.onrc.onos.core.linkdiscovery.internal;
@@ -47,14 +47,13 @@
import org.slf4j.LoggerFactory;
/**
- *
* @author David Erickson (daviderickson@cs.stanford.edu)
*/
public class LinkDiscoveryManagerTest extends FloodlightTestCase {
private TestLinkDiscoveryManager ldm;
protected final static Logger log = LoggerFactory.getLogger(LinkDiscoveryManagerTest.class);
-
+
public class TestLinkDiscoveryManager extends LinkDiscoveryManager {
public boolean isSendLLDPsCalled = false;
public boolean isClearLinksCalled = false;
@@ -70,7 +69,7 @@
isClearLinksCalled = false;
}
}
-
+
public LinkDiscoveryManager getTopology() {
return ldm;
}
@@ -115,8 +114,8 @@
Link lt = new Link(1L, 2, 2L, 1);
LinkInfo info = new LinkInfo(System.currentTimeMillis(),
- System.currentTimeMillis(), null,
- 0, 0);
+ System.currentTimeMillis(), null,
+ 0, 0);
topology.addOrUpdateLink(lt, info);
@@ -139,8 +138,8 @@
Link lt = new Link(1L, 2, 2L, 1);
LinkInfo info = new LinkInfo(System.currentTimeMillis(),
- System.currentTimeMillis(), null,
- 0, 0);
+ System.currentTimeMillis(), null,
+ 0, 0);
topology.addOrUpdateLink(lt, info);
topology.deleteLinks(Collections.singletonList(lt), "Test");
@@ -161,8 +160,8 @@
NodePortTuple dstNpt = new NodePortTuple(2L, 3);
LinkInfo info = new LinkInfo(System.currentTimeMillis(),
- System.currentTimeMillis(), null,
- 0, 0);
+ System.currentTimeMillis(), null,
+ 0, 0);
topology.addOrUpdateLink(lt, info);
// check invariants hold
@@ -184,8 +183,8 @@
NodePortTuple dstNpt = new NodePortTuple(2L, 3);
LinkInfo info = new LinkInfo(System.currentTimeMillis(),
- System.currentTimeMillis(), null,
- 0, 0);
+ System.currentTimeMillis(), null,
+ 0, 0);
topology.addOrUpdateLink(lt, info);
topology.deleteLinks(Collections.singletonList(lt), "Test to self");
@@ -205,8 +204,8 @@
NodePortTuple srcNpt = new NodePortTuple(1L, 2);
NodePortTuple dstNpt = new NodePortTuple(2L, 1);
LinkInfo info = new LinkInfo(System.currentTimeMillis(),
- System.currentTimeMillis(), null,
- 0, 0);
+ System.currentTimeMillis(), null,
+ 0, 0);
topology.addOrUpdateLink(lt, info);
IOFSwitch sw1 = getMockFloodlightProvider().getSwitches().get(1L);
@@ -230,8 +229,8 @@
replay(sw1);
Link lt = new Link(1L, 2, 1L, 3);
LinkInfo info = new LinkInfo(System.currentTimeMillis(),
- System.currentTimeMillis(), null,
- 0, 0);
+ System.currentTimeMillis(), null,
+ 0, 0);
topology.addOrUpdateLink(lt, info);
// Mock up our expected behavior
@@ -252,12 +251,12 @@
Link lt = new Link(1L, 1, 2L, 1);
NodePortTuple srcNpt = new NodePortTuple(1L, 1);
NodePortTuple dstNpt = new NodePortTuple(2L, 1);
-
+
LinkInfo info;
info = new LinkInfo(System.currentTimeMillis() - 40000,
- System.currentTimeMillis() - 40000, null,
- 0, 0);
+ System.currentTimeMillis() - 40000, null,
+ 0, 0);
topology.addOrUpdateLink(lt, info);
// check invariants hold
@@ -277,8 +276,8 @@
info = new LinkInfo(System.currentTimeMillis(),/* firstseen */
- null,/* unicast */
- System.currentTimeMillis(), 0, 0);
+ null,/* unicast */
+ System.currentTimeMillis(), 0, 0);
topology.addOrUpdateLink(lt, info);
assertTrue(topology.links.get(lt).getUnicastValidTime() == null);
assertTrue(topology.links.get(lt).getMulticastValidTime() != null);
@@ -292,7 +291,7 @@
// with LT_OPENFLOW_LINK, the link property should be changed to LT_NON_OPENFLOW
// by the addOrUpdateLink method.
info = new LinkInfo(System.currentTimeMillis() - 40000,
- System.currentTimeMillis() - 40000, null, 0, 0);
+ System.currentTimeMillis() - 40000, null, 0, 0);
topology.addOrUpdateLink(lt, info);
assertTrue(topology.portBroadcastDomainLinks.get(srcNpt) == null ||
topology.portBroadcastDomainLinks.get(srcNpt).contains(lt) == false);
@@ -309,7 +308,7 @@
// Set the multicastValidTime to be old and see if that also times out.
info = new LinkInfo(System.currentTimeMillis() - 40000,
- null, System.currentTimeMillis() - 40000, 0, 0);
+ null, System.currentTimeMillis() - 40000, 0, 0);
topology.addOrUpdateLink(lt, info);
topology.timeoutLinks();
assertTrue(topology.links.get(lt) == null);
@@ -321,7 +320,7 @@
// Test again only with multicast LLDP
info = new LinkInfo(System.currentTimeMillis() - 40000,
- null, System.currentTimeMillis() - 40000, 0, 0);
+ null, System.currentTimeMillis() - 40000, 0, 0);
topology.addOrUpdateLink(lt, info);
assertTrue(topology.links.get(lt).getUnicastValidTime() == null);
assertTrue(topology.links.get(lt).getMulticastValidTime() != null);
@@ -341,7 +340,7 @@
srcNpt = new NodePortTuple(1L, 1);
dstNpt = new NodePortTuple(1L, 2);
info = new LinkInfo(System.currentTimeMillis() - 40000,
- null, System.currentTimeMillis() - 40000, 0, 0);
+ null, System.currentTimeMillis() - 40000, 0, 0);
topology.addOrUpdateLink(lt, info);
assertTrue(topology.portBroadcastDomainLinks.get(srcNpt).contains(lt));
assertTrue(topology.portBroadcastDomainLinks.get(dstNpt).contains(lt));
@@ -352,7 +351,7 @@
srcNpt = new NodePortTuple(1L, 1);
dstNpt = new NodePortTuple(1L, 3);
info = new LinkInfo(System.currentTimeMillis() - 40000,
- null, System.currentTimeMillis() - 40000, 0, 0);
+ null, System.currentTimeMillis() - 40000, 0, 0);
topology.addOrUpdateLink(lt, info);
assertTrue(topology.portBroadcastDomainLinks.get(srcNpt).contains(lt));
assertTrue(topology.portBroadcastDomainLinks.get(dstNpt).contains(lt));
@@ -363,7 +362,7 @@
srcNpt = new NodePortTuple(1L, 4);
dstNpt = new NodePortTuple(1L, 5);
info = new LinkInfo(System.currentTimeMillis() - 40000,
- null, System.currentTimeMillis() - 40000, 0, 0);
+ null, System.currentTimeMillis() - 40000, 0, 0);
topology.addOrUpdateLink(lt, info);
assertTrue(topology.portBroadcastDomainLinks.get(srcNpt).contains(lt));
assertTrue(topology.portBroadcastDomainLinks.get(dstNpt).contains(lt));
@@ -374,7 +373,7 @@
srcNpt = new NodePortTuple(1L, 3);
dstNpt = new NodePortTuple(1L, 5);
info = new LinkInfo(System.currentTimeMillis() - 40000,
- null, System.currentTimeMillis() - 40000, 0, 0);
+ null, System.currentTimeMillis() - 40000, 0, 0);
topology.addOrUpdateLink(lt, info);
assertTrue(topology.portBroadcastDomainLinks.get(srcNpt).contains(lt));
assertTrue(topology.portBroadcastDomainLinks.get(dstNpt).contains(lt));
diff --git a/src/test/java/net/onrc/onos/core/packet/BSNTest.java b/src/test/java/net/onrc/onos/core/packet/BSNTest.java
index 35027e6..83f4a41 100644
--- a/src/test/java/net/onrc/onos/core/packet/BSNTest.java
+++ b/src/test/java/net/onrc/onos/core/packet/BSNTest.java
@@ -1,19 +1,19 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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.
+ **/
/**
*
@@ -28,38 +28,36 @@
import org.junit.Test;
/**
- *
* @author David Erickson (daviderickson@cs.stanford.edu)
- *
*/
-public class BSNTest {
+public class BSNTest {
protected byte[] probePkt = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // src mac
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, // dst mac
- (byte) 0x89, 0x42, // BSN type
- 0x20, 0x00, 0x06, 0x04, 0x00, 0x01, 0x00, 0x00, // BSN header
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // controller id
- 0x00, 0x00, 0x00, 0x03, // sequence id
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // src mac
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, // dst mac
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, // switch dpid
- 0x00, 0x00, 0x00, 0x01 // port number
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // src mac
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, // dst mac
+ (byte) 0x89, 0x42, // BSN type
+ 0x20, 0x00, 0x06, 0x04, 0x00, 0x01, 0x00, 0x00, // BSN header
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // controller id
+ 0x00, 0x00, 0x00, 0x03, // sequence id
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // src mac
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, // dst mac
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, // switch dpid
+ 0x00, 0x00, 0x00, 0x01 // port number
};
-
+
protected Ethernet getProbePacket() {
return (Ethernet) new Ethernet()
- .setSourceMACAddress("00:00:00:00:00:04")
- .setDestinationMACAddress("00:00:00:00:00:01")
- .setEtherType(Ethernet.TYPE_BSN)
- .setPayload(new BSN(BSN.BSN_TYPE_PROBE)
- .setPayload(new BSNPROBE()
- .setSequenceId(3)
- .setSrcMac(new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x01})
- .setDstMac(new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x04})
- .setSrcSwDpid(0x06)
- .setSrcPortNo(0x01)
- )
- );
+ .setSourceMACAddress("00:00:00:00:00:04")
+ .setDestinationMACAddress("00:00:00:00:00:01")
+ .setEtherType(Ethernet.TYPE_BSN)
+ .setPayload(new BSN(BSN.BSN_TYPE_PROBE)
+ .setPayload(new BSNPROBE()
+ .setSequenceId(3)
+ .setSrcMac(new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x01})
+ .setDstMac(new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x04})
+ .setSrcSwDpid(0x06)
+ .setSrcPortNo(0x01)
+ )
+ );
}
@Test
diff --git a/src/test/java/net/onrc/onos/core/packet/DHCPTest.java b/src/test/java/net/onrc/onos/core/packet/DHCPTest.java
index 4c5aebd..67e552f 100644
--- a/src/test/java/net/onrc/onos/core/packet/DHCPTest.java
+++ b/src/test/java/net/onrc/onos/core/packet/DHCPTest.java
@@ -1,27 +1,26 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.onrc.onos.core.packet;
-
import java.util.Arrays;
import java.util.ListIterator;
@@ -30,10 +29,9 @@
/**
* @author David Erickson (daviderickson@cs.stanford.edu)
- *
*/
public class DHCPTest extends TestCase {
- public byte[] dhcpPacket = new byte[] {
+ public byte[] dhcpPacket = new byte[]{
(byte) 0x01, (byte) 0x01,
(byte) 0x06, (byte) 0x00, (byte) 0x66, (byte) 0xf2, (byte) 0x8a,
(byte) 0x11, (byte) 0x00, (byte) 0x06, (byte) 0x00, (byte) 0x00,
@@ -97,7 +95,7 @@
(byte) 0x00, (byte) 0x00, (byte) 0x00
};
- public byte[] dhcpPacket2 = new byte[] { (byte) 0xff, (byte) 0xff,
+ public byte[] dhcpPacket2 = new byte[]{(byte) 0xff, (byte) 0xff,
(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x00,
(byte) 0xc0, (byte) 0x9f, (byte) 0x9e, (byte) 0x11, (byte) 0x84,
(byte) 0x08, (byte) 0x00, (byte) 0x45, (byte) 0x00, (byte) 0x02,
@@ -215,73 +213,73 @@
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00 };
-
- public byte[] dhcpPacket3 = new byte[] {
+ (byte) 0x00, (byte) 0x00, (byte) 0x00};
+
+ public byte[] dhcpPacket3 = new byte[]{
(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
- (byte) 0xff, (byte) 0x74, (byte) 0x44, (byte) 0x01, (byte) 0x72,
- (byte) 0xd8, (byte) 0x41, (byte) 0x08, (byte) 0x00, (byte) 0x45,
- (byte) 0x00, (byte) 0x01, (byte) 0x1f, (byte) 0x48, (byte) 0xcd,
- (byte) 0x00, (byte) 0x00, (byte) 0x40, (byte) 0x11, (byte) 0x6f,
- (byte) 0x6a, (byte) 0xc0, (byte) 0xa8, (byte) 0x00, (byte) 0xef,
- (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x00,
- (byte) 0x44, (byte) 0x00, (byte) 0x43, (byte) 0x01, (byte) 0x0b,
- (byte) 0xb3, (byte) 0x0f, (byte) 0x01, (byte) 0x01, (byte) 0x06,
- (byte) 0x00, (byte) 0x82, (byte) 0x88, (byte) 0xa6, (byte) 0xc9,
- (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x74, (byte) 0x44, (byte) 0x01, (byte) 0x72, (byte) 0xd8,
- (byte) 0x41, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x63, (byte) 0x82,
- (byte) 0x53, (byte) 0x63, (byte) 0x35, (byte) 0x01, (byte) 0x01,
- (byte) 0x32, (byte) 0x04, (byte) 0xc0, (byte) 0xa8, (byte) 0x0a,
- (byte) 0xa9, (byte) 0x39, (byte) 0x02, (byte) 0x02, (byte) 0x40,
- (byte) 0x37, (byte) 0x03, (byte) 0x01, (byte) 0x03, (byte) 0x06,
- (byte) 0xff
+ (byte) 0xff, (byte) 0x74, (byte) 0x44, (byte) 0x01, (byte) 0x72,
+ (byte) 0xd8, (byte) 0x41, (byte) 0x08, (byte) 0x00, (byte) 0x45,
+ (byte) 0x00, (byte) 0x01, (byte) 0x1f, (byte) 0x48, (byte) 0xcd,
+ (byte) 0x00, (byte) 0x00, (byte) 0x40, (byte) 0x11, (byte) 0x6f,
+ (byte) 0x6a, (byte) 0xc0, (byte) 0xa8, (byte) 0x00, (byte) 0xef,
+ (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x00,
+ (byte) 0x44, (byte) 0x00, (byte) 0x43, (byte) 0x01, (byte) 0x0b,
+ (byte) 0xb3, (byte) 0x0f, (byte) 0x01, (byte) 0x01, (byte) 0x06,
+ (byte) 0x00, (byte) 0x82, (byte) 0x88, (byte) 0xa6, (byte) 0xc9,
+ (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x74, (byte) 0x44, (byte) 0x01, (byte) 0x72, (byte) 0xd8,
+ (byte) 0x41, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x63, (byte) 0x82,
+ (byte) 0x53, (byte) 0x63, (byte) 0x35, (byte) 0x01, (byte) 0x01,
+ (byte) 0x32, (byte) 0x04, (byte) 0xc0, (byte) 0xa8, (byte) 0x0a,
+ (byte) 0xa9, (byte) 0x39, (byte) 0x02, (byte) 0x02, (byte) 0x40,
+ (byte) 0x37, (byte) 0x03, (byte) 0x01, (byte) 0x03, (byte) 0x06,
+ (byte) 0xff
};
-
- public byte[] dhcpPacketPXE = new byte[] { (byte) 0xff, (byte) 0xff,
+
+ public byte[] dhcpPacketPXE = new byte[]{(byte) 0xff, (byte) 0xff,
(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x00,
(byte) 0x19, (byte) 0xb9, (byte) 0xb0, (byte) 0x01, (byte) 0x44,
(byte) 0x08, (byte) 0x00, (byte) 0x45, (byte) 0x10, (byte) 0x01,
@@ -352,7 +350,7 @@
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
};
- public byte[] dhcpPacketBadOption1 = new byte[] { (byte) 0xff, (byte) 0xff,
+ public byte[] dhcpPacketBadOption1 = new byte[]{(byte) 0xff, (byte) 0xff,
(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x00,
(byte) 0x19, (byte) 0xb9, (byte) 0xb0, (byte) 0x01, (byte) 0x44,
(byte) 0x08, (byte) 0x00, (byte) 0x45, (byte) 0x10, (byte) 0x01,
@@ -422,8 +420,8 @@
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
};
-
- public byte[] dhcpPacketBadHeader = new byte[] { (byte) 0xff, (byte) 0xff,
+
+ public byte[] dhcpPacketBadHeader = new byte[]{(byte) 0xff, (byte) 0xff,
(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x00,
(byte) 0x19, (byte) 0xb9, (byte) 0xb0, (byte) 0x01, (byte) 0x44,
(byte) 0x08, (byte) 0x00, (byte) 0x45, (byte) 0x10, (byte) 0x01,
@@ -480,12 +478,12 @@
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
};
-
+
private void resetChecksumsAndLengths(IPv4 ipv4, UDP udp) {
- ipv4.setChecksum((short)0);
- udp.setChecksum((short)0);
+ ipv4.setChecksum((short) 0);
+ udp.setChecksum((short) 0);
}
-
+
public void testSerialize() {
DHCP dhcp = new DHCP();
dhcp.deserialize(dhcpPacket, 0, dhcpPacket.length);
@@ -508,14 +506,14 @@
resetChecksumsAndLengths(ipv4, udp);
assertEquals(DHCP.OPCODE_REQUEST, dhcp.getOpCode());
}
-
+
public void testDeSerializeReSerialize() {
Ethernet eth = new Ethernet();
eth.deserialize(dhcpPacket3, 0, dhcpPacket3.length);
assertTrue(eth.getPayload() instanceof IPv4);
IPv4 ipv4 = (IPv4) eth.getPayload();
assertTrue(ipv4.getPayload() instanceof UDP);
-
+
byte[] serializedPacket = eth.serialize();
Ethernet eth2 = new Ethernet();
eth2.deserialize(serializedPacket, 0, serializedPacket.length);
@@ -523,7 +521,7 @@
short ipchecksum = ipv42.getChecksum();
ipv42.setChecksum((short) 0);
- eth2.serialize();
+ eth2.serialize();
assertEquals(ipchecksum, ipv42.getChecksum());
}
@@ -540,14 +538,14 @@
* length field so that the serialize() function can re-compute them
*/
resetChecksumsAndLengths(ipv4, udp);
-
+
assertEquals(DHCP.OPCODE_REPLY, dhcp.getOpCode());
assertEquals("xenserver_5.6/pxelinux.0", dhcp.getBootFileName());
byte[] result = eth.serialize();
assertTrue(Arrays.equals(this.dhcpPacketPXE, result));
}
-
+
public void testDeSerializeBad1() {
Ethernet eth = new Ethernet();
eth.deserialize(dhcpPacketBadOption1, 0, dhcpPacketBadOption1.length);
@@ -561,21 +559,21 @@
* length field so that the serialize() function can re-compute them
*/
resetChecksumsAndLengths(ipv4, udp);
-
+
assertEquals(DHCP.OPCODE_REPLY, dhcp.getOpCode());
ListIterator<DHCPOption> lit = dhcp.getOptions().listIterator();
// Expect 5 correct options and an END option.
assertEquals(dhcp.getOptions().size(), 6);
while (lit.hasNext()) {
DHCPOption option = lit.next();
- assertFalse(option.code == (byte)0x0c);
+ assertFalse(option.code == (byte) 0x0c);
}
byte[] result = eth.serialize();
// Since one option is badly formated, the result is different.
assertFalse(Arrays.equals(this.dhcpPacketPXE, result));
}
-
+
public void testDeSerializeBadHeader() {
Ethernet eth = new Ethernet();
eth.deserialize(dhcpPacketBadHeader, 0, dhcpPacketBadHeader.length);
@@ -588,7 +586,7 @@
assertEquals(UDP.DHCP_CLIENT_PORT, udp.getSourcePort());
assertEquals(UDP.DHCP_SERVER_PORT, udp.getDestinationPort());
-
+
// should get invalid opCode of 0
assertEquals(0, dhcp.getOpCode());
}
diff --git a/src/test/java/net/onrc/onos/core/packet/EthernetTest.java b/src/test/java/net/onrc/onos/core/packet/EthernetTest.java
index 8d60586..9ee7064 100644
--- a/src/test/java/net/onrc/onos/core/packet/EthernetTest.java
+++ b/src/test/java/net/onrc/onos/core/packet/EthernetTest.java
@@ -1,22 +1,22 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.onrc.onos.core.packet;
@@ -29,12 +29,11 @@
/**
* @author David Erickson (daviderickson@cs.stanford.edu)
- *
*/
public class EthernetTest {
@Test
public void testToMACAddress() {
- byte[] address = new byte[] { 0x0, 0x11, 0x22, (byte) 0xff,
+ byte[] address = new byte[]{0x0, 0x11, 0x22, (byte) 0xff,
(byte) 0xee, (byte) 0xdd};
assertTrue(Arrays.equals(address, Ethernet
.toMACAddress("00:11:22:ff:ee:dd")));
@@ -45,13 +44,13 @@
@Test
public void testSerialize() {
Ethernet ethernet = new Ethernet()
- .setDestinationMACAddress("de:ad:be:ef:de:ad")
- .setSourceMACAddress("be:ef:de:ad:be:ef")
- .setEtherType((short) 0);
- byte[] expected = new byte[] { (byte) 0xde, (byte) 0xad, (byte) 0xbe,
+ .setDestinationMACAddress("de:ad:be:ef:de:ad")
+ .setSourceMACAddress("be:ef:de:ad:be:ef")
+ .setEtherType((short) 0);
+ byte[] expected = new byte[]{(byte) 0xde, (byte) 0xad, (byte) 0xbe,
(byte) 0xef, (byte) 0xde, (byte) 0xad, (byte) 0xbe,
(byte) 0xef, (byte) 0xde, (byte) 0xad, (byte) 0xbe,
- (byte) 0xef, 0x0, 0x0 };
+ (byte) 0xef, 0x0, 0x0};
assertTrue(Arrays.equals(expected, ethernet.serialize()));
}
@@ -59,17 +58,17 @@
public void testToLong() {
assertEquals(
281474976710655L,
- Ethernet.toLong(new byte[] { (byte) 0xff, (byte) 0xff,
- (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff }));
+ Ethernet.toLong(new byte[]{(byte) 0xff, (byte) 0xff,
+ (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff}));
assertEquals(
1103823438081L,
- Ethernet.toLong(new byte[] { (byte) 0x01, (byte) 0x01,
- (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01 }));
+ Ethernet.toLong(new byte[]{(byte) 0x01, (byte) 0x01,
+ (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x01}));
assertEquals(
141289400074368L,
- Ethernet.toLong(new byte[] { (byte) 0x80, (byte) 0x80,
- (byte) 0x80, (byte) 0x80, (byte) 0x80, (byte) 0x80 }));
+ Ethernet.toLong(new byte[]{(byte) 0x80, (byte) 0x80,
+ (byte) 0x80, (byte) 0x80, (byte) 0x80, (byte) 0x80}));
}
}
diff --git a/src/test/java/net/onrc/onos/core/packet/ICMPTest.java b/src/test/java/net/onrc/onos/core/packet/ICMPTest.java
index 14df760..9d5f084 100644
--- a/src/test/java/net/onrc/onos/core/packet/ICMPTest.java
+++ b/src/test/java/net/onrc/onos/core/packet/ICMPTest.java
@@ -1,22 +1,22 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.onrc.onos.core.packet;
@@ -30,7 +30,7 @@
* @author shudong.zhou@bigswitch.com
*/
public class ICMPTest {
- private byte[] pktSerialized = new byte[] {
+ private byte[] pktSerialized = new byte[]{
// (byte) 0xc8, 0x2a, 0x14, 0x2d, 0x35, (byte) 0xf1,
// 0x00, 0x0c, 0x29, 0x3b, (byte) 0x95, (byte) 0xf2, 0x08, 0x0,
0x45, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01,
@@ -38,25 +38,26 @@
(byte) 0xc0, (byte) 0xa8, (byte) 0x0a, (byte) 0xe7,
(byte) 0xc0, (byte) 0xa8, (byte) 0x0a, (byte) 0xdb,
0x08, 0x00, 0x7f, 0x0a, 0x76, (byte) 0xf2, 0x00, 0x02,
- 0x01, 0x01, 0x01 };
+ 0x01, 0x01, 0x01};
+
@Test
public void testSerialize() {
IPacket packet = new IPv4()
- .setIdentification((short) 0)
- .setFlags((byte) 0x02)
- .setTtl((byte) 64)
- .setSourceAddress("192.168.10.231")
- .setDestinationAddress("192.168.10.219")
- .setPayload(new ICMP()
- .setIcmpType((byte) 8)
- .setIcmpCode((byte) 0)
- .setPayload(new Data(new byte[]
- {0x76, (byte) 0xf2, 0x0, 0x2, 0x1, 0x1, 0x1}))
- );
+ .setIdentification((short) 0)
+ .setFlags((byte) 0x02)
+ .setTtl((byte) 64)
+ .setSourceAddress("192.168.10.231")
+ .setDestinationAddress("192.168.10.219")
+ .setPayload(new ICMP()
+ .setIcmpType((byte) 8)
+ .setIcmpCode((byte) 0)
+ .setPayload(new Data(new byte[]
+ {0x76, (byte) 0xf2, 0x0, 0x2, 0x1, 0x1, 0x1}))
+ );
byte[] actual = packet.serialize();
assertTrue(Arrays.equals(pktSerialized, actual));
}
-
+
@Test
public void testDeserialize() {
IPacket packet = new IPv4();
diff --git a/src/test/java/net/onrc/onos/core/packet/IPv4Test.java b/src/test/java/net/onrc/onos/core/packet/IPv4Test.java
index c764159..c113219 100644
--- a/src/test/java/net/onrc/onos/core/packet/IPv4Test.java
+++ b/src/test/java/net/onrc/onos/core/packet/IPv4Test.java
@@ -1,22 +1,22 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.onrc.onos.core.packet;
@@ -30,14 +30,13 @@
/**
* @author David Erickson (daviderickson@cs.stanford.edu)
- *
*/
public class IPv4Test {
@Test
public void testToIPv4Address() {
int intIp = 0xc0a80001;
String stringIp = "192.168.0.1";
- byte[] byteIp = new byte[] {(byte)192, (byte)168, (byte)0, (byte)1};
+ byte[] byteIp = new byte[]{(byte) 192, (byte) 168, (byte) 0, (byte) 1};
assertEquals(intIp, IPv4.toIPv4Address(stringIp));
assertEquals(intIp, IPv4.toIPv4Address(byteIp));
assertTrue(Arrays.equals(byteIp, IPv4.toIPv4AddressBytes(intIp)));
@@ -46,33 +45,33 @@
@Test
public void testToIPv4AddressBytes() {
- byte[] expected = new byte[] {(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff};
+ byte[] expected = new byte[]{(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff};
Assert.assertArrayEquals(expected, IPv4.toIPv4AddressBytes("255.255.255.255"));
- expected = new byte[] {(byte) 0x80, (byte) 0x80, (byte) 0x80, (byte) 0x80};
+ expected = new byte[]{(byte) 0x80, (byte) 0x80, (byte) 0x80, (byte) 0x80};
Assert.assertArrayEquals(expected, IPv4.toIPv4AddressBytes("128.128.128.128"));
- expected = new byte[] {0x7f,0x7f,0x7f,0x7f};
+ expected = new byte[]{0x7f, 0x7f, 0x7f, 0x7f};
Assert.assertArrayEquals(expected, IPv4.toIPv4AddressBytes("127.127.127.127"));
}
@Test
public void testSerialize() {
- byte[] expected = new byte[] { 0x45, 0x00, 0x00, 0x14, 0x5e, 0x4e,
+ byte[] expected = new byte[]{0x45, 0x00, 0x00, 0x14, 0x5e, 0x4e,
0x00, 0x00, 0x3f, 0x06, 0x31, 0x2e, (byte) 0xac, 0x18,
- 0x4a, (byte) 0xdf, (byte) 0xab, 0x40, 0x4a, 0x30 };
+ 0x4a, (byte) 0xdf, (byte) 0xab, 0x40, 0x4a, 0x30};
IPv4 packet = new IPv4()
- .setIdentification((short) 24142)
- .setTtl((byte) 63)
- .setProtocol((byte) 0x06)
- .setSourceAddress("172.24.74.223")
- .setDestinationAddress("171.64.74.48");
+ .setIdentification((short) 24142)
+ .setTtl((byte) 63)
+ .setProtocol((byte) 0x06)
+ .setSourceAddress("172.24.74.223")
+ .setDestinationAddress("171.64.74.48");
byte[] actual = packet.serialize();
assertTrue(Arrays.equals(expected, actual));
}
-
+
@Test
public void testDeserialize() {
// A real TLSv1 packet
- byte[] pktSerialized = new byte[] { 0x45, 0x00,
+ byte[] pktSerialized = new byte[]{0x45, 0x00,
0x00, 0x2e, 0x41, (byte) 0xbe, 0x40, 0x00, 0x40, 0x06,
(byte) 0xd4, (byte) 0xf0, (byte) 0xc0, (byte) 0xa8, 0x02, (byte) 0xdb, (byte) 0xd0, 0x55,
(byte) 0x90, 0x42, (byte) 0xd5, 0x48, 0x01, (byte) 0xbb, (byte) 0xe3, 0x50,
diff --git a/src/test/java/net/onrc/onos/core/packet/LLDPOrganizationalTLVTest.java b/src/test/java/net/onrc/onos/core/packet/LLDPOrganizationalTLVTest.java
index ddb8bd5..f680e93 100644
--- a/src/test/java/net/onrc/onos/core/packet/LLDPOrganizationalTLVTest.java
+++ b/src/test/java/net/onrc/onos/core/packet/LLDPOrganizationalTLVTest.java
@@ -23,15 +23,15 @@
import org.junit.Test;
public class LLDPOrganizationalTLVTest {
- private final byte[] expected = new byte[] {
- // Type: 127, Length: 13
- (byte) 254, 13,
- // OpenFlow OUI: 00-26-E1
- 0x0, 0x26, (byte)0xe1,
- // SubType: 12
- 0xc,
- // Bytes in "ExtraInfo"
- 0x45, 0x78, 0x74, 0x72, 0x61, 0x49, 0x6e, 0x66, 0x6f
+ private final byte[] expected = new byte[]{
+ // Type: 127, Length: 13
+ (byte) 254, 13,
+ // OpenFlow OUI: 00-26-E1
+ 0x0, 0x26, (byte) 0xe1,
+ // SubType: 12
+ 0xc,
+ // Bytes in "ExtraInfo"
+ 0x45, 0x78, 0x74, 0x72, 0x61, 0x49, 0x6e, 0x66, 0x6f
};
@Test(expected = IllegalArgumentException.class)
@@ -70,14 +70,14 @@
LLDPOrganizationalTLV tlv = new LLDPOrganizationalTLV();
tlv.setLength((short) 13);
// OpenFlow OUI is 00-26-E1
- tlv.setOUI(new byte[] {0x0, 0x26, (byte) 0xe1});
+ tlv.setOUI(new byte[]{0x0, 0x26, (byte) 0xe1});
tlv.setSubType((byte) 12);
tlv.setInfoString("ExtraInfo".getBytes(Charset.forName("UTF-8")));
- assertThat(tlv.getType(), is((byte)127));
- assertThat(tlv.getLength(), is((short)13));
- assertThat(tlv.getOUI(), is(new byte[] {0x0, 0x26, (byte) 0xe1}));
- assertThat(tlv.getSubType(), is((byte)12));
+ assertThat(tlv.getType(), is((byte) 127));
+ assertThat(tlv.getLength(), is((short) 13));
+ assertThat(tlv.getOUI(), is(new byte[]{0x0, 0x26, (byte) 0xe1}));
+ assertThat(tlv.getSubType(), is((byte) 12));
assertThat(tlv.serialize(), is(expected));
}
@@ -86,10 +86,10 @@
LLDPOrganizationalTLV tlv = new LLDPOrganizationalTLV();
tlv.deserialize(ByteBuffer.wrap(expected));
- assertThat(tlv.getType(), is((byte)127));
- assertThat(tlv.getLength(), is((short)13));
- assertThat(tlv.getOUI(), is(new byte[] {0x0, 0x26, (byte) 0xe1}));
- assertThat(tlv.getSubType(), is((byte)12));
+ assertThat(tlv.getType(), is((byte) 127));
+ assertThat(tlv.getLength(), is((short) 13));
+ assertThat(tlv.getOUI(), is(new byte[]{0x0, 0x26, (byte) 0xe1}));
+ assertThat(tlv.getSubType(), is((byte) 12));
assertThat(tlv.getInfoString(), is("ExtraInfo".getBytes(Charset.forName("UTF-8"))));
}
}
diff --git a/src/test/java/net/onrc/onos/core/packet/LLDPTest.java b/src/test/java/net/onrc/onos/core/packet/LLDPTest.java
index 4905e9f..928ee72 100755
--- a/src/test/java/net/onrc/onos/core/packet/LLDPTest.java
+++ b/src/test/java/net/onrc/onos/core/packet/LLDPTest.java
@@ -1,19 +1,19 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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.
+ **/
/**
*
@@ -28,29 +28,27 @@
import org.junit.Test;
/**
- *
* @author David Erickson (daviderickson@cs.stanford.edu)
- *
*/
public class LLDPTest {
- protected byte[] pkt = {0x01,0x23,0x20,0x00,0x00,0x01,0x00,0x12,(byte) 0xe2,0x78,0x67,0x78,(byte) 0x88,(byte) 0xcc,0x02,0x07,
- 0x04,0x00,0x12,(byte) 0xe2,0x78,0x67,0x64,0x04,0x03,0x02,0x00,0x06,0x06,0x02,0x00,0x78,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+ protected byte[] pkt = {0x01, 0x23, 0x20, 0x00, 0x00, 0x01, 0x00, 0x12, (byte) 0xe2, 0x78, 0x67, 0x78, (byte) 0x88, (byte) 0xcc, 0x02, 0x07,
+ 0x04, 0x00, 0x12, (byte) 0xe2, 0x78, 0x67, 0x64, 0x04, 0x03, 0x02, 0x00, 0x06, 0x06, 0x02, 0x00, 0x78,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
protected IPacket getPacket() {
return new Ethernet()
- .setPad(true)
- .setDestinationMACAddress("01:23:20:00:00:01")
- .setSourceMACAddress("00:12:e2:78:67:78")
- .setEtherType(Ethernet.TYPE_LLDP)
- .setPayload(
- new LLDP()
- .setChassisId(new LLDPTLV().setType((byte) 1).setLength((short) 7).setValue(new byte[] {0x04, 0x00, 0x12, (byte) 0xe2, 0x78, 0x67, 0x64}))
- .setPortId(new LLDPTLV().setType((byte) 2).setLength((short) 3).setValue(new byte[] {0x02, 0x00, 0x06}))
- .setTtl(new LLDPTLV().setType((byte) 3).setLength((short) 2).setValue(new byte[] {0x00, 0x78}))
-
- );
+ .setPad(true)
+ .setDestinationMACAddress("01:23:20:00:00:01")
+ .setSourceMACAddress("00:12:e2:78:67:78")
+ .setEtherType(Ethernet.TYPE_LLDP)
+ .setPayload(
+ new LLDP()
+ .setChassisId(new LLDPTLV().setType((byte) 1).setLength((short) 7).setValue(new byte[]{0x04, 0x00, 0x12, (byte) 0xe2, 0x78, 0x67, 0x64}))
+ .setPortId(new LLDPTLV().setType((byte) 2).setLength((short) 3).setValue(new byte[]{0x02, 0x00, 0x06}))
+ .setTtl(new LLDPTLV().setType((byte) 3).setLength((short) 2).setValue(new byte[]{0x00, 0x78}))
+
+ );
}
@Test
diff --git a/src/test/java/net/onrc/onos/core/packet/PacketTest.java b/src/test/java/net/onrc/onos/core/packet/PacketTest.java
index e57cba6..ab5247e 100644
--- a/src/test/java/net/onrc/onos/core/packet/PacketTest.java
+++ b/src/test/java/net/onrc/onos/core/packet/PacketTest.java
@@ -11,83 +11,83 @@
protected IPacket pkt1, pkt2, pkt3, pkt4;
protected IPacket dummyPkt;
protected IPacket[] packets;
-
+
@Before
public void setUp() {
this.pkt1 = new Ethernet()
- .setDestinationMACAddress("00:11:22:33:44:55")
- .setSourceMACAddress("00:44:33:22:11:00")
- .setEtherType(Ethernet.TYPE_IPv4)
- .setPayload(
- new IPv4()
- .setTtl((byte) 128)
- .setSourceAddress("192.168.1.1")
- .setDestinationAddress("192.168.1.2")
- .setPayload(new UDP()
- .setSourcePort((short) 5000)
- .setDestinationPort((short) 5001)
- .setPayload(new Data(new byte[] {0x01}))));
-
+ .setDestinationMACAddress("00:11:22:33:44:55")
+ .setSourceMACAddress("00:44:33:22:11:00")
+ .setEtherType(Ethernet.TYPE_IPv4)
+ .setPayload(
+ new IPv4()
+ .setTtl((byte) 128)
+ .setSourceAddress("192.168.1.1")
+ .setDestinationAddress("192.168.1.2")
+ .setPayload(new UDP()
+ .setSourcePort((short) 5000)
+ .setDestinationPort((short) 5001)
+ .setPayload(new Data(new byte[]{0x01}))));
+
this.pkt2 = new Ethernet()
- .setSourceMACAddress("00:44:33:22:11:01")
- .setDestinationMACAddress("00:11:22:33:44:55")
- .setEtherType(Ethernet.TYPE_ARP)
- .setVlanID((short)5)
- .setPayload(
- new ARP()
- .setHardwareType(ARP.HW_TYPE_ETHERNET)
- .setProtocolType(ARP.PROTO_TYPE_IP)
- .setHardwareAddressLength((byte) 6)
- .setProtocolAddressLength((byte) 4)
- .setOpCode(ARP.OP_REPLY)
- .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:01"))
- .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
- .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
- .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
-
-
+ .setSourceMACAddress("00:44:33:22:11:01")
+ .setDestinationMACAddress("00:11:22:33:44:55")
+ .setEtherType(Ethernet.TYPE_ARP)
+ .setVlanID((short) 5)
+ .setPayload(
+ new ARP()
+ .setHardwareType(ARP.HW_TYPE_ETHERNET)
+ .setProtocolType(ARP.PROTO_TYPE_IP)
+ .setHardwareAddressLength((byte) 6)
+ .setProtocolAddressLength((byte) 4)
+ .setOpCode(ARP.OP_REPLY)
+ .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:01"))
+ .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
+ .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
+ .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
+
+
this.pkt3 = new Ethernet()
- .setSourceMACAddress("00:44:33:22:11:01")
- .setDestinationMACAddress("00:11:22:33:44:55")
- .setEtherType(Ethernet.TYPE_ARP)
- .setPayload(
- new ARP()
- .setHardwareType(ARP.HW_TYPE_ETHERNET)
- .setProtocolType(ARP.PROTO_TYPE_IP)
- .setHardwareAddressLength((byte) 6)
- .setProtocolAddressLength((byte) 4)
- .setOpCode(ARP.OP_REPLY)
- .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:01"))
- .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
- .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
- .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
-
+ .setSourceMACAddress("00:44:33:22:11:01")
+ .setDestinationMACAddress("00:11:22:33:44:55")
+ .setEtherType(Ethernet.TYPE_ARP)
+ .setPayload(
+ new ARP()
+ .setHardwareType(ARP.HW_TYPE_ETHERNET)
+ .setProtocolType(ARP.PROTO_TYPE_IP)
+ .setHardwareAddressLength((byte) 6)
+ .setProtocolAddressLength((byte) 4)
+ .setOpCode(ARP.OP_REPLY)
+ .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:01"))
+ .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
+ .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
+ .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
+
this.pkt4 = new Ethernet()
- .setDestinationMACAddress("FF:FF:FF:FF:FF:FF")
- .setSourceMACAddress("00:11:33:55:77:01")
- .setEtherType(Ethernet.TYPE_IPv4)
- .setPayload(
- new IPv4()
- .setTtl((byte) 128)
- .setSourceAddress("192.168.10.1")
- .setDestinationAddress("192.168.255.255")
- .setPayload(new UDP()
- .setSourcePort((short) 5000)
- .setDestinationPort((short) 5001)
- .setPayload(new Data(new byte[] {0x01}))));
-
- this.dummyPkt = new IPv4()
- .setTtl((byte) 32)
- .setSourceAddress("1.2.3.4")
- .setDestinationAddress("5.6.7.8");
-
- this.packets = new IPacket[] { pkt1, pkt2, pkt3, pkt4 };
+ .setDestinationMACAddress("FF:FF:FF:FF:FF:FF")
+ .setSourceMACAddress("00:11:33:55:77:01")
+ .setEtherType(Ethernet.TYPE_IPv4)
+ .setPayload(
+ new IPv4()
+ .setTtl((byte) 128)
+ .setSourceAddress("192.168.10.1")
+ .setDestinationAddress("192.168.255.255")
+ .setPayload(new UDP()
+ .setSourcePort((short) 5000)
+ .setDestinationPort((short) 5001)
+ .setPayload(new Data(new byte[]{0x01}))));
+
+ this.dummyPkt = new IPv4()
+ .setTtl((byte) 32)
+ .setSourceAddress("1.2.3.4")
+ .setDestinationAddress("5.6.7.8");
+
+ this.packets = new IPacket[]{pkt1, pkt2, pkt3, pkt4};
}
-
+
protected void doTestClone(IPacket pkt) {
if (pkt.getPayload() != null)
doTestClone(pkt.getPayload());
- IPacket newPkt = (IPacket)pkt.clone();
+ IPacket newPkt = (IPacket) pkt.clone();
assertSame(pkt.getClass(), newPkt.getClass());
assertNotSame(pkt, newPkt);
assertSame(pkt.getParent(), newPkt.getParent());
@@ -95,35 +95,35 @@
assertEquals(pkt.getPayload(), newPkt.getPayload());
if (pkt.getPayload() != null)
assertNotSame(pkt.getPayload(), newPkt.getPayload());
-
+
if (pkt instanceof Ethernet) {
- Ethernet eth = (Ethernet)pkt;
- Ethernet newEth = (Ethernet)newPkt;
- newEth.setDestinationMACAddress(new byte[] { 1,2,3,4,5,6});
+ Ethernet eth = (Ethernet) pkt;
+ Ethernet newEth = (Ethernet) newPkt;
+ newEth.setDestinationMACAddress(new byte[]{1, 2, 3, 4, 5, 6});
assertEquals(false, newEth.getDestinationMAC()
- .equals(eth.getDestinationMAC()));
+ .equals(eth.getDestinationMAC()));
assertEquals(false, newPkt.equals(pkt));
}
if (pkt instanceof ARP) {
- ARP arp = (ARP)pkt;
- ARP newArp = (ARP)newPkt;
- newArp.setSenderProtocolAddress(new byte[] {1,2,3,4});
+ ARP arp = (ARP) pkt;
+ ARP newArp = (ARP) newPkt;
+ newArp.setSenderProtocolAddress(new byte[]{1, 2, 3, 4});
assertEquals(false, newArp.getSenderProtocolAddress()
- .equals(arp.getSenderProtocolAddress()));
+ .equals(arp.getSenderProtocolAddress()));
assertEquals(false, newPkt.equals(pkt));
}
-
+
byte[] dummyData = dummyPkt.serialize().clone();
- newPkt = (IPacket)pkt.clone();
+ newPkt = (IPacket) pkt.clone();
newPkt.deserialize(dummyData, 0, dummyData.length);
assertEquals(false, newPkt.equals(pkt));
}
-
+
@Test
public void testClone() {
- for (IPacket pkt: packets) {
+ for (IPacket pkt : packets) {
doTestClone(pkt);
}
}
-
+
}
diff --git a/src/test/java/net/onrc/onos/core/packet/TCPTest.java b/src/test/java/net/onrc/onos/core/packet/TCPTest.java
index 38e6a92..8843490 100644
--- a/src/test/java/net/onrc/onos/core/packet/TCPTest.java
+++ b/src/test/java/net/onrc/onos/core/packet/TCPTest.java
@@ -1,22 +1,22 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.onrc.onos.core.packet;
@@ -30,7 +30,7 @@
* @author shudong.zhou@bigswitch.com
*/
public class TCPTest {
- private byte[] pktSerialized = new byte[] { 0x45, 0x20,
+ private byte[] pktSerialized = new byte[]{0x45, 0x20,
0x00, 0x34, 0x1d, (byte) 0x85, 0x00, 0x00, 0x32, 0x06,
0x31, 0x1e, 0x4a, 0x7d, 0x2d, 0x6d, (byte) 0xc0, (byte) 0xa8,
0x01, 0x6f, 0x03, (byte) 0xe1, (byte) 0xc0, 0x32, (byte) 0xe3, (byte) 0xad,
@@ -38,17 +38,17 @@
0x01, 0x0b, 0x59, 0x33, 0x00, 0x00, 0x01, 0x01,
0x08, 0x0a, 0x20, (byte) 0x9a, 0x41, 0x04, 0x07, 0x76,
0x53, 0x1f};
-
+
@Test
public void testSerialize() {
IPacket packet = new IPv4()
- .setDiffServ((byte) 0x20)
- .setIdentification((short) 0x1d85)
- .setFlags((byte) 0x00)
- .setTtl((byte) 50)
- .setSourceAddress("74.125.45.109")
- .setDestinationAddress("192.168.1.111")
- .setPayload(new TCP()
+ .setDiffServ((byte) 0x20)
+ .setIdentification((short) 0x1d85)
+ .setFlags((byte) 0x00)
+ .setTtl((byte) 50)
+ .setSourceAddress("74.125.45.109")
+ .setDestinationAddress("192.168.1.111")
+ .setPayload(new TCP()
.setSourcePort((short) 993)
.setDestinationPort((short) 49202)
.setSequence(0xe3adee88)
@@ -56,14 +56,14 @@
.setDataOffset((byte) 8)
.setFlags((short) 0x10)
.setWindowSize((short) 267)
- .setOptions(new byte[] {0x01, 0x01, 0x08, 0x0a, 0x20, (byte) 0x9a,
- 0x41, 0x04, 0x07, 0x76, 0x53, 0x1f})
+ .setOptions(new byte[]{0x01, 0x01, 0x08, 0x0a, 0x20, (byte) 0x9a,
+ 0x41, 0x04, 0x07, 0x76, 0x53, 0x1f})
.setPayload(null)
- );
+ );
byte[] actual = packet.serialize();
assertTrue(Arrays.equals(pktSerialized, actual));
}
-
+
@Test
public void testDeserialize() {
IPacket packet = new IPv4();
diff --git a/src/test/java/net/onrc/onos/core/packet/UDPTest.java b/src/test/java/net/onrc/onos/core/packet/UDPTest.java
index 3c76e4a..34cf19e 100644
--- a/src/test/java/net/onrc/onos/core/packet/UDPTest.java
+++ b/src/test/java/net/onrc/onos/core/packet/UDPTest.java
@@ -1,22 +1,22 @@
/**
-* Copyright 2011, Big Switch Networks, Inc.
-* Originally created by David Erickson, Stanford University
-*
-* 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.
-**/
+ * Copyright 2011, Big Switch Networks, Inc.
+ * Originally created by David Erickson, Stanford University
+ *
+ * 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 net.onrc.onos.core.packet;
@@ -28,27 +28,26 @@
/**
* @author David Erickson (daviderickson@cs.stanford.edu)
- *
*/
public class UDPTest {
@Test
public void testSerialize() {
- byte[] expected = new byte[] { 0x45, 0x00, 0x00, 0x1d, 0x56, 0x23,
+ byte[] expected = new byte[]{0x45, 0x00, 0x00, 0x1d, 0x56, 0x23,
0x00, 0x00, (byte) 0x80, 0x11, 0x48, 0x7f, (byte) 0xc0,
(byte) 0xa8, 0x01, 0x02, 0x0c, (byte) 0x81, (byte) 0xce, 0x02,
0x17, (byte) 0xe1, 0x04, 0x5f, 0x00, 0x09, 0x46, 0x6e,
- 0x01 };
+ 0x01};
IPacket packet = new IPv4()
- .setIdentification((short) 22051)
- .setTtl((byte) 128)
- .setSourceAddress("192.168.1.2")
- .setDestinationAddress("12.129.206.2")
- .setPayload(new UDP()
- .setSourcePort((short) 6113)
- .setDestinationPort((short) 1119)
- .setPayload(new Data(new byte[] {0x01}))
- );
+ .setIdentification((short) 22051)
+ .setTtl((byte) 128)
+ .setSourceAddress("192.168.1.2")
+ .setDestinationAddress("12.129.206.2")
+ .setPayload(new UDP()
+ .setSourcePort((short) 6113)
+ .setDestinationPort((short) 1119)
+ .setPayload(new Data(new byte[]{0x01}))
+ );
byte[] actual = packet.serialize();
assertTrue(Arrays.equals(expected, actual));
}
diff --git a/src/test/java/net/onrc/onos/core/registry/StandaloneRegistryTest.java b/src/test/java/net/onrc/onos/core/registry/StandaloneRegistryTest.java
index 38df943..a8ea8e1 100644
--- a/src/test/java/net/onrc/onos/core/registry/StandaloneRegistryTest.java
+++ b/src/test/java/net/onrc/onos/core/registry/StandaloneRegistryTest.java
@@ -27,441 +27,471 @@
/**
* Unit test for {@link StandaloneRegistry}.
- * @author Naoki Shiota
*
+ * @author Naoki Shiota
*/
public class StandaloneRegistryTest {
- protected static final long TIMEOUT_MSEC = 1000;
-
- protected StandaloneRegistry registry;
-
- /**
- * Implementation of {@link ControlChangeCallback} which defines callback interfaces called by Registry.
- * This class remembers past callback parameters and provides methods to access them.
- * This class also provides CountDownLatch so one can wait until the callback be called
- * specific times (specified by constructor parameter). Particularly, the first time callback
- * called is supposed for registration, this class has an independent latch to wait for
- * the first callback.
- * @author Naoki Shiota
- */
- public static class LoggingCallback implements ControlChangeCallback {
- private LinkedList<Long> dpidsCalledback = new LinkedList<Long>();
- private LinkedList<Boolean> controlsCalledback = new LinkedList<Boolean>();
- private CountDownLatch lock = null, registerLock = null;;
-
- /**
- * Constructor with number of times callback to be called.
- * @param numberToCall Number of times expected callback to be called
- */
- public LoggingCallback(int numberToCall) {
- lock = new CountDownLatch(numberToCall);
- registerLock = new CountDownLatch(1);
- }
+ protected static final long TIMEOUT_MSEC = 1000;
- /**
- * Wait until registration is finished (callback is called for the first time).
- * @throws InterruptedException
- */
- public void waitForRegistration() throws InterruptedException {
- registerLock.await();
- }
-
- /**
- * Wait for registration specifying timeout.
- * @param msec Milliseconds to timeout
- * @throws InterruptedException
- */
- public void waitForRegistration(long msec) throws InterruptedException {
- registerLock.await(msec, TimeUnit.MILLISECONDS);
- }
+ protected StandaloneRegistry registry;
- /**
- * Wait until callback is called specific times.
- * @throws InterruptedException
- */
- public void waitUntilCalled() throws InterruptedException {
- lock.await();
- }
-
- /**
- * Wait until callback is called specific times, specifying timeout.
- * @param msec Milliseconds to timeout
- * @throws InterruptedException
- */
- public void waitUntilCalled(long msec) throws InterruptedException {
- lock.await(msec, TimeUnit.MILLISECONDS);
- }
-
- /**
- * Get DPID parameter given by specific callback time.
- * @param index Specify which time to get parameter
- * @return DPID value by number.
- */
- public Long getDpid(int index) { return dpidsCalledback.get(index); }
-
- /**
- * Get hasControl parameter given by specific callback time.
- * @param index Specify which time to get parameter
- * @return hasControl value
- */
- public Boolean getControl(int index) { return controlsCalledback.get(index); }
-
- /**
- * Get DPID parameter given by latest call.
- * @return DPID value by number
- */
- public Long getLatestDpid() { return dpidsCalledback.peekLast(); }
-
- /**
- * Get hasControl parameter given by latest call
- * @return hasControl value
- */
- public Boolean getLatestControl() { return controlsCalledback.peekLast(); }
-
- @Override
- public void controlChanged(long dpid, boolean hasControl) {
- dpidsCalledback.addLast(dpid);
- controlsCalledback.addLast(hasControl);
-
- lock.countDown();
- registerLock.countDown();
- }
- };
-
- @Before
- public void setUp() throws Exception {
+ /**
+ * Implementation of {@link ControlChangeCallback} which defines callback interfaces called by Registry.
+ * This class remembers past callback parameters and provides methods to access them.
+ * This class also provides CountDownLatch so one can wait until the callback be called
+ * specific times (specified by constructor parameter). Particularly, the first time callback
+ * called is supposed for registration, this class has an independent latch to wait for
+ * the first callback.
+ *
+ * @author Naoki Shiota
+ */
+ public static class LoggingCallback implements ControlChangeCallback {
+ private LinkedList<Long> dpidsCalledback = new LinkedList<Long>();
+ private LinkedList<Boolean> controlsCalledback = new LinkedList<Boolean>();
+ private CountDownLatch lock = null, registerLock = null;
+ ;
+
+ /**
+ * Constructor with number of times callback to be called.
+ *
+ * @param numberToCall Number of times expected callback to be called
+ */
+ public LoggingCallback(int numberToCall) {
+ lock = new CountDownLatch(numberToCall);
+ registerLock = new CountDownLatch(1);
+ }
+
+ /**
+ * Wait until registration is finished (callback is called for the first time).
+ *
+ * @throws InterruptedException
+ */
+ public void waitForRegistration() throws InterruptedException {
+ registerLock.await();
+ }
+
+ /**
+ * Wait for registration specifying timeout.
+ *
+ * @param msec Milliseconds to timeout
+ * @throws InterruptedException
+ */
+ public void waitForRegistration(long msec) throws InterruptedException {
+ registerLock.await(msec, TimeUnit.MILLISECONDS);
+ }
+
+ /**
+ * Wait until callback is called specific times.
+ *
+ * @throws InterruptedException
+ */
+ public void waitUntilCalled() throws InterruptedException {
+ lock.await();
+ }
+
+ /**
+ * Wait until callback is called specific times, specifying timeout.
+ *
+ * @param msec Milliseconds to timeout
+ * @throws InterruptedException
+ */
+ public void waitUntilCalled(long msec) throws InterruptedException {
+ lock.await(msec, TimeUnit.MILLISECONDS);
+ }
+
+ /**
+ * Get DPID parameter given by specific callback time.
+ *
+ * @param index Specify which time to get parameter
+ * @return DPID value by number.
+ */
+ public Long getDpid(int index) {
+ return dpidsCalledback.get(index);
+ }
+
+ /**
+ * Get hasControl parameter given by specific callback time.
+ *
+ * @param index Specify which time to get parameter
+ * @return hasControl value
+ */
+ public Boolean getControl(int index) {
+ return controlsCalledback.get(index);
+ }
+
+ /**
+ * Get DPID parameter given by latest call.
+ *
+ * @return DPID value by number
+ */
+ public Long getLatestDpid() {
+ return dpidsCalledback.peekLast();
+ }
+
+ /**
+ * Get hasControl parameter given by latest call
+ *
+ * @return hasControl value
+ */
+ public Boolean getLatestControl() {
+ return controlsCalledback.peekLast();
+ }
+
+ @Override
+ public void controlChanged(long dpid, boolean hasControl) {
+ dpidsCalledback.addLast(dpid);
+ controlsCalledback.addLast(hasControl);
+
+ lock.countDown();
+ registerLock.countDown();
+ }
+ }
+
+ ;
+
+ @Before
+ public void setUp() throws Exception {
FloodlightModuleContext fmc = new FloodlightModuleContext();
- registry = new StandaloneRegistry();
- registry.init(fmc);
- }
+ registry = new StandaloneRegistry();
+ registry.init(fmc);
+ }
- @After
- public void tearDown() {
- }
-
- /**
- * Test if {@link StandaloneRegistry#registerController(String)} can run without error.
- */
- @Test
- public void testRegisterController() {
- String controllerIdToRegister = "test";
- try {
- registry.registerController(controllerIdToRegister);
- } catch (RegistryException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
-
- // Register Controller ID doubly
- try {
- registry.registerController(controllerIdToRegister);
- fail("Double registration goes through without exception");
- } catch (RegistryException e) {
- // expected behavior
- }
- }
-
- /**
- * Test if {@link StandaloneRegistry#getControllerId()} can return correct ID.
- * @throws RegistryException
- */
- @Test
- public void testGetControllerId() throws RegistryException {
- String controllerIdToRegister = "test";
-
- // try before controller is registered
- String controllerId = registry.getControllerId();
- assertNull(controllerId);
-
- // register
- registry.registerController(controllerIdToRegister);
+ @After
+ public void tearDown() {
+ }
- // call getControllerId and verify
- controllerId = registry.getControllerId();
- assertNotNull(controllerId);
- assertEquals(controllerIdToRegister, controllerId);
- }
+ /**
+ * Test if {@link StandaloneRegistry#registerController(String)} can run without error.
+ */
+ @Test
+ public void testRegisterController() {
+ String controllerIdToRegister = "test";
+ try {
+ registry.registerController(controllerIdToRegister);
+ } catch (RegistryException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
- /**
- * Test if {@link StandaloneRegistry#getAllControllers()} can return correct list of controllers.
- * @throws RegistryException
- */
- @Test
- public void testGetAllControllers() throws RegistryException {
- String controllerIdToRegister = "test";
-
- // Test before register controller
- try {
- Collection<String> ctrls = registry.getAllControllers();
- assertFalse(ctrls.contains(controllerIdToRegister));
- } catch (RegistryException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
-
- // register
- registry.registerController(controllerIdToRegister);
+ // Register Controller ID doubly
+ try {
+ registry.registerController(controllerIdToRegister);
+ fail("Double registration goes through without exception");
+ } catch (RegistryException e) {
+ // expected behavior
+ }
+ }
- // Test after register controller
- try {
- Collection<String> ctrls = registry.getAllControllers();
- assertTrue(ctrls.contains(controllerIdToRegister));
- } catch (RegistryException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
+ /**
+ * Test if {@link StandaloneRegistry#getControllerId()} can return correct ID.
+ *
+ * @throws RegistryException
+ */
+ @Test
+ public void testGetControllerId() throws RegistryException {
+ String controllerIdToRegister = "test";
- /**
- * Test if {@link StandaloneRegistry#requestControl(long, ControlChangeCallback)} can correctly take control for switch so that callback is called.
- * @throws RegistryException
- * @throws InterruptedException
- */
- @Test
- public void testRequestControl() throws InterruptedException, RegistryException {
- String controllerId = "test";
- registry.registerController(controllerId);
+ // try before controller is registered
+ String controllerId = registry.getControllerId();
+ assertNull(controllerId);
- LoggingCallback callback = new LoggingCallback(1);
- long dpidToRequest = 1000L;
+ // register
+ registry.registerController(controllerIdToRegister);
- try {
- registry.requestControl(dpidToRequest, callback);
- } catch (RegistryException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
-
- callback.waitForRegistration();
-
- long dpidCallback = callback.getLatestDpid();
- boolean controlCallback = callback.getLatestControl();
-
- assertEquals(dpidToRequest, dpidCallback);
- assertTrue(controlCallback);
- }
+ // call getControllerId and verify
+ controllerId = registry.getControllerId();
+ assertNotNull(controllerId);
+ assertEquals(controllerIdToRegister, controllerId);
+ }
- /**
- * Test if {@link StandaloneRegistry#releaseControl(long)} can correctly release the control so that callback is called.
- * @throws InterruptedException
- * @throws RegistryException
- */
- @Test
- public void testReleaseControl() throws InterruptedException, RegistryException {
- String controllerId = "test";
- registry.registerController(controllerId);
-
- long dpidToRequest = 1000L;
- LoggingCallback callback = new LoggingCallback(2);
-
- // to request and wait to take control
- registry.requestControl(dpidToRequest, callback);
- callback.waitForRegistration();
-
- registry.releaseControl(dpidToRequest);
-
- // verify
- callback.waitUntilCalled();
- assertEquals(dpidToRequest, (long)callback.getLatestDpid());
- assertFalse(callback.getLatestControl());
- }
+ /**
+ * Test if {@link StandaloneRegistry#getAllControllers()} can return correct list of controllers.
+ *
+ * @throws RegistryException
+ */
+ @Test
+ public void testGetAllControllers() throws RegistryException {
+ String controllerIdToRegister = "test";
- /**
- * Test if {@link StandaloneRegistry#hasControl(long)} returns correct status.
- * @throws InterruptedException
- * @throws RegistryException
- */
- @Test
- public void testHasControl() throws InterruptedException, RegistryException {
- String controllerId = "test";
- registry.registerController(controllerId);
-
- long dpidToRequest = 1000L;
- LoggingCallback callback = new LoggingCallback(2);
-
- // Test before request control
- assertFalse(registry.hasControl(dpidToRequest));
-
- registry.requestControl(dpidToRequest, callback);
- callback.waitForRegistration();
-
- // Test after take control
- assertTrue(registry.hasControl(dpidToRequest));
-
- registry.releaseControl(dpidToRequest);
-
- callback.waitUntilCalled();
+ // Test before register controller
+ try {
+ Collection<String> ctrls = registry.getAllControllers();
+ assertFalse(ctrls.contains(controllerIdToRegister));
+ } catch (RegistryException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
- // Test after release control
- assertFalse(registry.hasControl(dpidToRequest));
- }
+ // register
+ registry.registerController(controllerIdToRegister);
- /**
- * Test if {@link StandaloneRegistry#getControllerForSwitch(long)} returns correct controller ID.
- * @throws InterruptedException
- * @throws RegistryException
- */
- @Test
- public void testGetControllerForSwitch() throws InterruptedException, RegistryException {
- String controllerId = "test";
- registry.registerController(controllerId);
-
- long dpidToRequest = 1000L;
- LoggingCallback callback = new LoggingCallback(2);
-
- // Test before request control
- try {
- String controllerForSw = registry.getControllerForSwitch(dpidToRequest);
- assertNotEquals(controllerId,controllerForSw);
- } catch (RegistryException e) {
- fail("Failed before request control : " + e.getMessage());
- e.printStackTrace();
- }
+ // Test after register controller
+ try {
+ Collection<String> ctrls = registry.getAllControllers();
+ assertTrue(ctrls.contains(controllerIdToRegister));
+ } catch (RegistryException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
- registry.requestControl(dpidToRequest, callback);
- callback.waitForRegistration();
+ /**
+ * Test if {@link StandaloneRegistry#requestControl(long, ControlChangeCallback)} can correctly take control for switch so that callback is called.
+ *
+ * @throws RegistryException
+ * @throws InterruptedException
+ */
+ @Test
+ public void testRequestControl() throws InterruptedException, RegistryException {
+ String controllerId = "test";
+ registry.registerController(controllerId);
- // Test after take control
- try {
- String controllerForSw = registry.getControllerForSwitch(dpidToRequest);
- assertEquals(controllerId,controllerForSw);
- } catch (RegistryException e) {
- fail("Failed after take control : " + e.getMessage());
- e.printStackTrace();
- }
+ LoggingCallback callback = new LoggingCallback(1);
+ long dpidToRequest = 1000L;
- registry.releaseControl(dpidToRequest);
- callback.waitUntilCalled();
+ try {
+ registry.requestControl(dpidToRequest, callback);
+ } catch (RegistryException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
- // Test after release control
- try {
- String controllerForSw = registry.getControllerForSwitch(dpidToRequest);
- assertNotEquals(controllerId,controllerForSw);
- } catch (RegistryException e) {
- fail("Failed after release control : " + e.getMessage());
- e.printStackTrace();
- }
- }
+ callback.waitForRegistration();
- /**
- * Test if {@link StandaloneRegistry#getAllSwitches()} returns correct list of switches.
- * @throws InterruptedException
- * @throws RegistryException
- */
- @Test
- public void testGetAllSwitches() throws InterruptedException, RegistryException {
- String controllerId = "test";
- registry.registerController(controllerId);
+ long dpidCallback = callback.getLatestDpid();
+ boolean controlCallback = callback.getLatestControl();
- long dpidToRequest = 1000L;
- String dpidToRequestStr = HexString.toHexString(dpidToRequest);
- LoggingCallback callback = new LoggingCallback(2);
+ assertEquals(dpidToRequest, dpidCallback);
+ assertTrue(controlCallback);
+ }
- // Test before request control
- Map<String, List<ControllerRegistryEntry>> switches = registry.getAllSwitches();
- assertNotNull(switches);
- assertFalse(switches.keySet().contains(dpidToRequestStr));
+ /**
+ * Test if {@link StandaloneRegistry#releaseControl(long)} can correctly release the control so that callback is called.
+ *
+ * @throws InterruptedException
+ * @throws RegistryException
+ */
+ @Test
+ public void testReleaseControl() throws InterruptedException, RegistryException {
+ String controllerId = "test";
+ registry.registerController(controllerId);
- registry.requestControl(dpidToRequest, callback);
- callback.waitForRegistration();
+ long dpidToRequest = 1000L;
+ LoggingCallback callback = new LoggingCallback(2);
- // Test after take control
- switches = registry.getAllSwitches();
- assertNotNull(switches);
- assertTrue(switches.keySet().contains(dpidToRequestStr));
- int count = 0;
- for(ControllerRegistryEntry ctrl : switches.get(dpidToRequestStr)) {
- if(ctrl.getControllerId().equals(controllerId)) {
- ++count;
- }
- }
- assertEquals(1,count);
-
- registry.releaseControl(dpidToRequest);
- callback.waitUntilCalled();
+ // to request and wait to take control
+ registry.requestControl(dpidToRequest, callback);
+ callback.waitForRegistration();
- // Test after release control
- switches = registry.getAllSwitches();
- assertNotNull(switches);
- assertFalse(switches.keySet().contains(dpidToRequestStr));
- }
+ registry.releaseControl(dpidToRequest);
- /**
- * Test if {@link StandaloneRegistry#getSwitchesControlledByController(String)} returns correct list of switches.
- * @throws InterruptedException
- * @throws RegistryException
- */
- // TODO: remove @Ignore after implement StandaloneRegistry#getSwitchesControlledByController
- @Ignore @Test
- public void testGetSwitchesControlledByController() throws InterruptedException, RegistryException {
- String controllerId = "test";
- registry.registerController(controllerId);
+ // verify
+ callback.waitUntilCalled();
+ assertEquals(dpidToRequest, (long) callback.getLatestDpid());
+ assertFalse(callback.getLatestControl());
+ }
- long dpidToRequest = 1000L;
- String dpidToRequestStr = HexString.toHexString(dpidToRequest);
- LoggingCallback callback = new LoggingCallback(2);
+ /**
+ * Test if {@link StandaloneRegistry#hasControl(long)} returns correct status.
+ *
+ * @throws InterruptedException
+ * @throws RegistryException
+ */
+ @Test
+ public void testHasControl() throws InterruptedException, RegistryException {
+ String controllerId = "test";
+ registry.registerController(controllerId);
- // Test before request control
- Collection<Long> switches = registry.getSwitchesControlledByController(controllerId);
- assertNotNull(switches);
- assertFalse(switches.contains(dpidToRequestStr));
+ long dpidToRequest = 1000L;
+ LoggingCallback callback = new LoggingCallback(2);
- registry.requestControl(dpidToRequest, callback);
- callback.waitForRegistration();
+ // Test before request control
+ assertFalse(registry.hasControl(dpidToRequest));
- // Test after take control
- switches = registry.getSwitchesControlledByController(controllerId);
- assertNotNull(switches);
- assertTrue(switches.contains(dpidToRequestStr));
- int count = 0;
- for(Long dpid : switches) {
- if((long)dpid == dpidToRequest) {
- ++count;
- }
- }
- assertEquals(1, count);
-
- registry.releaseControl(dpidToRequest);
- callback.waitUntilCalled();
+ registry.requestControl(dpidToRequest, callback);
+ callback.waitForRegistration();
- // Test after release control
- switches = registry.getSwitchesControlledByController(controllerId);
- assertNotNull(switches);
- assertFalse(switches.contains(dpidToRequestStr));
- }
+ // Test after take control
+ assertTrue(registry.hasControl(dpidToRequest));
- /**
- * Test if {@link StandaloneRegistry#allocateUniqueIdBlock()} returns appropriate object.
- * Get bulk of IdBlocks and check if they do have unique range of IDs.
- */
- @Test
- public void testAllocateUniqueIdBlock() {
- // Number of blocks to be verified that any of them has unique block
- final int NUM_BLOCKS = 100;
- ArrayList<IdBlock> blocks = new ArrayList<IdBlock>(NUM_BLOCKS);
-
- for(int i = 0; i < NUM_BLOCKS; ++i) {
- blocks.add(registry.allocateUniqueIdBlock());
- }
-
- for(int i = 0; i < NUM_BLOCKS; ++i) {
- IdBlock block1 = blocks.get(i);
- for(int j = i + 1; j < NUM_BLOCKS; ++j) {
- IdBlock block2 = blocks.get(j);
- IdBlock lower,higher;
-
- if(block1.getStart() < block2.getStart()) {
- lower = block1;
- higher = block2;
- } else {
- lower = block2;
- higher = block1;
- }
-
- assertTrue(lower.getSize() > 0L);
- assertTrue(higher.getSize() > 0L);
- assertTrue(lower.getEnd() < higher.getStart());
- }
- }
- }
+ registry.releaseControl(dpidToRequest);
+
+ callback.waitUntilCalled();
+
+ // Test after release control
+ assertFalse(registry.hasControl(dpidToRequest));
+ }
+
+ /**
+ * Test if {@link StandaloneRegistry#getControllerForSwitch(long)} returns correct controller ID.
+ *
+ * @throws InterruptedException
+ * @throws RegistryException
+ */
+ @Test
+ public void testGetControllerForSwitch() throws InterruptedException, RegistryException {
+ String controllerId = "test";
+ registry.registerController(controllerId);
+
+ long dpidToRequest = 1000L;
+ LoggingCallback callback = new LoggingCallback(2);
+
+ // Test before request control
+ try {
+ String controllerForSw = registry.getControllerForSwitch(dpidToRequest);
+ assertNotEquals(controllerId, controllerForSw);
+ } catch (RegistryException e) {
+ fail("Failed before request control : " + e.getMessage());
+ e.printStackTrace();
+ }
+
+ registry.requestControl(dpidToRequest, callback);
+ callback.waitForRegistration();
+
+ // Test after take control
+ try {
+ String controllerForSw = registry.getControllerForSwitch(dpidToRequest);
+ assertEquals(controllerId, controllerForSw);
+ } catch (RegistryException e) {
+ fail("Failed after take control : " + e.getMessage());
+ e.printStackTrace();
+ }
+
+ registry.releaseControl(dpidToRequest);
+ callback.waitUntilCalled();
+
+ // Test after release control
+ try {
+ String controllerForSw = registry.getControllerForSwitch(dpidToRequest);
+ assertNotEquals(controllerId, controllerForSw);
+ } catch (RegistryException e) {
+ fail("Failed after release control : " + e.getMessage());
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Test if {@link StandaloneRegistry#getAllSwitches()} returns correct list of switches.
+ *
+ * @throws InterruptedException
+ * @throws RegistryException
+ */
+ @Test
+ public void testGetAllSwitches() throws InterruptedException, RegistryException {
+ String controllerId = "test";
+ registry.registerController(controllerId);
+
+ long dpidToRequest = 1000L;
+ String dpidToRequestStr = HexString.toHexString(dpidToRequest);
+ LoggingCallback callback = new LoggingCallback(2);
+
+ // Test before request control
+ Map<String, List<ControllerRegistryEntry>> switches = registry.getAllSwitches();
+ assertNotNull(switches);
+ assertFalse(switches.keySet().contains(dpidToRequestStr));
+
+ registry.requestControl(dpidToRequest, callback);
+ callback.waitForRegistration();
+
+ // Test after take control
+ switches = registry.getAllSwitches();
+ assertNotNull(switches);
+ assertTrue(switches.keySet().contains(dpidToRequestStr));
+ int count = 0;
+ for (ControllerRegistryEntry ctrl : switches.get(dpidToRequestStr)) {
+ if (ctrl.getControllerId().equals(controllerId)) {
+ ++count;
+ }
+ }
+ assertEquals(1, count);
+
+ registry.releaseControl(dpidToRequest);
+ callback.waitUntilCalled();
+
+ // Test after release control
+ switches = registry.getAllSwitches();
+ assertNotNull(switches);
+ assertFalse(switches.keySet().contains(dpidToRequestStr));
+ }
+
+ /**
+ * Test if {@link StandaloneRegistry#getSwitchesControlledByController(String)} returns correct list of switches.
+ *
+ * @throws InterruptedException
+ * @throws RegistryException
+ */
+ // TODO: remove @Ignore after implement StandaloneRegistry#getSwitchesControlledByController
+ @Ignore
+ @Test
+ public void testGetSwitchesControlledByController() throws InterruptedException, RegistryException {
+ String controllerId = "test";
+ registry.registerController(controllerId);
+
+ long dpidToRequest = 1000L;
+ String dpidToRequestStr = HexString.toHexString(dpidToRequest);
+ LoggingCallback callback = new LoggingCallback(2);
+
+ // Test before request control
+ Collection<Long> switches = registry.getSwitchesControlledByController(controllerId);
+ assertNotNull(switches);
+ assertFalse(switches.contains(dpidToRequestStr));
+
+ registry.requestControl(dpidToRequest, callback);
+ callback.waitForRegistration();
+
+ // Test after take control
+ switches = registry.getSwitchesControlledByController(controllerId);
+ assertNotNull(switches);
+ assertTrue(switches.contains(dpidToRequestStr));
+ int count = 0;
+ for (Long dpid : switches) {
+ if ((long) dpid == dpidToRequest) {
+ ++count;
+ }
+ }
+ assertEquals(1, count);
+
+ registry.releaseControl(dpidToRequest);
+ callback.waitUntilCalled();
+
+ // Test after release control
+ switches = registry.getSwitchesControlledByController(controllerId);
+ assertNotNull(switches);
+ assertFalse(switches.contains(dpidToRequestStr));
+ }
+
+ /**
+ * Test if {@link StandaloneRegistry#allocateUniqueIdBlock()} returns appropriate object.
+ * Get bulk of IdBlocks and check if they do have unique range of IDs.
+ */
+ @Test
+ public void testAllocateUniqueIdBlock() {
+ // Number of blocks to be verified that any of them has unique block
+ final int NUM_BLOCKS = 100;
+ ArrayList<IdBlock> blocks = new ArrayList<IdBlock>(NUM_BLOCKS);
+
+ for (int i = 0; i < NUM_BLOCKS; ++i) {
+ blocks.add(registry.allocateUniqueIdBlock());
+ }
+
+ for (int i = 0; i < NUM_BLOCKS; ++i) {
+ IdBlock block1 = blocks.get(i);
+ for (int j = i + 1; j < NUM_BLOCKS; ++j) {
+ IdBlock block2 = blocks.get(j);
+ IdBlock lower, higher;
+
+ if (block1.getStart() < block2.getStart()) {
+ lower = block1;
+ higher = block2;
+ } else {
+ lower = block2;
+ higher = block1;
+ }
+
+ assertTrue(lower.getSize() > 0L);
+ assertTrue(higher.getSize() > 0L);
+ assertTrue(lower.getEnd() < higher.getStart());
+ }
+ }
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/registry/ZookeeperRegistryTest.java b/src/test/java/net/onrc/onos/core/registry/ZookeeperRegistryTest.java
index 45562e9..8275a84 100644
--- a/src/test/java/net/onrc/onos/core/registry/ZookeeperRegistryTest.java
+++ b/src/test/java/net/onrc/onos/core/registry/ZookeeperRegistryTest.java
@@ -42,555 +42,573 @@
/**
* Unit test for {@link ZookeeperRegistry}.
* NOTE: {@link FloodlightTestCase} conflicts with PowerMock. If FloodLight-related methods need to be tested,
- * implement another test class to test them.
- * @author Naoki Shiota
+ * implement another test class to test them.
*
+ * @author Naoki Shiota
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({ZookeeperRegistry.class, CuratorFramework.class, CuratorFrameworkFactory.class,
- ServiceDiscoveryBuilder.class, ServiceDiscovery.class, ServiceCache.class, PathChildrenCache.class,
- ZookeeperRegistry.SwitchPathCacheListener.class})
+ ServiceDiscoveryBuilder.class, ServiceDiscovery.class, ServiceCache.class, PathChildrenCache.class,
+ ZookeeperRegistry.SwitchPathCacheListener.class})
public class ZookeeperRegistryTest extends FloodlightTestCase {
- private final static Long ID_BLOCK_SIZE = 0x100000000L;
-
- protected ZookeeperRegistry registry;
- protected CuratorFramework client;
-
- protected PathChildrenCacheListener pathChildrenCacheListener;
- protected final String CONTROLLER_ID = "controller2013";
+ private final static Long ID_BLOCK_SIZE = 0x100000000L;
- /**
- * Initialize {@link ZookeeperRegistry} Object and inject initial value with {@link ZookeeperRegistry#init(FloodlightModuleContext)} method.
- * This setup code also tests {@link ZookeeperRegistry#init(FloodlightModuleContext)} method itself.
- */
- @Before
- public void setUp() throws Exception {
- super.setUp();
-
- pathChildrenCacheListener = null;
-
- // Mock of CuratorFramework
- client = createCuratorFrameworkMock();
-
- // Mock of CuratorFrameworkFactory
- PowerMock.mockStatic(CuratorFrameworkFactory.class);
- EasyMock.expect(CuratorFrameworkFactory.newClient((String)EasyMock.anyObject(),
- EasyMock.anyInt(), EasyMock.anyInt(), (RetryPolicy)EasyMock.anyObject())).andReturn(client);
- PowerMock.replay(CuratorFrameworkFactory.class);
+ protected ZookeeperRegistry registry;
+ protected CuratorFramework client;
- FloodlightModuleContext fmc = new FloodlightModuleContext();
- registry = new ZookeeperRegistry();
- fmc.addService(ZookeeperRegistry.class, registry);
-
- registry.init(fmc);
-
- PowerMock.verify(client, CuratorFrameworkFactory.class);
- }
+ protected PathChildrenCacheListener pathChildrenCacheListener;
+ protected final String CONTROLLER_ID = "controller2013";
- /**
- * Clean up member variables (empty for now).
- */
- @After
- public void tearDown() throws Exception {
- super.tearDown();
- }
+ /**
+ * Initialize {@link ZookeeperRegistry} Object and inject initial value with {@link ZookeeperRegistry#init(FloodlightModuleContext)} method.
+ * This setup code also tests {@link ZookeeperRegistry#init(FloodlightModuleContext)} method itself.
+ */
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
- /**
- * Test if {@link ZookeeperRegistry#registerController(String)} method can go through without exception.
- * (Exceptions are usually out of test target, but {@link ZookeeperRegistry#registerController(String)} throws an exception in case of invalid registration.)
- */
- @Test
- public void testRegisterController() {
- String controllerIdToRegister = "controller2013";
-
- try {
- registry.registerController(controllerIdToRegister);
- } catch (RegistryException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
+ pathChildrenCacheListener = null;
- /**
- * Test if {@link ZookeeperRegistry#getControllerId()} correctly returns registered ID.
- * @throws Exception
- */
- @Test
- public void testGetControllerId() throws Exception {
- String controllerIdToRegister = "controller1";
-
- // try before controller is registered
- String controllerId = registry.getControllerId();
- assertNull(controllerId);
-
- // register
- registry.registerController(controllerIdToRegister);
-
- // call getControllerId and verify
- controllerId = registry.getControllerId();
- assertNotNull(controllerId);
- assertEquals(controllerIdToRegister, controllerId);
- }
+ // Mock of CuratorFramework
+ client = createCuratorFrameworkMock();
- /**
- * Test if {@link ZookeeperRegistry#getAllControllers()} returns all controllers.
- * Controllers to be returned are injected while setup. See {@link ZookeeperRegistryTest#createCuratorFrameworkMock()}
- * to what controllers are injected using mock {@link ServiceCache}.
- * @throws Exception
- */
- @Test
- public void testGetAllControllers() throws Exception {
- String controllerIdRegistered = "controller1";
- String controllerIdNotRegistered = "controller2013";
+ // Mock of CuratorFrameworkFactory
+ PowerMock.mockStatic(CuratorFrameworkFactory.class);
+ EasyMock.expect(CuratorFrameworkFactory.newClient((String) EasyMock.anyObject(),
+ EasyMock.anyInt(), EasyMock.anyInt(), (RetryPolicy) EasyMock.anyObject())).andReturn(client);
+ PowerMock.replay(CuratorFrameworkFactory.class);
- try {
- Collection<String> ctrls = registry.getAllControllers();
- assertTrue(ctrls.contains(controllerIdRegistered));
- assertFalse(ctrls.contains(controllerIdNotRegistered));
- } catch (RegistryException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
+ FloodlightModuleContext fmc = new FloodlightModuleContext();
+ registry = new ZookeeperRegistry();
+ fmc.addService(ZookeeperRegistry.class, registry);
- /**
- * Test if {@link ZookeeperRegistry#requestControl(long, net.onrc.onos.core.registry.IControllerRegistryService.ControlChangeCallback)}
- * correctly take control of specific switch. Because {@link ZookeeperRegistry#requestControl(long, net.onrc.onos.core.registry.IControllerRegistryService.ControlChangeCallback)}
- * doesn't return values, inject mock {@link LeaderLatch} object and verify latch is correctly set up.
- * @throws Exception
- */
- @Test
- public void testRequestControl() throws Exception {
- // Mock LeaderLatch
- LeaderLatch latch = EasyMock.createMock(LeaderLatch.class);
- latch.addListener(EasyMock.anyObject(SwitchLeaderListener.class));
- EasyMock.expectLastCall().once();
- latch.start();
- EasyMock.expectLastCall().once();
- EasyMock.replay(latch);
-
- PowerMock.expectNew(LeaderLatch.class,
- EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))
- .andReturn(latch).once();
- PowerMock.replay(LeaderLatch.class);
-
- String controllerId = "controller2013";
- registry.registerController(controllerId);
+ registry.init(fmc);
- LoggingCallback callback = new LoggingCallback(1);
- long dpidToRequest = 2000L;
+ PowerMock.verify(client, CuratorFrameworkFactory.class);
+ }
- try {
- registry.requestControl(dpidToRequest, callback);
- } catch (RegistryException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
-
- EasyMock.verify(latch);
- }
+ /**
+ * Clean up member variables (empty for now).
+ */
+ @After
+ public void tearDown() throws Exception {
+ super.tearDown();
+ }
- /**
- * Test if {@link ZookeeperRegistry#releaseControl(long)} correctly release control of specific switch.
- * Because {@link ZookeeperRegistry#releaseControl(long)} doesn't return values, inject mock
- * {@link LeaderLatch} object and verify latch is correctly set up.
- * @throws Exception
- */
- @Test
- public void testReleaseControl() throws Exception {
- // Mock of LeaderLatch
- LeaderLatch latch = EasyMock.createMock(LeaderLatch.class);
- latch.addListener(EasyMock.anyObject(SwitchLeaderListener.class));
- EasyMock.expectLastCall().once();
- latch.start();
- EasyMock.expectLastCall().once();
- latch.removeListener(EasyMock.anyObject(SwitchLeaderListener.class));
- EasyMock.expectLastCall().once();
- latch.close();
- EasyMock.expectLastCall().once();
- EasyMock.replay(latch);
-
- PowerMock.expectNew(LeaderLatch.class,
- EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))
- .andReturn(latch).once();
- PowerMock.replay(LeaderLatch.class);
-
- String controllerId = "controller2013";
- registry.registerController(controllerId);
-
- long dpidToRequest = 2000L;
- LoggingCallback callback = new LoggingCallback(1);
-
- registry.requestControl(dpidToRequest, callback);
- registry.releaseControl(dpidToRequest);
-
- EasyMock.verify(latch);
- }
+ /**
+ * Test if {@link ZookeeperRegistry#registerController(String)} method can go through without exception.
+ * (Exceptions are usually out of test target, but {@link ZookeeperRegistry#registerController(String)} throws an exception in case of invalid registration.)
+ */
+ @Test
+ public void testRegisterController() {
+ String controllerIdToRegister = "controller2013";
- /**
- * Test if {@link ZookeeperRegistry#hasControl(long)} returns correct status whether controller has control of specific switch.
- * @throws Exception
- */
- @Test
- public void testHasControl() throws Exception {
- // Mock of LeaderLatch
- LeaderLatch latch = EasyMock.createMock(LeaderLatch.class);
- latch.addListener(EasyMock.anyObject(SwitchLeaderListener.class));
- EasyMock.expectLastCall().once();
- latch.start();
- EasyMock.expectLastCall().once();
- EasyMock.expect(latch.hasLeadership()).andReturn(true).anyTimes();
- latch.removeListener(EasyMock.anyObject(SwitchLeaderListener.class));
- EasyMock.expectLastCall().once();
- latch.close();
- EasyMock.expectLastCall().once();
- EasyMock.replay(latch);
-
- PowerMock.expectNew(LeaderLatch.class,
- EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))
- .andReturn(latch);
- PowerMock.replay(LeaderLatch.class);
-
- String controllerId = "controller2013";
- registry.registerController(controllerId);
-
- long dpidToRequest = 2000L;
- LoggingCallback callback = new LoggingCallback(2);
-
- // Test before request control
- assertFalse(registry.hasControl(dpidToRequest));
+ try {
+ registry.registerController(controllerIdToRegister);
+ } catch (RegistryException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
- registry.requestControl(dpidToRequest, callback);
-
- // Test after request control
- assertTrue(registry.hasControl(dpidToRequest));
-
- registry.releaseControl(dpidToRequest);
-
- // Test after release control
- assertFalse(registry.hasControl(dpidToRequest));
-
- EasyMock.verify(latch);
- }
+ /**
+ * Test if {@link ZookeeperRegistry#getControllerId()} correctly returns registered ID.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testGetControllerId() throws Exception {
+ String controllerIdToRegister = "controller1";
- /**
- * Test if {@link ZookeeperRegistry#getControllerForSwitch(long)} correctly returns controller ID of specific switch.
- * Relation between controllers and switches are defined by {@link ZookeeperRegistryTest#setPathChildrenCache()} function.
- * @throws Throwable
- */
- @Test
- public void testGetControllerForSwitch() throws Throwable {
- long dpidRegistered = 1000L;
- long dpidNotRegistered = 2000L;
-
- setPathChildrenCache();
-
- String controllerForSw = registry.getControllerForSwitch(dpidRegistered);
- assertEquals("controller1",controllerForSw);
+ // try before controller is registered
+ String controllerId = registry.getControllerId();
+ assertNull(controllerId);
- controllerForSw = registry.getControllerForSwitch(dpidNotRegistered);
- assertEquals(null, controllerForSw);
- }
+ // register
+ registry.registerController(controllerIdToRegister);
- /**
- * Test if {@link ZookeeperRegistry#getSwitchesControlledByController(String)} returns correct list of
- * switches controlled by a controller.
- * @throws Exception
- */
- // TODO: Test after getSwitchesControlledByController() is implemented.
- @Ignore @Test
- public void testGetSwitchesControlledByController() throws Exception {
- String controllerIdRegistered = "controller1";
- String dpidRegistered = HexString.toHexString(1000L);
- String controllerIdNotRegistered = CONTROLLER_ID;
-
- Collection<Long> switches = registry.getSwitchesControlledByController(controllerIdRegistered);
- assertNotNull(switches);
- assertTrue(switches.contains(dpidRegistered));
+ // call getControllerId and verify
+ controllerId = registry.getControllerId();
+ assertNotNull(controllerId);
+ assertEquals(controllerIdToRegister, controllerId);
+ }
- switches = registry.getSwitchesControlledByController(controllerIdNotRegistered);
- assertNotNull(switches);
- assertEquals(0, switches.size());
- }
+ /**
+ * Test if {@link ZookeeperRegistry#getAllControllers()} returns all controllers.
+ * Controllers to be returned are injected while setup. See {@link ZookeeperRegistryTest#createCuratorFrameworkMock()}
+ * to what controllers are injected using mock {@link ServiceCache}.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testGetAllControllers() throws Exception {
+ String controllerIdRegistered = "controller1";
+ String controllerIdNotRegistered = "controller2013";
- /**
- * Test if {@link ZookeeperRegistry#getAllSwitches()} returns correct list of all switches.
- * Switches are injected in {@link ZookeeperRegistryTest#setPathChildrenCache()} function.
- * @throws Exception
- */
- @Test
- public void testGetAllSwitches() throws Exception {
- String [] dpids = {
- HexString.toHexString(1000L),
- HexString.toHexString(1001L),
- HexString.toHexString(1002L),
- };
-
- setPathChildrenCache();
+ try {
+ Collection<String> ctrls = registry.getAllControllers();
+ assertTrue(ctrls.contains(controllerIdRegistered));
+ assertFalse(ctrls.contains(controllerIdNotRegistered));
+ } catch (RegistryException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
- Map<String, List<ControllerRegistryEntry>> switches = registry.getAllSwitches();
- assertNotNull(switches);
- assertEquals(dpids.length, switches.size());
- for(String dpid : dpids) {
- assertTrue(switches.keySet().contains(dpid));
- }
- }
+ /**
+ * Test if {@link ZookeeperRegistry#requestControl(long, net.onrc.onos.core.registry.IControllerRegistryService.ControlChangeCallback)}
+ * correctly take control of specific switch. Because {@link ZookeeperRegistry#requestControl(long, net.onrc.onos.core.registry.IControllerRegistryService.ControlChangeCallback)}
+ * doesn't return values, inject mock {@link LeaderLatch} object and verify latch is correctly set up.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testRequestControl() throws Exception {
+ // Mock LeaderLatch
+ LeaderLatch latch = EasyMock.createMock(LeaderLatch.class);
+ latch.addListener(EasyMock.anyObject(SwitchLeaderListener.class));
+ EasyMock.expectLastCall().once();
+ latch.start();
+ EasyMock.expectLastCall().once();
+ EasyMock.replay(latch);
- /**
- * Test if {@link ZookeeperRegistry#allocateUniqueIdBlock()} can assign IdBlock without duplication.
- */
- @Test
- public void testAllocateUniqueIdBlock() {
- // Number of blocks to be verified that any of them has unique block
- final int NUM_BLOCKS = 100;
- ArrayList<IdBlock> blocks = new ArrayList<IdBlock>(NUM_BLOCKS);
-
- for(int i = 0; i < NUM_BLOCKS; ++i) {
- IdBlock block = registry.allocateUniqueIdBlock();
- assertNotNull(block);
- blocks.add(block);
- }
-
- for(int i = 0; i < NUM_BLOCKS; ++i) {
- IdBlock block1 = blocks.get(i);
- for(int j = i + 1; j < NUM_BLOCKS; ++j) {
- IdBlock block2 = blocks.get(j);
- IdBlock lower,higher;
-
- if(block1.getStart() < block2.getStart()) {
- lower = block1;
- higher = block2;
- } else {
- lower = block2;
- higher = block1;
- }
-
- assertTrue(lower.getSize() > 0L);
- assertTrue(higher.getSize() > 0L);
- assertTrue(lower.getEnd() <= higher.getStart());
- }
- }
- }
-
-
- //-------------------------- Creation of mock objects --------------------------
- /**
- * Create mock {@link CuratorFramework} object with initial value below.<br>
- * [Ctrl ID] : [DPID]<br>
- * controller1 : 1000<br>
- * controller2 : 1001<br>
- * controller2 : 1002<br>
- * controller2013 : nothing
- * @return Created mock object
- * @throws Exception
- */
- @SuppressWarnings({ "serial", "unchecked" })
- private CuratorFramework createCuratorFrameworkMock() throws Exception {
- // Mock of AtomicValue
- AtomicValue<Long> atomicValue = EasyMock.createMock(AtomicValue.class);
- EasyMock.expect(atomicValue.succeeded()).andReturn(true).anyTimes();
- EasyMock.expect(atomicValue.preValue()).andAnswer(new IAnswer<Long>() {
- private long value = 0;
- @Override
- public Long answer() throws Throwable {
- value += ID_BLOCK_SIZE;
- return value;
- }
- }).anyTimes();
- EasyMock.expect(atomicValue.postValue()).andAnswer(new IAnswer<Long>() {
- private long value = ID_BLOCK_SIZE;
- @Override
- public Long answer() throws Throwable {
- value += ID_BLOCK_SIZE;
- return value;
- }
- }).anyTimes();
- EasyMock.replay(atomicValue);
-
- // Mock DistributedAtomicLong
- DistributedAtomicLong daLong = EasyMock.createMock(DistributedAtomicLong.class);
- EasyMock.expect(daLong.add(EasyMock.anyLong())).andReturn(atomicValue).anyTimes();
- EasyMock.replay(daLong);
- PowerMock.expectNew(DistributedAtomicLong.class,
- new Class<?> [] {CuratorFramework.class, String.class, RetryPolicy.class},
- EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyObject(RetryPolicy.class)).
- andReturn(daLong).anyTimes();
- PowerMock.replay(DistributedAtomicLong.class);
-
- // Mock ListenerContainer
- ListenerContainer<PathChildrenCacheListener> listenerContainer = EasyMock.createMock(ListenerContainer.class);
- listenerContainer.addListener(EasyMock.anyObject(PathChildrenCacheListener.class));
- EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
- @Override
- public Object answer() throws Throwable {
- pathChildrenCacheListener = (PathChildrenCacheListener)EasyMock.getCurrentArguments()[0];
- return null;
- }
- }).once();
- EasyMock.replay(listenerContainer);
+ PowerMock.expectNew(LeaderLatch.class,
+ EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))
+ .andReturn(latch).once();
+ PowerMock.replay(LeaderLatch.class);
- // Mock PathChildrenCache
- PathChildrenCache pathChildrenCacheMain = createPathChildrenCacheMock(CONTROLLER_ID, new String[] {"/switches"}, listenerContainer);
- PathChildrenCache pathChildrenCache1 = createPathChildrenCacheMock("controller1", new String[] {HexString.toHexString(1000L)}, listenerContainer);
- PathChildrenCache pathChildrenCache2 = createPathChildrenCacheMock("controller2", new String[] {
- HexString.toHexString(1001L), HexString.toHexString(1002L) },listenerContainer);
-
- // Mock PathChildrenCache constructor
- PowerMock.expectNew(PathChildrenCache.class,
- EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyBoolean()).
- andReturn(pathChildrenCacheMain).once();
- PowerMock.expectNew(PathChildrenCache.class,
- EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyBoolean()).
- andReturn(pathChildrenCache1).once();
- PowerMock.expectNew(PathChildrenCache.class,
- EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyBoolean()).
- andReturn(pathChildrenCache2).anyTimes();
- PowerMock.replay(PathChildrenCache.class);
-
- // Mock ServiceCache
- ServiceCache<ControllerService> serviceCache = EasyMock.createMock(ServiceCache.class);
- serviceCache.start();
- EasyMock.expectLastCall().once();
- EasyMock.expect(serviceCache.getInstances()).andReturn(new ArrayList<ServiceInstance<ControllerService> > () {{
- add(createServiceInstanceMock("controller1"));
- add(createServiceInstanceMock("controller2"));
- }}).anyTimes();
- EasyMock.replay(serviceCache);
-
- // Mock ServiceCacheBuilder
- ServiceCacheBuilder<ControllerService> serviceCacheBuilder = EasyMock.createMock(ServiceCacheBuilder.class);
- EasyMock.expect(serviceCacheBuilder.name(EasyMock.anyObject(String.class))).andReturn(serviceCacheBuilder).once();
- EasyMock.expect(serviceCacheBuilder.build()).andReturn(serviceCache).once();
- EasyMock.replay(serviceCacheBuilder);
+ String controllerId = "controller2013";
+ registry.registerController(controllerId);
- // Mock ServiceDiscovery
- ServiceDiscovery<ControllerService> serviceDiscovery = EasyMock.createMock(ServiceDiscovery.class);
- serviceDiscovery.start();
- EasyMock.expectLastCall().once();
- EasyMock.expect(serviceDiscovery.serviceCacheBuilder()).andReturn(serviceCacheBuilder).once();
- serviceDiscovery.registerService(EasyMock.anyObject(ServiceInstance.class));
- EasyMock.expectLastCall().once();
- EasyMock.replay(serviceDiscovery);
-
- // Mock CuratorFramework
- CuratorFramework client = EasyMock.createMock(CuratorFramework.class);
- client.start();
- EasyMock.expectLastCall().once();
- EasyMock.expect(client.usingNamespace(EasyMock.anyObject(String.class))).andReturn(client);
- EasyMock.replay(client);
+ LoggingCallback callback = new LoggingCallback(1);
+ long dpidToRequest = 2000L;
- // Mock ServiceDiscoveryBuilder
- ServiceDiscoveryBuilder<ControllerService> builder = EasyMock.createMock(ServiceDiscoveryBuilder.class);
- EasyMock.expect(builder.client(client)).andReturn(builder).once();
- EasyMock.expect(builder.basePath(EasyMock.anyObject(String.class))).andReturn(builder);
- EasyMock.expect(builder.build()).andReturn(serviceDiscovery);
- EasyMock.replay(builder);
-
- PowerMock.mockStatic(ServiceDiscoveryBuilder.class);
- EasyMock.expect(ServiceDiscoveryBuilder.builder(ControllerService.class)).andReturn(builder).once();
- PowerMock.replay(ServiceDiscoveryBuilder.class);
+ try {
+ registry.requestControl(dpidToRequest, callback);
+ } catch (RegistryException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
- return client;
- }
-
- /**
- * Create mock {@link ServiceInstance} object using given controller ID.
- * @param controllerId Controller ID to represent instance's payload (ControllerService).
- * @return Mock ServiceInstance object
- */
- private ServiceInstance<ControllerService> createServiceInstanceMock(String controllerId) {
- ControllerService controllerService = EasyMock.createMock(ControllerService.class);
- EasyMock.expect(controllerService.getControllerId()).andReturn(controllerId).anyTimes();
- EasyMock.replay(controllerService);
-
- @SuppressWarnings("unchecked")
- ServiceInstance<ControllerService> serviceInstance = EasyMock.createMock(ServiceInstance.class);
- EasyMock.expect(serviceInstance.getPayload()).andReturn(controllerService).anyTimes();
- EasyMock.replay(serviceInstance);
+ EasyMock.verify(latch);
+ }
- return serviceInstance;
- }
-
- /**
- * Create mock {@link PathChildrenCache} using given controller ID and DPIDs.
- * @param controllerId Controller ID to represent current data.
- * @param paths List of HexString indicating switch's DPID.
- * @param listener Callback object to be set as Listenable.
- * @return Mock PathChildrenCache object
- * @throws Exception
- */
- private PathChildrenCache createPathChildrenCacheMock(final String controllerId, final String [] paths,
- ListenerContainer<PathChildrenCacheListener> listener) throws Exception {
- PathChildrenCache pathChildrenCache = EasyMock.createMock(PathChildrenCache.class);
-
- EasyMock.expect(pathChildrenCache.getListenable()).andReturn(listener).anyTimes();
-
- pathChildrenCache.start(EasyMock.anyObject(StartMode.class));
- EasyMock.expectLastCall().anyTimes();
-
- List<ChildData> childs = new ArrayList<ChildData>();
- for(String path : paths) {
- childs.add(createChildDataMockForCurrentData(controllerId,path));
- }
- EasyMock.expect(pathChildrenCache.getCurrentData()).andReturn(childs).anyTimes();
-
- pathChildrenCache.rebuild();
- EasyMock.expectLastCall().anyTimes();
-
- EasyMock.replay(pathChildrenCache);
+ /**
+ * Test if {@link ZookeeperRegistry#releaseControl(long)} correctly release control of specific switch.
+ * Because {@link ZookeeperRegistry#releaseControl(long)} doesn't return values, inject mock
+ * {@link LeaderLatch} object and verify latch is correctly set up.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testReleaseControl() throws Exception {
+ // Mock of LeaderLatch
+ LeaderLatch latch = EasyMock.createMock(LeaderLatch.class);
+ latch.addListener(EasyMock.anyObject(SwitchLeaderListener.class));
+ EasyMock.expectLastCall().once();
+ latch.start();
+ EasyMock.expectLastCall().once();
+ latch.removeListener(EasyMock.anyObject(SwitchLeaderListener.class));
+ EasyMock.expectLastCall().once();
+ latch.close();
+ EasyMock.expectLastCall().once();
+ EasyMock.replay(latch);
- return pathChildrenCache;
- }
-
- /**
- * Create mock {@link ChildData} for {@link PathChildrenCache#getCurrentData()} return value.
- * This object need to include 'sequence number' in tail of path string. ("-0" means 0th sequence)
- * @param controllerId Controller ID
- * @param path HexString indicating switch's DPID
- * @return Mock ChildData object
- */
- private ChildData createChildDataMockForCurrentData(String controllerId, String path) {
- ChildData data = EasyMock.createMock(ChildData.class);
- EasyMock.expect(data.getPath()).andReturn(path + "-0").anyTimes();
- EasyMock.expect(data.getData()).andReturn(controllerId.getBytes()).anyTimes();
- EasyMock.replay(data);
-
- return data;
- }
+ PowerMock.expectNew(LeaderLatch.class,
+ EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))
+ .andReturn(latch).once();
+ PowerMock.replay(LeaderLatch.class);
- /**
- * Inject relations between controllers and switches using callback object.
- * @throws Exception
- */
- private void setPathChildrenCache() throws Exception {
- pathChildrenCacheListener.childEvent(client,
- createChildrenCacheEventMock("controller1", HexString.toHexString(1000L), PathChildrenCacheEvent.Type.CHILD_ADDED));
- pathChildrenCacheListener.childEvent(client,
- createChildrenCacheEventMock("controller2", HexString.toHexString(1001L), PathChildrenCacheEvent.Type.CHILD_ADDED));
- pathChildrenCacheListener.childEvent(client,
- createChildrenCacheEventMock("controller2", HexString.toHexString(1002L), PathChildrenCacheEvent.Type.CHILD_ADDED));
- }
+ String controllerId = "controller2013";
+ registry.registerController(controllerId);
- /**
- * Create mock {@link PathChildrenCacheEvent} object using given controller ID and DPID.
- * @param controllerId Controller ID.
- * @param path HexString of DPID.
- * @param type Event type to be set to mock object.
- * @return Mock PathChildrenCacheEvent object
- */
- private PathChildrenCacheEvent createChildrenCacheEventMock(String controllerId, String path,
- PathChildrenCacheEvent.Type type) {
- PathChildrenCacheEvent event = EasyMock.createMock(PathChildrenCacheEvent.class);
- ChildData data = EasyMock.createMock(ChildData.class);
-
- EasyMock.expect(data.getPath()).andReturn(path).anyTimes();
- EasyMock.expect(data.getData()).andReturn(controllerId.getBytes()).anyTimes();
- EasyMock.replay(data);
-
- EasyMock.expect(event.getType()).andReturn(type).anyTimes();
- EasyMock.expect(event.getData()).andReturn(data).anyTimes();
- EasyMock.replay(event);
-
- return event;
- }
+ long dpidToRequest = 2000L;
+ LoggingCallback callback = new LoggingCallback(1);
+
+ registry.requestControl(dpidToRequest, callback);
+ registry.releaseControl(dpidToRequest);
+
+ EasyMock.verify(latch);
+ }
+
+ /**
+ * Test if {@link ZookeeperRegistry#hasControl(long)} returns correct status whether controller has control of specific switch.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testHasControl() throws Exception {
+ // Mock of LeaderLatch
+ LeaderLatch latch = EasyMock.createMock(LeaderLatch.class);
+ latch.addListener(EasyMock.anyObject(SwitchLeaderListener.class));
+ EasyMock.expectLastCall().once();
+ latch.start();
+ EasyMock.expectLastCall().once();
+ EasyMock.expect(latch.hasLeadership()).andReturn(true).anyTimes();
+ latch.removeListener(EasyMock.anyObject(SwitchLeaderListener.class));
+ EasyMock.expectLastCall().once();
+ latch.close();
+ EasyMock.expectLastCall().once();
+ EasyMock.replay(latch);
+
+ PowerMock.expectNew(LeaderLatch.class,
+ EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))
+ .andReturn(latch);
+ PowerMock.replay(LeaderLatch.class);
+
+ String controllerId = "controller2013";
+ registry.registerController(controllerId);
+
+ long dpidToRequest = 2000L;
+ LoggingCallback callback = new LoggingCallback(2);
+
+ // Test before request control
+ assertFalse(registry.hasControl(dpidToRequest));
+
+ registry.requestControl(dpidToRequest, callback);
+
+ // Test after request control
+ assertTrue(registry.hasControl(dpidToRequest));
+
+ registry.releaseControl(dpidToRequest);
+
+ // Test after release control
+ assertFalse(registry.hasControl(dpidToRequest));
+
+ EasyMock.verify(latch);
+ }
+
+ /**
+ * Test if {@link ZookeeperRegistry#getControllerForSwitch(long)} correctly returns controller ID of specific switch.
+ * Relation between controllers and switches are defined by {@link ZookeeperRegistryTest#setPathChildrenCache()} function.
+ *
+ * @throws Throwable
+ */
+ @Test
+ public void testGetControllerForSwitch() throws Throwable {
+ long dpidRegistered = 1000L;
+ long dpidNotRegistered = 2000L;
+
+ setPathChildrenCache();
+
+ String controllerForSw = registry.getControllerForSwitch(dpidRegistered);
+ assertEquals("controller1", controllerForSw);
+
+ controllerForSw = registry.getControllerForSwitch(dpidNotRegistered);
+ assertEquals(null, controllerForSw);
+ }
+
+ /**
+ * Test if {@link ZookeeperRegistry#getSwitchesControlledByController(String)} returns correct list of
+ * switches controlled by a controller.
+ *
+ * @throws Exception
+ */
+ // TODO: Test after getSwitchesControlledByController() is implemented.
+ @Ignore
+ @Test
+ public void testGetSwitchesControlledByController() throws Exception {
+ String controllerIdRegistered = "controller1";
+ String dpidRegistered = HexString.toHexString(1000L);
+ String controllerIdNotRegistered = CONTROLLER_ID;
+
+ Collection<Long> switches = registry.getSwitchesControlledByController(controllerIdRegistered);
+ assertNotNull(switches);
+ assertTrue(switches.contains(dpidRegistered));
+
+ switches = registry.getSwitchesControlledByController(controllerIdNotRegistered);
+ assertNotNull(switches);
+ assertEquals(0, switches.size());
+ }
+
+ /**
+ * Test if {@link ZookeeperRegistry#getAllSwitches()} returns correct list of all switches.
+ * Switches are injected in {@link ZookeeperRegistryTest#setPathChildrenCache()} function.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testGetAllSwitches() throws Exception {
+ String[] dpids = {
+ HexString.toHexString(1000L),
+ HexString.toHexString(1001L),
+ HexString.toHexString(1002L),
+ };
+
+ setPathChildrenCache();
+
+ Map<String, List<ControllerRegistryEntry>> switches = registry.getAllSwitches();
+ assertNotNull(switches);
+ assertEquals(dpids.length, switches.size());
+ for (String dpid : dpids) {
+ assertTrue(switches.keySet().contains(dpid));
+ }
+ }
+
+ /**
+ * Test if {@link ZookeeperRegistry#allocateUniqueIdBlock()} can assign IdBlock without duplication.
+ */
+ @Test
+ public void testAllocateUniqueIdBlock() {
+ // Number of blocks to be verified that any of them has unique block
+ final int NUM_BLOCKS = 100;
+ ArrayList<IdBlock> blocks = new ArrayList<IdBlock>(NUM_BLOCKS);
+
+ for (int i = 0; i < NUM_BLOCKS; ++i) {
+ IdBlock block = registry.allocateUniqueIdBlock();
+ assertNotNull(block);
+ blocks.add(block);
+ }
+
+ for (int i = 0; i < NUM_BLOCKS; ++i) {
+ IdBlock block1 = blocks.get(i);
+ for (int j = i + 1; j < NUM_BLOCKS; ++j) {
+ IdBlock block2 = blocks.get(j);
+ IdBlock lower, higher;
+
+ if (block1.getStart() < block2.getStart()) {
+ lower = block1;
+ higher = block2;
+ } else {
+ lower = block2;
+ higher = block1;
+ }
+
+ assertTrue(lower.getSize() > 0L);
+ assertTrue(higher.getSize() > 0L);
+ assertTrue(lower.getEnd() <= higher.getStart());
+ }
+ }
+ }
+
+
+ //-------------------------- Creation of mock objects --------------------------
+
+ /**
+ * Create mock {@link CuratorFramework} object with initial value below.<br>
+ * [Ctrl ID] : [DPID]<br>
+ * controller1 : 1000<br>
+ * controller2 : 1001<br>
+ * controller2 : 1002<br>
+ * controller2013 : nothing
+ *
+ * @return Created mock object
+ * @throws Exception
+ */
+ @SuppressWarnings({"serial", "unchecked"})
+ private CuratorFramework createCuratorFrameworkMock() throws Exception {
+ // Mock of AtomicValue
+ AtomicValue<Long> atomicValue = EasyMock.createMock(AtomicValue.class);
+ EasyMock.expect(atomicValue.succeeded()).andReturn(true).anyTimes();
+ EasyMock.expect(atomicValue.preValue()).andAnswer(new IAnswer<Long>() {
+ private long value = 0;
+
+ @Override
+ public Long answer() throws Throwable {
+ value += ID_BLOCK_SIZE;
+ return value;
+ }
+ }).anyTimes();
+ EasyMock.expect(atomicValue.postValue()).andAnswer(new IAnswer<Long>() {
+ private long value = ID_BLOCK_SIZE;
+
+ @Override
+ public Long answer() throws Throwable {
+ value += ID_BLOCK_SIZE;
+ return value;
+ }
+ }).anyTimes();
+ EasyMock.replay(atomicValue);
+
+ // Mock DistributedAtomicLong
+ DistributedAtomicLong daLong = EasyMock.createMock(DistributedAtomicLong.class);
+ EasyMock.expect(daLong.add(EasyMock.anyLong())).andReturn(atomicValue).anyTimes();
+ EasyMock.replay(daLong);
+ PowerMock.expectNew(DistributedAtomicLong.class,
+ new Class<?>[]{CuratorFramework.class, String.class, RetryPolicy.class},
+ EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyObject(RetryPolicy.class)).
+ andReturn(daLong).anyTimes();
+ PowerMock.replay(DistributedAtomicLong.class);
+
+ // Mock ListenerContainer
+ ListenerContainer<PathChildrenCacheListener> listenerContainer = EasyMock.createMock(ListenerContainer.class);
+ listenerContainer.addListener(EasyMock.anyObject(PathChildrenCacheListener.class));
+ EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+ @Override
+ public Object answer() throws Throwable {
+ pathChildrenCacheListener = (PathChildrenCacheListener) EasyMock.getCurrentArguments()[0];
+ return null;
+ }
+ }).once();
+ EasyMock.replay(listenerContainer);
+
+ // Mock PathChildrenCache
+ PathChildrenCache pathChildrenCacheMain = createPathChildrenCacheMock(CONTROLLER_ID, new String[]{"/switches"}, listenerContainer);
+ PathChildrenCache pathChildrenCache1 = createPathChildrenCacheMock("controller1", new String[]{HexString.toHexString(1000L)}, listenerContainer);
+ PathChildrenCache pathChildrenCache2 = createPathChildrenCacheMock("controller2", new String[]{
+ HexString.toHexString(1001L), HexString.toHexString(1002L)}, listenerContainer);
+
+ // Mock PathChildrenCache constructor
+ PowerMock.expectNew(PathChildrenCache.class,
+ EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyBoolean()).
+ andReturn(pathChildrenCacheMain).once();
+ PowerMock.expectNew(PathChildrenCache.class,
+ EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyBoolean()).
+ andReturn(pathChildrenCache1).once();
+ PowerMock.expectNew(PathChildrenCache.class,
+ EasyMock.anyObject(CuratorFramework.class), EasyMock.anyObject(String.class), EasyMock.anyBoolean()).
+ andReturn(pathChildrenCache2).anyTimes();
+ PowerMock.replay(PathChildrenCache.class);
+
+ // Mock ServiceCache
+ ServiceCache<ControllerService> serviceCache = EasyMock.createMock(ServiceCache.class);
+ serviceCache.start();
+ EasyMock.expectLastCall().once();
+ EasyMock.expect(serviceCache.getInstances()).andReturn(new ArrayList<ServiceInstance<ControllerService>>() {{
+ add(createServiceInstanceMock("controller1"));
+ add(createServiceInstanceMock("controller2"));
+ }}).anyTimes();
+ EasyMock.replay(serviceCache);
+
+ // Mock ServiceCacheBuilder
+ ServiceCacheBuilder<ControllerService> serviceCacheBuilder = EasyMock.createMock(ServiceCacheBuilder.class);
+ EasyMock.expect(serviceCacheBuilder.name(EasyMock.anyObject(String.class))).andReturn(serviceCacheBuilder).once();
+ EasyMock.expect(serviceCacheBuilder.build()).andReturn(serviceCache).once();
+ EasyMock.replay(serviceCacheBuilder);
+
+ // Mock ServiceDiscovery
+ ServiceDiscovery<ControllerService> serviceDiscovery = EasyMock.createMock(ServiceDiscovery.class);
+ serviceDiscovery.start();
+ EasyMock.expectLastCall().once();
+ EasyMock.expect(serviceDiscovery.serviceCacheBuilder()).andReturn(serviceCacheBuilder).once();
+ serviceDiscovery.registerService(EasyMock.anyObject(ServiceInstance.class));
+ EasyMock.expectLastCall().once();
+ EasyMock.replay(serviceDiscovery);
+
+ // Mock CuratorFramework
+ CuratorFramework client = EasyMock.createMock(CuratorFramework.class);
+ client.start();
+ EasyMock.expectLastCall().once();
+ EasyMock.expect(client.usingNamespace(EasyMock.anyObject(String.class))).andReturn(client);
+ EasyMock.replay(client);
+
+ // Mock ServiceDiscoveryBuilder
+ ServiceDiscoveryBuilder<ControllerService> builder = EasyMock.createMock(ServiceDiscoveryBuilder.class);
+ EasyMock.expect(builder.client(client)).andReturn(builder).once();
+ EasyMock.expect(builder.basePath(EasyMock.anyObject(String.class))).andReturn(builder);
+ EasyMock.expect(builder.build()).andReturn(serviceDiscovery);
+ EasyMock.replay(builder);
+
+ PowerMock.mockStatic(ServiceDiscoveryBuilder.class);
+ EasyMock.expect(ServiceDiscoveryBuilder.builder(ControllerService.class)).andReturn(builder).once();
+ PowerMock.replay(ServiceDiscoveryBuilder.class);
+
+ return client;
+ }
+
+ /**
+ * Create mock {@link ServiceInstance} object using given controller ID.
+ *
+ * @param controllerId Controller ID to represent instance's payload (ControllerService).
+ * @return Mock ServiceInstance object
+ */
+ private ServiceInstance<ControllerService> createServiceInstanceMock(String controllerId) {
+ ControllerService controllerService = EasyMock.createMock(ControllerService.class);
+ EasyMock.expect(controllerService.getControllerId()).andReturn(controllerId).anyTimes();
+ EasyMock.replay(controllerService);
+
+ @SuppressWarnings("unchecked")
+ ServiceInstance<ControllerService> serviceInstance = EasyMock.createMock(ServiceInstance.class);
+ EasyMock.expect(serviceInstance.getPayload()).andReturn(controllerService).anyTimes();
+ EasyMock.replay(serviceInstance);
+
+ return serviceInstance;
+ }
+
+ /**
+ * Create mock {@link PathChildrenCache} using given controller ID and DPIDs.
+ *
+ * @param controllerId Controller ID to represent current data.
+ * @param paths List of HexString indicating switch's DPID.
+ * @param listener Callback object to be set as Listenable.
+ * @return Mock PathChildrenCache object
+ * @throws Exception
+ */
+ private PathChildrenCache createPathChildrenCacheMock(final String controllerId, final String[] paths,
+ ListenerContainer<PathChildrenCacheListener> listener) throws Exception {
+ PathChildrenCache pathChildrenCache = EasyMock.createMock(PathChildrenCache.class);
+
+ EasyMock.expect(pathChildrenCache.getListenable()).andReturn(listener).anyTimes();
+
+ pathChildrenCache.start(EasyMock.anyObject(StartMode.class));
+ EasyMock.expectLastCall().anyTimes();
+
+ List<ChildData> childs = new ArrayList<ChildData>();
+ for (String path : paths) {
+ childs.add(createChildDataMockForCurrentData(controllerId, path));
+ }
+ EasyMock.expect(pathChildrenCache.getCurrentData()).andReturn(childs).anyTimes();
+
+ pathChildrenCache.rebuild();
+ EasyMock.expectLastCall().anyTimes();
+
+ EasyMock.replay(pathChildrenCache);
+
+ return pathChildrenCache;
+ }
+
+ /**
+ * Create mock {@link ChildData} for {@link PathChildrenCache#getCurrentData()} return value.
+ * This object need to include 'sequence number' in tail of path string. ("-0" means 0th sequence)
+ *
+ * @param controllerId Controller ID
+ * @param path HexString indicating switch's DPID
+ * @return Mock ChildData object
+ */
+ private ChildData createChildDataMockForCurrentData(String controllerId, String path) {
+ ChildData data = EasyMock.createMock(ChildData.class);
+ EasyMock.expect(data.getPath()).andReturn(path + "-0").anyTimes();
+ EasyMock.expect(data.getData()).andReturn(controllerId.getBytes()).anyTimes();
+ EasyMock.replay(data);
+
+ return data;
+ }
+
+ /**
+ * Inject relations between controllers and switches using callback object.
+ *
+ * @throws Exception
+ */
+ private void setPathChildrenCache() throws Exception {
+ pathChildrenCacheListener.childEvent(client,
+ createChildrenCacheEventMock("controller1", HexString.toHexString(1000L), PathChildrenCacheEvent.Type.CHILD_ADDED));
+ pathChildrenCacheListener.childEvent(client,
+ createChildrenCacheEventMock("controller2", HexString.toHexString(1001L), PathChildrenCacheEvent.Type.CHILD_ADDED));
+ pathChildrenCacheListener.childEvent(client,
+ createChildrenCacheEventMock("controller2", HexString.toHexString(1002L), PathChildrenCacheEvent.Type.CHILD_ADDED));
+ }
+
+ /**
+ * Create mock {@link PathChildrenCacheEvent} object using given controller ID and DPID.
+ *
+ * @param controllerId Controller ID.
+ * @param path HexString of DPID.
+ * @param type Event type to be set to mock object.
+ * @return Mock PathChildrenCacheEvent object
+ */
+ private PathChildrenCacheEvent createChildrenCacheEventMock(String controllerId, String path,
+ PathChildrenCacheEvent.Type type) {
+ PathChildrenCacheEvent event = EasyMock.createMock(PathChildrenCacheEvent.class);
+ ChildData data = EasyMock.createMock(ChildData.class);
+
+ EasyMock.expect(data.getPath()).andReturn(path).anyTimes();
+ EasyMock.expect(data.getData()).andReturn(controllerId.getBytes()).anyTimes();
+ EasyMock.replay(data);
+
+ EasyMock.expect(event.getType()).andReturn(type).anyTimes();
+ EasyMock.expect(event.getData()).andReturn(data).anyTimes();
+ EasyMock.replay(event);
+
+ return event;
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/util/FlowEntryActionTest.java b/src/test/java/net/onrc/onos/core/util/FlowEntryActionTest.java
index 1283bb0..4377c8c 100644
--- a/src/test/java/net/onrc/onos/core/util/FlowEntryActionTest.java
+++ b/src/test/java/net/onrc/onos/core/util/FlowEntryActionTest.java
@@ -1,6 +1,7 @@
package net.onrc.onos.core.util;
import static org.junit.Assert.assertEquals;
+
import net.floodlightcontroller.util.MACAddress;
import net.onrc.onos.core.util.FlowEntryAction.ActionEnqueue;
import net.onrc.onos.core.util.FlowEntryAction.ActionOutput;
@@ -16,412 +17,412 @@
public class FlowEntryActionTest {
- @Test
- public void testSetActionOutputActionOutput(){
- FlowEntryAction act = new FlowEntryAction();
- ActionOutput actout = new FlowEntryAction.ActionOutput(new Port((short)42));
- act.setActionOutput(actout);
+ @Test
+ public void testSetActionOutputActionOutput() {
+ FlowEntryAction act = new FlowEntryAction();
+ ActionOutput actout = new FlowEntryAction.ActionOutput(new Port((short) 42));
+ act.setActionOutput(actout);
- assertEquals("action output",FlowEntryAction.ActionValues.ACTION_OUTPUT , act.actionType());
- assertEquals("actionOutput port should be the same", actout.port(), act.actionOutput().port());
- assertEquals("actionOutput maxlen should be the same", actout.maxLen(), act.actionOutput().maxLen());
+ assertEquals("action output", FlowEntryAction.ActionValues.ACTION_OUTPUT, act.actionType());
+ assertEquals("actionOutput port should be the same", actout.port(), act.actionOutput().port());
+ assertEquals("actionOutput maxlen should be the same", actout.maxLen(), act.actionOutput().maxLen());
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionOutputPort(){
- FlowEntryAction act = new FlowEntryAction();
- act.setActionOutput(new Port((short)42));
+ @Test
+ public void testSetActionOutputPort() {
+ FlowEntryAction act = new FlowEntryAction();
+ act.setActionOutput(new Port((short) 42));
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionOutputToController(){
- FlowEntryAction act = new FlowEntryAction();
- act.setActionOutputToController((short)0);
+ @Test
+ public void testSetActionOutputToController() {
+ FlowEntryAction act = new FlowEntryAction();
+ act.setActionOutputToController((short) 0);
- FlowEntryAction act_copy = new FlowEntryAction();
- act_copy.setActionOutput(new Port(Port.PortValues.PORT_CONTROLLER));
- ;
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction();
+ act_copy.setActionOutput(new Port(Port.PortValues.PORT_CONTROLLER));
+ ;
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetVlanIdActionSetVlanId(){
- FlowEntryAction act = new FlowEntryAction();
- ActionSetVlanId actVlan = new FlowEntryAction.ActionSetVlanId((short)42);
- act.setActionSetVlanId(actVlan);
+ @Test
+ public void testSetActionSetVlanIdActionSetVlanId() {
+ FlowEntryAction act = new FlowEntryAction();
+ ActionSetVlanId actVlan = new FlowEntryAction.ActionSetVlanId((short) 42);
+ act.setActionSetVlanId(actVlan);
- assertEquals("action type",FlowEntryAction.ActionValues.ACTION_SET_VLAN_VID , act.actionType());
- assertEquals("vlanid should be the same", actVlan.vlanId(), act.actionSetVlanId().vlanId());
+ assertEquals("action type", FlowEntryAction.ActionValues.ACTION_SET_VLAN_VID, act.actionType());
+ assertEquals("vlanid should be the same", actVlan.vlanId(), act.actionSetVlanId().vlanId());
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetVlanIdShort(){
- FlowEntryAction act = new FlowEntryAction();
- act.setActionSetVlanId((short)42);
+ @Test
+ public void testSetActionSetVlanIdShort() {
+ FlowEntryAction act = new FlowEntryAction();
+ act.setActionSetVlanId((short) 42);
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetVlanPriorityActionSetVlanPriority(){
- FlowEntryAction act = new FlowEntryAction();
- ActionSetVlanPriority actVlan = new FlowEntryAction.ActionSetVlanPriority((byte)42);
- act.setActionSetVlanPriority(actVlan);
+ @Test
+ public void testSetActionSetVlanPriorityActionSetVlanPriority() {
+ FlowEntryAction act = new FlowEntryAction();
+ ActionSetVlanPriority actVlan = new FlowEntryAction.ActionSetVlanPriority((byte) 42);
+ act.setActionSetVlanPriority(actVlan);
- assertEquals("action type",FlowEntryAction.ActionValues.ACTION_SET_VLAN_PCP , act.actionType());
- assertEquals("vlan priority should be the same", actVlan.vlanPriority(), act.actionSetVlanPriority().vlanPriority());
+ assertEquals("action type", FlowEntryAction.ActionValues.ACTION_SET_VLAN_PCP, act.actionType());
+ assertEquals("vlan priority should be the same", actVlan.vlanPriority(), act.actionSetVlanPriority().vlanPriority());
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetVlanPriorityByte(){
- FlowEntryAction act = new FlowEntryAction();
- act.setActionSetVlanPriority((byte)42);
+ @Test
+ public void testSetActionSetVlanPriorityByte() {
+ FlowEntryAction act = new FlowEntryAction();
+ act.setActionSetVlanPriority((byte) 42);
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionStripVlanActionStripVlan(){
- FlowEntryAction act = new FlowEntryAction();
- ActionStripVlan actVlan = new FlowEntryAction.ActionStripVlan();
- act.setActionStripVlan(actVlan);
+ @Test
+ public void testSetActionStripVlanActionStripVlan() {
+ FlowEntryAction act = new FlowEntryAction();
+ ActionStripVlan actVlan = new FlowEntryAction.ActionStripVlan();
+ act.setActionStripVlan(actVlan);
- assertEquals("action type",FlowEntryAction.ActionValues.ACTION_STRIP_VLAN , act.actionType());
- assertEquals("vlanid should be the same", actVlan.stripVlan(), act.actionStripVlan().stripVlan());
+ assertEquals("action type", FlowEntryAction.ActionValues.ACTION_STRIP_VLAN, act.actionType());
+ assertEquals("vlanid should be the same", actVlan.stripVlan(), act.actionStripVlan().stripVlan());
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionStripVlanBoolean(){
- FlowEntryAction act = new FlowEntryAction();
- act.setActionStripVlan(true);
+ @Test
+ public void testSetActionStripVlanBoolean() {
+ FlowEntryAction act = new FlowEntryAction();
+ act.setActionStripVlan(true);
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetEthernetSrcAddrActionSetEthernetAddr(){
- FlowEntryAction act = new FlowEntryAction();
- byte[] mac = { 1, 2, 3, 4, 5, 6 };
- ActionSetEthernetAddr setEth = new FlowEntryAction.ActionSetEthernetAddr(new MACAddress(mac));
- act.setActionSetEthernetSrcAddr( setEth );
+ @Test
+ public void testSetActionSetEthernetSrcAddrActionSetEthernetAddr() {
+ FlowEntryAction act = new FlowEntryAction();
+ byte[] mac = {1, 2, 3, 4, 5, 6};
+ ActionSetEthernetAddr setEth = new FlowEntryAction.ActionSetEthernetAddr(new MACAddress(mac));
+ act.setActionSetEthernetSrcAddr(setEth);
- assertEquals("action type",FlowEntryAction.ActionValues.ACTION_SET_DL_SRC , act.actionType());
- assertEquals("addr should be the same", setEth.addr(), act.actionSetEthernetSrcAddr().addr());
+ assertEquals("action type", FlowEntryAction.ActionValues.ACTION_SET_DL_SRC, act.actionType());
+ assertEquals("addr should be the same", setEth.addr(), act.actionSetEthernetSrcAddr().addr());
-
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- @Test
- public void testSetActionSetEthernetSrcAddrMACAddress(){
- FlowEntryAction act = new FlowEntryAction();
- byte[] mac = { 1, 2, 3, 4, 5, 6 };
- act.setActionSetEthernetSrcAddr(new MACAddress(mac));
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ @Test
+ public void testSetActionSetEthernetSrcAddrMACAddress() {
+ FlowEntryAction act = new FlowEntryAction();
+ byte[] mac = {1, 2, 3, 4, 5, 6};
+ act.setActionSetEthernetSrcAddr(new MACAddress(mac));
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- @Test
- public void testSetActionSetEthernetDstAddrActionSetEthernetAddr(){
- FlowEntryAction act = new FlowEntryAction();
- byte[] mac = { 1, 2, 3, 4, 5, 6 };
- ActionSetEthernetAddr setEth = new FlowEntryAction.ActionSetEthernetAddr(new MACAddress(mac));
- act.setActionSetEthernetDstAddr( setEth );
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- assertEquals("action type",FlowEntryAction.ActionValues.ACTION_SET_DL_DST , act.actionType());
- assertEquals("addr should be the same", setEth.addr(), act.actionSetEthernetDstAddr().addr());
+ @Test
+ public void testSetActionSetEthernetDstAddrActionSetEthernetAddr() {
+ FlowEntryAction act = new FlowEntryAction();
+ byte[] mac = {1, 2, 3, 4, 5, 6};
+ ActionSetEthernetAddr setEth = new FlowEntryAction.ActionSetEthernetAddr(new MACAddress(mac));
+ act.setActionSetEthernetDstAddr(setEth);
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ assertEquals("action type", FlowEntryAction.ActionValues.ACTION_SET_DL_DST, act.actionType());
+ assertEquals("addr should be the same", setEth.addr(), act.actionSetEthernetDstAddr().addr());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- @Test
- public void testSetActionSetEthernetDstAddrMACAddress(){
- FlowEntryAction act = new FlowEntryAction();
- byte[] mac = { 1, 2, 3, 4, 5, 6 };
- act.setActionSetEthernetDstAddr(new MACAddress(mac));
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
+
+ @Test
+ public void testSetActionSetEthernetDstAddrMACAddress() {
+ FlowEntryAction act = new FlowEntryAction();
+ byte[] mac = {1, 2, 3, 4, 5, 6};
+ act.setActionSetEthernetDstAddr(new MACAddress(mac));
+
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ @Test
+ public void testSetActionSetIPv4SrcAddrActionSetIPv4Addr() {
+ FlowEntryAction act = new FlowEntryAction();
+ ActionSetIPv4Addr setIp = new FlowEntryAction.ActionSetIPv4Addr(new IPv4("127.0.0.1"));
+ act.setActionSetIPv4SrcAddr(setIp);
- @Test
- public void testSetActionSetIPv4SrcAddrActionSetIPv4Addr(){
- FlowEntryAction act = new FlowEntryAction();
- ActionSetIPv4Addr setIp = new FlowEntryAction.ActionSetIPv4Addr(new IPv4("127.0.0.1"));
- act.setActionSetIPv4SrcAddr( setIp );
+ assertEquals("action type", FlowEntryAction.ActionValues.ACTION_SET_NW_SRC, act.actionType());
+ assertEquals("addr should be the same", setIp.addr(), act.actionSetIPv4SrcAddr().addr());
- assertEquals("action type",FlowEntryAction.ActionValues.ACTION_SET_NW_SRC , act.actionType());
- assertEquals("addr should be the same", setIp.addr(), act.actionSetIPv4SrcAddr().addr());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
-
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetIPv4SrcAddrIPv4(){
- FlowEntryAction act = new FlowEntryAction();
- act.setActionSetIPv4SrcAddr(new IPv4("127.0.0.1"));
+ @Test
+ public void testSetActionSetIPv4SrcAddrIPv4() {
+ FlowEntryAction act = new FlowEntryAction();
+ act.setActionSetIPv4SrcAddr(new IPv4("127.0.0.1"));
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetIPv4DstAddrActionSetIPv4Addr(){
- FlowEntryAction act = new FlowEntryAction();
- ActionSetIPv4Addr setIp = new FlowEntryAction.ActionSetIPv4Addr(new IPv4("127.0.0.1"));
- act.setActionSetIPv4DstAddr( setIp );
+ @Test
+ public void testSetActionSetIPv4DstAddrActionSetIPv4Addr() {
+ FlowEntryAction act = new FlowEntryAction();
+ ActionSetIPv4Addr setIp = new FlowEntryAction.ActionSetIPv4Addr(new IPv4("127.0.0.1"));
+ act.setActionSetIPv4DstAddr(setIp);
- assertEquals("action type",FlowEntryAction.ActionValues.ACTION_SET_NW_DST , act.actionType());
- assertEquals("addr should be the same", setIp.addr(), act.actionSetIPv4DstAddr().addr());
+ assertEquals("action type", FlowEntryAction.ActionValues.ACTION_SET_NW_DST, act.actionType());
+ assertEquals("addr should be the same", setIp.addr(), act.actionSetIPv4DstAddr().addr());
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetIPv4DstAddrIPv4(){
- FlowEntryAction act = new FlowEntryAction();
- act.setActionSetIPv4DstAddr(new IPv4("127.0.0.1"));
+ @Test
+ public void testSetActionSetIPv4DstAddrIPv4() {
+ FlowEntryAction act = new FlowEntryAction();
+ act.setActionSetIPv4DstAddr(new IPv4("127.0.0.1"));
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetIpToSActionSetIpToS(){
- FlowEntryAction act = new FlowEntryAction();
- ActionSetIpToS setIpTos = new FlowEntryAction.ActionSetIpToS((byte)42);
- act.setActionSetIpToS( setIpTos );
+ @Test
+ public void testSetActionSetIpToSActionSetIpToS() {
+ FlowEntryAction act = new FlowEntryAction();
+ ActionSetIpToS setIpTos = new FlowEntryAction.ActionSetIpToS((byte) 42);
+ act.setActionSetIpToS(setIpTos);
- assertEquals("action type",FlowEntryAction.ActionValues.ACTION_SET_NW_TOS , act.actionType());
- assertEquals("tos should be the same", setIpTos.ipToS(), act.actionSetIpToS().ipToS());
+ assertEquals("action type", FlowEntryAction.ActionValues.ACTION_SET_NW_TOS, act.actionType());
+ assertEquals("tos should be the same", setIpTos.ipToS(), act.actionSetIpToS().ipToS());
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetIpToSByte(){
- FlowEntryAction act = new FlowEntryAction();
- act.setActionSetIpToS((byte)1);
+ @Test
+ public void testSetActionSetIpToSByte() {
+ FlowEntryAction act = new FlowEntryAction();
+ act.setActionSetIpToS((byte) 1);
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetTcpUdpSrcPortActionSetTcpUdpPort(){
- FlowEntryAction act = new FlowEntryAction();
- ActionSetTcpUdpPort setPorts = new FlowEntryAction.ActionSetTcpUdpPort((short)42);
- act.setActionSetTcpUdpSrcPort( setPorts );
+ @Test
+ public void testSetActionSetTcpUdpSrcPortActionSetTcpUdpPort() {
+ FlowEntryAction act = new FlowEntryAction();
+ ActionSetTcpUdpPort setPorts = new FlowEntryAction.ActionSetTcpUdpPort((short) 42);
+ act.setActionSetTcpUdpSrcPort(setPorts);
- assertEquals("action type",FlowEntryAction.ActionValues.ACTION_SET_TP_SRC , act.actionType());
- assertEquals("port should be the same", setPorts.port(), act.actionSetTcpUdpSrcPort().port());
+ assertEquals("action type", FlowEntryAction.ActionValues.ACTION_SET_TP_SRC, act.actionType());
+ assertEquals("port should be the same", setPorts.port(), act.actionSetTcpUdpSrcPort().port());
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetTcpUdpSrcPortShort(){
- FlowEntryAction act = new FlowEntryAction();
- act.setActionSetTcpUdpSrcPort((short)1);
+ @Test
+ public void testSetActionSetTcpUdpSrcPortShort() {
+ FlowEntryAction act = new FlowEntryAction();
+ act.setActionSetTcpUdpSrcPort((short) 1);
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetTcpUdpDstPortActionSetTcpUdpPort(){
- FlowEntryAction act = new FlowEntryAction();
- ActionSetTcpUdpPort setPorts = new FlowEntryAction.ActionSetTcpUdpPort((short)42);
- act.setActionSetTcpUdpDstPort( setPorts );
+ @Test
+ public void testSetActionSetTcpUdpDstPortActionSetTcpUdpPort() {
+ FlowEntryAction act = new FlowEntryAction();
+ ActionSetTcpUdpPort setPorts = new FlowEntryAction.ActionSetTcpUdpPort((short) 42);
+ act.setActionSetTcpUdpDstPort(setPorts);
- assertEquals("action type",FlowEntryAction.ActionValues.ACTION_SET_TP_DST , act.actionType());
- assertEquals("port should be the same", setPorts.port(), act.actionSetTcpUdpDstPort().port());
+ assertEquals("action type", FlowEntryAction.ActionValues.ACTION_SET_TP_DST, act.actionType());
+ assertEquals("port should be the same", setPorts.port(), act.actionSetTcpUdpDstPort().port());
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionSetTcpUdpDstPortShort(){
- FlowEntryAction act = new FlowEntryAction();
- act.setActionSetTcpUdpDstPort((short)1);
+ @Test
+ public void testSetActionSetTcpUdpDstPortShort() {
+ FlowEntryAction act = new FlowEntryAction();
+ act.setActionSetTcpUdpDstPort((short) 1);
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionEnqueueActionEnqueue(){
- FlowEntryAction act = new FlowEntryAction();
- ActionEnqueue enq = new FlowEntryAction.ActionEnqueue(new Port((short)42), 1);
- act.setActionEnqueue( enq );
+ @Test
+ public void testSetActionEnqueueActionEnqueue() {
+ FlowEntryAction act = new FlowEntryAction();
+ ActionEnqueue enq = new FlowEntryAction.ActionEnqueue(new Port((short) 42), 1);
+ act.setActionEnqueue(enq);
- assertEquals("action type",FlowEntryAction.ActionValues.ACTION_ENQUEUE , act.actionType());
- assertEquals("port should be the same", enq.port(), act.actionEnqueue().port());
- assertEquals("queue id should be the same", enq.queueId(), act.actionEnqueue().queueId());
+ assertEquals("action type", FlowEntryAction.ActionValues.ACTION_ENQUEUE, act.actionType());
+ assertEquals("port should be the same", enq.port(), act.actionEnqueue().port());
+ assertEquals("queue id should be the same", enq.queueId(), act.actionEnqueue().queueId());
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
- @Test
- public void testSetActionEnqueuePortInt(){
- FlowEntryAction act = new FlowEntryAction();
- act.setActionEnqueue(new Port((short)42), 1);
+ @Test
+ public void testSetActionEnqueuePortInt() {
+ FlowEntryAction act = new FlowEntryAction();
+ act.setActionEnqueue(new Port((short) 42), 1);
- FlowEntryAction act_copy = new FlowEntryAction(act);
- FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
+ FlowEntryAction act_copy = new FlowEntryAction(act);
+ FlowEntryAction act_copy2 = new FlowEntryAction(act.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy.toString());
- assertEquals("toString must match between copies", act.toString(),
- act_copy2.toString());
- }
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy.toString());
+ assertEquals("toString must match between copies", act.toString(),
+ act_copy2.toString());
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/util/FlowEntryMatchTest.java b/src/test/java/net/onrc/onos/core/util/FlowEntryMatchTest.java
index 515a631..353b8ab 100644
--- a/src/test/java/net/onrc/onos/core/util/FlowEntryMatchTest.java
+++ b/src/test/java/net/onrc/onos/core/util/FlowEntryMatchTest.java
@@ -3,6 +3,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+
import net.floodlightcontroller.util.MACAddress;
import org.junit.Before;
@@ -10,303 +11,303 @@
public class FlowEntryMatchTest {
- FlowEntryMatch match;
-
- Port inport = new Port((short)1);
- byte[] byte1 = { 1, 2, 3, 4, 5, 6 };
- byte[] byte2 = { 6, 5, 4, 3, 2, 1 };
- MACAddress mac1 = new MACAddress(byte1);
- MACAddress mac2 = new MACAddress(byte2);
- Short ether = Short.valueOf((short)2);
- Short vlanid = Short.valueOf((short)3);
- Byte vlanprio = Byte.valueOf((byte)4);
- IPv4Net ip1 = new IPv4Net("127.0.0.1/32");
- IPv4Net ip2 = new IPv4Net("127.0.0.2/32");
- Byte ipproto = Byte.valueOf((byte)5);
- Byte ipToS = Byte.valueOf((byte)6);
- Short tport1 = Short.valueOf((short)7);
- Short tport2 = Short.valueOf((short)8);
-
- @Before
- public void setUp() throws Exception{
- match = new FlowEntryMatch();
- match.enableInPort( inport);
- match.enableSrcMac( mac1 );
- match.enableDstMac( mac2 );
- match.enableEthernetFrameType( ether );
- match.enableVlanId( vlanid );
- match.enableVlanPriority( vlanprio );
- match.enableSrcIPv4Net( ip1 );
- match.enableDstIPv4Net( ip2 );
- match.enableIpProto( ipproto );
- match.enableIpToS( ipToS );
- match.enableSrcTcpUdpPort( tport1 );
- match.enableDstTcpUdpPort( tport2 );
- }
+ FlowEntryMatch match;
- @Test
- public void testFlowEntryMatch(){
- FlowEntryMatch def = new FlowEntryMatch();
-
- assertEquals("default null", null, def.inPort() );
- assertEquals("default null", null, def.srcMac() );
- assertEquals("default null", null, def.dstMac() );
- assertEquals("default null", null, def.ethernetFrameType() );
- assertEquals("default null", null, def.vlanId() );
- assertEquals("default null", null, def.vlanPriority() );
- assertEquals("default null", null, def.srcIPv4Net() );
- assertEquals("default null", null, def.dstIPv4Net() );
- assertEquals("default null", null, def.ipProto() );
- assertEquals("default null", null, def.ipToS() );
- assertEquals("default null", null, def.srcTcpUdpPort() );
- assertEquals("default null", null, def.dstTcpUdpPort() );
- }
+ Port inport = new Port((short) 1);
+ byte[] byte1 = {1, 2, 3, 4, 5, 6};
+ byte[] byte2 = {6, 5, 4, 3, 2, 1};
+ MACAddress mac1 = new MACAddress(byte1);
+ MACAddress mac2 = new MACAddress(byte2);
+ Short ether = Short.valueOf((short) 2);
+ Short vlanid = Short.valueOf((short) 3);
+ Byte vlanprio = Byte.valueOf((byte) 4);
+ IPv4Net ip1 = new IPv4Net("127.0.0.1/32");
+ IPv4Net ip2 = new IPv4Net("127.0.0.2/32");
+ Byte ipproto = Byte.valueOf((byte) 5);
+ Byte ipToS = Byte.valueOf((byte) 6);
+ Short tport1 = Short.valueOf((short) 7);
+ Short tport2 = Short.valueOf((short) 8);
- @Test
- public void testFlowEntryMatchFlowEntryMatch(){
- FlowEntryMatch def_base = new FlowEntryMatch();
- FlowEntryMatch def = new FlowEntryMatch(def_base);
+ @Before
+ public void setUp() throws Exception {
+ match = new FlowEntryMatch();
+ match.enableInPort(inport);
+ match.enableSrcMac(mac1);
+ match.enableDstMac(mac2);
+ match.enableEthernetFrameType(ether);
+ match.enableVlanId(vlanid);
+ match.enableVlanPriority(vlanprio);
+ match.enableSrcIPv4Net(ip1);
+ match.enableDstIPv4Net(ip2);
+ match.enableIpProto(ipproto);
+ match.enableIpToS(ipToS);
+ match.enableSrcTcpUdpPort(tport1);
+ match.enableDstTcpUdpPort(tport2);
+ }
- assertEquals("default null", null, def.inPort() );
- assertEquals("default null", null, def.srcMac() );
- assertEquals("default null", null, def.dstMac() );
- assertEquals("default null", null, def.ethernetFrameType() );
- assertEquals("default null", null, def.vlanId() );
- assertEquals("default null", null, def.vlanPriority() );
- assertEquals("default null", null, def.srcIPv4Net() );
- assertEquals("default null", null, def.dstIPv4Net() );
- assertEquals("default null", null, def.ipProto() );
- assertEquals("default null", null, def.ipToS() );
- assertEquals("default null", null, def.srcTcpUdpPort() );
- assertEquals("default null", null, def.dstTcpUdpPort() );
-
- FlowEntryMatch copy = new FlowEntryMatch( match );
-
- assertEquals("inport", inport, copy.inPort() );
- assertEquals("mac1", mac1, copy.srcMac() );
- assertEquals("mac2", mac2, copy.dstMac() );
- assertEquals("ether", ether, copy.ethernetFrameType() );
- assertEquals("vlan id", vlanid, copy.vlanId() );
- assertEquals("vlan prio", vlanprio, copy.vlanPriority() );
- assertEquals("ip1", ip1, copy.srcIPv4Net() );
- assertEquals("ip2", ip2, copy.dstIPv4Net() );
- assertEquals("ip proto", ipproto, copy.ipProto() );
- assertEquals("tos", ipToS, copy.ipToS() );
- assertEquals("src port", tport1, copy.srcTcpUdpPort() );
- assertEquals("dst port", tport2, copy.dstTcpUdpPort() );
+ @Test
+ public void testFlowEntryMatch() {
+ FlowEntryMatch def = new FlowEntryMatch();
- }
+ assertEquals("default null", null, def.inPort());
+ assertEquals("default null", null, def.srcMac());
+ assertEquals("default null", null, def.dstMac());
+ assertEquals("default null", null, def.ethernetFrameType());
+ assertEquals("default null", null, def.vlanId());
+ assertEquals("default null", null, def.vlanPriority());
+ assertEquals("default null", null, def.srcIPv4Net());
+ assertEquals("default null", null, def.dstIPv4Net());
+ assertEquals("default null", null, def.ipProto());
+ assertEquals("default null", null, def.ipToS());
+ assertEquals("default null", null, def.srcTcpUdpPort());
+ assertEquals("default null", null, def.dstTcpUdpPort());
+ }
- @Test
- public void testInPort(){
- assertEquals("inport", inport, match.inPort() );
- }
+ @Test
+ public void testFlowEntryMatchFlowEntryMatch() {
+ FlowEntryMatch def_base = new FlowEntryMatch();
+ FlowEntryMatch def = new FlowEntryMatch(def_base);
- @Test
- public void testDisableInPort(){
- match.disableInPort();
- assertEquals("inport", null, match.inPort() );
- assertFalse( match.matchInPort() );
- }
+ assertEquals("default null", null, def.inPort());
+ assertEquals("default null", null, def.srcMac());
+ assertEquals("default null", null, def.dstMac());
+ assertEquals("default null", null, def.ethernetFrameType());
+ assertEquals("default null", null, def.vlanId());
+ assertEquals("default null", null, def.vlanPriority());
+ assertEquals("default null", null, def.srcIPv4Net());
+ assertEquals("default null", null, def.dstIPv4Net());
+ assertEquals("default null", null, def.ipProto());
+ assertEquals("default null", null, def.ipToS());
+ assertEquals("default null", null, def.srcTcpUdpPort());
+ assertEquals("default null", null, def.dstTcpUdpPort());
- @Test
- public void testMatchInPort(){
- assertTrue( match.matchInPort() );
- }
+ FlowEntryMatch copy = new FlowEntryMatch(match);
- @Test
- public void testSrcMac(){
- assertEquals("mac1", mac1, match.srcMac() );
- }
+ assertEquals("inport", inport, copy.inPort());
+ assertEquals("mac1", mac1, copy.srcMac());
+ assertEquals("mac2", mac2, copy.dstMac());
+ assertEquals("ether", ether, copy.ethernetFrameType());
+ assertEquals("vlan id", vlanid, copy.vlanId());
+ assertEquals("vlan prio", vlanprio, copy.vlanPriority());
+ assertEquals("ip1", ip1, copy.srcIPv4Net());
+ assertEquals("ip2", ip2, copy.dstIPv4Net());
+ assertEquals("ip proto", ipproto, copy.ipProto());
+ assertEquals("tos", ipToS, copy.ipToS());
+ assertEquals("src port", tport1, copy.srcTcpUdpPort());
+ assertEquals("dst port", tport2, copy.dstTcpUdpPort());
- @Test
- public void testDisableSrcMac(){
- match.disableSrcMac();
- assertEquals("srcMac", null, match.srcMac() );
- assertFalse( match.matchSrcMac() );
- }
+ }
- @Test
- public void testMatchSrcMac(){
- assertTrue( match.matchSrcMac() );
- }
+ @Test
+ public void testInPort() {
+ assertEquals("inport", inport, match.inPort());
+ }
- @Test
- public void testDstMac(){
- assertEquals("mac2", mac2, match.dstMac() );
- }
+ @Test
+ public void testDisableInPort() {
+ match.disableInPort();
+ assertEquals("inport", null, match.inPort());
+ assertFalse(match.matchInPort());
+ }
- @Test
- public void testDisableDstMac(){
- match.disableDstMac();
- assertEquals("dstMac", null, match.dstMac() );
- assertFalse( match.matchDstMac() );
- }
+ @Test
+ public void testMatchInPort() {
+ assertTrue(match.matchInPort());
+ }
- @Test
- public void testMatchDstMac(){
- assertTrue( match.matchDstMac() );
- }
+ @Test
+ public void testSrcMac() {
+ assertEquals("mac1", mac1, match.srcMac());
+ }
- @Test
- public void testEthernetFrameType(){
- assertEquals("ether", ether, match.ethernetFrameType() );
- }
+ @Test
+ public void testDisableSrcMac() {
+ match.disableSrcMac();
+ assertEquals("srcMac", null, match.srcMac());
+ assertFalse(match.matchSrcMac());
+ }
- @Test
- public void testDisableEthernetFrameType(){
- match.disableEthernetFrameType();
- assertEquals("ethernetFrameType", null, match.ethernetFrameType() );
- assertFalse( match.matchEthernetFrameType() );
- }
+ @Test
+ public void testMatchSrcMac() {
+ assertTrue(match.matchSrcMac());
+ }
- @Test
- public void testMatchEthernetFrameType(){
- assertTrue( match.matchEthernetFrameType() );
- }
+ @Test
+ public void testDstMac() {
+ assertEquals("mac2", mac2, match.dstMac());
+ }
- @Test
- public void testVlanId(){
- assertEquals("vlan id", vlanid, match.vlanId() );
- }
+ @Test
+ public void testDisableDstMac() {
+ match.disableDstMac();
+ assertEquals("dstMac", null, match.dstMac());
+ assertFalse(match.matchDstMac());
+ }
- @Test
- public void testDisableVlanId(){
- match.disableVlanId();
- assertEquals("vlanId", null, match.vlanId() );
- assertFalse( match.matchVlanId() );
- }
+ @Test
+ public void testMatchDstMac() {
+ assertTrue(match.matchDstMac());
+ }
- @Test
- public void testMatchVlanId(){
- assertTrue( match.matchVlanId() );
- }
+ @Test
+ public void testEthernetFrameType() {
+ assertEquals("ether", ether, match.ethernetFrameType());
+ }
- @Test
- public void testVlanPriority(){
- assertEquals("vlan prio", vlanprio, match.vlanPriority() );
- }
+ @Test
+ public void testDisableEthernetFrameType() {
+ match.disableEthernetFrameType();
+ assertEquals("ethernetFrameType", null, match.ethernetFrameType());
+ assertFalse(match.matchEthernetFrameType());
+ }
- @Test
- public void testDisableVlanPriority(){
- match.disableVlanPriority();
- assertEquals("vlanPriority", null, match.vlanPriority() );
- assertFalse( match.matchVlanPriority() );
- }
+ @Test
+ public void testMatchEthernetFrameType() {
+ assertTrue(match.matchEthernetFrameType());
+ }
- @Test
- public void testMatchVlanPriority(){
- assertTrue( match.matchVlanPriority() );
- }
+ @Test
+ public void testVlanId() {
+ assertEquals("vlan id", vlanid, match.vlanId());
+ }
- @Test
- public void testSrcIPv4Net(){
- assertEquals("ip1", ip1, match.srcIPv4Net() );
- }
+ @Test
+ public void testDisableVlanId() {
+ match.disableVlanId();
+ assertEquals("vlanId", null, match.vlanId());
+ assertFalse(match.matchVlanId());
+ }
- @Test
- public void testDisableSrcIPv4Net(){
- match.disableSrcIPv4Net();
- assertEquals("srcIPv4Net", null, match.srcIPv4Net() );
- assertFalse( match.matchSrcIPv4Net() );
- }
+ @Test
+ public void testMatchVlanId() {
+ assertTrue(match.matchVlanId());
+ }
- @Test
- public void testMatchSrcIPv4Net(){
- assertTrue( match.matchSrcIPv4Net() );
- }
+ @Test
+ public void testVlanPriority() {
+ assertEquals("vlan prio", vlanprio, match.vlanPriority());
+ }
- @Test
- public void testDstIPv4Net(){
- assertEquals("ip2", ip2, match.dstIPv4Net() );
- }
+ @Test
+ public void testDisableVlanPriority() {
+ match.disableVlanPriority();
+ assertEquals("vlanPriority", null, match.vlanPriority());
+ assertFalse(match.matchVlanPriority());
+ }
- @Test
- public void testDisableDstIPv4Net(){
- match.disableDstIPv4Net();
- assertEquals("dstIPv4Net", null, match.dstIPv4Net() );
- assertFalse( match.matchDstIPv4Net() );
- }
+ @Test
+ public void testMatchVlanPriority() {
+ assertTrue(match.matchVlanPriority());
+ }
- @Test
- public void testMatchDstIPv4Net(){
- assertTrue( match.matchDstIPv4Net() );
- }
+ @Test
+ public void testSrcIPv4Net() {
+ assertEquals("ip1", ip1, match.srcIPv4Net());
+ }
- @Test
- public void testIpProto(){
- assertEquals("ip proto", ipproto, match.ipProto() );
- }
+ @Test
+ public void testDisableSrcIPv4Net() {
+ match.disableSrcIPv4Net();
+ assertEquals("srcIPv4Net", null, match.srcIPv4Net());
+ assertFalse(match.matchSrcIPv4Net());
+ }
- @Test
- public void testDisableIpProto(){
- match.disableIpProto();
- assertEquals("ipProto", null, match.ipProto() );
- assertFalse( match.matchIpProto() );
- }
+ @Test
+ public void testMatchSrcIPv4Net() {
+ assertTrue(match.matchSrcIPv4Net());
+ }
- @Test
- public void testMatchIpProto(){
- assertTrue( match.matchIpProto() );
- }
+ @Test
+ public void testDstIPv4Net() {
+ assertEquals("ip2", ip2, match.dstIPv4Net());
+ }
- @Test
- public void testIpToS(){
- assertEquals("tos", ipToS, match.ipToS() );
- }
+ @Test
+ public void testDisableDstIPv4Net() {
+ match.disableDstIPv4Net();
+ assertEquals("dstIPv4Net", null, match.dstIPv4Net());
+ assertFalse(match.matchDstIPv4Net());
+ }
- @Test
- public void testDisableIpToS(){
- match.disableIpToS();
- assertEquals("ipToS", null, match.ipToS() );
- assertFalse( match.matchIpToS() );
- }
+ @Test
+ public void testMatchDstIPv4Net() {
+ assertTrue(match.matchDstIPv4Net());
+ }
- @Test
- public void testMatchIpToS(){
- assertTrue( match.matchIpToS() );
- }
+ @Test
+ public void testIpProto() {
+ assertEquals("ip proto", ipproto, match.ipProto());
+ }
- @Test
- public void testSrcTcpUdpPort(){
- assertEquals("src port", tport1, match.srcTcpUdpPort() );
- }
+ @Test
+ public void testDisableIpProto() {
+ match.disableIpProto();
+ assertEquals("ipProto", null, match.ipProto());
+ assertFalse(match.matchIpProto());
+ }
- @Test
- public void testDisableSrcTcpUdpPort(){
- match.disableSrcTcpUdpPort();
- assertEquals("srcTcpUdpPort", null, match.srcTcpUdpPort() );
- assertFalse( match.matchSrcTcpUdpPort() );
- }
+ @Test
+ public void testMatchIpProto() {
+ assertTrue(match.matchIpProto());
+ }
- @Test
- public void testMatchSrcTcpUdpPort(){
- assertTrue( match.matchSrcTcpUdpPort() );
- }
+ @Test
+ public void testIpToS() {
+ assertEquals("tos", ipToS, match.ipToS());
+ }
- @Test
- public void testDstTcpUdpPort(){
- assertEquals("dst port", tport2, match.dstTcpUdpPort() );
- }
+ @Test
+ public void testDisableIpToS() {
+ match.disableIpToS();
+ assertEquals("ipToS", null, match.ipToS());
+ assertFalse(match.matchIpToS());
+ }
- @Test
- public void testDisableDstTcpUdpPort(){
- match.disableDstTcpUdpPort();
- assertEquals("dstTcpUdpPort", null, match.dstTcpUdpPort() );
- assertFalse( match.matchDstTcpUdpPort() );
- }
+ @Test
+ public void testMatchIpToS() {
+ assertTrue(match.matchIpToS());
+ }
- @Test
- public void testMatchDstTcpUdpPort(){
- assertTrue( match.matchDstTcpUdpPort() );
- }
+ @Test
+ public void testSrcTcpUdpPort() {
+ assertEquals("src port", tport1, match.srcTcpUdpPort());
+ }
- @Test
- public void testToString(){
- FlowEntryMatch def = new FlowEntryMatch();
- assertEquals("match default", def.toString(), "[]");
-
- assertEquals("match set", match.toString(), "[inPort=1 srcMac=01:02:03:04:05:06 dstMac=06:05:04:03:02:01 ethernetFrameType=2 vlanId=3 vlanPriority=4 srcIPv4Net=127.0.0.1/32 dstIPv4Net=127.0.0.2/32 ipProto=5 ipToS=6 srcTcpUdpPort=7 dstTcpUdpPort=8]");
- }
+ @Test
+ public void testDisableSrcTcpUdpPort() {
+ match.disableSrcTcpUdpPort();
+ assertEquals("srcTcpUdpPort", null, match.srcTcpUdpPort());
+ assertFalse(match.matchSrcTcpUdpPort());
+ }
+
+ @Test
+ public void testMatchSrcTcpUdpPort() {
+ assertTrue(match.matchSrcTcpUdpPort());
+ }
+
+ @Test
+ public void testDstTcpUdpPort() {
+ assertEquals("dst port", tport2, match.dstTcpUdpPort());
+ }
+
+ @Test
+ public void testDisableDstTcpUdpPort() {
+ match.disableDstTcpUdpPort();
+ assertEquals("dstTcpUdpPort", null, match.dstTcpUdpPort());
+ assertFalse(match.matchDstTcpUdpPort());
+ }
+
+ @Test
+ public void testMatchDstTcpUdpPort() {
+ assertTrue(match.matchDstTcpUdpPort());
+ }
+
+ @Test
+ public void testToString() {
+ FlowEntryMatch def = new FlowEntryMatch();
+ assertEquals("match default", def.toString(), "[]");
+
+ assertEquals("match set", match.toString(), "[inPort=1 srcMac=01:02:03:04:05:06 dstMac=06:05:04:03:02:01 ethernetFrameType=2 vlanId=3 vlanPriority=4 srcIPv4Net=127.0.0.1/32 dstIPv4Net=127.0.0.2/32 ipProto=5 ipToS=6 srcTcpUdpPort=7 dstTcpUdpPort=8]");
+ }
}
diff --git a/src/test/java/net/onrc/onos/core/util/FlowEntryTest.java b/src/test/java/net/onrc/onos/core/util/FlowEntryTest.java
index d877276..818abd5 100644
--- a/src/test/java/net/onrc/onos/core/util/FlowEntryTest.java
+++ b/src/test/java/net/onrc/onos/core/util/FlowEntryTest.java
@@ -2,6 +2,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+
import net.floodlightcontroller.util.MACAddress;
import org.junit.Before;
@@ -9,258 +10,258 @@
public class FlowEntryTest {
- FlowEntry entry;
-
- FlowId flowId = new FlowId(0x1234);
- FlowEntryId flowEntryId = new FlowEntryId(0x5678);
- int idleTimeout = 5;
- int hardTimeout = 10;
- int priority = 15;
- FlowEntryMatch match;
- FlowEntryActions actions;
-
- Dpid dpid = new Dpid(0xCAFE);
-
- Port inport = new Port((short)1);
- byte[] byte1 = { 1, 2, 3, 4, 5, 6 };
- byte[] byte2 = { 6, 5, 4, 3, 2, 1 };
- MACAddress mac1 = new MACAddress(byte1);
- MACAddress mac2 = new MACAddress(byte2);
- Short ether = Short.valueOf((short)2);
- Short vlanid = Short.valueOf((short)3);
- Byte vlanprio = Byte.valueOf((byte)4);
- IPv4Net ip1 = new IPv4Net("127.0.0.1/32");
- IPv4Net ip2 = new IPv4Net( new IPv4("127.0.0.2"), (short)32);
- IPv4 ipaddr1 = new IPv4("127.0.0.3");
- IPv4 ipaddr2 = new IPv4("127.0.0.4");
- Byte ipproto = Byte.valueOf((byte)5);
- Byte ipToS = Byte.valueOf((byte)6);
- Short tport1 = Short.valueOf((short)7);
- Short tport2 = Short.valueOf((short)8);
- Port outport = new Port((short)9);
- Port queueport = new Port((short)10);
- int queueId = 11;
-
- FlowEntryErrorState errorState = new FlowEntryErrorState( (short)12, (short)13);
+ FlowEntry entry;
-
- @Before
- public void setUp() throws Exception{
- entry = new FlowEntry();
+ FlowId flowId = new FlowId(0x1234);
+ FlowEntryId flowEntryId = new FlowEntryId(0x5678);
+ int idleTimeout = 5;
+ int hardTimeout = 10;
+ int priority = 15;
+ FlowEntryMatch match;
+ FlowEntryActions actions;
- flowId = new FlowId("0x1234");
- entry.setFlowId( flowId );
+ Dpid dpid = new Dpid(0xCAFE);
- flowEntryId = new FlowEntryId("0x5678");
- entry.setFlowEntryId(flowEntryId);
+ Port inport = new Port((short) 1);
+ byte[] byte1 = {1, 2, 3, 4, 5, 6};
+ byte[] byte2 = {6, 5, 4, 3, 2, 1};
+ MACAddress mac1 = new MACAddress(byte1);
+ MACAddress mac2 = new MACAddress(byte2);
+ Short ether = Short.valueOf((short) 2);
+ Short vlanid = Short.valueOf((short) 3);
+ Byte vlanprio = Byte.valueOf((byte) 4);
+ IPv4Net ip1 = new IPv4Net("127.0.0.1/32");
+ IPv4Net ip2 = new IPv4Net(new IPv4("127.0.0.2"), (short) 32);
+ IPv4 ipaddr1 = new IPv4("127.0.0.3");
+ IPv4 ipaddr2 = new IPv4("127.0.0.4");
+ Byte ipproto = Byte.valueOf((byte) 5);
+ Byte ipToS = Byte.valueOf((byte) 6);
+ Short tport1 = Short.valueOf((short) 7);
+ Short tport2 = Short.valueOf((short) 8);
+ Port outport = new Port((short) 9);
+ Port queueport = new Port((short) 10);
+ int queueId = 11;
- entry.setIdleTimeout(5);
- entry.setHardTimeout(10);
- entry.setPriority(15);
-
- dpid = new Dpid("CA:FE");
- entry.setDpid( dpid );
-
- entry.setInPort( inport );
- entry.setOutPort( outport );
+ FlowEntryErrorState errorState = new FlowEntryErrorState((short) 12, (short) 13);
- match = new FlowEntryMatch();
- match.enableInPort( inport);
- match.enableSrcMac( mac1 );
- match.enableDstMac( mac2 );
- match.enableEthernetFrameType( ether );
- match.enableVlanId( vlanid );
- match.enableVlanPriority( vlanprio );
- match.enableSrcIPv4Net( ip1 );
- match.enableDstIPv4Net( ip2 );
- match.enableIpProto( ipproto );
- match.enableIpToS( ipToS );
- match.enableSrcTcpUdpPort( tport1 );
- match.enableDstTcpUdpPort( tport2 );
-
- entry.setFlowEntryMatch( match );
-
- FlowEntryAction action = null;
- actions = entry.flowEntryActions();
-
- action = new FlowEntryAction();
- action.setActionOutput(outport);
- actions.addAction(action);
- action = new FlowEntryAction();
- action.setActionOutputToController((short)0);
- actions.addAction(action);
+ @Before
+ public void setUp() throws Exception {
+ entry = new FlowEntry();
- action = new FlowEntryAction();
- action.setActionSetVlanId(vlanid);
- actions.addAction(action);
+ flowId = new FlowId("0x1234");
+ entry.setFlowId(flowId);
- action = new FlowEntryAction();
- action.setActionSetVlanPriority(vlanprio);
- actions.addAction(action);
+ flowEntryId = new FlowEntryId("0x5678");
+ entry.setFlowEntryId(flowEntryId);
- action = new FlowEntryAction();
- action.setActionStripVlan(true);
- actions.addAction(action);
+ entry.setIdleTimeout(5);
+ entry.setHardTimeout(10);
+ entry.setPriority(15);
- action = new FlowEntryAction();
- action.setActionSetEthernetSrcAddr(mac1);
- actions.addAction(action);
+ dpid = new Dpid("CA:FE");
+ entry.setDpid(dpid);
- action = new FlowEntryAction();
- action.setActionSetEthernetDstAddr(mac2);
- actions.addAction(action);
+ entry.setInPort(inport);
+ entry.setOutPort(outport);
- action = new FlowEntryAction();
- action.setActionSetIPv4SrcAddr(ipaddr1);
- actions.addAction(action);
+ match = new FlowEntryMatch();
+ match.enableInPort(inport);
+ match.enableSrcMac(mac1);
+ match.enableDstMac(mac2);
+ match.enableEthernetFrameType(ether);
+ match.enableVlanId(vlanid);
+ match.enableVlanPriority(vlanprio);
+ match.enableSrcIPv4Net(ip1);
+ match.enableDstIPv4Net(ip2);
+ match.enableIpProto(ipproto);
+ match.enableIpToS(ipToS);
+ match.enableSrcTcpUdpPort(tport1);
+ match.enableDstTcpUdpPort(tport2);
- action = new FlowEntryAction();
- action.setActionSetIPv4DstAddr(ipaddr2);
- actions.addAction(action);
+ entry.setFlowEntryMatch(match);
- action = new FlowEntryAction();
- action.setActionSetIpToS(ipToS);
- actions.addAction(action);
+ FlowEntryAction action = null;
+ actions = entry.flowEntryActions();
- action = new FlowEntryAction();
- action.setActionSetTcpUdpSrcPort(tport1);
- actions.addAction(action);
+ action = new FlowEntryAction();
+ action.setActionOutput(outport);
+ actions.addAction(action);
- action = new FlowEntryAction();
- action.setActionSetTcpUdpDstPort(tport2);
- actions.addAction(action);
+ action = new FlowEntryAction();
+ action.setActionOutputToController((short) 0);
+ actions.addAction(action);
- action = new FlowEntryAction();
- action.setActionEnqueue(queueport, queueId);
- actions.addAction(action);
-
- entry.setFlowEntryUserState( FlowEntryUserState.FE_USER_ADD );
- entry.setFlowEntrySwitchState( FlowEntrySwitchState.FE_SWITCH_UPDATED );
- entry.setFlowEntryErrorState( errorState );
+ action = new FlowEntryAction();
+ action.setActionSetVlanId(vlanid);
+ actions.addAction(action);
- }
+ action = new FlowEntryAction();
+ action.setActionSetVlanPriority(vlanprio);
+ actions.addAction(action);
- @Test
- public void testFlowEntry(){
- FlowEntry e = new FlowEntry();
-
- assertTrue( e.flowEntryActions().isEmpty() );
- assertEquals("flowEntryUserState", FlowEntryUserState.FE_USER_UNKNOWN, e.flowEntryUserState() );
- assertEquals("flowEntrySwitchState", FlowEntrySwitchState.FE_SWITCH_UNKNOWN, e.flowEntrySwitchState() );
- }
+ action = new FlowEntryAction();
+ action.setActionStripVlan(true);
+ actions.addAction(action);
- @Test
- public void testFlowId(){
- assertEquals("flowId", flowId, entry.flowId() );
- }
+ action = new FlowEntryAction();
+ action.setActionSetEthernetSrcAddr(mac1);
+ actions.addAction(action);
- @Test
- public void testIsValidFlowId(){
- FlowEntry e = new FlowEntry();
+ action = new FlowEntryAction();
+ action.setActionSetEthernetDstAddr(mac2);
+ actions.addAction(action);
- // Test a Flow Entry with empty Flow ID
- assertEquals("isValidFlowId", false, e.isValidFlowId() );
+ action = new FlowEntryAction();
+ action.setActionSetIPv4SrcAddr(ipaddr1);
+ actions.addAction(action);
- // Test a Flow Entry with invalid Flow ID
- e.setFlowId(new FlowId());
- assertEquals("isValidFlowId", false, e.isValidFlowId() );
+ action = new FlowEntryAction();
+ action.setActionSetIPv4DstAddr(ipaddr2);
+ actions.addAction(action);
- // Test a Flow Entry with valid Flow ID
- e.setFlowId(new FlowId(0x1));
- assertEquals("isValidFlowId", true, e.isValidFlowId() );
- assertEquals("isValidFlowId", true, entry.isValidFlowId() );
- }
+ action = new FlowEntryAction();
+ action.setActionSetIpToS(ipToS);
+ actions.addAction(action);
- @Test
- public void testFlowEntryId(){
- assertEquals("flowEntryId", flowEntryId, entry.flowEntryId() );
- }
+ action = new FlowEntryAction();
+ action.setActionSetTcpUdpSrcPort(tport1);
+ actions.addAction(action);
- @Test
- public void testIsValidFlowEntryId(){
- FlowEntry e = new FlowEntry();
+ action = new FlowEntryAction();
+ action.setActionSetTcpUdpDstPort(tport2);
+ actions.addAction(action);
- // Test a Flow Entry with empty Flow Entry ID
- assertEquals("isValidFlowEntryId", false, e.isValidFlowEntryId() );
+ action = new FlowEntryAction();
+ action.setActionEnqueue(queueport, queueId);
+ actions.addAction(action);
- // Test a Flow Entry with invalid Flow Entry ID
- e.setFlowEntryId(new FlowEntryId());
- assertEquals("isValidFlowEntryId", false, e.isValidFlowEntryId() );
+ entry.setFlowEntryUserState(FlowEntryUserState.FE_USER_ADD);
+ entry.setFlowEntrySwitchState(FlowEntrySwitchState.FE_SWITCH_UPDATED);
+ entry.setFlowEntryErrorState(errorState);
- // Test a Flow Entry with valid Flow Entry ID
- e.setFlowEntryId(new FlowEntryId(0x1));
- assertEquals("isValidFlowEntryId", true, e.isValidFlowEntryId() );
- assertEquals("isValidFlowEntryId", true, entry.isValidFlowEntryId() );
- }
+ }
- @Test
- public void testIdleTimeout(){
- assertEquals("idleTimeout", idleTimeout, entry.idleTimeout() );
- }
+ @Test
+ public void testFlowEntry() {
+ FlowEntry e = new FlowEntry();
- @Test
- public void testHardTimeout(){
- assertEquals("hardTimeout", hardTimeout, entry.hardTimeout() );
- }
+ assertTrue(e.flowEntryActions().isEmpty());
+ assertEquals("flowEntryUserState", FlowEntryUserState.FE_USER_UNKNOWN, e.flowEntryUserState());
+ assertEquals("flowEntrySwitchState", FlowEntrySwitchState.FE_SWITCH_UNKNOWN, e.flowEntrySwitchState());
+ }
- @Test
- public void testPriority(){
- assertEquals("priority", priority, entry.priority() );
- }
+ @Test
+ public void testFlowId() {
+ assertEquals("flowId", flowId, entry.flowId());
+ }
- @Test
- public void testFlowEntryMatch(){
- assertEquals("flowEntryMatch", match, entry.flowEntryMatch() );
- }
+ @Test
+ public void testIsValidFlowId() {
+ FlowEntry e = new FlowEntry();
- @Test
- public void testFlowEntryActions(){
- assertEquals("flowEntryActions", actions, entry.flowEntryActions() );
- }
+ // Test a Flow Entry with empty Flow ID
+ assertEquals("isValidFlowId", false, e.isValidFlowId());
- @Test
- public void testSetFlowEntryActions(){
- FlowEntryActions actions = new FlowEntryActions();
- entry.setFlowEntryActions( actions );
- assertEquals("flowEntryActions", actions, entry.flowEntryActions() );
- }
+ // Test a Flow Entry with invalid Flow ID
+ e.setFlowId(new FlowId());
+ assertEquals("isValidFlowId", false, e.isValidFlowId());
- @Test
- public void testDpid(){
- assertEquals("dpid", dpid, entry.dpid() );
- }
+ // Test a Flow Entry with valid Flow ID
+ e.setFlowId(new FlowId(0x1));
+ assertEquals("isValidFlowId", true, e.isValidFlowId());
+ assertEquals("isValidFlowId", true, entry.isValidFlowId());
+ }
- @Test
- public void testInPort(){
- assertEquals("inPort", inport, entry.inPort() );
- }
+ @Test
+ public void testFlowEntryId() {
+ assertEquals("flowEntryId", flowEntryId, entry.flowEntryId());
+ }
- @Test
- public void testOutPort(){
- assertEquals("outPort", outport, entry.outPort() );
- }
+ @Test
+ public void testIsValidFlowEntryId() {
+ FlowEntry e = new FlowEntry();
- @Test
- public void testFlowEntryUserState(){
- assertEquals("flowEntryUserState", FlowEntryUserState.FE_USER_ADD, entry.flowEntryUserState() );
- }
+ // Test a Flow Entry with empty Flow Entry ID
+ assertEquals("isValidFlowEntryId", false, e.isValidFlowEntryId());
- @Test
- public void testFlowEntrySwitchState(){
- assertEquals("flowEntrySwitchState", FlowEntrySwitchState.FE_SWITCH_UPDATED, entry.flowEntrySwitchState() );
- }
+ // Test a Flow Entry with invalid Flow Entry ID
+ e.setFlowEntryId(new FlowEntryId());
+ assertEquals("isValidFlowEntryId", false, e.isValidFlowEntryId());
- @Test
- public void testFlowEntryErrorState(){
- assertEquals("flowEntryErrorState", errorState, entry.flowEntryErrorState() );
- }
+ // Test a Flow Entry with valid Flow Entry ID
+ e.setFlowEntryId(new FlowEntryId(0x1));
+ assertEquals("isValidFlowEntryId", true, e.isValidFlowEntryId());
+ assertEquals("isValidFlowEntryId", true, entry.isValidFlowEntryId());
+ }
- @Test
- public void testToString(){
- FlowEntry def = new FlowEntry();
- assertEquals("toString", def.toString(), "[ idleTimeout=0 hardTimeout=0 priority=32768 flowEntryActions=[] flowEntryUserState=FE_USER_UNKNOWN flowEntrySwitchState=FE_SWITCH_UNKNOWN]" );
- assertEquals("toString", entry.toString(), "[flowEntryId=0x5678 flowId=0x1234 idleTimeout=5 hardTimeout=10 priority=15 flowEntryMatch=[inPort=1 srcMac=01:02:03:04:05:06 dstMac=06:05:04:03:02:01 ethernetFrameType=2 vlanId=3 vlanPriority=4 srcIPv4Net=127.0.0.1/32 dstIPv4Net=127.0.0.2/32 ipProto=5 ipToS=6 srcTcpUdpPort=7 dstTcpUdpPort=8] flowEntryActions=[[type=ACTION_OUTPUT action=[port=9 maxLen=0]];[type=ACTION_OUTPUT action=[port=-3 maxLen=0]];[type=ACTION_SET_VLAN_VID action=[vlanId=3]];[type=ACTION_SET_VLAN_PCP action=[vlanPriority=4]];[type=ACTION_STRIP_VLAN action=[stripVlan=true]];[type=ACTION_SET_DL_SRC action=[addr=01:02:03:04:05:06]];[type=ACTION_SET_DL_DST action=[addr=06:05:04:03:02:01]];[type=ACTION_SET_NW_SRC action=[addr=127.0.0.3]];[type=ACTION_SET_NW_DST action=[addr=127.0.0.4]];[type=ACTION_SET_NW_TOS action=[ipToS=6]];[type=ACTION_SET_TP_SRC action=[port=7]];[type=ACTION_SET_TP_DST action=[port=8]];[type=ACTION_ENQUEUE action=[port=10 queueId=11]];] dpid=00:00:00:00:00:00:ca:fe inPort=1 outPort=9 flowEntryUserState=FE_USER_ADD flowEntrySwitchState=FE_SWITCH_UPDATED flowEntryErrorState=[type=12 code=13]]" );
- }
+ @Test
+ public void testIdleTimeout() {
+ assertEquals("idleTimeout", idleTimeout, entry.idleTimeout());
+ }
+
+ @Test
+ public void testHardTimeout() {
+ assertEquals("hardTimeout", hardTimeout, entry.hardTimeout());
+ }
+
+ @Test
+ public void testPriority() {
+ assertEquals("priority", priority, entry.priority());
+ }
+
+ @Test
+ public void testFlowEntryMatch() {
+ assertEquals("flowEntryMatch", match, entry.flowEntryMatch());
+ }
+
+ @Test
+ public void testFlowEntryActions() {
+ assertEquals("flowEntryActions", actions, entry.flowEntryActions());
+ }
+
+ @Test
+ public void testSetFlowEntryActions() {
+ FlowEntryActions actions = new FlowEntryActions();
+ entry.setFlowEntryActions(actions);
+ assertEquals("flowEntryActions", actions, entry.flowEntryActions());
+ }
+
+ @Test
+ public void testDpid() {
+ assertEquals("dpid", dpid, entry.dpid());
+ }
+
+ @Test
+ public void testInPort() {
+ assertEquals("inPort", inport, entry.inPort());
+ }
+
+ @Test
+ public void testOutPort() {
+ assertEquals("outPort", outport, entry.outPort());
+ }
+
+ @Test
+ public void testFlowEntryUserState() {
+ assertEquals("flowEntryUserState", FlowEntryUserState.FE_USER_ADD, entry.flowEntryUserState());
+ }
+
+ @Test
+ public void testFlowEntrySwitchState() {
+ assertEquals("flowEntrySwitchState", FlowEntrySwitchState.FE_SWITCH_UPDATED, entry.flowEntrySwitchState());
+ }
+
+ @Test
+ public void testFlowEntryErrorState() {
+ assertEquals("flowEntryErrorState", errorState, entry.flowEntryErrorState());
+ }
+
+ @Test
+ public void testToString() {
+ FlowEntry def = new FlowEntry();
+ assertEquals("toString", def.toString(), "[ idleTimeout=0 hardTimeout=0 priority=32768 flowEntryActions=[] flowEntryUserState=FE_USER_UNKNOWN flowEntrySwitchState=FE_SWITCH_UNKNOWN]");
+ assertEquals("toString", entry.toString(), "[flowEntryId=0x5678 flowId=0x1234 idleTimeout=5 hardTimeout=10 priority=15 flowEntryMatch=[inPort=1 srcMac=01:02:03:04:05:06 dstMac=06:05:04:03:02:01 ethernetFrameType=2 vlanId=3 vlanPriority=4 srcIPv4Net=127.0.0.1/32 dstIPv4Net=127.0.0.2/32 ipProto=5 ipToS=6 srcTcpUdpPort=7 dstTcpUdpPort=8] flowEntryActions=[[type=ACTION_OUTPUT action=[port=9 maxLen=0]];[type=ACTION_OUTPUT action=[port=-3 maxLen=0]];[type=ACTION_SET_VLAN_VID action=[vlanId=3]];[type=ACTION_SET_VLAN_PCP action=[vlanPriority=4]];[type=ACTION_STRIP_VLAN action=[stripVlan=true]];[type=ACTION_SET_DL_SRC action=[addr=01:02:03:04:05:06]];[type=ACTION_SET_DL_DST action=[addr=06:05:04:03:02:01]];[type=ACTION_SET_NW_SRC action=[addr=127.0.0.3]];[type=ACTION_SET_NW_DST action=[addr=127.0.0.4]];[type=ACTION_SET_NW_TOS action=[ipToS=6]];[type=ACTION_SET_TP_SRC action=[port=7]];[type=ACTION_SET_TP_DST action=[port=8]];[type=ACTION_ENQUEUE action=[port=10 queueId=11]];] dpid=00:00:00:00:00:00:ca:fe inPort=1 outPort=9 flowEntryUserState=FE_USER_ADD flowEntrySwitchState=FE_SWITCH_UPDATED flowEntryErrorState=[type=12 code=13]]");
+ }
}