/** * 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 java.util.ArrayList; import java.util.EnumSet; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.ambari.server.H2DatabaseCleaner; import org.apache.ambari.server.controller.RootServiceResponseFactory.Services; import org.apache.ambari.server.events.AggregateAlertRecalculateEvent; import org.apache.ambari.server.events.AlertEvent; import org.apache.ambari.server.events.AlertStateChangeEvent; import org.apache.ambari.server.events.MockEventListener; import org.apache.ambari.server.events.publishers.AlertEventPublisher; import org.apache.ambari.server.orm.GuiceJpaInitializer; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.orm.dao.AlertDispatchDAO; import org.apache.ambari.server.orm.dao.AlertsDAO; import org.apache.ambari.server.orm.entities.AlertCurrentEntity; import org.apache.ambari.server.orm.entities.AlertDefinitionEntity; import org.apache.ambari.server.orm.entities.AlertGroupEntity; import org.apache.ambari.server.orm.entities.AlertHistoryEntity; import org.apache.ambari.server.orm.entities.AlertNoticeEntity; import org.apache.ambari.server.orm.entities.AlertTargetEntity; import org.apache.ambari.server.orm.entities.UpgradeEntity; import org.apache.ambari.server.state.Alert; import org.apache.ambari.server.state.AlertFirmness; import org.apache.ambari.server.state.AlertState; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.MaintenanceState; import org.apache.ambari.server.utils.EventBusSynchronizer; import org.easymock.EasyMock; import org.easymock.EasyMockSupport; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; import com.google.inject.Binder; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Module; import com.google.inject.util.Modules; import junit.framework.Assert; /** * Tests that {@link AlertStateChangeEvent} instances cause * {@link AlertNoticeEntity} instances to be created. Outbound notifications * should only be created when received alerts which have a firmness of * {@link AlertFirmness#HARD}. */ @Category({ category.AlertTest.class}) public class AlertStateChangedEventTest extends EasyMockSupport { private AlertEventPublisher eventPublisher; private AlertDispatchDAO dispatchDao; private Injector injector; private MockEventListener m_listener; /** * */ @Before public void setup() throws Exception { injector = Guice.createInjector(Modules.override( new InMemoryDefaultTestModule()).with(new MockModule())); injector.getInstance(GuiceJpaInitializer.class); m_listener = injector.getInstance(MockEventListener.class); dispatchDao = injector.getInstance(AlertDispatchDAO.class); // !!! need a synchronous op for testing EventBusSynchronizer.synchronizeAlertEventPublisher(injector).register(m_listener); EventBusSynchronizer.synchronizeAmbariEventPublisher(injector).register(m_listener); eventPublisher = injector.getInstance(AlertEventPublisher.class); } /** * @throws Exception */ @After public void teardown() throws Exception { H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector); injector = null; } /** * Tests that an {@link AlertStateChangeEvent} causes * {@link AlertNoticeEntity} instances to be written. * * @throws Exception */ @Test @SuppressWarnings("unchecked") public void testAlertNoticeCreationFromEvent() throws Exception { // expect the normal calls which get a cluster by its ID expectNormalCluster(); AlertTargetEntity alertTarget = createNiceMock(AlertTargetEntity.class); AlertGroupEntity alertGroup = createMock(AlertGroupEntity.class); List<AlertGroupEntity> groups = new ArrayList<>(); Set<AlertTargetEntity> targets = new HashSet<>(); targets.add(alertTarget); groups.add(alertGroup); EasyMock.expect(alertGroup.getAlertTargets()).andReturn(targets).once(); EasyMock.expect(alertTarget.isEnabled()).andReturn(Boolean.TRUE).atLeastOnce(); EasyMock.expect(alertTarget.getAlertStates()).andReturn( EnumSet.of(AlertState.OK, AlertState.CRITICAL)).atLeastOnce(); EasyMock.expect( dispatchDao.findGroupsByDefinition(EasyMock.anyObject(AlertDefinitionEntity.class))).andReturn( groups).once(); EasyMock.expect( dispatchDao.createNotices((List<AlertNoticeEntity>) EasyMock.anyObject())).andReturn( new ArrayList<AlertNoticeEntity>()).once(); AlertDefinitionEntity definition = getMockAlertDefinition(); AlertCurrentEntity current = getMockedAlertCurrentEntity(); AlertHistoryEntity history = createNiceMock(AlertHistoryEntity.class); AlertStateChangeEvent event = createNiceMock(AlertStateChangeEvent.class); Alert alert = createNiceMock(Alert.class); EasyMock.expect(current.getAlertHistory()).andReturn(history).anyTimes(); EasyMock.expect(current.getFirmness()).andReturn(AlertFirmness.HARD).atLeastOnce(); EasyMock.expect(history.getClusterId()).andReturn(1L).atLeastOnce(); EasyMock.expect(history.getAlertState()).andReturn(AlertState.CRITICAL).atLeastOnce(); EasyMock.expect(history.getAlertDefinition()).andReturn(definition).atLeastOnce(); EasyMock.expect(alert.getText()).andReturn("The HDFS Foo Alert Is Not Good").atLeastOnce(); EasyMock.expect(alert.getState()).andReturn(AlertState.CRITICAL).atLeastOnce(); EasyMock.expect(event.getCurrentAlert()).andReturn(current).atLeastOnce(); EasyMock.expect(event.getNewHistoricalEntry()).andReturn(history).atLeastOnce(); EasyMock.expect(event.getAlert()).andReturn(alert).atLeastOnce(); replayAll(); eventPublisher.publish(event); verifyAll(); } /** * Tests that an {@link AlertNoticeEntity} is not created for a target that * does not match the {@link AlertState} of the alert. * * @throws Exception */ @Test public void testAlertNoticeSkippedForTarget() throws Exception { AlertTargetEntity alertTarget = createMock(AlertTargetEntity.class); AlertGroupEntity alertGroup = createMock(AlertGroupEntity.class); List<AlertGroupEntity> groups = new ArrayList<>(); Set<AlertTargetEntity> targets = new HashSet<>(); targets.add(alertTarget); groups.add(alertGroup); EasyMock.expect(alertGroup.getAlertTargets()).andReturn(targets).once(); EasyMock.expect(alertTarget.isEnabled()).andReturn(Boolean.TRUE).atLeastOnce(); EasyMock.expect(alertTarget.getAlertStates()).andReturn( EnumSet.of(AlertState.OK, AlertState.CRITICAL)).atLeastOnce(); EasyMock.expect( dispatchDao.findGroupsByDefinition( EasyMock.anyObject(AlertDefinitionEntity.class))).andReturn( groups).once(); AlertDefinitionEntity definition = getMockAlertDefinition(); AlertCurrentEntity current = getMockedAlertCurrentEntity(); AlertHistoryEntity history = createNiceMock(AlertHistoryEntity.class); AlertStateChangeEvent event = createNiceMock(AlertStateChangeEvent.class); Alert alert = createNiceMock(Alert.class); EasyMock.expect(current.getAlertHistory()).andReturn(history).anyTimes(); EasyMock.expect(current.getFirmness()).andReturn(AlertFirmness.HARD).atLeastOnce(); // use WARNING to ensure that the target (which only cares about OK/CRIT) // does not receive the alert notice EasyMock.expect(history.getAlertState()).andReturn(AlertState.WARNING).atLeastOnce(); EasyMock.expect(history.getAlertDefinition()).andReturn(definition).atLeastOnce(); EasyMock.expect(alert.getText()).andReturn("The HDFS Foo Alert Is Not Good").atLeastOnce(); EasyMock.expect(alert.getState()).andReturn(AlertState.WARNING).atLeastOnce(); EasyMock.expect(event.getCurrentAlert()).andReturn(current).atLeastOnce(); EasyMock.expect(event.getNewHistoricalEntry()).andReturn(history).atLeastOnce(); EasyMock.expect(event.getAlert()).andReturn(alert).atLeastOnce(); replayAll(); eventPublisher.publish(event); verifyAll(); } /** * Tests that an {@link AlertNoticeEntity} is not created for a target that * has been disabled. * * @throws Exception */ @Test public void testAlertNoticeSkippedForDisabledTarget() throws Exception { AlertTargetEntity alertTarget = createMock(AlertTargetEntity.class); AlertGroupEntity alertGroup = createMock(AlertGroupEntity.class); List<AlertGroupEntity> groups = new ArrayList<>(); Set<AlertTargetEntity> targets = new HashSet<>(); targets.add(alertTarget); groups.add(alertGroup); EasyMock.expect(alertGroup.getAlertTargets()).andReturn(targets).once(); EasyMock.expect(alertTarget.isEnabled()).andReturn(Boolean.FALSE).atLeastOnce(); EasyMock.expect( dispatchDao.findGroupsByDefinition( EasyMock.anyObject(AlertDefinitionEntity.class))).andReturn( groups).once(); AlertDefinitionEntity definition = getMockAlertDefinition(); AlertCurrentEntity current = getMockedAlertCurrentEntity(); AlertHistoryEntity history = createNiceMock(AlertHistoryEntity.class); AlertStateChangeEvent event = createNiceMock(AlertStateChangeEvent.class); Alert alert = createNiceMock(Alert.class); EasyMock.expect(current.getAlertHistory()).andReturn(history).anyTimes(); EasyMock.expect(current.getFirmness()).andReturn(AlertFirmness.HARD).atLeastOnce(); EasyMock.expect(history.getAlertState()).andReturn(AlertState.OK).atLeastOnce(); EasyMock.expect(history.getAlertDefinition()).andReturn(definition).atLeastOnce(); EasyMock.expect(alert.getText()).andReturn("The HDFS Foo Alert Is Not Good").atLeastOnce(); EasyMock.expect(alert.getState()).andReturn(AlertState.WARNING).atLeastOnce(); EasyMock.expect(event.getCurrentAlert()).andReturn(current).atLeastOnce(); EasyMock.expect(event.getNewHistoricalEntry()).andReturn(history).atLeastOnce(); EasyMock.expect(event.getAlert()).andReturn(alert).atLeastOnce(); replayAll(); eventPublisher.publish(event); verifyAll(); } /** * Tests that an alert with a firmness of {@link AlertFirmness#SOFT} does not * trigger any notifications. * * @throws Exception */ @Test public void testSoftAlertDoesNotCreateNotifications() throws Exception { AlertDefinitionEntity definition = getMockAlertDefinition(); AlertCurrentEntity current = getMockedAlertCurrentEntity(); AlertHistoryEntity history = createNiceMock(AlertHistoryEntity.class); AlertStateChangeEvent event = createNiceMock(AlertStateChangeEvent.class); Alert alert = createNiceMock(Alert.class); // make the alert SOFT so that no notifications are sent EasyMock.expect(current.getAlertHistory()).andReturn(history).anyTimes(); EasyMock.expect(current.getFirmness()).andReturn(AlertFirmness.SOFT).atLeastOnce(); EasyMock.expect(history.getAlertDefinition()).andReturn(definition).atLeastOnce(); EasyMock.expect(alert.getText()).andReturn("The HDFS Foo Alert Is Not Good").atLeastOnce(); EasyMock.expect(alert.getState()).andReturn(AlertState.CRITICAL).atLeastOnce(); EasyMock.expect(event.getCurrentAlert()).andReturn(current).atLeastOnce(); EasyMock.expect(event.getNewHistoricalEntry()).andReturn(history).atLeastOnce(); EasyMock.expect(event.getAlert()).andReturn(alert).atLeastOnce(); replayAll(); eventPublisher.publish(event); verifyAll(); } /** * Tests that an alert with a firmness of {@link AlertFirmness#HARD} and state * of {@link AlertState#OK} does not trigger any notifications when coming * from a {@link AlertFirmness#SOFT} non-OK alert. * * @throws Exception */ @Test public void testSoftAlertTransitionToHardOKDoesNotCreateNotification() throws Exception { AlertDefinitionEntity definition = getMockAlertDefinition(); AlertCurrentEntity current = getMockedAlertCurrentEntity(); AlertHistoryEntity history = createNiceMock(AlertHistoryEntity.class); AlertStateChangeEvent event = createNiceMock(AlertStateChangeEvent.class); Alert alert = createNiceMock(Alert.class); // register a HARD/OK for the brand new alert coming in EasyMock.expect(current.getAlertHistory()).andReturn(history).anyTimes(); EasyMock.expect(current.getFirmness()).andReturn(AlertFirmness.HARD).atLeastOnce(); EasyMock.expect(history.getAlertDefinition()).andReturn(definition).atLeastOnce(); EasyMock.expect(history.getAlertState()).andReturn(AlertState.OK).atLeastOnce(); EasyMock.expect(alert.getText()).andReturn("The HDFS Foo Alert Is Good").atLeastOnce(); EasyMock.expect(alert.getState()).andReturn(AlertState.OK).atLeastOnce(); // set the old state as being a SOFT/CRITICAL EasyMock.expect(event.getFromState()).andReturn(AlertState.CRITICAL).anyTimes(); EasyMock.expect(event.getFromFirmness()).andReturn(AlertFirmness.SOFT).atLeastOnce(); EasyMock.expect(event.getCurrentAlert()).andReturn(current).atLeastOnce(); EasyMock.expect(event.getNewHistoricalEntry()).andReturn(history).atLeastOnce(); EasyMock.expect(event.getAlert()).andReturn(alert).atLeastOnce(); replayAll(); eventPublisher.publish(event); verifyAll(); } /** * Gets an {@link AlertDefinitionEntity} with some mocked calls expected. * * @return */ private AlertDefinitionEntity getMockAlertDefinition() { AlertDefinitionEntity definition = createNiceMock(AlertDefinitionEntity.class); EasyMock.expect(definition.getDefinitionId()).andReturn(1L).anyTimes(); EasyMock.expect(definition.getServiceName()).andReturn("HDFS").anyTimes(); EasyMock.expect(definition.getLabel()).andReturn("hdfs-foo-alert").anyTimes(); EasyMock.expect(definition.getDescription()).andReturn("HDFS Foo Alert").anyTimes(); return definition; } /** * Gets an {@link AlertCurrentEntity} with some mocked calls expected. * * @return */ private AlertCurrentEntity getMockedAlertCurrentEntity() { AlertCurrentEntity current = createNiceMock(AlertCurrentEntity.class); EasyMock.expect(current.getMaintenanceState()).andReturn(MaintenanceState.OFF).anyTimes(); return current; } /** * Tests that {@link AggregateAlertRecalculateEvent}s are fired correctly. * * @throws Exception */ @Test public void testAggregateAlertRecalculateEvent() throws Exception { Class<? extends AlertEvent> eventClass = AggregateAlertRecalculateEvent.class; Assert.assertFalse(m_listener.isAlertEventReceived(eventClass)); AlertsDAO dao = injector.getInstance(AlertsDAO.class); dao.removeCurrentByServiceComponentHost(1, "HDFS", "DATANODE", "c6401"); Assert.assertTrue(m_listener.isAlertEventReceived(eventClass)); Assert.assertEquals(1, m_listener.getAlertEventReceivedCount(eventClass)); } /** * Tests that no {@link AlertNoticeEntity} instances are created during an * upgrade. * * @throws Exception */ @Test public void testUpgradingClusterSkipsAlerts() throws Exception { // expect an upgrading cluster expectUpgradingCluster(); AlertTargetEntity alertTarget = createNiceMock(AlertTargetEntity.class); AlertGroupEntity alertGroup = createMock(AlertGroupEntity.class); List<AlertGroupEntity> groups = new ArrayList<>(); Set<AlertTargetEntity> targets = new HashSet<>(); targets.add(alertTarget); groups.add(alertGroup); EasyMock.expect(alertGroup.getAlertTargets()).andReturn(targets).once(); EasyMock.expect(alertTarget.isEnabled()).andReturn(Boolean.TRUE).atLeastOnce(); EasyMock.expect(alertTarget.getAlertStates()).andReturn(EnumSet.allOf(AlertState.class)).atLeastOnce(); EasyMock.expect(dispatchDao.findGroupsByDefinition( EasyMock.anyObject(AlertDefinitionEntity.class))).andReturn(groups).once(); AlertDefinitionEntity definition = getMockAlertDefinition(); AlertCurrentEntity current = getMockedAlertCurrentEntity(); AlertHistoryEntity history = createNiceMock(AlertHistoryEntity.class); AlertStateChangeEvent event = createNiceMock(AlertStateChangeEvent.class); Alert alert = createNiceMock(Alert.class); EasyMock.expect(current.getAlertHistory()).andReturn(history).anyTimes(); EasyMock.expect(current.getFirmness()).andReturn(AlertFirmness.HARD).atLeastOnce(); EasyMock.expect(history.getClusterId()).andReturn(1L).atLeastOnce(); EasyMock.expect(history.getAlertState()).andReturn(AlertState.CRITICAL).atLeastOnce(); EasyMock.expect(history.getAlertDefinition()).andReturn(definition).atLeastOnce(); EasyMock.expect(alert.getText()).andReturn("The HDFS Foo Alert Is Not Good").atLeastOnce(); EasyMock.expect(alert.getState()).andReturn(AlertState.CRITICAL).atLeastOnce(); EasyMock.expect(event.getCurrentAlert()).andReturn(current).atLeastOnce(); EasyMock.expect(event.getNewHistoricalEntry()).andReturn(history).atLeastOnce(); EasyMock.expect(event.getAlert()).andReturn(alert).atLeastOnce(); replayAll(); eventPublisher.publish(event); verifyAll(); } /** * Tests that no {@link AlertNoticeEntity} instances are created when a * cluster upgrade is suspended. * * @throws Exception */ @Test public void testUpgradeSuspendedClusterSkipsAlerts() throws Exception { // expect an upgrading cluster expectUpgradeSuspendedCluster(); AlertTargetEntity alertTarget = createNiceMock(AlertTargetEntity.class); AlertGroupEntity alertGroup = createMock(AlertGroupEntity.class); List<AlertGroupEntity> groups = new ArrayList<>(); Set<AlertTargetEntity> targets = new HashSet<>(); targets.add(alertTarget); groups.add(alertGroup); EasyMock.expect(alertGroup.getAlertTargets()).andReturn(targets).once(); EasyMock.expect(alertTarget.isEnabled()).andReturn(Boolean.TRUE).atLeastOnce(); EasyMock.expect(alertTarget.getAlertStates()).andReturn( EnumSet.allOf(AlertState.class)).atLeastOnce(); EasyMock.expect(dispatchDao.findGroupsByDefinition( EasyMock.anyObject(AlertDefinitionEntity.class))).andReturn(groups).once(); AlertDefinitionEntity definition = getMockAlertDefinition(); AlertCurrentEntity current = getMockedAlertCurrentEntity(); AlertHistoryEntity history = createNiceMock(AlertHistoryEntity.class); AlertStateChangeEvent event = createNiceMock(AlertStateChangeEvent.class); Alert alert = createNiceMock(Alert.class); EasyMock.expect(current.getAlertHistory()).andReturn(history).anyTimes(); EasyMock.expect(current.getFirmness()).andReturn(AlertFirmness.HARD).atLeastOnce(); EasyMock.expect(history.getClusterId()).andReturn(1L).atLeastOnce(); EasyMock.expect(history.getAlertState()).andReturn(AlertState.CRITICAL).atLeastOnce(); EasyMock.expect(history.getAlertDefinition()).andReturn(definition).atLeastOnce(); EasyMock.expect(alert.getText()).andReturn("The HDFS Foo Alert Is Not Good").atLeastOnce(); EasyMock.expect(alert.getState()).andReturn(AlertState.CRITICAL).atLeastOnce(); EasyMock.expect(event.getCurrentAlert()).andReturn(current).atLeastOnce(); EasyMock.expect(event.getNewHistoricalEntry()).andReturn(history).atLeastOnce(); EasyMock.expect(event.getAlert()).andReturn(alert).atLeastOnce(); replayAll(); eventPublisher.publish(event); verifyAll(); } /** * Tests that {@link AlertNoticeEntity} instances are created during an * upgrade as long as they are for the AMBARI service. * * @throws Exception */ @Test @SuppressWarnings("unchecked") public void testAmbariAlertsSendDuringUpgrade() throws Exception { // expect an upgrading cluster expectUpgradingCluster(); AlertTargetEntity alertTarget = createNiceMock(AlertTargetEntity.class); AlertGroupEntity alertGroup = createMock(AlertGroupEntity.class); List<AlertGroupEntity> groups = new ArrayList<>(); Set<AlertTargetEntity> targets = new HashSet<>(); targets.add(alertTarget); groups.add(alertGroup); EasyMock.expect(alertGroup.getAlertTargets()).andReturn(targets).once(); EasyMock.expect(alertTarget.isEnabled()).andReturn(Boolean.TRUE).atLeastOnce(); EasyMock.expect(alertTarget.getAlertStates()).andReturn( EnumSet.allOf(AlertState.class)).atLeastOnce(); EasyMock.expect(dispatchDao.findGroupsByDefinition( EasyMock.anyObject(AlertDefinitionEntity.class))).andReturn(groups).once(); // create the definition for the AMBARI service AlertDefinitionEntity definition = createNiceMock(AlertDefinitionEntity.class); EasyMock.expect(definition.getDefinitionId()).andReturn(1L).anyTimes(); EasyMock.expect(definition.getServiceName()).andReturn(Services.AMBARI.name()).anyTimes(); EasyMock.expect(definition.getLabel()).andReturn("ambari-foo-alert").anyTimes(); EasyMock.expect(definition.getDescription()).andReturn("Ambari Foo Alert").anyTimes(); EasyMock.expect( dispatchDao.createNotices((List<AlertNoticeEntity>) EasyMock.anyObject())).andReturn( new ArrayList<AlertNoticeEntity>()).once(); AlertCurrentEntity current = getMockedAlertCurrentEntity(); AlertHistoryEntity history = createNiceMock(AlertHistoryEntity.class); AlertStateChangeEvent event = createNiceMock(AlertStateChangeEvent.class); Alert alert = createNiceMock(Alert.class); EasyMock.expect(current.getAlertHistory()).andReturn(history).anyTimes(); EasyMock.expect(current.getFirmness()).andReturn(AlertFirmness.HARD).atLeastOnce(); EasyMock.expect(history.getClusterId()).andReturn(1L).atLeastOnce(); EasyMock.expect(history.getAlertState()).andReturn(AlertState.CRITICAL).atLeastOnce(); EasyMock.expect(history.getAlertDefinition()).andReturn(definition).atLeastOnce(); EasyMock.expect(alert.getText()).andReturn("The HDFS Foo Alert Is Not Good").atLeastOnce(); EasyMock.expect(alert.getState()).andReturn(AlertState.CRITICAL).atLeastOnce(); EasyMock.expect(event.getCurrentAlert()).andReturn(current).atLeastOnce(); EasyMock.expect(event.getNewHistoricalEntry()).andReturn(history).atLeastOnce(); EasyMock.expect(event.getAlert()).andReturn(alert).atLeastOnce(); replayAll(); eventPublisher.publish(event); verifyAll(); } /** * Create expectations around a normal cluster. * * @throws Exception */ private void expectNormalCluster() throws Exception { Clusters clusters = injector.getInstance(Clusters.class); Cluster cluster = createMock(Cluster.class); EasyMock.expect(clusters.getClusterById(EasyMock.anyLong())).andReturn(cluster).atLeastOnce(); EasyMock.expect(cluster.getUpgradeInProgress()).andReturn(null).anyTimes(); EasyMock.expect(cluster.isUpgradeSuspended()).andReturn(false).anyTimes(); } /** * Create expectations around a cluster in an active upgrade. * * @throws Exception */ private void expectUpgradingCluster() throws Exception { Clusters clusters = injector.getInstance(Clusters.class); Cluster cluster = createMock(Cluster.class); EasyMock.reset(clusters); EasyMock.expect(clusters.getClusterById(EasyMock.anyLong())).andReturn(cluster).atLeastOnce(); EasyMock.expect(cluster.getUpgradeInProgress()).andReturn(new UpgradeEntity()).anyTimes(); EasyMock.expect(cluster.isUpgradeSuspended()).andReturn(false).anyTimes(); } /** * Create expectations around a cluster where the upgrade was suspended. * * @throws Exception */ private void expectUpgradeSuspendedCluster() throws Exception { Cluster cluster = createMock(Cluster.class); Clusters clusters = injector.getInstance(Clusters.class); EasyMock.reset(clusters); EasyMock.expect(clusters.getClusterById(EasyMock.anyLong())).andReturn(cluster).atLeastOnce(); EasyMock.expect(cluster.getUpgradeInProgress()).andReturn(EasyMock.createMock(UpgradeEntity.class)).anyTimes(); EasyMock.expect(cluster.isUpgradeSuspended()).andReturn(true).anyTimes(); } /** * */ private class MockModule implements Module { /** * {@inheritDoc} */ @Override public void configure(Binder binder) { Clusters clusters = createMock(Clusters.class); // dispatchDao should be strict enough to throw an exception on verify // that the create alert notice method was not called binder.bind(AlertDispatchDAO.class).toInstance(createMock(AlertDispatchDAO.class)); binder.bind(Clusters.class).toInstance(clusters); } } }