package net.floodlightcontroller.debugevent; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.floodlightcontroller.debugevent.IDebugEventService.DebugEventInfo; import net.floodlightcontroller.debugevent.IDebugEventService.EventColumn; import net.floodlightcontroller.debugevent.IDebugEventService.EventFieldType; import net.floodlightcontroller.debugevent.IDebugEventService.EventType; import net.floodlightcontroller.test.FloodlightTestCase; public class DebugEventTest extends FloodlightTestCase { DebugEvent debugEvent; protected static Logger log = LoggerFactory.getLogger(DebugEventTest.class); @Override @Before public void setUp() throws Exception { debugEvent = new DebugEvent(); } @Test public void testRegisterAndUpdateEvent() throws Exception { assertEquals(0, debugEvent.currentEvents.size()); IEventUpdater<SwitchyEvent> event1 = null; IEventUpdater<PacketyEvent> event2 = null; event1 = debugEvent.registerEvent("dbgevtest", "switchevent", "switchtest", EventType.ALWAYS_LOG, SwitchyEvent.class, 100); event2 = debugEvent.registerEvent("dbgevtest", "pktinevent", "pktintest", EventType.ALWAYS_LOG, PacketyEvent.class, 100); assertEquals(2, debugEvent.currentEvents.size()); assertTrue(null != debugEvent.moduleEvents.get("dbgevtest"). get("switchevent")); int eventId1 = debugEvent.moduleEvents.get("dbgevtest"). get("switchevent"); assertTrue(null != debugEvent.moduleEvents.get("dbgevtest"). get("pktinevent")); int eventId2 = debugEvent.moduleEvents.get("dbgevtest"). get("pktinevent"); assertEquals(true, debugEvent.containsModuleName("dbgevtest")); assertEquals(true, debugEvent.containsModuleEventName("dbgevtest","switchevent")); assertEquals(true, debugEvent.containsModuleEventName("dbgevtest","pktinevent")); assertEquals(0, debugEvent.allEvents[eventId1].eventBuffer.size()); assertEquals(0, debugEvent.allEvents[eventId2].eventBuffer.size()); // update is immediately flushed to global store event1.updateEventWithFlush(new SwitchyEvent(1L, "connected")); assertEquals(1, debugEvent.allEvents[eventId1].eventBuffer.size()); // update is flushed only when flush is explicitly called event2.updateEventNoFlush(new PacketyEvent(1L, 24L)); assertEquals(0, debugEvent.allEvents[eventId2].eventBuffer.size()); debugEvent.flushEvents(); assertEquals(1, debugEvent.allEvents[eventId1].eventBuffer.size()); assertEquals(1, debugEvent.allEvents[eventId2].eventBuffer.size()); DebugEventInfo de = debugEvent.getSingleEventHistory("dbgevtest","switchevent", 100); assertEquals(1, de.events.size()); assertEquals(true, de.events.get(0).get("dpid").equals("00:00:00:00:00:00:00:01")); assertEquals(true, de.events.get(0).get("reason").equals("connected")); DebugEventInfo de2 = debugEvent.getSingleEventHistory("dbgevtest","pktinevent", 100); assertEquals(1, de2.events.size()); assertEquals(true, de2.events.get(0).get("dpid").equals("00:00:00:00:00:00:00:01")); assertEquals(true, de2.events.get(0).get("srcMac").equals("00:00:00:00:00:18")); } public class SwitchyEvent { @EventColumn(name = "dpid", description = EventFieldType.DPID) long dpid; @EventColumn(name = "reason", description = EventFieldType.STRING) String reason; public SwitchyEvent(long dpid, String reason) { this.dpid = dpid; this.reason = reason; } } public class PacketyEvent { @EventColumn(name = "dpid", description = EventFieldType.DPID) long dpid; @EventColumn(name = "srcMac", description = EventFieldType.MAC) long mac; public PacketyEvent(long dpid, long mac) { this.dpid = dpid; this.mac = mac; } } }