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);
+        }
+    }
+    
+
 }


Reply via email to