Author: ghenzler
Date: Tue Jan 8 13:10:23 2019
New Revision: 1850743
URL: http://svn.apache.org/viewvc?rev=1850743&view=rev
Log:
FELIX-6016 Moving HealthCheckFilter to bundle org.apache.felix.healthcheck.core
Added:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java
- copied, changed from r1850448,
felix/trunk/healthcheck/api/src/main/java/org/apache/felix/hc/util/HealthCheckFilter.java
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/impl/util/
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/impl/util/HealthCheckFilterTest.java
- copied, changed from r1850448,
felix/trunk/healthcheck/api/src/test/java/org/apache/felix/hc/util/HealthCheckFilterTest.java
Removed:
felix/trunk/healthcheck/api/src/main/java/org/apache/felix/hc/util/HealthCheckFilter.java
felix/trunk/healthcheck/api/src/test/java/org/apache/felix/hc/util/HealthCheckFilterTest.java
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/CompositeHealthCheck.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/async/AsyncHealthCheckExecutor.java
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckIntervalJob.java
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckJob.java
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckQuartzCronJob.java
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/impl/CompositeHealthCheckTest.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
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/CompositeHealthCheck.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/CompositeHealthCheck.java?rev=1850743&r1=1850742&r2=1850743&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/CompositeHealthCheck.java
(original)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/CompositeHealthCheck.java
Tue Jan 8 13:10:23 2019
@@ -29,8 +29,8 @@ 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.util.HealthCheckFilter;
import org.apache.felix.hc.util.FormattingResultLog;
-import org.apache.felix.hc.util.HealthCheckFilter;
import org.apache.felix.hc.util.HealthCheckMetadata;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
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=1850743&r1=1850742&r2=1850743&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
Tue Jan 8 13:10:23 2019
@@ -39,7 +39,6 @@ import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.StopWatch;
import org.apache.felix.hc.api.HealthCheck;
import org.apache.felix.hc.api.Result;
@@ -49,8 +48,8 @@ import org.apache.felix.hc.api.execution
import org.apache.felix.hc.api.execution.HealthCheckExecutor;
import org.apache.felix.hc.api.execution.HealthCheckSelector;
import org.apache.felix.hc.core.impl.executor.async.AsyncHealthCheckExecutor;
+import org.apache.felix.hc.core.impl.util.HealthCheckFilter;
import org.apache.felix.hc.util.FormattingResultLog;
-import org.apache.felix.hc.util.HealthCheckFilter;
import org.apache.felix.hc.util.HealthCheckMetadata;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
@@ -88,7 +87,6 @@ public class HealthCheckExecutorImpl imp
private final Map<HealthCheckMetadata, HealthCheckFuture>
stillRunningFutures = new HashMap<HealthCheckMetadata, HealthCheckFuture>();
- // optional dependency on quartz - if not present checks are just executed
synchronously
@Reference
private AsyncHealthCheckExecutor asyncHealthCheckExecutor;
@@ -165,14 +163,18 @@ public class HealthCheckExecutorImpl imp
logger.debug("Using default tags");
selector.withTags(defaultTags);
}
- final HealthCheckFilter filter = new
HealthCheckFilter(this.bundleContext);
- try {
- final ServiceReference<HealthCheck>[] healthCheckReferences =
filter.getHealthCheckServiceReferences(selector, options.isCombineTagsWithOr());
+
+ final ServiceReference<HealthCheck>[] healthCheckReferences =
selectHealthCheckReferences(selector, options.isCombineTagsWithOr());
+ List<HealthCheckExecutionResult> results =
this.execute(healthCheckReferences, options);
+ return results;
+
+ }
- return this.execute(healthCheckReferences, options);
- } finally {
- filter.dispose();
- }
+ // not part of interface but called by HealthCheckFilterIT
+ private ServiceReference<HealthCheck>[]
selectHealthCheckReferences(HealthCheckSelector selector, boolean
isCombineTagsWithOr) {
+ final HealthCheckFilter filter = new
HealthCheckFilter(this.bundleContext);
+ final ServiceReference<HealthCheck>[] healthCheckReferences =
filter.getHealthCheckServiceReferences(selector, isCombineTagsWithOr);
+ return healthCheckReferences;
}
/** @see
org.apache.felix.hc.core.impl.executor.ExtendedHealthCheckExecutor#execute(org.osgi.framework.ServiceReference)
*/
@@ -219,14 +221,6 @@ public class HealthCheckExecutorImpl imp
if (!options.isForceInstantExecution()) {
if (asyncHealthCheckExecutor != null) {
asyncHealthCheckExecutor.collectAsyncResults(healthCheckDescriptors, results,
healthCheckResultCache);
- } else {
- for (HealthCheckMetadata hcDescriptior :
healthCheckDescriptors) {
- if
(StringUtils.isNotBlank(hcDescriptior.getAsyncCronExpression())) {
- logger.warn(
- "Health check '{}' is configured for
asynchronous execution, but async executor is not available (quartz bundle
missing)",
- hcDescriptior.getName());
- }
- }
}
}
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckExecutor.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckExecutor.java?rev=1850743&r1=1850742&r2=1850743&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckExecutor.java
(original)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckExecutor.java
Tue Jan 8 13:10:23 2019
@@ -35,7 +35,7 @@ import org.apache.felix.hc.api.execution
import org.apache.felix.hc.core.impl.executor.ExecutionResult;
import org.apache.felix.hc.core.impl.executor.HealthCheckExecutorThreadPool;
import org.apache.felix.hc.core.impl.executor.HealthCheckResultCache;
-import org.apache.felix.hc.util.HealthCheckFilter;
+import org.apache.felix.hc.core.impl.util.HealthCheckFilter;
import org.apache.felix.hc.util.HealthCheckMetadata;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceEvent;
@@ -49,10 +49,7 @@ import org.osgi.service.component.annota
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/** Runs health checks that are configured with a cron expression for
asynchronous execution. Used by HealthCheckExecutor.
- *
- * This implementation uses quartz to support the cron syntax (which is not
supported by executors from standard java java.util.concurrent
- * package. */
+/** Runs health checks asynchronously, either via cron or via interval. */
@Component(service = AsyncHealthCheckExecutor.class, immediate = true)
public class AsyncHealthCheckExecutor implements ServiceListener {
@@ -76,7 +73,7 @@ public class AsyncHealthCheckExecutor im
int count = 0;
HealthCheckFilter healthCheckFilter = new
HealthCheckFilter(bundleContext);
- final ServiceReference[] healthCheckReferences =
healthCheckFilter.getHealthCheckServiceReferences(HealthCheckSelector.empty());
+ final ServiceReference[] healthCheckReferences =
healthCheckFilter.getHealthCheckServiceReferences(HealthCheckSelector.empty(),
false);
for (ServiceReference serviceReference : healthCheckReferences) {
HealthCheckMetadata healthCheckMetadata = new
HealthCheckMetadata(serviceReference);
if (isAsync(healthCheckMetadata)) {
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckIntervalJob.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckIntervalJob.java?rev=1850743&r1=1850742&r2=1850743&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckIntervalJob.java
(original)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckIntervalJob.java
Tue Jan 8 13:10:23 2019
@@ -25,6 +25,7 @@ import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+/** Runs health checks that are configured with an interval
(ScheduledThreadPoolExecutor.scheduleAtFixedRate()) for asynchronous execution.
*/
public class AsyncHealthCheckIntervalJob extends AsyncHealthCheckJob
implements Runnable {
private static final Logger LOG =
LoggerFactory.getLogger(AsyncHealthCheckExecutor.class);
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckJob.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckJob.java?rev=1850743&r1=1850742&r2=1850743&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckJob.java
(original)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckJob.java
Tue Jan 8 13:10:23 2019
@@ -25,6 +25,7 @@ import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+/** Abstract class for async execution variants cron/interval. */
public abstract class AsyncHealthCheckJob implements Runnable {
private static final Logger LOG =
LoggerFactory.getLogger(AsyncHealthCheckJob.class);
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckQuartzCronJob.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckQuartzCronJob.java?rev=1850743&r1=1850742&r2=1850743&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckQuartzCronJob.java
(original)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/executor/async/AsyncHealthCheckQuartzCronJob.java
Tue Jan 8 13:10:23 2019
@@ -35,6 +35,10 @@ import org.quartz.SchedulerException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+/** Runs health checks that are configured with a cron expression for
asynchronous execution.
+ *
+ * This implementation uses quartz to support the cron syntax (which is not
supported by executors from standard java java.util.concurrent
+ * package) */
public class AsyncHealthCheckQuartzCronJob extends AsyncHealthCheckJob
implements Runnable {
private static final Logger LOG =
LoggerFactory.getLogger(AsyncHealthCheckExecutor.class);
Copied:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java
(from r1850448,
felix/trunk/healthcheck/api/src/main/java/org/apache/felix/hc/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?p2=felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java&p1=felix/trunk/healthcheck/api/src/main/java/org/apache/felix/hc/util/HealthCheckFilter.java&r1=1850448&r2=1850743&rev=1850743&view=diff
==============================================================================
---
felix/trunk/healthcheck/api/src/main/java/org/apache/felix/hc/util/HealthCheckFilter.java
(original)
+++
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java
Tue Jan 8 13:10:23 2019
@@ -15,17 +15,10 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
-package org.apache.felix.hc.util;
+package org.apache.felix.hc.core.impl.util;
import static org.apache.felix.hc.api.execution.HealthCheckSelector.empty;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
import org.apache.felix.hc.api.HealthCheck;
import org.apache.felix.hc.api.execution.HealthCheckSelector;
import org.osgi.framework.BundleContext;
@@ -45,34 +38,11 @@ public class HealthCheckFilter {
public static final String OMIT_PREFIX = "-";
- private final Set<ServiceReference> usedReferences = new
HashSet<ServiceReference>();
-
/** Create a new filter object */
public HealthCheckFilter(final BundleContext bc) {
bundleContext = bc;
}
- public List<HealthCheck> getHealthChecks(final HealthCheckSelector
selector) {
- final ServiceReference[] refs =
this.getHealthCheckServiceReferences(selector);
- final List<HealthCheck> result = new ArrayList<HealthCheck>();
-
- if (refs != null) {
- final List<ServiceReference> sortedRefs = Arrays.asList(refs);
- Collections.sort(sortedRefs);
-
- for (final ServiceReference ref : sortedRefs) {
- final HealthCheck hc = (HealthCheck)
bundleContext.getService(ref);
- log.debug("Selected HealthCheck service {}", hc);
- if (hc != null) {
- this.usedReferences.add(ref);
- result.add(hc);
- }
- }
- }
-
- return result;
- }
-
public ServiceReference<HealthCheck>[]
getHealthCheckServiceReferences(final HealthCheckSelector selector) {
return getHealthCheckServiceReferences(selector, false);
}
@@ -101,13 +71,6 @@ public class HealthCheckFilter {
}
}
- /** Dispose all used service references */
- public void dispose() {
- for (final ServiceReference ref : this.usedReferences) {
- this.bundleContext.ungetService(ref);
- }
- this.usedReferences.clear();
- }
CharSequence getServiceFilter(HealthCheckSelector selector, boolean
combineTagsWithOr) {
// Build service filter
Modified:
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/impl/CompositeHealthCheckTest.java
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/impl/CompositeHealthCheckTest.java?rev=1850743&r1=1850742&r2=1850743&view=diff
==============================================================================
---
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/impl/CompositeHealthCheckTest.java
(original)
+++
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/impl/CompositeHealthCheckTest.java
Tue Jan 8 13:10:23 2019
@@ -38,7 +38,7 @@ import org.apache.felix.hc.api.execution
import org.apache.felix.hc.api.execution.HealthCheckExecutor;
import org.apache.felix.hc.api.execution.HealthCheckSelector;
import org.apache.felix.hc.core.impl.executor.ExecutionResult;
-import org.apache.felix.hc.util.HealthCheckFilter;
+import org.apache.felix.hc.core.impl.util.HealthCheckFilter;
import org.apache.felix.hc.util.HealthCheckMetadata;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
Copied:
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/impl/util/HealthCheckFilterTest.java
(from r1850448,
felix/trunk/healthcheck/api/src/test/java/org/apache/felix/hc/util/HealthCheckFilterTest.java)
URL:
http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/impl/util/HealthCheckFilterTest.java?p2=felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/impl/util/HealthCheckFilterTest.java&p1=felix/trunk/healthcheck/api/src/test/java/org/apache/felix/hc/util/HealthCheckFilterTest.java&r1=1850448&r2=1850743&rev=1850743&view=diff
==============================================================================
---
felix/trunk/healthcheck/api/src/test/java/org/apache/felix/hc/util/HealthCheckFilterTest.java
(original)
+++
felix/trunk/healthcheck/core/src/test/java/org/apache/felix/hc/core/impl/util/HealthCheckFilterTest.java
Tue Jan 8 13:10:23 2019
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.hc.util;
+package org.apache.felix.hc.core.impl.util;
import static org.apache.felix.hc.api.execution.HealthCheckSelector.empty;
import static org.apache.felix.hc.api.execution.HealthCheckSelector.names;
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertEqu
import org.apache.felix.hc.api.HealthCheck;
import org.apache.felix.hc.api.execution.HealthCheckSelector;
+import org.apache.felix.hc.core.impl.util.HealthCheckFilter;
import org.junit.Test;
public class HealthCheckFilterTest {
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=1850743&r1=1850742&r2=1850743&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
Tue Jan 8 13:10:23 2019
@@ -34,7 +34,6 @@ import org.apache.felix.hc.api.Result;
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.util.HealthCheckFilter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -99,8 +98,7 @@ public class ExtendedHealthCheckExecutor
@Test
public void testSingleExecution() throws Exception {
- final HealthCheckFilter filter = new HealthCheckFilter(bundleContext);
- final ServiceReference[] refs =
filter.getHealthCheckServiceReferences(HealthCheckSelector.tags(testTag));
+ ServiceReference<HealthCheck>[] refs =
U.callSelectHealthCheckReferences(executor, HealthCheckSelector.tags(testTag),
false);
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=1850743&r1=1850742&r2=1850743&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
Tue Jan 8 13:10:23 2019
@@ -17,10 +17,14 @@
*/
package org.apache.felix.hc.core.it;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Dictionary;
@@ -32,8 +36,8 @@ import javax.inject.Inject;
import org.apache.felix.hc.api.HealthCheck;
import org.apache.felix.hc.api.Result;
+import org.apache.felix.hc.api.execution.HealthCheckExecutor;
import org.apache.felix.hc.api.execution.HealthCheckSelector;
-import org.apache.felix.hc.util.HealthCheckFilter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -42,6 +46,7 @@ import org.ops4j.pax.exam.Configuration;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.PaxExam;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -51,7 +56,8 @@ public class HealthCheckFilterIT {
private final Logger log = LoggerFactory.getLogger(getClass());
- private HealthCheckFilter filter;
+ @Inject
+ private HealthCheckExecutor executor;
@Inject
private BundleContext bundleContext;
@@ -91,14 +97,16 @@ public class HealthCheckFilterIT {
class TestHealthCheck implements HealthCheck {
private final int id;
- private final ServiceRegistration reg;
+ private final ServiceRegistration<HealthCheck> reg;
+ private final ServiceReference<HealthCheck> serviceRef;
TestHealthCheck(Dictionary<String, Object> props) {
id = instanceCounter++;
- reg = bundleContext.registerService(HealthCheck.class.getName(),
- this, props);
+ reg = bundleContext.registerService(HealthCheck.class, this,
props);
+ serviceRef = reg.getReference();
log.info("Registered {} with name {} and tags {}",
new Object[] { this, props.get(HealthCheck.NAME),
Arrays.toString((String[]) props.get(HealthCheck.TAGS)) });
+
}
@Override
@@ -136,6 +144,7 @@ public class HealthCheckFilterIT {
return U.config();
}
+
@Before
public void setup() {
testServices.add(builder().withTags("foo").withName("test1").build());
@@ -143,7 +152,7 @@ public class HealthCheckFilterIT {
testServices.add(builder().withTags("foo",
"bar").withName("test3").build());
testServices.add(builder().withTags("other",
"thing").withName("test4").build());
testServices.add(builder().withName("test5").build());
- filter = new HealthCheckFilter(bundleContext);
+
}
@After
@@ -153,117 +162,123 @@ public class HealthCheckFilterIT {
}
}
+
+ private ServiceReference<HealthCheck>[]
callSelectHealthCheckReferences(HealthCheckSelector selector, boolean
isCombineTagsWithOr) {
+ return U.callSelectHealthCheckReferences(executor, selector,
isCombineTagsWithOr);
+ }
+
+
/** @param included true or false, in the same order as testServices */
- private void assertServices(List<HealthCheck> s, boolean... included) {
+ private void assertServices(ServiceReference<HealthCheck>[] serviceRefs,
boolean... included) {
+ List<ServiceReference<HealthCheck>> serviceRefList =
Arrays.asList(serviceRefs);
final Iterator<TestHealthCheck> it = testServices.iterator();
for (boolean inc : included) {
final TestHealthCheck thc = it.next();
if (inc) {
assertTrue("Expecting list of services to include " + thc,
- s.contains(thc));
+ serviceRefList.contains(thc.serviceRef));
} else {
assertFalse("Not expecting list of services to include " + thc,
- s.contains(thc));
+ serviceRefList.contains(thc.serviceRef));
}
}
}
@Test
- public void testSelectorService() {
- assertNotNull("Expecting HealthCheckSelector service to be provided",
- filter);
+ public void testSelectorService() throws ClassNotFoundException,
IOException, URISyntaxException {
+ assertNotNull("Expecting HealthCheckSelector service to be provided",
executor);
}
-
+
+
@Test
public void testAllServices() {
- final List<HealthCheck> s = filter.getHealthChecks(null);
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(null, false);
assertServices(s, true, true, true, true, true);
}
@Test
public void testEmptyTags() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.tags("", "", ""));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("", "", ""), false);
assertServices(s, true, true, true, true, true);
}
@Test
public void testFooTag() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.tags("foo"));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo"), false);
assertServices(s, true, false, true, false, false);
}
@Test
public void testBarTag() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.tags("bar"));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("bar"), false);
assertServices(s, false, true, true, false, false);
}
@Test
public void testFooAndBar() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.tags("foo", "bar"));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo", "bar"), false);
assertServices(s, false, false, true, false, false);
}
@Test
public void testFooMinusBar() {
- final List<HealthCheck> s = filter
- .getHealthChecks(HealthCheckSelector.tags("foo", "-bar"));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo", "-bar"), false);
assertServices(s, true, false, false, false, false);
}
@Test
public void testWhitespace() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.tags(
- "\t \n\r foo \t", "", " \t-bar\n", ""));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("\t \n\r foo \t", "",
" \t-bar\n", ""), false);
assertServices(s, true, false, false, false, false);
}
@Test
public void testOther() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.tags("other"));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("other"), false);
assertServices(s, false, false, false, true, false);
}
@Test
public void testMinusOther() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.tags("-other"));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("-other"), false);
assertServices(s, true, true, true, false, true);
}
@Test
public void testMinusOtherFoo() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.tags("-other",
- "-foo"));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("-other", "-foo"),
false);
assertServices(s, false, true, false, false, true);
}
@Test
public void testNoResults() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.tags("NOT A TAG"));
- assertTrue("Expecting no services", s.isEmpty());
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("NOT A TAG"), false);
+ assertEquals("Expecting no services", 0, s.length);
}
@Test
public void testSingleName() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.names("test1"));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.names("test1"), false);
assertServices(s, true, false, false, false, false);
}
@Test
public void testMultipleNames() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.names("test1", "test3"));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.names("test1", "test3"),
false);
assertServices(s, true, false, true, false, false);
}
@Test
public void testExcludeName() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.tags("foo").withNames("-test1"));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo").withNames("-test1"),
false);
assertServices(s, false, false, true, false, false);
}
@Test
public void testNameOrTag() {
- final List<HealthCheck> s =
filter.getHealthChecks(HealthCheckSelector.tags("foo").withNames("test4"));
+ ServiceReference<HealthCheck>[] s =
callSelectHealthCheckReferences(HealthCheckSelector.tags("foo").withNames("test4"),
false);
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=1850743&r1=1850742&r2=1850743&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
Tue Jan 8 13:10:23 2019
@@ -27,15 +27,18 @@ import static org.ops4j.pax.exam.CoreOpt
import static org.ops4j.pax.exam.CoreOptions.when;
import java.io.File;
+import java.lang.reflect.Method;
import java.util.Arrays;
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.ops4j.pax.exam.CoreOptions;
import org.ops4j.pax.exam.Option;
+import org.osgi.framework.ServiceReference;
/** Test utilities */
public class U {
@@ -43,37 +46,13 @@ public class U {
// the name of the system property providing the bundle file to be
installed and tested
private static final String BUNDLE_JAR_SYS_PROP = "project.bundle.file";
- /** Wait until the specified number of health checks are seen by supplied
executor */
- static void expectHealthChecks(int howMany, HealthCheckExecutor executor,
String... tags) {
- expectHealthChecks(howMany, executor, new
HealthCheckExecutionOptions(), tags);
- }
-
- /** Wait until the specified number of health checks are seen by supplied
executor */
- static void expectHealthChecks(int howMany, HealthCheckExecutor executor,
HealthCheckExecutionOptions options, String... tags) {
- final long timeout = System.currentTimeMillis() + 10000L;
- int count = 0;
- while (System.currentTimeMillis() < timeout) {
- final List<HealthCheckExecutionResult> results =
executor.execute(HealthCheckSelector.tags(tags), options);
- count = results.size();
- if (count == howMany) {
- return;
- }
- try {
- Thread.sleep(100L);
- } catch (InterruptedException iex) {
- throw new RuntimeException("Unexpected InterruptedException");
- }
- }
- fail("Did not get " + howMany + " health checks with tags " +
Arrays.asList(tags) + " after " + timeout + " msec (last count="
- + count + ")");
- }
-
static Option[] config() {
final String localRepo = System.getProperty("maven.repo.local", "");
final boolean felixShell =
"true".equals(System.getProperty("felix.shell", "false"));
final String bundleFileName = System.getProperty(BUNDLE_JAR_SYS_PROP);
final File bundleFile = new File(bundleFileName);
+ System.out.println("Using project bundle file "+bundleFileName);
if (!bundleFile.canRead()) {
throw new IllegalArgumentException("Cannot read from bundle file "
+ bundleFileName + " specified in the "
+ BUNDLE_JAR_SYS_PROP + " system property");
@@ -105,4 +84,46 @@ public class U {
mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.quartz")
.versionAsInProject()));
}
+
+ // -- util methods
+
+ /** Wait until the specified number of health checks are seen by supplied
executor */
+ static void expectHealthChecks(int howMany, HealthCheckExecutor executor,
String... tags) {
+ expectHealthChecks(howMany, executor, new
HealthCheckExecutionOptions(), tags);
+ }
+
+ /** Wait until the specified number of health checks are seen by supplied
executor */
+ static void expectHealthChecks(int howMany, HealthCheckExecutor executor,
HealthCheckExecutionOptions options, String... tags) {
+ final long timeout = System.currentTimeMillis() + 10000L;
+ int count = 0;
+ while (System.currentTimeMillis() < timeout) {
+ final List<HealthCheckExecutionResult> results =
executor.execute(HealthCheckSelector.tags(tags), options);
+ count = results.size();
+ if (count == howMany) {
+ return;
+ }
+ try {
+ Thread.sleep(100L);
+ } catch (InterruptedException iex) {
+ throw new RuntimeException("Unexpected InterruptedException");
+ }
+ }
+ fail("Did not get " + howMany + " health checks with tags " +
Arrays.asList(tags) + " after " + timeout + " msec (last count="
+ + count + ")");
+ }
+
+
+ static ServiceReference<HealthCheck>[]
callSelectHealthCheckReferences(HealthCheckExecutor executor,
HealthCheckSelector selector, boolean isCombineTagsWithOr) {
+ String methodName = "selectHealthCheckReferences";
+ try {
+ Method method = executor.getClass().getDeclaredMethod(methodName,
HealthCheckSelector.class, boolean.class);
+ method.setAccessible(true);
+ Object result = method.invoke(executor, selector,
isCombineTagsWithOr);
+ return (ServiceReference<HealthCheck>[]) result;
+ } catch(Exception e) {
+ throw new IllegalStateException("Could not call method
"+methodName+ " of class "+executor.getClass(), e);
+ }
+ }
+
+
}