/* * Copyright to the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.rioproject.eventcollector.service; import org.junit.*; import org.rioproject.cybernode.StaticCybernode; import org.rioproject.event.RemoteServiceEvent; import org.rioproject.eventcollector.api.EventCollectorAdmin; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; /** * Tests getting and using the {@code EventCollectorAdmin} * @author Dennis Reedy */ public class ITEventCollectorAdminTest { static StaticCybernode cybernode; EventCollectorImpl eventCollector; @BeforeClass public static void createCybernode() { cybernode = new StaticCybernode(); } @Before public void createEventCollector() throws Exception { Map<String, Object> map = cybernode.activate(new File("src/test/opstring/EventCollector.groovy")); eventCollector = (EventCollectorImpl) map.get("Bones"); } @After public void stopEventCollector() { cybernode.deactivate(eventCollector); } @Test public void testGettingTheAdminProxy() { EventCollectorAdmin admin = (EventCollectorAdmin) eventCollector.getAdmin(); Assert.assertNotNull(admin); } @Test public void testUsingTheAdminProxy() throws IOException, InterruptedException { EventCollectorAdmin admin = (EventCollectorAdmin) eventCollector.getAdmin(); Assert.assertNotNull(admin); PersistentEventManager eventManager = (PersistentEventManager)eventCollector.getEventManager(); eventManager.addRemoteEvents(TransientEventManagerTest.createRemoteServiceEvents(10)); /* Writing events to disk is an async operation, sleep for a bit before asserting */ waitForFileCount(10, eventManager.getPersistentEventDirectory()); Assert.assertEquals("Expected 10 events, got "+eventManager.getNumberOfCollectedEvents(), 10, eventManager.getNumberOfCollectedEvents()); Collection<RemoteServiceEvent> events = eventManager.getEvents(); int deleted = admin.delete(events); Assert.assertEquals("Expected 10, got "+deleted, 10, deleted); Assert.assertEquals("Expected 0 events, got "+eventManager.getNumberOfCollectedEvents(), 0, eventManager.getNumberOfCollectedEvents()); File directory = eventManager.getPersistentEventDirectory(); Assert.assertEquals("Expected 0 event files, got " + directory.list().length, 0, directory.list().length); } @Test public void testOnlyDeleteSome() throws IOException, InterruptedException { EventCollectorAdmin admin = (EventCollectorAdmin) eventCollector.getAdmin(); Assert.assertNotNull(admin); PersistentEventManager eventManager = (PersistentEventManager)eventCollector.getEventManager(); eventManager.addRemoteEvents(TransientEventManagerTest.createRemoteServiceEvents(10)); waitForFileCount(10, eventManager.getPersistentEventDirectory()); Assert.assertEquals("Expected 10 events, got "+eventManager.getNumberOfCollectedEvents(), 10, eventManager.getNumberOfCollectedEvents()); List<RemoteServiceEvent> eventsToDelete = new ArrayList<RemoteServiceEvent>(); eventsToDelete.addAll(eventManager.getEvents()); for(int i=0; i<3; i++) eventsToDelete.remove(0); int deleted = admin.delete(eventsToDelete); Assert.assertEquals("Expected 7, got "+deleted, 7, deleted); Assert.assertEquals("Expected 3 events, got "+eventManager.getNumberOfCollectedEvents(), 3, eventManager.getNumberOfCollectedEvents()); File directory = eventManager.getPersistentEventDirectory(); Assert.assertEquals("Expected 3 event files, got "+directory.list().length, 3, directory.list().length); /* Now delete the rest */ eventsToDelete.clear(); eventsToDelete.addAll(eventManager.getEvents()); deleted = admin.delete(eventsToDelete); Assert.assertEquals("Expected 3, got "+deleted, 3, deleted); Assert.assertEquals("Expected 0 events, got "+eventManager.getNumberOfCollectedEvents(), 0, eventManager.getNumberOfCollectedEvents()); Assert.assertEquals("Expected 0 event files, got "+directory.list().length, 0, directory.list().length); } private void waitForFileCount(int count, File directory) throws InterruptedException { long waited = 0; while(waited<5) { if(directory.list().length<count) { Thread.sleep(1000); waited++; } else { break; } } } }