Unit test for getIncomingHostByteCounts 63/3363/1
authorKatrina LaCurts <katrina.lacurts@plexxi.com>
Mon, 2 Dec 2013 18:54:04 +0000 (13:54 -0500)
committerKatrina LaCurts <katrina.lacurts@plexxi.com>
Mon, 2 Dec 2013 18:54:04 +0000 (13:54 -0500)
Signed-off-by: Katrina LaCurts <katrina.lacurts@plexxi.com>
analytics/implementation/src/main/java/org/opendaylight/affinity/analytics/internal/AnalyticsManager.java
analytics/implementation/src/test/java/org/opendaylight/affinity/analytics/internal/AnalyticsManagerTest.java

index 075d6ef925538b0029af65c7129f190557abdf3d..8d0669270494006062e97721f51cbd6c02806327 100644 (file)
@@ -384,11 +384,16 @@ public class AnalyticsManager implements IReadServiceListener, IAnalyticsManager
         return getIncomingHostByteCounts(subnet, null);
     }
 
-    /* Returns all hosts that transferred data into this subnet. */
     public Map<Host, Long> getIncomingHostByteCounts(String subnet, Byte protocol) {
+         Set<HostNodeConnector> allHosts = this.hostTracker.getAllHosts();
+         return getIncomingHostByteCounts(subnet, protocol, allHosts);
+    }
+
+    /* Returns all hosts that transferred data into this subnet. */
+    public Map<Host, Long> getIncomingHostByteCounts(String subnet, Byte protocol, Set<HostNodeConnector> allHosts) {
         Map<Host, Long> hosts = new HashMap<Host, Long>();
-        Set<Host> dstHosts = getHostsInSubnet(subnet);
-        Set<Host> otherHosts = getHostsNotInSubnet(subnet);
+        Set<Host> dstHosts = getHostsInSubnet(subnet, allHosts);
+        Set<Host> otherHosts = getHostsNotInSubnet(subnet, allHosts);
         for (Host host : otherHosts) {
             for (Host targetHost : dstHosts) {
                 Long byteCount = getByteCount(host, targetHost, protocol);
index 2ca3dea5887b7e7b0029973b2d17d1d1459c3c8d..d0d9a0c087852f2059844de72be0d1131ca5dcb3 100644 (file)
@@ -502,4 +502,111 @@ public class AnalyticsManagerTest extends TestCase {
             am.destroy();\r
         }\r
     }\r
+\r
+    @Test\r
+    public void testGetIncomingHostByteCounts() {\r
+        AnalyticsManager am = new AnalyticsManager();\r
+        am.init();\r
+        try {\r
+            // Set up the network\r
+            Node n1 = new Node(Node.NodeIDType.OPENFLOW, new Long(100L));\r
+            Node n2 = new Node(Node.NodeIDType.OPENFLOW, new Long(101L));\r
+            Node n3 = new Node(Node.NodeIDType.OPENFLOW, new Long(110L));\r
+            Node n4 = new Node(Node.NodeIDType.OPENFLOW, new Long(111L));\r
+            Node n5 = new Node(Node.NodeIDType.OPENFLOW, new Long(011L));\r
+            NodeConnector nc1 = new NodeConnector(NodeConnector.NodeConnectorIDType.OPENFLOW, new Short((short) 0xCAFC), n1);\r
+            NodeConnector nc2 = new NodeConnector(NodeConnector.NodeConnectorIDType.OPENFLOW, new Short((short) 0xCAFD), n2);\r
+            NodeConnector nc3 = new NodeConnector(NodeConnector.NodeConnectorIDType.OPENFLOW, new Short((short) 0xCAFE), n3);\r
+            NodeConnector nc4 = new NodeConnector(NodeConnector.NodeConnectorIDType.OPENFLOW, new Short((short) 0xCAFF), n4);\r
+            NodeConnector nc5 = new NodeConnector(NodeConnector.NodeConnectorIDType.OPENFLOW, new Short((short) 0xCAEF), n5);\r
+            HostNodeConnector hnc1 = new HostNodeConnector(new byte[]{0,0,0,0,0,1}, InetAddress.getByName("128.0.0.1"), nc1, (short) 1);\r
+            HostNodeConnector hnc2 = new HostNodeConnector(new byte[]{0,0,0,0,0,2}, InetAddress.getByName("128.0.0.2"), nc2, (short) 1);\r
+            HostNodeConnector hnc3 = new HostNodeConnector(new byte[]{0,0,0,0,0,3}, InetAddress.getByName("128.0.0.3"), nc3, (short) 1);\r
+            HostNodeConnector hnc4 = new HostNodeConnector(new byte[]{0,0,0,0,0,4}, InetAddress.getByName("129.0.0.1"), nc4, (short) 1);\r
+            HostNodeConnector hnc5 = new HostNodeConnector(new byte[]{0,0,0,0,0,5}, InetAddress.getByName("129.0.0.2"), nc5, (short) 1);\r
+            List<FlowOnNode> flowStatsList = new ArrayList<FlowOnNode>();\r
+            Set<HostNodeConnector> allHosts = new HashSet<HostNodeConnector>(Arrays.asList(hnc1, hnc2, hnc3, hnc4, hnc5));\r
+\r
+            // 128.0.0.1 -> 129.0.0.1\r
+            Match match = new Match();\r
+            match.setField(new MatchField(MatchType.IN_PORT, nc1));\r
+            match.setField(new MatchField(MatchType.DL_DST, new byte[]{0,0,0,0,0,4}));\r
+            match.setField(new MatchField(MatchType.DL_TYPE, EtherTypes.IPv4.shortValue()));\r
+            match.setField(new MatchField(MatchType.NW_PROTO, IPProtocols.TCP.byteValue()));\r
+            Flow f = new Flow();\r
+            f.setMatch(match);\r
+            FlowOnNode fon = new FlowOnNode(f);\r
+            fon.setByteCount(100);\r
+            flowStatsList.add(fon);\r
+            am.nodeFlowStatisticsUpdated(n1, flowStatsList, allHosts);\r
+\r
+            // 128.0.0.2 -> 129.0.0.1\r
+            match = new Match();\r
+            match.setField(new MatchField(MatchType.IN_PORT, nc2));\r
+            match.setField(new MatchField(MatchType.DL_DST, new byte[]{0,0,0,0,0,5}));\r
+            match.setField(new MatchField(MatchType.DL_TYPE, EtherTypes.IPv4.shortValue()));\r
+            match.setField(new MatchField(MatchType.NW_PROTO, IPProtocols.UDP.byteValue()));\r
+            f = new Flow();\r
+            f.setMatch(match);\r
+            fon = new FlowOnNode(f);\r
+            fon.setByteCount(200);\r
+            flowStatsList = new ArrayList<FlowOnNode>();\r
+            flowStatsList.add(fon);\r
+            am.nodeFlowStatisticsUpdated(n2, flowStatsList, allHosts);\r
+\r
+            // 128.0.0.3 -> 128.0.0.1\r
+            match = new Match();\r
+            match.setField(new MatchField(MatchType.IN_PORT, nc3));\r
+            match.setField(new MatchField(MatchType.DL_DST, new byte[]{0,0,0,0,0,1}));\r
+            f = new Flow();\r
+            f.setMatch(match);\r
+            fon = new FlowOnNode(f);\r
+            fon.setByteCount(300);\r
+            flowStatsList = new ArrayList<FlowOnNode>();\r
+            flowStatsList.add(fon);\r
+            am.nodeFlowStatisticsUpdated(n3, flowStatsList, allHosts);\r
+\r
+            // 129.0.0.2 -> 129.0.0.1\r
+            match = new Match();\r
+            match.setField(new MatchField(MatchType.IN_PORT, nc5));\r
+            match.setField(new MatchField(MatchType.DL_DST, new byte[]{0,0,0,0,0,4}));\r
+            f = new Flow();\r
+            f.setMatch(match);\r
+            fon = new FlowOnNode(f);\r
+            fon.setByteCount(400);\r
+            flowStatsList = new ArrayList<FlowOnNode>();\r
+            flowStatsList.add(fon);\r
+            am.nodeFlowStatisticsUpdated(n5, flowStatsList, allHosts);\r
+\r
+            Map<Host, Long> hostCounts = am.getIncomingHostByteCounts("129.0.0.0/8", null, allHosts);\r
+            Assert.assertTrue(hostCounts.keySet().size() == 2);\r
+            Assert.assertTrue(hostCounts.get(hnc1) == 100);\r
+            Assert.assertTrue(hostCounts.get(hnc2) == 200);\r
+            hostCounts = am.getIncomingHostByteCounts("129.0.0.0/8", IPProtocols.TCP.byteValue(), allHosts);\r
+            Assert.assertTrue(hostCounts.keySet().size() == 1);\r
+            Assert.assertTrue(hostCounts.get(hnc1) == 100);\r
+            hostCounts = am.getIncomingHostByteCounts("129.0.0.0/8", IPProtocols.UDP.byteValue(), allHosts);\r
+            Assert.assertTrue(hostCounts.keySet().size() == 1);\r
+            Assert.assertTrue(hostCounts.get(hnc2) == 200);\r
+            hostCounts = am.getIncomingHostByteCounts("129.0.0.0/8", IPProtocols.ICMP.byteValue(), allHosts);\r
+            Assert.assertTrue(hostCounts.keySet().size() == 0);\r
+            hostCounts = am.getIncomingHostByteCounts("129.0.0.1/32", null, allHosts);\r
+            Assert.assertTrue(hostCounts.keySet().size() == 2);\r
+            Assert.assertTrue(hostCounts.get(hnc1) == 100);\r
+            Assert.assertTrue(hostCounts.get(hnc5) == 400);\r
+            hostCounts = am.getIncomingHostByteCounts("128.0.0.0/8", null, allHosts);\r
+            Assert.assertTrue(hostCounts.keySet().size() == 0);\r
+            hostCounts = am.getIncomingHostByteCounts("128.0.0.1/31", null, allHosts);\r
+            Assert.assertTrue(hostCounts.keySet().size() == 1);\r
+            Assert.assertTrue(hostCounts.get(hnc3) == 300);\r
+            hostCounts = am.getIncomingHostByteCounts("128.0.0.2/32", null, allHosts);\r
+            Assert.assertTrue(hostCounts.keySet().size() == 0);\r
+        } catch (ConstructionException e) {\r
+            Assert.assertTrue(false);\r
+        } catch (UnknownHostException e) {\r
+            Assert.assertTrue(false);\r
+        } finally {\r
+            am.destroy();\r
+        }\r
+    }\r
 }\r