/***************************************************************************** * * Copyright (C) Zenoss, Inc. 2010, all rights reserved. * * This content is made available according to terms specified in * License.zenoss under the directory where your Zenoss product is installed. * ****************************************************************************/ package org.zenoss.zep.impl; import org.easymock.Capture; import org.junit.Test; import org.zenoss.amqp.AmqpException; import org.zenoss.protobufs.zep.Zep.Event; import org.zenoss.protobufs.zep.Zep.EventSummary; import org.zenoss.protobufs.zep.Zep.ZepRawEvent; import org.zenoss.zep.Counters; import org.zenoss.zep.PluginService; import org.zenoss.zep.ZepException; import org.zenoss.zep.dao.EventSummaryDao; import org.zenoss.zep.plugins.EventPostCreateContext; import org.zenoss.zep.plugins.EventPostCreatePlugin; import org.zenoss.zep.plugins.EventPreCreateContext; import org.zenoss.zep.plugins.EventPreCreatePlugin; import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.UUID; import static org.easymock.EasyMock.*; import static org.junit.Assert.*; /** * Unit test for {@link EventProcessorImpl}. */ public class EventProcessorImplTest { private static class SampleIdentifyPlugin extends EventPreCreatePlugin { @Override public Event processEvent(Event evt, EventPreCreateContext ctx) { Event.Builder eventBuilder = evt.toBuilder(); eventBuilder.setEventClass("/TestEvent"); return eventBuilder.build(); } } private static class SampleTransformPlugin extends EventPreCreatePlugin { @Override public Event processEvent(Event evt, EventPreCreateContext ctx) { Event.Builder evBuilder = evt.toBuilder(); evBuilder.setSummary(evt.getSummary().toUpperCase() + "!!!"); return evBuilder.build(); } } private static class SamplePostPlugin extends EventPostCreatePlugin { public Event eventOccurrence; public EventSummary eventSummary; @Override public void processEvent(Event eventOccurrence, EventSummary event, EventPostCreateContext context) throws ZepException { this.eventOccurrence = eventOccurrence; this.eventSummary = event; } } @Test public void testEventProcessor() throws ZepException, IOException, AmqpException { PluginService pluginService = createMock(PluginService.class); EventSummaryDao eventSummaryDao = createMock(EventSummaryDao.class); Counters counters = createMock(Counters.class); SamplePostPlugin postPlugin = new SamplePostPlugin(); Capture<Event> transformedEvent = new Capture<Event>(); Capture<EventPreCreateContext> transformedContext = new Capture<EventPreCreateContext>(); String uuid = UUID.randomUUID().toString(); EventSummary summary = EventSummary.newBuilder().setUuid(UUID.randomUUID().toString()).build(); expect(eventSummaryDao.create(capture(transformedEvent), capture(transformedContext))).andReturn(uuid); expect(pluginService.getPluginsByType(EventPreCreatePlugin.class)) .andReturn( Arrays.<EventPreCreatePlugin>asList( new SampleIdentifyPlugin(), new SampleTransformPlugin())); expectLastCall(); expect(pluginService.getPluginsByType(EventPostCreatePlugin.class)) .andReturn(Arrays.<EventPostCreatePlugin> asList(postPlugin)); expectLastCall(); expect(eventSummaryDao.findByUuid(uuid)).andReturn(summary); replay(pluginService, eventSummaryDao); EventProcessorImpl eventProcessor = new EventProcessorImpl(); eventProcessor.setPluginService(pluginService); eventProcessor.setEventSummaryDao(eventSummaryDao); eventProcessor.setCounters(counters); Event.Builder eventBuilder = Event.newBuilder(); eventBuilder.setUuid(UUID.randomUUID().toString()); eventBuilder.setCreatedTime(System.currentTimeMillis()); eventBuilder.setSummary("My Event Summary"); final Event event = eventBuilder.build(); final ZepRawEvent zepEvent = ZepRawEvent.newBuilder() .setEvent(event).build(); eventProcessor.processEvent(zepEvent); verify(pluginService, eventSummaryDao); assertEquals("/TestEvent", transformedEvent.getValue().getEventClass()); assertEquals(event.getSummary().toUpperCase() + "!!!", transformedEvent .getValue().getSummary()); assertEquals(transformedEvent.getValue(), postPlugin.eventOccurrence); assertEquals(summary, postPlugin.eventSummary); } @Test public void testEventProcessorNoEventClass() throws ZepException, IOException, AmqpException { PluginService pluginService = createMock(PluginService.class); EventSummaryDao eventSummaryDao = createMock(EventSummaryDao.class); Counters counters = createMock(Counters.class); Capture<Event> transformedEvent = new Capture<Event>(); Capture<EventPreCreateContext> transformedContext = new Capture<EventPreCreateContext>(); String uuid = UUID.randomUUID().toString(); expect(eventSummaryDao.create(capture(transformedEvent), capture(transformedContext))).andReturn(uuid); expect(pluginService.getPluginsByType(EventPreCreatePlugin.class)) .andReturn(Collections.<EventPreCreatePlugin>emptyList()); expectLastCall(); expect(pluginService.getPluginsByType(EventPostCreatePlugin.class)) .andReturn(Collections.<EventPostCreatePlugin> emptyList()); expectLastCall(); replay(pluginService, eventSummaryDao); EventProcessorImpl eventProcessor = new EventProcessorImpl(); eventProcessor.setPluginService(pluginService); eventProcessor.setEventSummaryDao(eventSummaryDao); eventProcessor.setCounters(counters); Event.Builder eventBuilder = Event.newBuilder(); eventBuilder.setUuid(UUID.randomUUID().toString()); eventBuilder.setCreatedTime(System.currentTimeMillis()); eventBuilder.setSummary("My Event Summary"); final Event event = eventBuilder.build(); final ZepRawEvent zepEvent = ZepRawEvent.newBuilder() .setEvent(event).build(); eventProcessor.processEvent(zepEvent); verify(pluginService, eventSummaryDao); Event transformed = transformedEvent.getValue(); assertEquals("/Unknown", transformed.getEventClass()); } }