/******************************************************************************* * This file is part of OpenNMS(R). * * Copyright (C) 2007-2011 The OpenNMS Group, Inc. * OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc. * * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. * * OpenNMS(R) is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * OpenNMS(R) 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 OpenNMS(R). If not, see: * http://www.gnu.org/licenses/ * * For more information contact: * OpenNMS(R) Licensing <license@opennms.org> * http://www.opennms.org/ * http://www.opennms.com/ *******************************************************************************/ package org.opennms.netmgt.threshd; import java.util.Date; import org.opennms.netmgt.EventConstants; import org.opennms.netmgt.config.threshd.Threshold; import org.opennms.netmgt.threshd.ThresholdEvaluatorRelativeChange.ThresholdEvaluatorStateRelativeChange; import org.opennms.netmgt.threshd.ThresholdEvaluatorState.Status; import org.opennms.netmgt.xml.event.Event; import org.opennms.test.ThrowableAnticipator; public class ThresholdEvaluatorRelativeChangeTest extends AbstractThresholdEvaluatorTestCase { public void testConstructor() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(0.9); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); new ThresholdEvaluatorStateRelativeChange(wrapper); } public void testConstructorThresholdNull() { ThrowableAnticipator ta = new ThrowableAnticipator(); ta.anticipate(new IllegalArgumentException("threshold argument cannot be null")); try { new ThresholdEvaluatorStateRelativeChange(null); } catch (Throwable t) { ta.throwableReceived(t); } ta.verifyAnticipated(); } public void testEvaluateOnce() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(0.9); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); } public void testEvaluateTwiceNoTrigger() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(0.9); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); } public void testEvaluateTwiceTriggerLowBelow() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(0.9); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should trigger", Status.TRIGGERED, evaluator.evaluate(8.0)); } public void testEvaluateTwiceTriggerLowEqual() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(0.9); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should trigger", Status.TRIGGERED, evaluator.evaluate(9.0)); } public void testEvaluateTwiceNoTriggerLowAbove() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(0.9); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(9.5)); } public void testEvaluateTwiceTriggerHighAbove() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(1.1); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should trigger", Status.TRIGGERED, evaluator.evaluate(12.0)); } public void testEvaluateTwiceTriggerHighEqual() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(1.1); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should trigger", Status.TRIGGERED, evaluator.evaluate(11.0)); } public void testEvaluateTwiceNoTriggerHighBelow() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(1.1); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.5)); } public void testEvaluateTwiceNoTriggerHighFirstZero() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(1.1); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger on first evaluate", Status.NO_CHANGE, evaluator.evaluate(0.0)); assertEquals("should not trigger on second evaluate", Status.NO_CHANGE, evaluator.evaluate(1000.0)); } public void testEvaluateThriceTriggerHighFirstZero() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(1.1); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger on first evaluate", Status.NO_CHANGE, evaluator.evaluate(0.0)); assertEquals("should not trigger on second evaluate", Status.NO_CHANGE, evaluator.evaluate(1000.0)); assertEquals("should trigger on third evaluate", Status.TRIGGERED, evaluator.evaluate(1200.0)); } public void testGetEventForStateNoChange() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(1.1); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertNull("should not have created an event", evaluator.getEventForState(Status.NO_CHANGE, new Date(), 10.0, null)); } public void testGetEventForStateTriggered() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(1.1); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(8.0)); assertEquals("should trigger", Status.TRIGGERED, evaluator.evaluate(10.0)); // Do it once with a null instance Event event = evaluator.getEventForState(Status.TRIGGERED, new Date(), 10.0, null); assertNotNull("should have created an event", event); assertEquals("UEIs should be the same", EventConstants.RELATIVE_CHANGE_THRESHOLD_EVENT_UEI, event.getUei()); assertNotNull("event should have parms", event.getParmCollection()); parmPresentAndValueNonNull(event, "instance"); parmPresentWithValue(event, "value", "10.0"); parmPresentWithValue(event, "previousValue", "8.0"); parmPresentWithValue(event, "multiplier", "1.1"); // And again with a non-null instance event = evaluator.getEventForState(Status.TRIGGERED, new Date(), 10.0, new MockCollectionResourceWrapper("testInstance")); assertNotNull("should have created an event", event); assertEquals("UEIs should be the same", EventConstants.RELATIVE_CHANGE_THRESHOLD_EVENT_UEI, event.getUei()); assertNotNull("event should have parms", event.getParmCollection()); parmPresentWithValue(event, "instance", "testInstance"); parmPresentWithValue(event, "value", "10.0"); parmPresentWithValue(event, "previousValue", "8.0"); parmPresentWithValue(event, "multiplier", "1.1"); } public void testGetEventForStateDefaultUEIS() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(99.0); threshold.setRearm(95.0); threshold.setTrigger(1); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange item = new ThresholdEvaluatorStateRelativeChange(wrapper); Event event=item.getEventForState(Status.TRIGGERED, new Date(), 100.0, null); assertEquals("UEI should be the relativeChangeThresholdTriggerd", EventConstants.RELATIVE_CHANGE_THRESHOLD_EVENT_UEI, event.getUei()); } public void testGetEventForStateCustomUEIS() { String triggeredUEI="uei.opennms.org/custom/relativeChangeThresholdTriggered"; Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(99.0); threshold.setRearm(95.0); threshold.setTrigger(1); threshold.setTriggeredUEI(triggeredUEI); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange item = new ThresholdEvaluatorStateRelativeChange(wrapper); Event event=item.getEventForState(Status.TRIGGERED, new Date(), 100.0, null); assertEquals("UEI should be the uei.opennms.org/custom/relativeChangeThresholdTriggered", triggeredUEI, event.getUei()); } public void testNegativeNumberTriggers() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(1.1); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(-10.0)); assertEquals("should trigger", Status.TRIGGERED, evaluator.evaluate(-12.0)); } public void testNegativeNumberNotTriggers() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(1.1); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(-10.0)); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(-10.5)); } public void testNegativeValueNoChange() { Threshold threshold = new Threshold(); threshold.setType("relativeChange"); threshold.setDsName("ds-name"); threshold.setDsType("ds-type"); threshold.setValue(0.9); threshold.setRearm(0.5); threshold.setTrigger(1); ThresholdConfigWrapper wrapper = new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateRelativeChange evaluator = new ThresholdEvaluatorStateRelativeChange( wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator .evaluate(-10.0)); assertEquals("should not trigger", Status.NO_CHANGE, evaluator .evaluate(-10.0)); } }