/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.ambari.server.state.alerts; import org.apache.ambari.server.state.AlertState; import org.apache.ambari.server.state.alert.AggregateSource; import org.apache.ambari.server.state.alert.AlertDefinition; import org.apache.ambari.server.state.alert.MetricSource; import org.apache.ambari.server.state.alert.PercentSource; import org.apache.ambari.server.state.alert.PortSource; import org.apache.ambari.server.state.alert.Reporting; import org.apache.ambari.server.state.alert.Reporting.ReportTemplate; import org.apache.ambari.server.state.alert.Scope; import org.apache.ambari.server.state.alert.ScriptSource; import org.apache.ambari.server.state.alert.Source; import org.apache.ambari.server.state.alert.SourceType; import org.junit.Test; import org.junit.experimental.categories.Category; import junit.framework.TestCase; /** * Tests equality of {@link AlertDefinition} for hashing and merging purposes. */ @Category({ category.AlertTest.class}) public class AlertDefinitionEqualityTest extends TestCase { @Test public void testAlertDefinitionEquality() { AlertDefinition ad1 = getAlertDefinition(SourceType.PORT); AlertDefinition ad2 = getAlertDefinition(SourceType.PORT); assertTrue(ad1.equals(ad2)); assertTrue(ad1.deeplyEquals(ad2)); // change 1 property and check that name equality still works ad2.setInterval(2); assertTrue(ad1.equals(ad2)); assertFalse(ad1.deeplyEquals(ad2)); // change the name and verify name equality is broken ad2.setName(getName() + " foo"); assertFalse(ad1.equals(ad2)); assertFalse(ad1.deeplyEquals(ad2)); ad2 = getAlertDefinition(SourceType.AGGREGATE); assertFalse(ad1.deeplyEquals(ad2)); ad2 = getAlertDefinition(SourceType.PORT); assertTrue(ad1.deeplyEquals(ad2)); ad2.getSource().getReporting().getOk().setText("foo"); assertFalse(ad1.deeplyEquals(ad2)); } /** * @param sourceType * @return */ private AlertDefinition getAlertDefinition(SourceType sourceType) { AlertDefinition definition = new AlertDefinition(); definition.setClusterId(1); definition.setComponentName("component"); definition.setEnabled(true); definition.setInterval(1); definition.setName("Name"); definition.setScope(Scope.ANY); definition.setServiceName("ServiceName"); definition.setLabel("Label"); definition.setDescription("Description"); definition.setSource(getSource(sourceType)); return definition; } /** * @param type * @return */ private Source getSource(SourceType type) { Source source = null; switch (type) { case AGGREGATE: source = new AggregateSource(); ((AggregateSource) source).setAlertName("hdfs-foo"); break; case METRIC: source = new MetricSource(); break; case PERCENT: source = new PercentSource(); break; case PORT: source = new PortSource(); ((PortSource) source).setPort(80); ((PortSource) source).setUri("uri://foo"); break; case SCRIPT: source = new ScriptSource(); break; default: break; } source.setReporting(getReporting()); return source; } /** * @return */ private Reporting getReporting() { Reporting reporting = new Reporting(); reporting.setCritical(getReportingTemplate(AlertState.CRITICAL)); reporting.setWarning(getReportingTemplate(AlertState.WARNING)); reporting.setOk(getReportingTemplate(AlertState.OK)); return reporting; } /** * @param state * @return */ private ReportTemplate getReportingTemplate(AlertState state) { ReportTemplate template = new ReportTemplate(); switch (state) { case CRITICAL: template.setText("OH NO!"); template.setValue(80.0); break; case OK: template.setText("No worries."); break; case UNKNOWN: break; case WARNING: template.setText("Getting nervous..."); template.setValue(50.0); break; default: break; } return template; } }