/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.services.events; import static org.junit.Assert.*; import org.dspace.services.RequestService; import org.dspace.services.model.Event; import org.dspace.test.DSpaceAbstractKernelTest; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * Event service testing (not wrapped in requests) * * @author Aaron Zeckoski (azeckoski@gmail.com) - azeckoski - 12:24:17 PM Nov 20, 2008 */ public class EventServiceTest extends DSpaceAbstractKernelTest { private SystemEventService eventService; private RequestService requestService; private EventListenerNoFilter listenerNoFilter; private EventListenerNameFilter listenerNameFilter; private EventListenerBothFilters listenerBothFilters; @Before public void init() { eventService = getService(SystemEventService.class); requestService = getService(RequestService.class); // create the filters listenerNoFilter = new EventListenerNoFilter(); listenerNameFilter = new EventListenerNameFilter(); listenerBothFilters = new EventListenerBothFilters(); // register the filters eventService.registerEventListener(listenerNoFilter); eventService.registerEventListener(listenerNameFilter); eventService.registerEventListener(listenerBothFilters); } @After public void tearDown() { // need to do this to ensure the resources are freed up by junit eventService = null; requestService = null; listenerNoFilter = null; listenerNameFilter = null; listenerBothFilters = null; } /** * Test method for {@link org.dspace.services.events.SystemEventService#fireEvent(org.dspace.services.model.Event)}. */ @Test public void testFireEvent() { Event event1 = new Event("test.event.read", "test-resource-1", "11111", false); Event event2 = new Event("test.event.jump", null, "11111", false); Event event3 = new Event("some.event.write", "test-resource-2", "11111", true); Event event4 = new Event("some.event.add", "fake-resource-555", "11111", true); Event event5 = new Event("test.event.read", "test-resource-2", "11111", false); Event event6 = new Event("test.event.read", "fake-resource-555", "11111", false); Event event7 = new Event("aaron.event.read", "az-123456", "11111", false); eventService.fireEvent( event1 ); eventService.fireEvent( event2 ); eventService.fireEvent( event3 ); eventService.fireEvent( event4 ); eventService.fireEvent( event5 ); eventService.fireEvent( event6 ); eventService.fireEvent( event7 ); // now check that the listeners were properly triggered assertEquals(7, listenerNoFilter.getReceivedEvents().size()); assertEquals(5, listenerNameFilter.getReceivedEvents().size()); assertEquals(3, listenerBothFilters.getReceivedEvents().size()); // now verify the set of events and order assertEquals(event1, listenerNoFilter.getReceivedEvents().get(0)); assertEquals(event2, listenerNoFilter.getReceivedEvents().get(1)); assertEquals(event3, listenerNoFilter.getReceivedEvents().get(2)); assertEquals(event4, listenerNoFilter.getReceivedEvents().get(3)); assertEquals(event5, listenerNoFilter.getReceivedEvents().get(4)); assertEquals(event6, listenerNoFilter.getReceivedEvents().get(5)); assertEquals(event7, listenerNoFilter.getReceivedEvents().get(6)); assertEquals(event1, listenerNameFilter.getReceivedEvents().get(0)); assertEquals(event2, listenerNameFilter.getReceivedEvents().get(1)); assertEquals(event5, listenerNameFilter.getReceivedEvents().get(2)); assertEquals(event6, listenerNameFilter.getReceivedEvents().get(3)); assertEquals(event7, listenerNameFilter.getReceivedEvents().get(4)); assertEquals(event1, listenerBothFilters.getReceivedEvents().get(0)); assertEquals(event2, listenerBothFilters.getReceivedEvents().get(1)); assertEquals(event5, listenerBothFilters.getReceivedEvents().get(2)); } /** * Test method for {@link org.dspace.services.events.SystemEventService#queueEvent(org.dspace.services.model.Event)}. */ @Test public void testQueueEvent() { Event event1 = new Event("test.event.read", "test-resource-1", "11111", false); Event event2 = new Event("test.event.jump", null, "11111", false); Event event3 = new Event("some.event.write", "test-resource-2", "11111", true); Event event4 = new Event("some.event.add", "fake-resource-555", "11111", true); assertEquals(0, listenerNoFilter.getReceivedEvents().size()); // no request, so it fires now eventService.queueEvent(event1); // now check that the listeners were properly triggered assertEquals(1, listenerNoFilter.getReceivedEvents().size()); // now start a request requestService.startRequest(); eventService.queueEvent(event2); eventService.queueEvent(event3); // not yet fired assertEquals(1, listenerNoFilter.getReceivedEvents().size()); // fail request requestService.endRequest(new RuntimeException("die request!")); // still nothing because fail assertEquals(1, listenerNoFilter.getReceivedEvents().size()); // try a successful one requestService.startRequest(); eventService.queueEvent(event2); eventService.queueEvent(event3); eventService.queueEvent(event4); requestService.endRequest(null); assertEquals(4, listenerNoFilter.getReceivedEvents().size()); assertEquals(event1, listenerNoFilter.getReceivedEvents().get(0)); assertEquals(event2, listenerNoFilter.getReceivedEvents().get(1)); assertEquals(event3, listenerNoFilter.getReceivedEvents().get(2)); assertEquals(event4, listenerNoFilter.getReceivedEvents().get(3)); } /** * Test method for {@link org.dspace.services.events.SystemEventService#registerEventListener(org.dspace.services.model.EventListener)}. */ @Test public void testRegisterEventListener() { // check reregister ok eventService.registerEventListener(listenerNoFilter); eventService.registerEventListener(listenerNameFilter); eventService.registerEventListener(listenerBothFilters); // check null fails try { eventService.registerEventListener(null); fail("should have thrown exception"); } catch (IllegalArgumentException e) { assertNotNull(e.getMessage()); } } }