/**
* NOTE: This copyright does *not* cover user programs that use HQ
* program services by normal system calls through the application
* program interfaces provided as part of the Hyperic Plug-in Development
* Kit or the Hyperic Client Development Kit - this is merely considered
* normal use of the program, and does *not* fall under the heading of
* "derived work".
*
* Copyright (C) [2009-2010], VMware, Inc.
* This file is part of HQ.
*
* HQ is free software; you can redistribute it and/or modify
* it under the terms version 2 of the GNU General Public License as
* published by the Free Software Foundation. This program is distributed
* in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*
*/
package org.hyperic.hq.events.server.session;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import junit.framework.TestCase;
import org.easymock.EasyMock;
import org.hyperic.hq.events.AlertConditionEvaluatorStateRepository;
import org.hyperic.hq.events.AlertFiredEvent;
import org.hyperic.hq.events.InvalidTriggerDataException;
import org.hyperic.hq.events.ext.MockTrigger;
import org.hyperic.hq.events.ext.RegisterableTriggerInterface;
import org.hyperic.hq.events.ext.RegisterableTriggerRepository;
import org.hyperic.hq.events.shared.EventLogManager;
import org.hyperic.hq.events.shared.RegisteredTriggerValue;
import org.hyperic.hq.zevents.ZeventEnqueuer;
import org.hyperic.util.jdbc.DBUtil;
/**
* Unit test of the {@link RegisteredTriggerManagerImpl}
* @author jhickey
*
*/
public class RegisteredTriggerManagerImplTest
extends TestCase
{
private AlertConditionEvaluatorFactory alertConditionEvaluatorFactory;
private AlertConditionEvaluator alertConditionEvaluator;
private TriggerDAOInterface triggerDAO;
private RegisteredTriggerManagerImpl registeredTriggerManager;
private RegisterableTriggerRepository registeredTriggerRepository;
private AlertConditionEvaluatorRepository alertConditionEvaluatorRepository;
private ZeventEnqueuer zEventEnqueuer;
private AlertDefinitionDAOInterface alertDefinitionDAO;
private AlertDAO alertDAO;
private EventLogManager eventLogManager;
private AlertConditionEvaluatorStateRepository alertConditionEvaluatorStateRepository;
private ExecutionStrategy executionStrategy;
private DBUtil dbUtil;
private void replay() {
EasyMock.replay(alertConditionEvaluatorFactory,
alertConditionEvaluator,
triggerDAO,
registeredTriggerRepository, zEventEnqueuer, alertConditionEvaluatorRepository, alertDefinitionDAO, eventLogManager, alertConditionEvaluatorStateRepository, executionStrategy);
org.easymock.classextension.EasyMock.replay(alertDAO, dbUtil);
}
@Override
public void setUp() throws Exception {
super.setUp();
this.alertConditionEvaluatorFactory = EasyMock.createMock(AlertConditionEvaluatorFactory.class);
this.alertConditionEvaluator = EasyMock.createMock(AlertConditionEvaluator.class);
this.triggerDAO = EasyMock.createMock(TriggerDAOInterface.class);
this.registeredTriggerRepository = EasyMock.createMock(RegisterableTriggerRepository.class);
this.zEventEnqueuer = EasyMock.createMock(ZeventEnqueuer.class);
this.alertConditionEvaluatorRepository = EasyMock.createMock(AlertConditionEvaluatorRepository.class);
this.alertDefinitionDAO = EasyMock.createMock(AlertDefinitionDAOInterface.class);
this.alertDAO = org.easymock.classextension.EasyMock.createMock(AlertDAO.class);
this.dbUtil = org.easymock.classextension.EasyMock.createMock(DBUtil.class);
this.eventLogManager = EasyMock.createMock(EventLogManager.class);
this.alertConditionEvaluatorStateRepository = EasyMock.createMock(AlertConditionEvaluatorStateRepository.class);
this.executionStrategy = EasyMock.createMock(ExecutionStrategy.class);
this.registeredTriggerManager = new RegisteredTriggerManagerImpl(alertConditionEvaluatorFactory,triggerDAO,zEventEnqueuer,
alertConditionEvaluatorRepository,alertDefinitionDAO, registeredTriggerRepository, alertDAO, eventLogManager, dbUtil);
MockTrigger.initialized = false;
MockTrigger.enabled = false;
}
/**
* Verifies successful disable of triggers
*/
public void testDisableTriggers() {
Integer triggerId = Integer.valueOf(987);
Integer alertDefinitionId = Integer.valueOf(5432);
List<Integer> triggerIds = new ArrayList<Integer>();
triggerIds.add(triggerId);
Map<Integer,List<Integer>> alertDefTriggerMap = new HashMap<Integer,List<Integer>>();
alertDefTriggerMap.put(alertDefinitionId, triggerIds);
registeredTriggerRepository.setTriggersEnabled(triggerIds, false);
replay();
registeredTriggerManager.setRegisteredTriggerRepository(registeredTriggerRepository);
registeredTriggerManager.setTriggersEnabled(alertDefTriggerMap, false);
verify();
}
/**
* Verify that triggers already initialized can be enabled
*/
public void testEnableInitializedTriggers() {
Integer triggerId = Integer.valueOf(987);
Integer alertDefinitionId = Integer.valueOf(5432);
List<Integer> triggerIds = new ArrayList<Integer>();
triggerIds.add(triggerId);
Map<Integer,List<Integer>> alertDefTriggerMap = new HashMap<Integer,List<Integer>>();
alertDefTriggerMap.put(alertDefinitionId, triggerIds);
RegisterableTriggerInterface trigger1 = EasyMock.createMock(RegisterableTriggerInterface.class);
EasyMock.expect(registeredTriggerRepository.getTriggerById(triggerId)).andReturn(trigger1);
registeredTriggerRepository.setTriggersEnabled(triggerIds, true);
replay();
registeredTriggerManager.setRegisteredTriggerRepository(registeredTriggerRepository);
registeredTriggerManager.setTriggersEnabled(alertDefTriggerMap, true);
verify();
}
/**
* Verifies successful retrieval of triggers IDs by alert definition ID
*/
public void testGetTriggerIdsByAlertDefId() {
Integer alertDefinitionId = Integer.valueOf(5432);
Integer triggerId = Integer.valueOf(987);
AlertDefinition alertDef = new AlertDefinition();
alertDef.setId(alertDefinitionId);
RegisteredTriggerValue mockTrigger = new RegisteredTriggerValue();
mockTrigger.setClassname(MockTrigger.class.getName());
mockTrigger.setId(triggerId);
RegisteredTrigger trigger = new RegisteredTrigger(mockTrigger);
trigger.setId(mockTrigger.getId());
trigger.setAlertDefinition(alertDef);
List<Integer> expectedIds = new ArrayList<Integer>();
expectedIds.add(triggerId);
Map<Integer,List<Integer>> expectedMap = new HashMap<Integer,List<Integer>>();
expectedMap.put(alertDefinitionId, expectedIds);
EasyMock.expect(triggerDAO
.findTriggerIdsByAlertDefinitionIds(
Collections.singletonList(alertDefinitionId))
).andReturn(expectedMap);
replay();
Map<Integer,List<Integer>> triggerMap = registeredTriggerManager
.getTriggerIdsByAlertDefIds(
Collections.singletonList(alertDefinitionId));
verify();
assertEquals(expectedMap,triggerMap);
}
/**
* Verifies that triggers are successfully created after commit
*/
public void testHandleTriggerCreation() {
Integer triggerId = Integer.valueOf(987);
Integer trigger2Id = Integer.valueOf(456);
Integer alertDefinitionId = Integer.valueOf(5432);
AlertDefinition alertDef = new AlertDefinition();
alertDef.setId(alertDefinitionId);
alertDef.setActiveStatus(true);
RegisteredTriggerValue mockTrigger = new RegisteredTriggerValue();
mockTrigger.setClassname(MockTrigger.class.getName());
mockTrigger.setId(triggerId);
RegisteredTrigger trigger = new RegisteredTrigger(mockTrigger);
trigger.setId(mockTrigger.getId());
trigger.setAlertDefinition(alertDef);
RegisteredTriggerValue mockTrigger2 = new RegisteredTriggerValue();
mockTrigger2.setClassname(MockTrigger.class.getName());
mockTrigger2.setId(trigger2Id);
RegisteredTrigger trigger2 = new RegisteredTrigger(mockTrigger2);
trigger2.setId(mockTrigger2.getId());
trigger2.setAlertDefinition(alertDef);
List<RegisteredTrigger> triggers = new ArrayList<RegisteredTrigger>();
triggers.add(trigger);
triggers.add(trigger2);
List<TriggersCreatedZevent> createdEvents = new ArrayList<TriggersCreatedZevent>();
createdEvents.add(new TriggersCreatedZevent(alertDefinitionId));
EasyMock.expect(triggerDAO.findByAlertDefinitionId(alertDefinitionId)).andReturn(triggers);
EasyMock.expect(alertConditionEvaluatorFactory.create(alertDef)).andReturn(alertConditionEvaluator);
alertConditionEvaluatorRepository.addAlertConditionEvaluator(alertConditionEvaluator);
registeredTriggerRepository.addTrigger(EasyMock.isA(MockTrigger.class));
EasyMock.expectLastCall().times(2);
replay();
registeredTriggerManager.setRegisteredTriggerRepository(registeredTriggerRepository);
registeredTriggerManager.handleTriggerCreatedEvents(createdEvents);
verify();
assertTrue(MockTrigger.initialized);
assertTrue(MockTrigger.enabled);
}
/**
* Verifies that nothing blows up if an alert def is not found for triggers to be created
*/
public void testHandleTriggerCreationAlertDefNotFound() {
Integer triggerId = Integer.valueOf(987);
Integer alertDefinitionId = Integer.valueOf(5432);
RegisteredTriggerValue mockTrigger = new RegisteredTriggerValue();
mockTrigger.setClassname(MockTrigger.class.getName());
mockTrigger.setId(triggerId);
RegisteredTrigger trigger = new RegisteredTrigger(mockTrigger);
trigger.setId(mockTrigger.getId());
List<RegisteredTrigger> triggers = new ArrayList<RegisteredTrigger>();
triggers.add(trigger);
List<TriggersCreatedZevent> createdEvents = new ArrayList<TriggersCreatedZevent>();
createdEvents.add(new TriggersCreatedZevent(alertDefinitionId));
EasyMock.expect(triggerDAO.findByAlertDefinitionId(alertDefinitionId)).andReturn(triggers);
replay();
registeredTriggerManager.setRegisteredTriggerRepository(registeredTriggerRepository);
registeredTriggerManager.handleTriggerCreatedEvents(createdEvents);
verify();
}
/**
* Verifies that other triggers will still be created if an error occurs registering a single trigger
*/
public void testHandleTriggerCreationErrorRegistering() {
Integer triggerId = Integer.valueOf(987);
Integer trigger2Id = Integer.valueOf(456);
Integer alertDefinitionId = Integer.valueOf(5432);
AlertDefinition alertDef = new AlertDefinition();
alertDef.setId(alertDefinitionId);
alertDef.setEnabled(true);
RegisteredTriggerValue mockTrigger = new RegisteredTriggerValue();
mockTrigger.setClassname(MockTrigger.class.getName());
mockTrigger.setId(triggerId);
RegisteredTrigger trigger = new RegisteredTrigger(mockTrigger);
trigger.setId(mockTrigger.getId());
trigger.setAlertDefinition(alertDef);
RegisteredTriggerValue mockTrigger2 = new RegisteredTriggerValue();
mockTrigger2.setClassname(MockTrigger.class.getName());
mockTrigger2.setId(trigger2Id);
RegisteredTrigger trigger2 = new RegisteredTrigger(mockTrigger2);
trigger2.setId(mockTrigger2.getId());
trigger2.setAlertDefinition(alertDef);
List<RegisteredTrigger> triggers = new ArrayList<RegisteredTrigger>();
triggers.add(trigger);
triggers.add(trigger2);
List<TriggersCreatedZevent> createdEvents = new ArrayList<TriggersCreatedZevent>();
createdEvents.add(new TriggersCreatedZevent(alertDefinitionId));
EasyMock.expect(triggerDAO.findByAlertDefinitionId(alertDefinitionId)).andReturn(triggers);
EasyMock.expect(alertConditionEvaluatorFactory.create(alertDef)).andReturn(alertConditionEvaluator);
alertConditionEvaluatorRepository.addAlertConditionEvaluator(alertConditionEvaluator);
registeredTriggerRepository.addTrigger(EasyMock.isA(MockTrigger.class));
registeredTriggerRepository.addTrigger(EasyMock.isA(MockTrigger.class));
EasyMock.expectLastCall().andThrow(new RuntimeException("Oh No!"));
replay();
registeredTriggerManager.setRegisteredTriggerRepository(registeredTriggerRepository);
registeredTriggerManager.handleTriggerCreatedEvents(createdEvents);
verify();
assertTrue(MockTrigger.initialized);
assertTrue(MockTrigger.enabled);
}
/**
* Verifies that triggers are properly created, initialized, and added to
* the repository
*/
public void testInitializeTriggers() {
Integer triggerId = Integer.valueOf(987);
Integer trigger2Id = Integer.valueOf(456);
Integer alertDefinitionId = Integer.valueOf(5432);
AlertDefinition alertDef = new AlertDefinition();
alertDef.setId(alertDefinitionId);
alertDef.setActiveStatus(true);
RegisteredTriggerValue mockTrigger = new RegisteredTriggerValue();
mockTrigger.setClassname(MockTrigger.class.getName());
mockTrigger.setId(triggerId);
RegisteredTrigger trigger = new RegisteredTrigger(mockTrigger);
trigger.setId(mockTrigger.getId());
trigger.setAlertDefinition(alertDef);
RegisteredTriggerValue mockTrigger2 = new RegisteredTriggerValue();
mockTrigger2.setClassname(MockTrigger.class.getName());
mockTrigger2.setId(trigger2Id);
RegisteredTrigger trigger2 = new RegisteredTrigger(mockTrigger2);
trigger2.setId(mockTrigger2.getId());
trigger2.setAlertDefinition(alertDef);
Set<RegisteredTrigger> triggers = new HashSet<RegisteredTrigger>();
triggers.add(trigger);
triggers.add(trigger2);
registeredTriggerRepository.init();
EasyMock.expect(triggerDAO.findAllEnabledTriggers()).andReturn(triggers);
EasyMock.expect(eventLogManager.findLastUnfixedAlertFiredEvents()).andReturn(new HashMap<Integer,AlertFiredEvent>(0,1));
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinitionId)).andReturn(null);
EasyMock.expect(alertConditionEvaluatorFactory.create(alertDef)).andReturn(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getStateRepository()).andReturn(alertConditionEvaluatorStateRepository).times(2);
Map<Integer,Serializable> alertConditionEvaluatorStates = new HashMap<Integer,Serializable>();
alertConditionEvaluatorStates.put(alertDefinitionId, "state");
EasyMock.expect(alertConditionEvaluatorStateRepository.getAlertConditionEvaluatorStates()).andReturn(alertConditionEvaluatorStates);
alertConditionEvaluator.initialize("state");
Map<Integer,Serializable> executionStrategyStates = new HashMap<Integer,Serializable>();
executionStrategyStates.put(alertDefinitionId, "moreState");
EasyMock.expect(alertConditionEvaluatorStateRepository.getExecutionStrategyStates()).andReturn(executionStrategyStates);
EasyMock.expect(alertConditionEvaluator.getExecutionStrategy()).andReturn(executionStrategy);
executionStrategy.initialize("moreState");
alertConditionEvaluatorRepository.addAlertConditionEvaluator(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinitionId)).andReturn(alertConditionEvaluator).times(3);
registeredTriggerRepository.addTrigger(EasyMock.isA(MockTrigger.class));
EasyMock.expectLastCall().times(2);
replay();
registeredTriggerManager.initializeTriggers();
verify();
assertTrue(MockTrigger.initialized);
assertTrue(MockTrigger.enabled);
}
/**
* Verifies that other triggers will be processed and no Exceptions thrown
* if an alert definition for a given trigger is not found for some reason
*/
@SuppressWarnings("unchecked")
public void testInitializeTriggersAlertDefNotFound() {
Integer triggerId = Integer.valueOf(987);
Integer trigger2Id = Integer.valueOf(456);
Integer alertDefinitionId = Integer.valueOf(5432);
AlertDefinition alertDef = new AlertDefinition();
alertDef.setId(alertDefinitionId);
alertDef.setActiveStatus(true);
RegisteredTriggerValue mockTrigger = new RegisteredTriggerValue();
mockTrigger.setClassname(MockTrigger.class.getName());
mockTrigger.setId(triggerId);
RegisteredTrigger trigger = new RegisteredTrigger(mockTrigger);
trigger.setId(mockTrigger.getId());
RegisteredTriggerValue mockTrigger2 = new RegisteredTriggerValue();
mockTrigger2.setClassname(MockTrigger.class.getName());
mockTrigger2.setId(trigger2Id);
RegisteredTrigger trigger2 = new RegisteredTrigger(mockTrigger2);
trigger2.setId(mockTrigger2.getId());
trigger2.setAlertDefinition(alertDef);
Set<RegisteredTrigger> triggers = new HashSet<RegisteredTrigger>();
triggers.add(trigger);
triggers.add(trigger2);
registeredTriggerRepository.init();
EasyMock.expect(triggerDAO.findAllEnabledTriggers()).andReturn(triggers);
EasyMock.expect(eventLogManager.findLastUnfixedAlertFiredEvents()).andReturn(new HashMap<Integer,AlertFiredEvent>(0,1));
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinitionId)).andReturn(null);
EasyMock.expect(alertConditionEvaluatorFactory.create(alertDef)).andReturn(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getStateRepository()).andReturn(alertConditionEvaluatorStateRepository).times(2);
EasyMock.expect(alertConditionEvaluatorStateRepository.getAlertConditionEvaluatorStates()).andReturn(Collections.EMPTY_MAP);
EasyMock.expect(alertConditionEvaluator.getExecutionStrategy()).andReturn(executionStrategy);
EasyMock.expect(alertConditionEvaluatorStateRepository.getExecutionStrategyStates()).andReturn(Collections.EMPTY_MAP);
alertConditionEvaluator.initialize(null);
executionStrategy.initialize(null);
alertConditionEvaluatorRepository.addAlertConditionEvaluator(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinitionId)).andReturn(alertConditionEvaluator);
registeredTriggerRepository.addTrigger(EasyMock.isA(MockTrigger.class));
replay();
registeredTriggerManager.setRegisteredTriggerRepository(registeredTriggerRepository);
registeredTriggerManager.initializeTriggers();
verify();
assertTrue(MockTrigger.initialized);
assertTrue(MockTrigger.enabled);
}
/**
* Verifies that triggers are still initialized if a single trigger cannot be registered
*/
@SuppressWarnings("unchecked")
public void testInitializeTriggersErrorRegistering() {
Integer triggerId = Integer.valueOf(987);
Integer trigger2Id = Integer.valueOf(456);
Integer alertDefinitionId = Integer.valueOf(5432);
AlertDefinition alertDef = new AlertDefinition();
alertDef.setId(alertDefinitionId);
alertDef.setEnabled(true);
RegisteredTriggerValue mockTrigger = new RegisteredTriggerValue();
mockTrigger.setClassname(MockTrigger.class.getName());
mockTrigger.setId(triggerId);
RegisteredTrigger trigger = new RegisteredTrigger(mockTrigger);
trigger.setId(mockTrigger.getId());
trigger.setAlertDefinition(alertDef);
RegisteredTriggerValue mockTrigger2 = new RegisteredTriggerValue();
mockTrigger2.setClassname(MockTrigger.class.getName());
mockTrigger2.setId(trigger2Id);
RegisteredTrigger trigger2 = new RegisteredTrigger(mockTrigger2);
trigger2.setId(mockTrigger2.getId());
trigger2.setAlertDefinition(alertDef);
Set<RegisteredTrigger> triggers = new HashSet<RegisteredTrigger>();
triggers.add(trigger);
triggers.add(trigger2);
registeredTriggerRepository.init();
EasyMock.expect(triggerDAO.findAllEnabledTriggers()).andReturn(triggers);
EasyMock.expect(eventLogManager.findLastUnfixedAlertFiredEvents()).andReturn(new HashMap<Integer,AlertFiredEvent>(0,1));
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinitionId)).andReturn(null);
EasyMock.expect(alertConditionEvaluatorFactory.create(alertDef)).andReturn(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getStateRepository()).andReturn(alertConditionEvaluatorStateRepository).times(2);
EasyMock.expect(alertConditionEvaluatorStateRepository.getAlertConditionEvaluatorStates()).andReturn(Collections.EMPTY_MAP);
EasyMock.expect(alertConditionEvaluator.getExecutionStrategy()).andReturn(executionStrategy);
EasyMock.expect(alertConditionEvaluatorStateRepository.getExecutionStrategyStates()).andReturn(Collections.EMPTY_MAP);
alertConditionEvaluator.initialize(null);
executionStrategy.initialize(null);
alertConditionEvaluatorRepository.addAlertConditionEvaluator(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinitionId)).andReturn(alertConditionEvaluator).times(3);
registeredTriggerRepository.addTrigger(EasyMock.isA(MockTrigger.class));
registeredTriggerRepository.addTrigger(EasyMock.isA(MockTrigger.class));
EasyMock.expectLastCall().andThrow(new RuntimeException("Oh No!"));
replay();
registeredTriggerManager.setRegisteredTriggerRepository(registeredTriggerRepository);
registeredTriggerManager.initializeTriggers();
verify();
assertTrue(MockTrigger.initialized);
assertTrue(MockTrigger.enabled);
}
/**
* Verifies that other triggers will be processed and no Exceptions thrown
* if an Exception occurs retriving unfixed alert fired events
*/
public void testInitializeTriggersExceptionInitializing2() {
Integer triggerId = Integer.valueOf(987);
Integer trigger2Id = Integer.valueOf(456);
Integer alertDefinitionId = Integer.valueOf(5432);
AlertDefinition alertDef = new AlertDefinition();
alertDef.setId(alertDefinitionId);
alertDef.setActiveStatus(true);
RegisteredTriggerValue mockTrigger = new RegisteredTriggerValue();
mockTrigger.setClassname(MockTrigger.class.getName());
mockTrigger.setId(triggerId);
RegisteredTrigger trigger = new RegisteredTrigger(mockTrigger);
trigger.setId(mockTrigger.getId());
trigger.setAlertDefinition(alertDef);
RegisteredTriggerValue mockTrigger2 = new RegisteredTriggerValue();
mockTrigger2.setClassname(MockTrigger.class.getName());
mockTrigger2.setId(trigger2Id);
RegisteredTrigger trigger2 = new RegisteredTrigger(mockTrigger2);
trigger2.setId(mockTrigger2.getId());
trigger2.setAlertDefinition(alertDef);
Set<RegisteredTrigger> triggers = new HashSet<RegisteredTrigger>();
triggers.add(trigger);
triggers.add(trigger2);
registeredTriggerRepository.init();
EasyMock.expect(triggerDAO.findAllEnabledTriggers()).andReturn(triggers);
EasyMock.expect(eventLogManager.findLastUnfixedAlertFiredEvents()).andThrow(new RuntimeException("Oh No!"));
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinitionId)).andReturn(null);
EasyMock.expect(alertConditionEvaluatorFactory.create(alertDef)).andReturn(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getStateRepository()).andReturn(alertConditionEvaluatorStateRepository).times(2);
Map<Integer,Serializable> alertConditionEvaluatorStates = new HashMap<Integer,Serializable>();
alertConditionEvaluatorStates.put(alertDefinitionId, "state");
EasyMock.expect(alertConditionEvaluatorStateRepository.getAlertConditionEvaluatorStates()).andReturn(alertConditionEvaluatorStates);
alertConditionEvaluator.initialize("state");
Map<Integer,Serializable> executionStrategyStates = new HashMap<Integer,Serializable>();
executionStrategyStates.put(alertDefinitionId, "moreState");
EasyMock.expect(alertConditionEvaluatorStateRepository.getExecutionStrategyStates()).andReturn(executionStrategyStates);
EasyMock.expect(alertConditionEvaluator.getExecutionStrategy()).andReturn(executionStrategy);
executionStrategy.initialize("moreState");
alertConditionEvaluatorRepository.addAlertConditionEvaluator(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinitionId)).andReturn(alertConditionEvaluator).times(3);
registeredTriggerRepository.addTrigger(EasyMock.isA(MockTrigger.class));
EasyMock.expectLastCall().times(2);
replay();
registeredTriggerManager.initializeTriggers();
verify();
assertTrue(MockTrigger.initialized);
assertTrue(MockTrigger.enabled);
}
/**
* Verifies that other triggers will be processed and no Exceptions thrown
* if an Exception occurs registering a single trigger
*/
@SuppressWarnings("unchecked")
public void testInitializeTriggersExceptionInitializing() {
Integer triggerId = Integer.valueOf(987);
Integer trigger2Id = Integer.valueOf(456);
Integer alertDefinitionId = Integer.valueOf(5432);
Integer alertDefinition2Id = Integer.valueOf(8997);
AlertDefinition alertDef = new AlertDefinition();
alertDef.setId(alertDefinitionId);
alertDef.setActiveStatus(true);
AlertDefinition alertDef2 = new AlertDefinition();
alertDef2.setId(alertDefinition2Id);
RegisteredTriggerValue mockTrigger = new RegisteredTriggerValue();
mockTrigger.setClassname(MockTrigger.class.getName());
mockTrigger.setId(triggerId);
RegisteredTrigger trigger = new RegisteredTrigger(mockTrigger);
trigger.setId(mockTrigger.getId());
trigger.setAlertDefinition(alertDef);
RegisteredTriggerValue mockTrigger2 = new RegisteredTriggerValue();
mockTrigger2.setClassname(MockTrigger.class.getName());
mockTrigger2.setId(trigger2Id);
RegisteredTrigger trigger2 = new RegisteredTrigger(mockTrigger2);
trigger2.setId(mockTrigger2.getId());
trigger2.setAlertDefinition(alertDef2);
Set<RegisteredTrigger> triggers = new HashSet<RegisteredTrigger>();
triggers.add(trigger);
triggers.add(trigger2);
registeredTriggerRepository.init();
EasyMock.expect(triggerDAO.findAllEnabledTriggers()).andReturn(triggers);
EasyMock.expect(eventLogManager.findLastUnfixedAlertFiredEvents()).andReturn(new HashMap<Integer,AlertFiredEvent>(0,1));
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinitionId)).andReturn(null);
EasyMock.expect(alertConditionEvaluatorFactory.create(alertDef)).andReturn(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getStateRepository()).andReturn(alertConditionEvaluatorStateRepository).times(2);
EasyMock.expect(alertConditionEvaluatorStateRepository.getAlertConditionEvaluatorStates()).andReturn(Collections.EMPTY_MAP);
EasyMock.expect(alertConditionEvaluator.getExecutionStrategy()).andReturn(executionStrategy);
EasyMock.expect(alertConditionEvaluatorStateRepository.getExecutionStrategyStates()).andReturn(Collections.EMPTY_MAP);
alertConditionEvaluator.initialize(null);
executionStrategy.initialize(null);
alertConditionEvaluatorRepository.addAlertConditionEvaluator(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinitionId)).andReturn(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinition2Id)).andReturn(null).times(2);
EasyMock.expect(alertConditionEvaluatorFactory.create(alertDef2)).andThrow(new RuntimeException("Yikes!"));
registeredTriggerRepository.addTrigger(EasyMock.isA(MockTrigger.class));
replay();
registeredTriggerManager.setRegisteredTriggerRepository(registeredTriggerRepository);
registeredTriggerManager.initializeTriggers();
verify();
assertTrue(MockTrigger.initialized);
assertTrue(MockTrigger.enabled);
}
/**
* Verifies that nothing blows up trying to create a trigger with an invalid
* classname. We are going to remove old triggers (MultiCondition, Counter,
* Duration) during upgrade, but this should nicely handle any that are
* accidentally hanging around for some reason
* @throws InvalidTriggerDataException
* @throws InstantiationException
* @throws IllegalAccessException
*/
@SuppressWarnings("unchecked")
public void testRegisterTriggerInvalidClass() throws InvalidTriggerDataException,
InstantiationException,
IllegalAccessException
{
Integer triggerId = Integer.valueOf(987);
Integer alertDefinitionId = Integer.valueOf(5432);
AlertDefinition alertDef = new AlertDefinition();
alertDef.setId(alertDefinitionId);
RegisteredTriggerValue mockTrigger = new RegisteredTriggerValue();
mockTrigger.setClassname("com.fake.nonexistent");
mockTrigger.setId(triggerId);
RegisteredTrigger trigger = new RegisteredTrigger(mockTrigger);
trigger.setId(mockTrigger.getId());
trigger.setAlertDefinition(alertDef);
Set<RegisteredTrigger> triggers = new HashSet<RegisteredTrigger>();
triggers.add(trigger);
registeredTriggerRepository.init();
EasyMock.expect(triggerDAO.findAllEnabledTriggers()).andReturn(triggers);
EasyMock.expect(eventLogManager.findLastUnfixedAlertFiredEvents()).andReturn(new HashMap<Integer,AlertFiredEvent>(0,1));
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinitionId)).andReturn(null);
EasyMock.expect(alertConditionEvaluatorFactory.create(alertDef)).andReturn(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getStateRepository()).andReturn(alertConditionEvaluatorStateRepository).times(2);
EasyMock.expect(alertConditionEvaluatorStateRepository.getAlertConditionEvaluatorStates()).andReturn(Collections.EMPTY_MAP);
EasyMock.expect(alertConditionEvaluator.getExecutionStrategy()).andReturn(executionStrategy);
EasyMock.expect(alertConditionEvaluatorStateRepository.getExecutionStrategyStates()).andReturn(Collections.EMPTY_MAP);
alertConditionEvaluator.initialize(null);
executionStrategy.initialize(null);
alertConditionEvaluatorRepository.addAlertConditionEvaluator(alertConditionEvaluator);
EasyMock.expect(alertConditionEvaluatorRepository.getAlertConditionEvaluatorById(alertDefinitionId)).andReturn(alertConditionEvaluator);
replay();
registeredTriggerManager.initializeTriggers();
verify();
}
/**
* Verifies that triggers that have not yet been intialized will be initialized on first enable
* @throws InterruptedException
*/
public void testSetTriggersEnabledLazyInit() throws InterruptedException {
Integer triggerId = Integer.valueOf(987);
Integer alertDefinitionId = Integer.valueOf(5432);
List<Integer> triggerIds = new ArrayList<Integer>();
triggerIds.add(triggerId);
Map<Integer, List<Integer>> alertDefTriggerMap = new HashMap<Integer, List<Integer>>();
alertDefTriggerMap.put(alertDefinitionId, triggerIds);
EasyMock.expect(registeredTriggerRepository.getTriggerById(triggerId)).andReturn(null);
zEventEnqueuer.enqueueEvents(EasyMock.isA(List.class));
replay();
registeredTriggerManager.setRegisteredTriggerRepository(registeredTriggerRepository);
registeredTriggerManager.setTriggersEnabled(alertDefTriggerMap, true);
verify();
}
/**
* Verifies that nothing blows up if an Exception occurs queuing a TriggersCreatedZEvent on first enable
* @throws InterruptedException
*/
public void testSetTriggersEnabledLazyInitException() throws InterruptedException {
Integer triggerId = Integer.valueOf(987);
Integer alertDefinitionId = Integer.valueOf(5432);
List<Integer> triggerIds = new ArrayList<Integer>();
triggerIds.add(triggerId);
Map<Integer, List<Integer>> alertDefTriggerMap = new HashMap<Integer, List<Integer>>();
alertDefTriggerMap.put(alertDefinitionId, triggerIds);
EasyMock.expect(registeredTriggerRepository.getTriggerById(triggerId)).andReturn(null);
zEventEnqueuer.enqueueEvents(EasyMock.isA(List.class));
EasyMock.expectLastCall().andThrow(new InterruptedException());
replay();
registeredTriggerManager.setRegisteredTriggerRepository(registeredTriggerRepository);
registeredTriggerManager.setTriggersEnabled(alertDefTriggerMap, true);
verify();
}
/**
* Verifies that triggers are successfully removed from the repository
*/
public void testUnregisterTriggers() {
Integer triggerId = Integer.valueOf(987);
Integer trigger2Id = Integer.valueOf(456);
Integer alertDefinitionId = Integer.valueOf(5432);
AlertDefinition alertDef = new AlertDefinition();
alertDef.setId(alertDefinitionId);
RegisteredTriggerValue mockTrigger = new RegisteredTriggerValue();
mockTrigger.setClassname(MockTrigger.class.getName());
mockTrigger.setId(triggerId);
RegisteredTrigger trigger = new RegisteredTrigger(mockTrigger);
trigger.setId(mockTrigger.getId());
trigger.setAlertDefinition(alertDef);
RegisteredTriggerValue mockTrigger2 = new RegisteredTriggerValue();
mockTrigger2.setClassname(MockTrigger.class.getName());
mockTrigger2.setId(trigger2Id);
RegisteredTrigger trigger2 = new RegisteredTrigger(mockTrigger2);
trigger2.setId(mockTrigger2.getId());
trigger2.setAlertDefinition(alertDef);
List<RegisteredTrigger> triggers = new ArrayList<RegisteredTrigger>();
triggers.add(trigger);
triggers.add(trigger2);
registeredTriggerRepository.removeTrigger(triggerId);
registeredTriggerRepository.removeTrigger(trigger2Id);
alertConditionEvaluatorRepository.removeAlertConditionEvaluator(alertDefinitionId);
replay();
registeredTriggerManager.setRegisteredTriggerRepository(registeredTriggerRepository);
registeredTriggerManager.unregisterTriggers(alertDefinitionId,triggers);
verify();
}
private void verify() {
EasyMock.verify(alertConditionEvaluatorFactory,
alertConditionEvaluator,
triggerDAO,
registeredTriggerRepository, zEventEnqueuer, alertConditionEvaluatorRepository, alertDefinitionDAO,
eventLogManager, alertConditionEvaluatorStateRepository, executionStrategy);
org.easymock.classextension.EasyMock.verify(alertDAO, dbUtil);
}
}