Author: bdelacretaz
Date: Mon Feb 29 10:10:05 2016
New Revision: 1732845
URL: http://svn.apache.org/viewvc?rev=1732845&view=rev
Log:
SLING-5415 - additional tests for HealthCheckExecutorImpl, contributed by Georg
Henzler, thanks!
Modified:
sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/executor/HealthCheckExecutorImpl.java
sling/trunk/bundles/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/core/impl/executor/HealthCheckExecutorImplTest.java
Modified:
sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/executor/HealthCheckExecutorImpl.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/executor/HealthCheckExecutorImpl.java?rev=1732845&r1=1732844&r2=1732845&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/executor/HealthCheckExecutorImpl.java
(original)
+++
sling/trunk/bundles/extensions/healthcheck/core/src/main/java/org/apache/sling/hc/core/impl/executor/HealthCheckExecutorImpl.java
Mon Feb 29 10:10:05 2016
@@ -103,7 +103,7 @@ public class HealthCheckExecutorImpl imp
private long resultCacheTtlInMs;
- private final HealthCheckResultCache healthCheckResultCache = new
HealthCheckResultCache();
+ private HealthCheckResultCache healthCheckResultCache = new
HealthCheckResultCache();
private final Map<HealthCheckMetadata, HealthCheckFuture>
stillRunningFutures = new HashMap<HealthCheckMetadata, HealthCheckFuture>();
Modified:
sling/trunk/bundles/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/core/impl/executor/HealthCheckExecutorImplTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/core/impl/executor/HealthCheckExecutorImplTest.java?rev=1732845&r1=1732844&r2=1732845&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/core/impl/executor/HealthCheckExecutorImplTest.java
(original)
+++
sling/trunk/bundles/extensions/healthcheck/core/src/test/java/org/apache/sling/hc/core/impl/executor/HealthCheckExecutorImplTest.java
Mon Feb 29 10:10:05 2016
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertTru
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
import java.util.Collection;
import java.util.Date;
@@ -31,37 +32,46 @@ import java.util.Set;
import java.util.TreeSet;
import org.apache.sling.hc.api.Result;
+import org.apache.sling.hc.api.Result.Status;
+import org.apache.sling.hc.api.ResultLog.Entry;
import org.apache.sling.hc.api.execution.HealthCheckExecutionResult;
import org.apache.sling.hc.util.HealthCheckMetadata;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
public class HealthCheckExecutorImplTest {
- private HealthCheckExecutorImpl healthCheckExecutorImpl;
+ @InjectMocks
+ private HealthCheckExecutorImpl healthCheckExecutorImpl = new
HealthCheckExecutorImpl();;
@Mock
private HealthCheckFuture future;
@Mock
private HealthCheckMetadata HealthCheckMetadata;
+
+ @Spy
+ private HealthCheckResultCache healthCheckResultCache = new
HealthCheckResultCache();
@Before
public void setup() {
- MockitoAnnotations.initMocks(this);
+ initMocks(this);
when(future.getHealthCheckMetadata()).thenReturn(HealthCheckMetadata);
when(HealthCheckMetadata.getTitle()).thenReturn("Test Check");
- healthCheckExecutorImpl = new HealthCheckExecutorImpl();
+
// 2 sec normal timeout
healthCheckExecutorImpl.setTimeoutInMs(2000L);
// 10 sec timeout for critical
healthCheckExecutorImpl.setLongRunningFutureThresholdForRedMs(10000L);
+
}
+
@Test
public void testCollectResultsFromFutures() throws Exception {
@@ -85,13 +95,16 @@ public class HealthCheckExecutorImplTest
@Test
public void testCollectResultsFromFuturesTimeout() throws Exception {
+ // add an earlier result with status ok (that will be shown as part of
the log)
+ addResultToCache(Status.OK);
+
List<HealthCheckFuture> futures = new LinkedList<HealthCheckFuture>();
futures.add(future);
Set<HealthCheckExecutionResult> results = new
TreeSet<HealthCheckExecutionResult>();
when(future.isDone()).thenReturn(false);
- when(future.getCreatedTime()).thenReturn(new Date());
-
+ // simulating a future that was created 5sec ago
+ when(future.getCreatedTime()).thenReturn(new Date(new Date().getTime()
- 1000 * 5));
healthCheckExecutorImpl.collectResultsFromFutures(futures, results);
@@ -101,6 +114,9 @@ public class HealthCheckExecutorImplTest
HealthCheckExecutionResult result = results.iterator().next();
assertEquals(Result.Status.WARN,
result.getHealthCheckResult().getStatus());
+
+ // 3 because previous result exists and is part of log
+ assertEquals(3, getLogEntryCount(result));
}
@@ -113,7 +129,7 @@ public class HealthCheckExecutorImplTest
when(future.isDone()).thenReturn(false);
- // use an old date now (simulating a future that has run for a min)
+ // use an old date now (simulating a future that has run for an hour)
when(future.getCreatedTime()).thenReturn(new Date(new Date().getTime()
- 1000 * 60 * 60));
healthCheckExecutorImpl.collectResultsFromFutures(futures, results);
@@ -123,7 +139,47 @@ public class HealthCheckExecutorImplTest
verify(future, times(0)).get();
assertEquals(Result.Status.CRITICAL,
result.getHealthCheckResult().getStatus());
-
+ assertEquals(1, getLogEntryCount(result));
}
+ @Test
+ public void testCollectResultsFromFuturesWarnTimeoutWithPreviousCritical()
throws Exception {
+
+ // an earlier result with critical
+ addResultToCache(Status.CRITICAL);
+
+ List<HealthCheckFuture> futures = new LinkedList<HealthCheckFuture>();
+ futures.add(future);
+ Set<HealthCheckExecutionResult> results = new
TreeSet<HealthCheckExecutionResult>();
+
+ when(future.isDone()).thenReturn(false);
+ // simulating a future that was created 5sec ago
+ when(future.getCreatedTime()).thenReturn(new Date(new Date().getTime()
- 1000 * 5));
+
+
+ healthCheckExecutorImpl.collectResultsFromFutures(futures, results);
+ assertEquals(1, results.size());
+ HealthCheckExecutionResult result = results.iterator().next();
+
+ verify(future, times(0)).get();
+
+ // expect CRITICAL because previous result (before timeout) was
CRITICAL (and not only WARN)
+ assertEquals(Result.Status.CRITICAL,
result.getHealthCheckResult().getStatus());
+ assertEquals(3, getLogEntryCount(result));
+ }
+
+
+ private int getLogEntryCount(HealthCheckExecutionResult result) {
+ int logEntryCount = 0;
+ for (Entry entry : result.getHealthCheckResult()) {
+ logEntryCount++;
+ }
+ return logEntryCount;
+ }
+
+
+ private void addResultToCache(Status status) {
+ healthCheckResultCache.updateWith(new
ExecutionResult(HealthCheckMetadata, new Result(status, "Status "+status),
1000));
+ }
+
}