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