From 4f2f96961300090544e811cd513a53c1424b6842 Mon Sep 17 00:00:00 2001
From: Ryan Izard <rizard@g.clemson.edu>
Date: Fri, 31 Oct 2014 12:07:29 -0400
Subject: [PATCH] VirtualNetworkFilter unit tests complete. Found bug in Entity
 in devicemanger package where null doesn't mean no switch or port anymore;
 DatapathId.NONE and OFPort.ZERO do instead. An object will always be there
 (not null), but it's contents will specify whether the Entity has a switch
 port or not.

---
 .../devicemanager/internal/Entity.java        |  4 +---
 .../core/test/PacketFactory.java              | 19 ++++++++++++++-----
 .../devicemanager/test/MockDeviceManager.java |  2 +-
 .../VirtualNetworkFilterTest.java             |  4 +++-
 4 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/Entity.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/Entity.java
index 202a19d3a..79c0199fe 100644
--- a/src/main/java/net/floodlightcontroller/devicemanager/internal/Entity.java
+++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/Entity.java
@@ -98,8 +98,6 @@ public class Entity implements Comparable<Entity> {
      */
     protected Date activeSince;
     
-    private int hashCode = 0;
-
     // ************
     // Constructors
     // ************
@@ -157,7 +155,7 @@ public class Entity implements Comparable<Entity> {
     
     @JsonIgnore
     public boolean hasSwitchPort() {
-        return (switchDPID != null && switchPort != null);
+        return (switchDPID != null && !switchDPID.equals(DatapathId.NONE) && switchPort != null && !switchPort.equals(OFPort.ZERO));
     }
 
     public Date getLastSeenTimestamp() {
diff --git a/src/test/java/net/floodlightcontroller/core/test/PacketFactory.java b/src/test/java/net/floodlightcontroller/core/test/PacketFactory.java
index a4779c1d3..a5fc93bad 100644
--- a/src/test/java/net/floodlightcontroller/core/test/PacketFactory.java
+++ b/src/test/java/net/floodlightcontroller/core/test/PacketFactory.java
@@ -24,6 +24,8 @@ import net.floodlightcontroller.core.IOFSwitch;
 import org.projectfloodlight.openflow.protocol.OFFactory;
 import org.projectfloodlight.openflow.protocol.OFPacketIn;
 import org.projectfloodlight.openflow.protocol.OFPacketInReason;
+import org.projectfloodlight.openflow.protocol.OFVersion;
+import org.projectfloodlight.openflow.protocol.match.MatchField;
 import org.projectfloodlight.openflow.types.IpProtocol;
 import org.projectfloodlight.openflow.types.MacAddress;
 import org.projectfloodlight.openflow.types.OFPort;
@@ -53,12 +55,19 @@ public class PacketFactory {
             MacAddress hostMac) {
         byte[] serializedPacket = DhcpDiscoveryRequestEthernet(hostMac).serialize();
         OFFactory factory = sw.getOFFactory();
-        OFPacketIn packetIn = factory.buildPacketIn()
-                .setInPort(OFPort.of(1))
+        OFPacketIn.Builder packetInBuilder = factory.buildPacketIn();
+        if (factory.getVersion() == OFVersion.OF_10) {
+        	packetInBuilder
+        		.setInPort(OFPort.of(1))
                 .setData(serializedPacket)
-                .setReason(OFPacketInReason.NO_MATCH)
-                .build();
-        return packetIn;
+                .setReason(OFPacketInReason.NO_MATCH);
+        } else {
+        	packetInBuilder
+        	.setMatch(factory.buildMatch().setExact(MatchField.IN_PORT, OFPort.of(1)).build())
+            .setData(serializedPacket)
+            .setReason(OFPacketInReason.NO_MATCH);
+        }
+        return packetInBuilder.build();
     }
 
     /**
diff --git a/src/test/java/net/floodlightcontroller/devicemanager/test/MockDeviceManager.java b/src/test/java/net/floodlightcontroller/devicemanager/test/MockDeviceManager.java
index 780e7eb81..a015f5fdc 100644
--- a/src/test/java/net/floodlightcontroller/devicemanager/test/MockDeviceManager.java
+++ b/src/test/java/net/floodlightcontroller/devicemanager/test/MockDeviceManager.java
@@ -90,7 +90,7 @@ public class MockDeviceManager extends DeviceManagerImpl {
 			ipv4Address = null;
 		
 		if (vlan == null) {
-			v = VlanVid.ofVlan(-1);
+			v = VlanVid.ofVlan(-1); // TODO @Ryan there is now a ZERO vlan for OF1.3 that should probably be used here.
 		} else {
 			v = VlanVid.ofVlan(vlan);
 		}
diff --git a/src/test/java/net/floodlightcontroller/virtualnetwork/VirtualNetworkFilterTest.java b/src/test/java/net/floodlightcontroller/virtualnetwork/VirtualNetworkFilterTest.java
index 466776fce..36ae09daf 100644
--- a/src/test/java/net/floodlightcontroller/virtualnetwork/VirtualNetworkFilterTest.java
+++ b/src/test/java/net/floodlightcontroller/virtualnetwork/VirtualNetworkFilterTest.java
@@ -144,15 +144,17 @@ public class VirtualNetworkFilterTest extends FloodlightTestCase {
         getMockFloodlightProvider().startUp(fmc);
         vns.startUp(fmc);
         entityClassifier.startUp(fmc);
-
+        expect(topology.isAttachmentPointPort(DatapathId.of(0), OFPort.ZERO)).andReturn(anyBoolean()).anyTimes();
         topology.addListener(deviceService);
         expectLastCall().times(1);
         replay(topology);
+        
         // Mock switches
         //fastWilcards mocked as this constant
         sw1 = EasyMock.createNiceMock(IOFSwitch.class);
         expect(sw1.getId()).andReturn(DatapathId.of(1L)).anyTimes();
         expect(sw1.hasAttribute(IOFSwitch.PROP_SUPPORTS_OFPP_TABLE)).andReturn(true).anyTimes();
+        expect(sw1.getOFFactory()).andReturn(OFFactories.getFactory(OFVersion.OF_13)).anyTimes();
         replay(sw1);
 
         // Mock packets
-- 
GitLab