Author: ghenzler
Date: Wed Jan 9 20:24:51 2019
New Revision: 1850901
URL: http://svn.apache.org/viewvc?rev=1850901&view=rev
Log:
FELIX-5952 General improvements/fixes
- set header "X-Health" not only for format html
- executor: extended interface ExtendedHealthCheckExecutor and added internal
helper CombinedExecutionResult (also needed for FELIX-6017 and FELIX-6018)
- improved tests using Mockito for HealthCheckMBeanTest
Added:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/CombinedExecutionResult.java
(with props)
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/JmxAdjustableStatusHealthCheck.java
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/ExtendedHealthCheckExecutor.java
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckExecutorImpl.java
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckResultCache.java
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/servlet/HealthCheckExecutorServlet.java
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/ExtendedHealthCheckExecutorIT.java
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/HealthCheckFilterIT.java
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/U.java
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/jmx/impl/HealthCheckMBeanTest.java
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/JmxAdjustableStatusHealthCheck.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/JmxAdjustableStatusHealthCheck.java?rev=1850901&r1=1850900&r2=1850901&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/JmxAdjustableStatusHealthCheck.java
(original)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/JmxAdjustableStatusHealthCheck.java
Wed Jan 9 20:24:51 2019
@@ -36,11 +36,10 @@ import javax.management.MBeanParameterIn
import javax.management.ReflectionException;
import org.apache.commons.lang3.StringUtils;
-import org.apache.felix.hc.api.FormattingResultLog;
import org.apache.felix.hc.api.HealthCheck;
import org.apache.felix.hc.api.Result;
import org.apache.felix.hc.api.Result.Status;
-import org.apache.felix.hc.api.ResultLog.Entry;
+import org.apache.felix.hc.core.impl.util.AdhocStatusHealthCheck;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.ComponentContext;
@@ -94,13 +93,12 @@ public class JmxAdjustableStatusHealthCh
/* synchronized as potentially multiple users can run JMX operations */
private synchronized void registerDynamicHealthCheck(Result.Status status,
String[] tags) {
unregisterDynamicHealthCheck();
- HealthCheck healthCheck = new AdhocStatusOnlyHealthCheck(status);
+ HealthCheck healthCheck = new AdhocStatusHealthCheck(status, "Set
dynamically via JMX bean " + JmxAdjustableStatusHealthCheck.OBJECT_NAME);
Dictionary<String, Object> props = new Hashtable<String, Object>();
props.put(HealthCheck.NAME, "JMX Adhoc Result");
props.put(HealthCheck.TAGS, tags);
healthCheckRegistration =
bundleContext.registerService(HealthCheck.class.getName(), healthCheck, props);
-
}
/* synchronized as potentially multiple users can run JMX operations */
@@ -112,24 +110,6 @@ public class JmxAdjustableStatusHealthCh
}
}
- class AdhocStatusOnlyHealthCheck implements HealthCheck {
-
- private final Result.Status status;
-
- AdhocStatusOnlyHealthCheck(Result.Status status) {
- this.status = status;
- }
-
- @Override
- public Result execute() {
- FormattingResultLog resultLog = new FormattingResultLog();
- resultLog.add(
- new Entry(status, "Set dynamically via JMX bean " +
OBJECT_NAME));
- return new Result(resultLog);
- }
-
- }
-
private class AdjustableHealthCheckStatusMBean implements DynamicMBean {
private static final String OP_RESET = "reset";
Added:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/CombinedExecutionResult.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/CombinedExecutionResult.java?rev=1850901&view=auto
==============================================================================
---
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/CombinedExecutionResult.java
(added)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/CombinedExecutionResult.java
Wed Jan 9 20:24:51 2019
@@ -0,0 +1,86 @@
+/*
+ * 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 SF 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.felix.hc.core.impl.executor;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.felix.hc.api.Result;
+import org.apache.felix.hc.api.Result.Status;
+import org.apache.felix.hc.api.execution.HealthCheckExecutionResult;
+import org.apache.felix.hc.api.execution.HealthCheckMetadata;
+
+/** Used to group execution results. */
+public class CombinedExecutionResult implements HealthCheckExecutionResult {
+
+ final List<HealthCheckExecutionResult> executionResults;
+ final Result overallResult;
+
+ public CombinedExecutionResult(List<HealthCheckExecutionResult>
executionResults) {
+ this.executionResults = executionResults;
+ Result.Status mostSevereStatus = Result.Status.OK;
+ for (HealthCheckExecutionResult executionResult : executionResults) {
+ Status status = executionResult.getHealthCheckResult().getStatus();
+ if (status.ordinal() > mostSevereStatus.ordinal()) {
+ mostSevereStatus = status;
+ }
+ }
+ overallResult = new Result(mostSevereStatus, "Overall status " +
mostSevereStatus);
+ }
+
+ @Override
+ public Result getHealthCheckResult() {
+ return overallResult;
+ }
+
+ @Override
+ public long getElapsedTimeInMs() {
+ long maxElapsed = 0;
+ for(HealthCheckExecutionResult result: executionResults) {
+ maxElapsed = Math.max(maxElapsed, result.getElapsedTimeInMs());
+ }
+ return maxElapsed;
+ }
+
+ @Override
+ public Date getFinishedAt() {
+ Date latestFinishedAt = null;
+ for(HealthCheckExecutionResult result: executionResults) {
+ if(latestFinishedAt == null ||
latestFinishedAt.before(result.getFinishedAt())) {
+ latestFinishedAt = result.getFinishedAt();
+ }
+ }
+ return latestFinishedAt;
+ }
+
+ @Override
+ public boolean hasTimedOut() {
+ for(HealthCheckExecutionResult result: executionResults) {
+ if(result.hasTimedOut()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public HealthCheckMetadata getHealthCheckMetadata() {
+ throw new UnsupportedOperationException();
+ }
+
+}
\ No newline at end of file
Propchange:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/CombinedExecutionResult.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/ExtendedHealthCheckExecutor.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/ExtendedHealthCheckExecutor.java?rev=1850901&r1=1850900&r2=1850901&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/ExtendedHealthCheckExecutor.java
(original)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/ExtendedHealthCheckExecutor.java
Wed Jan 9 20:24:51 2019
@@ -17,13 +17,25 @@
*/
package org.apache.felix.hc.core.impl.executor;
+import java.util.List;
+
import org.apache.felix.hc.api.HealthCheck;
+import org.apache.felix.hc.api.execution.HealthCheckExecutionOptions;
import org.apache.felix.hc.api.execution.HealthCheckExecutionResult;
import org.apache.felix.hc.api.execution.HealthCheckExecutor;
+import org.apache.felix.hc.api.execution.HealthCheckSelector;
import org.osgi.framework.ServiceReference;
-/** Internal service used by the JMX stuff */
+/** Internal service used by the JMX and ServiceUnavailableFilter */
public interface ExtendedHealthCheckExecutor extends HealthCheckExecutor {
+ /** execute single health check using cache, used by JMX */
HealthCheckExecutionResult execute(ServiceReference<HealthCheck> ref);
+
+ /** internal interface to retrieve service references */
+ ServiceReference<HealthCheck>[]
selectHealthCheckReferences(HealthCheckSelector selector,
HealthCheckExecutionOptions options);
+
+ /** internal interface to execute checks for service references */
+ List<HealthCheckExecutionResult> execute(final
ServiceReference<HealthCheck>[] healthCheckReferences,
HealthCheckExecutionOptions options);
+
}
\ No newline at end of file
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckExecutorImpl.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckExecutorImpl.java?rev=1850901&r1=1850900&r2=1850901&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckExecutorImpl.java
(original)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckExecutorImpl.java
Wed Jan 9 20:24:51 2019
@@ -164,16 +164,17 @@ public class HealthCheckExecutorImpl imp
selector.withTags(defaultTags);
}
- final ServiceReference<HealthCheck>[] healthCheckReferences =
selectHealthCheckReferences(selector, options.isCombineTagsWithOr());
+ final ServiceReference<HealthCheck>[] healthCheckReferences =
selectHealthCheckReferences(selector, options);
List<HealthCheckExecutionResult> results =
this.execute(healthCheckReferences, options);
return results;
}
- // not part of interface but called by HealthCheckFilterIT
- private ServiceReference<HealthCheck>[]
selectHealthCheckReferences(HealthCheckSelector selector, boolean
isCombineTagsWithOr) {
+ /** @see
org.apache.felix.hc.core.impl.executor.ExtendedHealthCheckExecutor#selectHealthCheckReferences(HealthCheckSelector,
HealthCheckExecutionOptions) */
+ @Override
+ public ServiceReference<HealthCheck>[]
selectHealthCheckReferences(HealthCheckSelector selector,
HealthCheckExecutionOptions options) {
final HealthCheckFilter filter = new
HealthCheckFilter(this.bundleContext);
- final ServiceReference<HealthCheck>[] healthCheckReferences =
filter.getHealthCheckServiceReferences(selector, isCombineTagsWithOr);
+ final ServiceReference<HealthCheck>[] healthCheckReferences =
filter.getHealthCheckServiceReferences(selector, options.isCombineTagsWithOr());
return healthCheckReferences;
}
@@ -184,21 +185,21 @@ public class HealthCheckExecutorImpl imp
return createResultsForDescriptor(metadata);
}
- /** Execute a set of health checks */
- private List<HealthCheckExecutionResult> execute(final
ServiceReference<HealthCheck>[] healthCheckReferences,
+ /** @see
org.apache.felix.hc.core.impl.executor.ExtendedHealthCheckExecutor#execute(ServiceReference[],
HealthCheckExecutionOptions) */
+ @Override
+ public List<HealthCheckExecutionResult> execute(final
ServiceReference<HealthCheck>[] healthCheckReferences,
HealthCheckExecutionOptions options) {
- final StopWatch stopWatch = new StopWatch();
- stopWatch.start();
+ final long startTime = System.currentTimeMillis();
final List<HealthCheckExecutionResult> results = new
ArrayList<HealthCheckExecutionResult>();
final List<HealthCheckMetadata> healthCheckDescriptors =
getHealthCheckMetadata(healthCheckReferences);
createResultsForDescriptors(healthCheckDescriptors, results, options);
- stopWatch.stop();
if (logger.isDebugEnabled()) {
- logger.debug("Time consumed for all checks: {}",
msHumanReadable(stopWatch.getTime()));
+ logger.debug("Time consumed for all checks: {}",
msHumanReadable(System.currentTimeMillis() - startTime));
}
+
// sort result
Collections.sort(results, new Comparator<HealthCheckExecutionResult>()
{
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckResultCache.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckResultCache.java?rev=1850901&r1=1850900&r2=1850901&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckResultCache.java
(original)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/HealthCheckResultCache.java
Wed Jan 9 20:24:51 2019
@@ -173,7 +173,7 @@ public class HealthCheckResultCache {
if (!nonOkResultsFromPast.isEmpty()) {
ResultLog resultLog = new ResultLog();
- resultLog.add(new Entry(Result.Status.OK, "*** Current Result
***"));
+ resultLog.add(new Entry(Result.Status.OK, "*** Current Result:
"+origResult.getHealthCheckResult().getStatus()+" ***"));
for (ResultLog.Entry entry :
origResult.getHealthCheckResult()) {
resultLog.add(entry);
}
@@ -181,8 +181,8 @@ public class HealthCheckResultCache {
for (HealthCheckExecutionResult nonOkResultFromPast :
nonOkResultsFromPast) {
Status status =
nonOkResultFromPast.getHealthCheckResult().getStatus();
resultLog.add(
- new Entry(Result.Status.WARN,
- "*** Sticky Result " + status + " from " +
df.format(nonOkResultFromPast.getFinishedAt()) + " ***"));
+ new Entry(Result.Status.OK,
+ "*** Sticky Result: " + status + " from "
+ df.format(nonOkResultFromPast.getFinishedAt()) + " ***"));
for (ResultLog.Entry entry :
nonOkResultFromPast.getHealthCheckResult()) {
resultLog.add(entry);
}
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/servlet/HealthCheckExecutorServlet.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/servlet/HealthCheckExecutorServlet.java?rev=1850901&r1=1850900&r2=1850901&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/servlet/HealthCheckExecutorServlet.java
(original)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/servlet/HealthCheckExecutorServlet.java
Wed Jan 9 20:24:51 2019
@@ -39,6 +39,7 @@ import org.apache.felix.hc.api.execution
import org.apache.felix.hc.api.execution.HealthCheckExecutionResult;
import org.apache.felix.hc.api.execution.HealthCheckExecutor;
import org.apache.felix.hc.api.execution.HealthCheckSelector;
+import org.apache.felix.hc.core.impl.executor.CombinedExecutionResult;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
@@ -280,14 +281,8 @@ public class HealthCheckExecutorServlet
List<HealthCheckExecutionResult> executionResults =
this.healthCheckExecutor.execute(selector, executionOptions);
- Result.Status mostSevereStatus = Result.Status.OK;
- for (HealthCheckExecutionResult executionResult : executionResults) {
- Status status = executionResult.getHealthCheckResult().getStatus();
- if (status.ordinal() > mostSevereStatus.ordinal()) {
- mostSevereStatus = status;
- }
- }
- Result overallResult = new Result(mostSevereStatus, "Overall status "
+ mostSevereStatus);
+ CombinedExecutionResult combinedExecutionResult = new
CombinedExecutionResult(executionResults);
+ Result overallResult = combinedExecutionResult.getHealthCheckResult();
sendNoCacheHeaders(response);
sendCorsHeaders(response);
@@ -295,6 +290,7 @@ public class HealthCheckExecutorServlet
Integer httpStatus = statusMapping.get(overallResult.getStatus());
response.setStatus(httpStatus);
+ response.setHeader(STATUS_HEADER_NAME,
overallResult.getStatus().toString());
if (FORMAT_HTML.equals(format)) {
sendHtmlResponse(overallResult, executionResults, request,
response, includeDebug);
} else if (FORMAT_JSON.equals(format)) {
@@ -363,7 +359,6 @@ public class HealthCheckExecutorServlet
throws IOException {
response.setContentType(CONTENT_TYPE_HTML);
response.setCharacterEncoding("UTF-8");
- response.setHeader(STATUS_HEADER_NAME,
overallResult.getStatus().toString());
response.getWriter().append(this.htmlSerializer.serialize(overallResult,
executionResults, getHtmlHelpText(), includeDebug));
}
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java?rev=1850901&r1=1850900&r2=1850901&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java
(original)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java
Wed Jan 9 20:24:51 2019
@@ -114,10 +114,10 @@ public class HealthCheckFilter {
}
if (name.startsWith(HealthCheckFilter.OMIT_PREFIX)) {
// ommit tags always have to be added as and-clause
-
filterBuilder.append("(!(").append(HealthCheck.NAME).append("=").append(name.substring(prefixLen)).append("))");
+
filterBuilder.append("(!(").append(HealthCheck.NAME).append("=").append(escapeOsgiFilterLiteral(name.substring(prefixLen))).append("))");
} else {
// names are always ORd
-
filterBuilderForOrOperator.append("(").append(HealthCheck.NAME).append("=").append(name).append(")");
+
filterBuilderForOrOperator.append("(").append(HealthCheck.NAME).append("=").append(escapeOsgiFilterLiteral(name)).append(")");
addedNameToOrBuilder = true;
}
}
@@ -138,4 +138,8 @@ public class HealthCheckFilter {
filterBuilder.append(")");
return filterBuilder;
}
+
+ private Object escapeOsgiFilterLiteral(String name) {
+ return name.replace("*", "\\*").replace("(", "\\(").replace(")",
"\\)");
+ }
}
Modified:
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/ExtendedHealthCheckExecutorIT.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/ExtendedHealthCheckExecutorIT.java?rev=1850901&r1=1850900&r2=1850901&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/ExtendedHealthCheckExecutorIT.java
(original)
+++
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/ExtendedHealthCheckExecutorIT.java
Wed Jan 9 20:24:51 2019
@@ -98,7 +98,7 @@ public class ExtendedHealthCheckExecutor
@Test
public void testSingleExecution() throws Exception {
- ServiceReference<HealthCheck>[] refs =
U.callSelectHealthCheckReferences(executor, HealthCheckSelector.tags(testTag),
false);
+ ServiceReference<HealthCheck>[] refs =
U.callSelectHealthCheckReferences(executor, HealthCheckSelector.tags(testTag));
assertNotNull(refs);
assertEquals(1, refs.length);
Modified:
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/HealthCheckFilterIT.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/HealthCheckFilterIT.java?rev=1850901&r1=1850900&r2=1850901&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/HealthCheckFilterIT.java
(original)
+++
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/HealthCheckFilterIT.java
Wed Jan 9 20:24:51 2019
@@ -163,8 +163,8 @@ public class HealthCheckFilterIT {
}
- private ServiceReference<HealthCheck>[]
callSelectHealthCheckReferences(HealthCheckSelector selector, boolean
isCombineTagsWithOr) {
- return U.callSelectHealthCheckReferences(executor, selector,
isCombineTagsWithOr);
+ private ServiceReference<HealthCheck>[]
callSelectHealthCheckReferences(HealthCheckSelector selector) {
+ return U.callSelectHealthCheckReferences(executor, selector);
}
@@ -192,91 +192,91 @@ public class HealthCheckFilterIT {
@Test
public void testAllServices() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(null, false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(null);
assertServices(s, true, true, true, true, true);
}
@Test
public void testEmptyTags() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("", "", ""), false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("", "", ""));
assertServices(s, true, true, true, true, true);
}
@Test
public void testFooTag() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo"), false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo"));
assertServices(s, true, false, true, false, false);
}
@Test
public void testBarTag() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("bar"), false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("bar"));
assertServices(s, false, true, true, false, false);
}
@Test
public void testFooAndBar() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo", "bar"), false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo", "bar"));
assertServices(s, false, false, true, false, false);
}
@Test
public void testFooMinusBar() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo", "-bar"), false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo", "-bar"));
assertServices(s, true, false, false, false, false);
}
@Test
public void testWhitespace() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("\t \n\r foo \t", "",
" \t-bar\n", ""), false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("\t \n\r foo \t", "",
" \t-bar\n", ""));
assertServices(s, true, false, false, false, false);
}
@Test
public void testOther() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("other"), false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("other"));
assertServices(s, false, false, false, true, false);
}
@Test
public void testMinusOther() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("-other"), false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("-other"));
assertServices(s, true, true, true, false, true);
}
@Test
public void testMinusOtherFoo() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("-other", "-foo"),
false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("-other", "-foo"));
assertServices(s, false, true, false, false, true);
}
@Test
public void testNoResults() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("NOT A TAG"), false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("NOT A TAG"));
assertEquals("Expecting no services", 0, s.length);
}
@Test
public void testSingleName() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.names("test1"), false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.names("test1"));
assertServices(s, true, false, false, false, false);
}
@Test
public void testMultipleNames() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.names("test1", "test3"),
false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.names("test1", "test3"));
assertServices(s, true, false, true, false, false);
}
@Test
public void testExcludeName() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo").withNames("-test1"),
false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo").withNames("-test1"));
assertServices(s, false, false, true, false, false);
}
@Test
public void testNameOrTag() {
- ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo").withNames("test4"),
false);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo").withNames("test4"));
assertServices(s, true, false, true, true, false);
}
Modified:
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/U.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/U.java?rev=1850901&r1=1850900&r2=1850901&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/U.java
(original)
+++
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/it/U.java
Wed Jan 9 20:24:51 2019
@@ -113,12 +113,11 @@ public class U {
}
- static ServiceReference<HealthCheck>[]
callSelectHealthCheckReferences(HealthCheckExecutor executor,
HealthCheckSelector selector, boolean isCombineTagsWithOr) {
+ static ServiceReference<HealthCheck>[]
callSelectHealthCheckReferences(HealthCheckExecutor executor,
HealthCheckSelector selector) {
String methodName = "selectHealthCheckReferences";
try {
- Method method = executor.getClass().getDeclaredMethod(methodName,
HealthCheckSelector.class, boolean.class);
- method.setAccessible(true);
- Object result = method.invoke(executor, selector,
isCombineTagsWithOr);
+ Method method = executor.getClass().getDeclaredMethod(methodName,
HealthCheckSelector.class, HealthCheckExecutionOptions.class);
+ Object result = method.invoke(executor, selector, new
HealthCheckExecutionOptions().setCombineTagsWithOr(false));
return (ServiceReference<HealthCheck>[]) result;
} catch(Exception e) {
throw new IllegalStateException("Could not call method
"+methodName+ " of class "+executor.getClass(), e);
Modified:
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/jmx/impl/HealthCheckMBeanTest.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/jmx/impl/HealthCheckMBeanTest.java?rev=1850901&r1=1850900&r2=1850901&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/jmx/impl/HealthCheckMBeanTest.java
(original)
+++
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/jmx/impl/HealthCheckMBeanTest.java
Wed Jan 9 20:24:51 2019
@@ -21,23 +21,23 @@ import static org.hamcrest.CoreMatchers.
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
import java.lang.management.ManagementFactory;
-import java.util.Date;
-import java.util.List;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.apache.felix.hc.api.HealthCheck;
import org.apache.felix.hc.api.Result;
-import org.apache.felix.hc.api.execution.HealthCheckExecutionOptions;
import org.apache.felix.hc.api.execution.HealthCheckExecutionResult;
-import org.apache.felix.hc.api.execution.HealthCheckMetadata;
-import org.apache.felix.hc.api.execution.HealthCheckSelector;
import org.apache.felix.hc.core.impl.executor.ExtendedHealthCheckExecutor;
+import org.junit.Before;
import org.junit.Test;
-import org.osgi.framework.Bundle;
+import org.mockito.Mock;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
import org.osgi.framework.ServiceReference;
public class HealthCheckMBeanTest {
@@ -45,105 +45,49 @@ public class HealthCheckMBeanTest {
private boolean resultOk;
public static final String OBJECT_NAME =
"org.apache.sling.testing:type=HealthCheckMBeanTest";
- private HealthCheck testHealthCheck = new HealthCheck() {
+ @Mock
+ private HealthCheck testHealthCheck;
- @Override
- public Result execute() {
- if (resultOk) {
- return new Result(Result.Status.OK, "Nothing to report, result
ok");
- } else {
- return new Result(Result.Status.WARN, "Result is not ok!");
- }
- }
- };
-
- private Object getJmxValue(String mbeanName, String attributeName) throws
Exception {
- final MBeanServer jmxServer =
ManagementFactory.getPlatformMBeanServer();
- final ObjectName objectName = new ObjectName(mbeanName);
- if (jmxServer.queryNames(objectName, null).size() == 0) {
- fail("MBean not found: " + objectName);
- }
- final Object value = jmxServer.getAttribute(objectName, attributeName);
- return value;
- }
-
- @Test
- public void testBean() throws Exception {
- final ServiceReference ref = new ServiceReference() {
-
- @Override
- public boolean isAssignableTo(Bundle bundle, String className) {
- return false;
- }
-
- @Override
- public Bundle[] getUsingBundles() {
- return null;
- }
-
- @Override
- public String[] getPropertyKeys() {
- return null;
- }
-
- @Override
- public Object getProperty(String key) {
- return null;
- }
+ @Mock
+ private ServiceReference<HealthCheck> ref;
- @Override
- public Bundle getBundle() {
- return null;
- }
+ @Mock
+ private ExtendedHealthCheckExecutor extendedHealthCheckExecutor;
- @Override
- public int compareTo(Object reference) {
- return 0;
- }
- };
- final HealthCheckMBean mbean = new HealthCheckMBean(ref, new
ExtendedHealthCheckExecutor() {
-
- @Override
- public HealthCheckExecutionResult execute(ServiceReference ref) {
- return new HealthCheckExecutionResult() {
-
- @Override
- public Result getHealthCheckResult() {
- return testHealthCheck.execute();
- }
-
- @Override
- public HealthCheckMetadata getHealthCheckMetadata() {
- return null;
- }
-
- @Override
- public Date getFinishedAt() {
- return null;
- }
-
- @Override
- public long getElapsedTimeInMs() {
- return 0;
- }
-
- @Override
- public boolean hasTimedOut() {
- return false;
- }
- };
- }
-
- @Override
- public List<HealthCheckExecutionResult>
execute(HealthCheckSelector selector) {
- return null;
+ @Mock
+ private HealthCheckExecutionResult result;
+
+
+ @Before
+ public void setup() {
+ initMocks(this);
+
+ when(testHealthCheck.execute()).then(new Answer<Result>() {
+
+ @Override
+ public Result answer(InvocationOnMock invocation) throws Throwable
{
+ if (resultOk) {
+ return new Result(Result.Status.OK, "Nothing to report,
result ok");
+ } else {
+ return new Result(Result.Status.WARN, "Result is not ok!");
+ }
}
+ });
+
+ when(extendedHealthCheckExecutor.execute(ref)).thenReturn(result);
+ when(result.getHealthCheckResult()).then(new Answer<Result>() {
@Override
- public List<HealthCheckExecutionResult>
execute(HealthCheckSelector selector, HealthCheckExecutionOptions options) {
- return null;
+ public Result answer(InvocationOnMock invocation) throws Throwable
{
+ return testHealthCheck.execute();
}
});
+ }
+
+ @Test
+ public void testBean() throws Exception {
+
+ final HealthCheckMBean mbean = new HealthCheckMBean(ref,
extendedHealthCheckExecutor);
final ObjectName name = new ObjectName(OBJECT_NAME);
jmxServer.registerMBean(mbean, name);
try {
@@ -161,5 +105,17 @@ public class HealthCheckMBeanTest {
jmxServer.unregisterMBean(name);
}
}
+
+
+ private Object getJmxValue(String mbeanName, String attributeName) throws
Exception {
+ final MBeanServer jmxServer =
ManagementFactory.getPlatformMBeanServer();
+ final ObjectName objectName = new ObjectName(mbeanName);
+ if (jmxServer.queryNames(objectName, null).size() == 0) {
+ fail("MBean not found: " + objectName);
+ }
+ final Object value = jmxServer.getAttribute(objectName, attributeName);
+ return value;
+ }
+
}
\ No newline at end of file