/* Copyright 2009-2015 Comcast Interactive Media, LLC.
*
* Licensed 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.fishwife.jrugged;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class TestRolledUpMonitoredService {
private RolledUpMonitoredService rolledUpService;
MonitoredService mockService1;
MonitoredService mockService2;
private static final String ROLLEDUP_SERVICE_NAME = "Rolledup Service";
private static final String SERVICE_1_NAME="Service 1";
private static final String SERVICE_2_NAME="Service 2";
private static final String SERVICE_1_REASON = "Service 1 Reason";
private static final String SERVICE_2_REASON = "Service 2 Reason";
@Before
public void setUp() {
mockService1 = createMock(MonitoredService.class);
mockService2 = createMock(MonitoredService.class);
List<MonitoredService> criticals = new ArrayList<MonitoredService>();
criticals.add(mockService1);
List<MonitoredService> nonCriticals = new ArrayList<MonitoredService>();
nonCriticals.add(mockService2);
rolledUpService = new RolledUpMonitoredService(ROLLEDUP_SERVICE_NAME, criticals, nonCriticals);
}
@Test
public void testAllUp() {
expect(mockService1.getServiceStatus()).andReturn(new ServiceStatus(SERVICE_1_NAME, Status.UP));
expect(mockService2.getServiceStatus()).andReturn(new ServiceStatus(SERVICE_2_NAME, Status.UP));
replay(mockService1);
replay(mockService2);
ServiceStatus serviceStatus = rolledUpService.getServiceStatus();
assertEquals(ROLLEDUP_SERVICE_NAME, serviceStatus.getName());
assertEquals(serviceStatus.getStatus(), Status.UP);
}
@Test
public void testCriticalDegraded() {
expect(mockService1.getServiceStatus()).andReturn(
new ServiceStatus(SERVICE_1_NAME, Status.DEGRADED, SERVICE_1_REASON));
expect(mockService2.getServiceStatus()).andReturn(new ServiceStatus(SERVICE_2_NAME, Status.UP));
replay(mockService1);
replay(mockService2);
ServiceStatus serviceStatus = rolledUpService.getServiceStatus();
assertEquals(ROLLEDUP_SERVICE_NAME, serviceStatus.getName());
assertEquals(serviceStatus.getStatus(), Status.DEGRADED);
assertTrue(serviceStatus.getReasons().contains(SERVICE_1_NAME + ":" + SERVICE_1_REASON));
}
@Test
public void testNonCriticalDegraded() {
expect(mockService1.getServiceStatus()).andReturn(new ServiceStatus(SERVICE_1_NAME, Status.UP));
expect(mockService2.getServiceStatus()).andReturn(
new ServiceStatus(SERVICE_2_NAME, Status.DEGRADED, SERVICE_2_REASON));
replay(mockService1);
replay(mockService2);
ServiceStatus serviceStatus = rolledUpService.getServiceStatus();
assertEquals(ROLLEDUP_SERVICE_NAME, serviceStatus.getName());
assertEquals(serviceStatus.getStatus(), Status.DEGRADED);
assertTrue(serviceStatus.getReasons().contains(SERVICE_2_NAME + ":" + SERVICE_2_REASON));
}
@Test
public void testCritialAndNonCriticalDegraded() {
expect(mockService1.getServiceStatus()).andReturn(
new ServiceStatus(SERVICE_1_NAME, Status.DEGRADED, SERVICE_1_REASON));
expect(mockService2.getServiceStatus()).andReturn(
new ServiceStatus(SERVICE_2_NAME, Status.DEGRADED, SERVICE_2_REASON));
replay(mockService1);
replay(mockService2);
ServiceStatus serviceStatus = rolledUpService.getServiceStatus();
assertEquals(ROLLEDUP_SERVICE_NAME, serviceStatus.getName());
assertEquals(serviceStatus.getStatus(), Status.DEGRADED);
assertTrue(serviceStatus.getReasons().contains(SERVICE_1_NAME + ":" + SERVICE_1_REASON));
assertTrue(serviceStatus.getReasons().contains(SERVICE_2_NAME + ":" + SERVICE_2_REASON));
}
@Test
public void testNonCritialDown() {
expect(mockService1.getServiceStatus()).andReturn(new ServiceStatus(SERVICE_1_NAME, Status.UP));
expect(mockService2.getServiceStatus()).andReturn(
new ServiceStatus(SERVICE_2_NAME, Status.DOWN, SERVICE_2_REASON));
replay(mockService1);
replay(mockService2);
ServiceStatus serviceStatus = rolledUpService.getServiceStatus();
assertEquals(ROLLEDUP_SERVICE_NAME, serviceStatus.getName());
assertEquals(serviceStatus.getStatus(), Status.DEGRADED);
assertTrue(serviceStatus.getReasons().contains(SERVICE_2_NAME + ":" + SERVICE_2_REASON));
}
@Test
public void testGetServiceStatusList() {
expect(mockService1.getServiceStatus()).andReturn(new ServiceStatus(SERVICE_1_NAME, Status.UP)).times(2);
expect(mockService2.getServiceStatus()).andReturn(new ServiceStatus(SERVICE_2_NAME, Status.UP)).times(2);
replay(mockService1);
replay(mockService2);
List<ServiceStatus> statusList = rolledUpService.getAllStatuses();
assertTrue(statusList.contains(mockService1.getServiceStatus()));
assertTrue(statusList.contains(mockService2.getServiceStatus()));
}
@Test
public void testGetCriticalServiceStatusList() {
expect(mockService1.getServiceStatus()).andReturn(new ServiceStatus(SERVICE_1_NAME, Status.UP)).times(2);
expect(mockService2.getServiceStatus()).andReturn(new ServiceStatus(SERVICE_2_NAME, Status.UP)).times(2);
replay(mockService1);
replay(mockService2);
List<ServiceStatus> statusList = rolledUpService.getCriticalStatuses();
assertTrue(statusList.contains(mockService1.getServiceStatus()));
assertFalse(statusList.contains(mockService2.getServiceStatus()));
}
@Test
public void testGetNonCriticalServiceStatusList() {
expect(mockService1.getServiceStatus()).andReturn(new ServiceStatus(SERVICE_1_NAME, Status.UP)).times(2);
expect(mockService2.getServiceStatus()).andReturn(new ServiceStatus(SERVICE_2_NAME, Status.UP)).times(2);
replay(mockService1);
replay(mockService2);
List<ServiceStatus> statusList = rolledUpService.getNonCriticalStatuses();
assertFalse(statusList.contains(mockService1.getServiceStatus()));
assertTrue(statusList.contains(mockService2.getServiceStatus()));
}
}