package org.infinispan.health;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.testng.Assert.assertEquals;
import org.infinispan.cache.impl.CacheImpl;
import org.infinispan.distribution.DistributionManager;
import org.infinispan.health.impl.CacheHealthImpl;
import org.infinispan.lifecycle.ComponentStatus;
import org.infinispan.partitionhandling.AvailabilityMode;
import org.testng.annotations.Test;
@Test(testName = "health.CacheHealthImplTest", groups = "functional")
public class CacheHealthImplTest {
@Test
public void testHealthyStatus() throws Exception {
//given
CacheImpl<Object, Object> cache = spy(new CacheImpl<>("test"));
DistributionManager distributionManagerMock = mock(DistributionManager.class);
doReturn(false).when(distributionManagerMock).isRehashInProgress();
doReturn(distributionManagerMock).when(cache).getDistributionManager();
doReturn(ComponentStatus.RUNNING).when(cache).getStatus();
doReturn(AvailabilityMode.AVAILABLE).when(cache).getAvailability();
CacheHealth cacheHealth = new CacheHealthImpl(cache);
//when
HealthStatus status = cacheHealth.getStatus();
//then
assertEquals(status, HealthStatus.HEALTHY);
}
@Test
public void testUnhealthyStatusWithFailedComponent() throws Exception {
//given
CacheImpl<Object, Object> cache = spy(new CacheImpl<>("test"));
doReturn(ComponentStatus.FAILED).when(cache).getStatus();
CacheHealth cacheHealth = new CacheHealthImpl(cache);
//when
HealthStatus status = cacheHealth.getStatus();
//then
assertEquals(status, HealthStatus.UNHEALTHY);
}
@Test
public void testUnhealthyStatusWithTerminatedComponent() throws Exception {
//given
CacheImpl<Object, Object> cache = spy(new CacheImpl<>("test"));
doReturn(ComponentStatus.TERMINATED).when(cache).getStatus();
CacheHealth cacheHealth = new CacheHealthImpl(cache);
//when
HealthStatus status = cacheHealth.getStatus();
//then
assertEquals(status, HealthStatus.UNHEALTHY);
}
@Test
public void testUnhealthyStatusWithStoppingComponent() throws Exception {
//given
CacheImpl<Object, Object> cache = spy(new CacheImpl<>("test"));
doReturn(ComponentStatus.STOPPING).when(cache).getStatus();
CacheHealth cacheHealth = new CacheHealthImpl(cache);
//when
HealthStatus status = cacheHealth.getStatus();
//then
assertEquals(status, HealthStatus.UNHEALTHY);
}
@Test
public void testUnhealthyStatusWithDegradedPartition() throws Exception {
//given
CacheImpl<Object, Object> cache = spy(new CacheImpl<>("test"));
doReturn(ComponentStatus.RUNNING).when(cache).getStatus();
doReturn(AvailabilityMode.DEGRADED_MODE).when(cache).getAvailability();
CacheHealth cacheHealth = new CacheHealthImpl(cache);
//when
HealthStatus status = cacheHealth.getStatus();
//then
assertEquals(status, HealthStatus.UNHEALTHY);
}
@Test
public void testRebalancingStatusOnRebalance() throws Exception {
//given
CacheImpl<Object, Object> cache = spy(new CacheImpl<>("test"));
DistributionManager distributionManagerMock = mock(DistributionManager.class);
doReturn(true).when(distributionManagerMock).isRehashInProgress();
doReturn(distributionManagerMock).when(cache).getDistributionManager();
doReturn(ComponentStatus.RUNNING).when(cache).getStatus();
doReturn(AvailabilityMode.AVAILABLE).when(cache).getAvailability();
CacheHealth cacheHealth = new CacheHealthImpl(cache);
//when
HealthStatus status = cacheHealth.getStatus();
//then
assertEquals(status, HealthStatus.REBALANCING);
}
@Test
public void testReturningName() throws Exception {
//given
CacheImpl<Object, Object> cache = new CacheImpl<>("test");
//when
String name = cache.getName();
//then
assertEquals(name, "test");
}
}