/*
* 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) [2004-2009], Hyperic, 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.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.hyperic.hq.measurement.MeasurementConstants;
/**
* Tests the AlertDefinition class.
*/
public class AlertDefinitionTest extends TestCase {
private static String EQUALS_COMPARATOR = "=";
private static String NOT_EQUALS_COMPARATOR = "!=";
private static String GREATER_THAN_COMPARATOR = ">";
private static String LESS_THAN_COMPARATOR = "<";
public AlertDefinitionTest(String name) {
super(name);
}
/**
* Test activating/deactivating an alert definition.
*/
public void testActivatingAlertDefinition() {
AlertDefinition def = new AlertDefinition();
assertFalse(def.isEnabled());
assertFalse(def.isActive());
def.setActiveStatus(true);
assertTrue(def.isEnabled());
assertTrue(def.isActive());
def.setActiveStatus(false);
assertFalse(def.isEnabled());
assertFalse(def.isActive());
}
/**
* Test activating an alert definition then enable/disable the alert
* definition. The operation will always succeed.
*/
public void testEnablingActivatedAlertDefinition() {
AlertDefinition def = new AlertDefinition();
def.setActiveStatus(true);
assertTrue(def.isEnabled());
assertTrue(def.isActive());
assertTrue(def.setEnabledStatus(true));
assertTrue(def.isEnabled());
assertTrue(def.isActive());
assertTrue(def.setEnabledStatus(false));
assertFalse(def.isEnabled());
assertTrue(def.isActive());
}
/**
* Test deactivating an alert definition then attempting to enable/disable
* the alert definition. The operation will never succeed.
*/
public void testEnablingDeactivatedAlertDefinition() {
AlertDefinition def = new AlertDefinition();
def.setActiveStatus(false);
assertFalse(def.isEnabled());
assertFalse(def.isActive());
assertFalse(def.setEnabledStatus(true));
assertFalse(def.isEnabled());
assertFalse(def.isActive());
assertFalse(def.setEnabledStatus(false));
assertFalse(def.isEnabled());
assertFalse(def.isActive());
}
public void testIsAvailabilityUpMultiCondition() {
testIsAvailabilityMultiCondition(true);
}
public void testIsAvailabilityDownMultiCondition() {
testIsAvailabilityMultiCondition(false);
}
private void testIsAvailabilityMultiCondition(boolean up) {
AlertDefinition def = new AlertDefinition();
AlertCondition cond1 = new AlertCondition();
AlertCondition cond2 = new AlertCondition();
def.addCondition(cond1);
def.addCondition(cond2);
assertFalse("Multi-conditional alert definition not supported to be configured for availability",
def.isAvailability(up));
}
public void testIsAvailabilityUpValidConditionName() {
testIsAvailabilityValidConditionName(MeasurementConstants.CAT_AVAILABILITY);
testIsAvailabilityValidConditionName("Server Availability");
}
private void testIsAvailabilityValidConditionName(String conditionName) {
AlertDefinition def = new AlertDefinition();
AlertCondition cond = new AlertCondition();
cond.setName(conditionName);
cond.setComparator(EQUALS_COMPARATOR);
cond.setThreshold(MeasurementConstants.AVAIL_UP);
def.addCondition(cond);
assertTrue("The condition name is '" + conditionName
+ "'. It must contain " + MeasurementConstants.CAT_AVAILABILITY,
def.isAvailability(true));
}
public void testIsAvailabilityUpInvalidConditionName() {
testIsAvailabilityInvalidConditionName(true);
}
public void testIsAvailabilityDownInvalidConditionName() {
testIsAvailabilityInvalidConditionName(false);
}
private void testIsAvailabilityInvalidConditionName(boolean up) {
AlertDefinition def = new AlertDefinition();
AlertCondition cond = new AlertCondition();
cond.setName(MeasurementConstants.CAT_THROUGHPUT);
def.addCondition(cond);
assertFalse("The condition name must contain " + MeasurementConstants.CAT_AVAILABILITY,
def.isAvailability(up));
}
public void testIsAvailabilityUpEqualsComparator() {
testIsAvailabilityEqualsComparator(true);
}
public void testIsAvailabilityUpEqualsComparatorInvalidThreshold() {
testIsAvailabilityInvalidThreshold(true, EQUALS_COMPARATOR);
}
public void testIsAvailabilityDownEqualsComparator() {
testIsAvailabilityEqualsComparator(false);
}
public void testIsAvailabilityDownEqualsComparatorInvalidThreshold() {
testIsAvailabilityInvalidThreshold(false, EQUALS_COMPARATOR);
}
private void testIsAvailabilityEqualsComparator(boolean up) {
AlertDefinition def = new AlertDefinition();
AlertCondition cond = new AlertCondition();
def.addCondition(cond);
cond.setName(MeasurementConstants.CAT_AVAILABILITY);
cond.setComparator(EQUALS_COMPARATOR);
if (up) {
cond.setThreshold(MeasurementConstants.AVAIL_UP);
} else {
cond.setThreshold(MeasurementConstants.AVAIL_DOWN);
}
assertTrue("The alert definition is not properly configured for availability",
def.isAvailability(up));
}
public void testIsAvailabilityUpNotEqualsComparator() {
AlertDefinition def = new AlertDefinition();
AlertCondition cond = new AlertCondition();
def.addCondition(cond);
cond.setName(MeasurementConstants.CAT_AVAILABILITY);
cond.setComparator(NOT_EQUALS_COMPARATOR);
cond.setThreshold(MeasurementConstants.AVAIL_DOWN);
assertTrue("The alert definition is not properly configured for up availability",
def.isAvailability(true));
}
public void testIsAvailabilityUpNotEqualsComparatorInvalidThreshold() {
testIsAvailabilityInvalidThreshold(true, NOT_EQUALS_COMPARATOR);
}
public void testIsAvailabilityDownNotEqualsComparator() {
AlertDefinition def = new AlertDefinition();
AlertCondition cond = new AlertCondition();
def.addCondition(cond);
cond.setName(MeasurementConstants.CAT_AVAILABILITY);
cond.setComparator(NOT_EQUALS_COMPARATOR);
cond.setThreshold(MeasurementConstants.AVAIL_UP);
assertTrue("The alert definition is not properly configured for down availability",
def.isAvailability(false));
}
public void testIsAvailabilityDownNotEqualsComparatorInvalidThreshold() {
testIsAvailabilityInvalidThreshold(false, NOT_EQUALS_COMPARATOR);
}
public void testIsAvailabilityUpGreaterThanComparator() {
List<AlertDefinition> list = new ArrayList<AlertDefinition>();
// add valid alert definitions to test here
AlertDefinition def1 = new AlertDefinition();
AlertCondition cond1 = new AlertCondition();
def1.addCondition(cond1);
cond1.setName(MeasurementConstants.CAT_AVAILABILITY);
cond1.setComparator(GREATER_THAN_COMPARATOR);
cond1.setThreshold(MeasurementConstants.AVAIL_DOWN);
list.add(def1);
AlertDefinition def2 = new AlertDefinition();
AlertCondition cond2 = new AlertCondition();
def2.addCondition(cond2);
cond2.setName(MeasurementConstants.CAT_AVAILABILITY);
cond2.setComparator(GREATER_THAN_COMPARATOR);
cond2.setThreshold(0.999);
list.add(def2);
AlertDefinition def3 = new AlertDefinition();
AlertCondition cond3 = new AlertCondition();
def3.addCondition(cond3);
cond3.setName(MeasurementConstants.CAT_AVAILABILITY);
cond3.setComparator(GREATER_THAN_COMPARATOR);
cond3.setThreshold(0.5);
list.add(def3);
for (AlertDefinition def :list) {
assertTrue("The alert definition is not properly configured for up availability",
def.isAvailability(true));
}
}
public void testIsAvailabilityUpGreaterThanComparatorInvalidThreshold() {
testIsAvailabilityInvalidThreshold(true, GREATER_THAN_COMPARATOR);
}
public void testIsAvailabilityDownLessThanComparator() {
List<AlertDefinition> list = new ArrayList<AlertDefinition>();
// add valid alert definitions to test here
AlertDefinition def1 = new AlertDefinition();
AlertCondition cond1 = new AlertCondition();
def1.addCondition(cond1);
cond1.setName(MeasurementConstants.CAT_AVAILABILITY);
cond1.setComparator(LESS_THAN_COMPARATOR);
cond1.setThreshold(MeasurementConstants.AVAIL_UP);
list.add(def1);
AlertDefinition def2 = new AlertDefinition();
AlertCondition cond2 = new AlertCondition();
def2.addCondition(cond2);
cond2.setName(MeasurementConstants.CAT_AVAILABILITY);
cond2.setComparator(LESS_THAN_COMPARATOR);
cond2.setThreshold(0.001);
list.add(def2);
AlertDefinition def3 = new AlertDefinition();
AlertCondition cond3 = new AlertCondition();
def3.addCondition(cond3);
cond3.setName(MeasurementConstants.CAT_AVAILABILITY);
cond3.setComparator(LESS_THAN_COMPARATOR);
cond3.setThreshold(0.5);
list.add(def3);
for (AlertDefinition def: list) {
assertTrue("The alert definition is not properly configured for down availability",
def.isAvailability(false));
}
}
public void testIsAvailabilityDownLessThanComparatorInvalidThreshold() {
testIsAvailabilityInvalidThreshold(false, LESS_THAN_COMPARATOR);
}
private void testIsAvailabilityInvalidThreshold(boolean up, String comparator) {
List<AlertDefinition> list = new ArrayList<AlertDefinition>();
// add invalid alert definitions to test here
AlertDefinition def1 = new AlertDefinition();
AlertCondition cond1 = new AlertCondition();
def1.addCondition(cond1);
cond1.setName(MeasurementConstants.CAT_AVAILABILITY);
cond1.setComparator(comparator);
cond1.setThreshold(MeasurementConstants.AVAIL_UNKNOWN);
list.add(def1);
AlertDefinition def2 = new AlertDefinition();
AlertCondition cond2 = new AlertCondition();
def2.addCondition(cond2);
cond2.setName(MeasurementConstants.CAT_AVAILABILITY);
cond2.setComparator(comparator);
cond2.setThreshold(MeasurementConstants.AVAIL_PAUSED);
list.add(def2);
for (AlertDefinition def : list ) {
assertFalse("The alert definition is properly configured for availability",
def.isAvailability(up));
}
}
}