package net.floodlightcontroller.debugcounter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.floodlightcontroller.debugcounter.DebugCounter.CounterIndexStore;
import net.floodlightcontroller.debugcounter.DebugCounter.RetCtrInfo;
import net.floodlightcontroller.test.FloodlightTestCase;
public class CounterHierarchyBelowTest extends FloodlightTestCase {
DebugCounter dc;
protected static Logger log = LoggerFactory.getLogger(CounterHierarchyBelowTest.class);
ConcurrentHashMap<String, ConcurrentHashMap<String, CounterIndexStore>> mctr;
ArrayList<Integer> exp;
@Override
@Before
public void setUp() throws Exception {
dc = new DebugCounter();
mctr = dc.moduleCounters;
mctr.put("switch", new ConcurrentHashMap<String, CounterIndexStore>());
RetCtrInfo rci = dc.getCounterId("switch", "01");
dc.addToModuleCounterHierarchy("switch", 4, rci);
rci = dc.getCounterId("switch", "01/pktin");
dc.addToModuleCounterHierarchy("switch", 42, rci);
rci = dc.getCounterId("switch", "01/pktout");
dc.addToModuleCounterHierarchy("switch", 47, rci);
rci = dc.getCounterId("switch", "01/pktin/drops");
dc.addToModuleCounterHierarchy("switch", 427, rci);
rci = dc.getCounterId("switch", "01/pktin/err");
dc.addToModuleCounterHierarchy("switch", 428, rci);
rci = dc.getCounterId("switch", "02");
dc.addToModuleCounterHierarchy("switch", 8, rci);
mctr.put("linkd", new ConcurrentHashMap<String, CounterIndexStore>());
rci = dc.getCounterId("linkd", "tunnel");
dc.addToModuleCounterHierarchy("linkd", 2, rci);
mctr.put("sinkd", new ConcurrentHashMap<String, CounterIndexStore>());
rci = dc.getCounterId("sinkd", "tunnel");
dc.addToModuleCounterHierarchy("sinkd", 5, rci);
exp = new ArrayList<Integer>();
List<Integer> temp = Arrays.asList(4, 42, 47, 427, 428, 8, 2, 5);
exp.addAll(temp);
}
private void isEqual(ArrayList<Integer> a, ArrayList<Integer> b) {
if (a.size() != b.size() || !b.containsAll(a)) assertTrue(false);
}
@Test
public void testHierarchyAll() {
RetCtrInfo rci = dc.new RetCtrInfo();
ArrayList<Integer> retval = new ArrayList<Integer>();
for (String moduleName : mctr.keySet()) {
ArrayList<Integer> ids = dc.getHierarchyBelow(moduleName, rci);
retval.addAll(ids);
}
log.info("got==> {}, exp=> {}", retval, exp);
isEqual(retval, exp);
}
@Test
public void testHierarchy0() {
RetCtrInfo rci = dc.getCounterId("switch", "");
ArrayList<Integer> retval = dc.getHierarchyBelow("switch", rci);
List<Integer> temp = Arrays.asList(2, 5);
exp.removeAll(temp);
log.info("got==> {}, exp=> {}", retval, exp);
isEqual(retval, exp);
}
@Test
public void testHierarchy0a() {
RetCtrInfo rci = dc.getCounterId("linkd", "");
ArrayList<Integer> retval = dc.getHierarchyBelow("linkd", rci);
List<Integer> temp = Arrays.asList(4, 42, 47, 427, 428, 5, 8);
exp.removeAll(temp);
log.info("got==> {}, exp=> {}", retval, exp);
isEqual(retval, exp);
}
@Test
public void testHierarchy1() {
RetCtrInfo rci = dc.getCounterId("switch", "01");
ArrayList<Integer> retval = dc.getHierarchyBelow("switch", rci);
List<Integer> temp = Arrays.asList(4, 8, 2, 5);
exp.removeAll(temp);
log.info("got==> {}, exp=> {}", retval, exp);
isEqual(retval, exp);
}
@Test
public void testHierarchy1a() {
RetCtrInfo rci = dc.getCounterId("switch", "02");
ArrayList<Integer> retval = dc.getHierarchyBelow("switch", rci);
List<Integer> temp = Arrays.asList(4, 42, 47, 427, 428, 2, 5, 8);
exp.removeAll(temp);
log.info("got==> {}, exp=> {}", retval, exp);
isEqual(retval, exp);
}
@Test
public void testHierarchy1b() {
RetCtrInfo rci = dc.getCounterId("sinkd", "tunnel");
ArrayList<Integer> retval = dc.getHierarchyBelow("sinkd", rci);
List<Integer> temp = Arrays.asList(4, 42, 47, 427, 428, 2, 5, 8);
exp.removeAll(temp);
log.info("got==> {}, exp=> {}", retval, exp);
isEqual(retval, exp);
}
@Test
public void testHierarchy2() {
RetCtrInfo rci = dc.getCounterId("switch", "01/pktin");
ArrayList<Integer> retval = dc.getHierarchyBelow("switch", rci);
List<Integer> temp = Arrays.asList(4, 42, 47, 2, 5, 8);
exp.removeAll(temp);
log.info("got==> {}, exp=> {}", retval, exp);
isEqual(retval, exp);
}
@Test
public void testHierarchy2a() {
RetCtrInfo rci = dc.getCounterId("switch", "01/pktout");
ArrayList<Integer> retval = dc.getHierarchyBelow("switch", rci);
List<Integer> temp = Arrays.asList(4, 42, 47, 427, 428, 2, 5, 8);
exp.removeAll(temp);
log.info("got==> {}, exp=> {}", retval, exp);
isEqual(retval, exp);
}
@Test
public void testHierarchy2b() {
RetCtrInfo rci = dc.getCounterId("switch", "02/pktin");
ArrayList<Integer> retval = dc.getHierarchyBelow("switch", rci);
List<Integer> temp = Arrays.asList(4, 42, 47, 427, 428, 2, 5, 8);
exp.removeAll(temp);
log.info("got==> {}, exp=> {}", retval, exp);
isEqual(retval, exp);
}
@Test
public void testHierarchy3() {
RetCtrInfo rci = dc.getCounterId("switch", "01/pktin/drops");
ArrayList<Integer> retval = dc.getHierarchyBelow("switch", rci);
List<Integer> temp = Arrays.asList(4, 42, 47, 427, 428, 2, 5, 8);
exp.removeAll(temp);
log.info("got==> {}, exp=> {}", retval, exp);
isEqual(retval, exp);
}
}