Package net.floodlightcontroller.debugcounter

Source Code of net.floodlightcontroller.debugcounter.CounterHierarchyGetTest

package net.floodlightcontroller.debugcounter;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import net.floodlightcontroller.debugcounter.DebugCounter.CounterIndexStore;
import net.floodlightcontroller.debugcounter.DebugCounter.RetCtrInfo;
import net.floodlightcontroller.test.FloodlightTestCase;

import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CounterHierarchyGetTest extends FloodlightTestCase {
    DebugCounter dc;
    protected static Logger log = LoggerFactory.getLogger(CounterHierarchyGetTest.class);

    ConcurrentHashMap<String, ConcurrentHashMap<String, CounterIndexStore>> mctr;
    RetCtrInfo exp;

    @Override
    @Before
    public void setUp() throws Exception {
        dc = new DebugCounter();
        mctr = dc.moduleCounters;
        mctr.put("linkd", new ConcurrentHashMap<String, CounterIndexStore>());
        mctr.get("linkd").put("linkevent", dc.new CounterIndexStore(24, null));
        mctr.put("switch", new ConcurrentHashMap<String, CounterIndexStore>());
        exp = dc.new RetCtrInfo();
    }

    @Test
    public void testBasicCounterGet() {
        RetCtrInfo rci = dc.getCounterId("linkd", "linkevent");
        //exp.levels = new String[IDebugCounterService.MAX_HIERARCHY];
        exp.levels = "linkevent".split("/");
        exp.allLevelsFound = true;
        exp.foundUptoLevel = 1;
        exp.ctrIds[0] = 24;
        exp.levels[0] = "linkevent";
        assertEquals(exp, rci);
    }

    @Test
    public void testHierarchicalCounterGet1() {
        Map<String, CounterIndexStore> x =  mctr.get("switch");
        x.put("00:00:00:00:00:00:00:01",
              dc.new CounterIndexStore(10, null));

        // 1-level counter exists
        String counterName = "00:00:00:00:00:00:00:01";
        RetCtrInfo rci1 = dc.getCounterId("switch",counterName);
        exp.levels = counterName.split("/");
        exp.allLevelsFound = true;
        exp.foundUptoLevel = 1;
        exp.ctrIds[0] = 10;
        exp.levels[0] = counterName;
        assertEquals(exp, rci1);

        // 1-level counter does not exist
        counterName = "00:00:00:00:00:00:00:02";
        RetCtrInfo rci2 = dc.getCounterId("switch", counterName);
        exp.allLevelsFound = false;
        exp.foundUptoLevel = 0;
        exp.hierarchical = false;
        exp.levels = counterName.split("/");
        exp.ctrIds[0] = -1;
        printRCI("got==> ", rci2);
        printRCI("exp==> ", exp);
        assertEquals(exp, rci2);

        // 2-level hierarchical counter does not exist
        counterName = "00:00:00:00:00:00:00:01/pktin";
        RetCtrInfo rci3 = dc.getCounterId("switch", counterName);
        exp.allLevelsFound = false;
        exp.hierarchical = true;
        exp.foundUptoLevel = 1;
        exp.ctrIds[0] = 10;
        exp.levels = counterName.split("/");
        printRCI("got==> ", rci3);
        printRCI("exp==> ", exp);
        assertEquals(exp, rci3);

        // 3-level hierarchical counter does not exist
        counterName = "00:00:00:00:00:00:00:01/pktin/drops";
        RetCtrInfo rci4 = dc.getCounterId("switch", counterName);
        exp.allLevelsFound = false;
        exp.hierarchical = true;
        exp.foundUptoLevel = 1;
        exp.ctrIds[0] = 10;
        exp.levels = counterName.split("/");
        printRCI("got==> ", rci4);
        printRCI("exp==> ", exp);
        assertEquals(exp, rci4);

        // 4-level hierarchical counter does not exist
        counterName = "00:00:00:00:00:00:00:01/pktin/drops/extra";
        RetCtrInfo rci5 = dc.getCounterId("switch", counterName);
        exp.allLevelsFound = false;
        exp.hierarchical = true;
        exp.foundUptoLevel = 1;
        exp.ctrIds[0] = 10;
        exp.levels = counterName.split("/");
        printRCI("got==> ", rci5);
        printRCI("exp==> ", exp);
        assertEquals(exp, rci5);

    }

    @Test
    public void testHierarchicalCounterGet2() {
        Map<String, CounterIndexStore> x =  mctr.get("switch");
        // single level counter
        x.put("00:00:00:00:00:00:00:01",
              dc.new CounterIndexStore(10, null));
        // two level counter
        x.put("00:00:00:00:00:00:00:03",
              dc.new CounterIndexStore(30, new ConcurrentHashMap<String,CounterIndexStore>()));
        x.get("00:00:00:00:00:00:00:03").nextLevel.put("pktin",
                                                       dc.new CounterIndexStore(333, null));

        // 1-level counter exists
        String counterName = "00:00:00:00:00:00:00:01";
        RetCtrInfo rci1 = dc.getCounterId("switch",counterName);
        exp.levels = counterName.split("/");
        exp.allLevelsFound = true;
        exp.foundUptoLevel = 1;
        exp.ctrIds[0] = 10;
        exp.levels[0] = counterName;
        assertEquals(exp, rci1);

        // 1-level counter does not exist
        counterName = "00:00:00:00:00:00:00:02";
        RetCtrInfo rci2 = dc.getCounterId("switch", counterName);
        exp.allLevelsFound = false;
        exp.hierarchical = false;
        exp.levels = counterName.split("/");
        exp.foundUptoLevel = 0;
        exp.ctrIds[0] = -1;
        printRCI("got==> ", rci2);
        printRCI("exp==> ", exp);
        assertEquals(exp, rci2);

        // 2-level hierarchical counter does not exist
        counterName = "00:00:00:00:00:00:00:01/pktin";
        RetCtrInfo rci3 = dc.getCounterId("switch", counterName);
        exp.allLevelsFound = false;
        exp.hierarchical = true;
        exp.ctrIds[0] = 10;
        exp.foundUptoLevel = 1;
        exp.levels = counterName.split("/");
        printRCI("got==> ", rci3);
        printRCI("exp==> ", exp);
        assertEquals(exp, rci3);

        // 2-level hierarchical counter DOES exist
        counterName = "00:00:00:00:00:00:00:03/pktin";
        RetCtrInfo rci3x = dc.getCounterId("switch", counterName);
        exp.allLevelsFound = true;
        exp.hierarchical = true;
        exp.foundUptoLevel = 2;
        exp.ctrIds[0] = 30;
        exp.ctrIds[1] = 333;
        exp.levels = counterName.split("/");
        printRCI("got==> ", rci3x);
        printRCI("exp==> ", exp);
        assertEquals(exp, rci3x);

        // 2-level hierarchical counter does NOT exist
        counterName = "00:00:00:00:00:00:00:03/pktout";
        RetCtrInfo rci3y = dc.getCounterId("switch", counterName);
        exp.allLevelsFound = false;
        exp.hierarchical = true;
        exp.foundUptoLevel = 1;
        exp.ctrIds[0] = 30;
        exp.ctrIds[1] = -1;
        exp.levels = counterName.split("/");
        printRCI("got==> ", rci3y);
        printRCI("exp==> ", exp);
        assertEquals(exp, rci3y);

        // 3-level hierarchical counter does not exist
        counterName = "00:00:00:00:00:00:00:03/pktin/drops";
        RetCtrInfo rci4 = dc.getCounterId("switch", counterName);
        exp.allLevelsFound = false;
        exp.hierarchical = true;
        exp.foundUptoLevel = 2;
        exp.ctrIds[0] = 30;
        exp.ctrIds[1] = 333;
        exp.levels = counterName.split("/");
        printRCI("got==> ", rci4);
        printRCI("exp==> ", exp);
        assertEquals(exp, rci4);

    }

    @Test
    public void testHierarchicalCounterGet3() {
        Map<String, CounterIndexStore> x =  mctr.get("switch");
        // single level counter
        x.put("00:00:00:00:00:00:00:01",
              dc.new CounterIndexStore(10, null));
        // two level counter
        x.put("00:00:00:00:00:00:00:03",
              dc.new CounterIndexStore(30, new ConcurrentHashMap<String,CounterIndexStore>()));
        x.get("00:00:00:00:00:00:00:03").nextLevel.put("pktin",
                                                       dc.new CounterIndexStore(333, null));
        // three level counter
        x.put("00:00:00:00:00:00:00:05",
              dc.new CounterIndexStore(50, new ConcurrentHashMap<String,CounterIndexStore>()));
        x.get("00:00:00:00:00:00:00:05")
            .nextLevel.put("pktin",
                           dc.new CounterIndexStore(555, new ConcurrentHashMap<String,CounterIndexStore>()));
        x.get("00:00:00:00:00:00:00:05").nextLevel.get("pktin").nextLevel.
            put("drops", dc.new CounterIndexStore(1056, null));

        // 1-level counter exists
        String counterName = "00:00:00:00:00:00:00:01";
        RetCtrInfo rci1 = dc.getCounterId("switch",counterName);
        exp.levels = counterName.split("/");
        exp.allLevelsFound = true;
        exp.foundUptoLevel = 1;
        exp.ctrIds[0] = 10;
        exp.levels[0] = counterName;
        assertEquals(exp, rci1);

        // 2-level hierarchical counter DOES exist
        counterName = "00:00:00:00:00:00:00:03/pktin";
        RetCtrInfo rci3x = dc.getCounterId("switch", counterName);
        exp.allLevelsFound = true;
        exp.hierarchical = true;
        exp.foundUptoLevel = 2;
        exp.ctrIds[0] = 30;
        exp.ctrIds[1] = 333;
        exp.levels = counterName.split("/");
        printRCI("got==> ", rci3x);
        printRCI("exp==> ", exp);
        assertEquals(exp, rci3x);

        // 3-level hierarchical counter DOES exist
        counterName = "00:00:00:00:00:00:00:05/pktin/drops";
        RetCtrInfo rci4 = dc.getCounterId("switch", counterName);
        exp.allLevelsFound = true;
        exp.hierarchical = true;
        exp.foundUptoLevel = 3;
        exp.ctrIds[0] = 50;
        exp.ctrIds[1] = 555;
        exp.ctrIds[2] = 1056;
        exp.levels = counterName.split("/");
        printRCI("got==> ", rci4);
        printRCI("exp==> ", exp);
        assertEquals(exp, rci4);

        // querying only 2 levels of a 3 level counter
        counterName = "00:00:00:00:00:00:00:05/pktin";
        RetCtrInfo rci4x = dc.getCounterId("switch", counterName);
        exp.allLevelsFound = true;
        exp.hierarchical = true;
        exp.foundUptoLevel = 2;
        exp.ctrIds[0] = 50;
        exp.ctrIds[1] = 555;
        exp.ctrIds[2] = -1;
        exp.levels = counterName.split("/");
        printRCI("got==> ", rci4x);
        printRCI("exp==> ", exp);
        assertEquals(exp, rci4x);
    }


    public void printRCI(String hdr, RetCtrInfo rci) {
        log.info(hdr+"found={}, hcy={}, foundUL= {}, idsFound={}, incomingLevels={}",
                 new Object[] {rci.allLevelsFound, rci.hierarchical,
                               rci.foundUptoLevel,
                               rci.ctrIds, rci.levels});
    }

}
TOP

Related Classes of net.floodlightcontroller.debugcounter.CounterHierarchyGetTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.