Author: cschneider
Date: Mon Jun 25 16:30:55 2018
New Revision: 1834342

URL: http://svn.apache.org/viewvc?rev=1834342&view=rev
Log:
FELIX-5872 Fix timing issue in FrameworkStartTest. Other fixes

Modified:
    
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/SystemStatus.java
    
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/FrameworkStartCheck.java
    
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/SystemReadyMonitorImpl.java
    
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ComponentsCheckTest.java
    
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestGreen.java
    
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/SystemReadyMonitorTest.java
    
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/util/BaseTest.java

Modified: 
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/SystemStatus.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/systemready/src/main/java/org/apache/felix/systemready/SystemStatus.java?rev=1834342&r1=1834341&r2=1834342&view=diff
==============================================================================
--- 
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/SystemStatus.java
 (original)
+++ 
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/SystemStatus.java
 Mon Jun 25 16:30:55 2018
@@ -21,11 +21,10 @@ package org.apache.felix.systemready;
 import java.util.Collection;
 
 public class SystemStatus {
-    Status.State state;
-    Collection<CheckStatus> checkStates;
+    private Status.State state;
+    private Collection<CheckStatus> checkStates;
     
     public SystemStatus(Status.State state, Collection<CheckStatus> 
checkStates) {
-        super();
         this.state = state;
         this.checkStates = checkStates;
     }

Modified: 
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/FrameworkStartCheck.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/FrameworkStartCheck.java?rev=1834342&r1=1834341&r2=1834342&view=diff
==============================================================================
--- 
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/FrameworkStartCheck.java
 (original)
+++ 
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/FrameworkStartCheck.java
 Mon Jun 25 16:30:55 2018
@@ -23,21 +23,16 @@ import org.apache.felix.systemready.Syst
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
-import org.osgi.framework.FrameworkEvent;
 import org.osgi.framework.startlevel.FrameworkStartLevel;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.ConfigurationPolicy;
-import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
 import org.osgi.service.metatype.annotations.Designate;
 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.List;
-
 @Component(
         name = FrameworkStartCheck.PID,
         immediate=true,
@@ -92,18 +87,11 @@ public class FrameworkStartCheck impleme
             } catch (NumberFormatException e) {
                 log.info("Ignoring {} as it can't be parsed: {}", 
targetStartLevelKey, e.getMessage());
             }
-        } else {
-            log.info("Ignoring target.start.level.prop.name because it's not 
set.");
         }
 
         log.info("Activated");
     }
 
-    @Deactivate
-    protected void deactivate() throws InterruptedException {
-        this.bundleContext = null;
-    }
-
     @Override
     public String getName() {
         return FRAMEWORK_START_CHECK_NAME;
@@ -115,7 +103,8 @@ public class FrameworkStartCheck impleme
         FrameworkStartLevel fsl = 
systemBundle.adapt(FrameworkStartLevel.class);
         String message = String.format("Start level: %d; Target start level: 
%d; Framework state: %d",
                 fsl.getStartLevel(), targetStartLevel, 
fsl.getBundle().getState());
-        if ((systemBundle.getState() == Bundle.ACTIVE) && (fsl.getStartLevel() 
>= targetStartLevel)) {
+        boolean started = (systemBundle.getState() == Bundle.ACTIVE) && 
(fsl.getStartLevel() >= targetStartLevel);
+        if (started) {
             return new Status(Status.State.GREEN, FRAMEWORK_STARTED + message);
         } else {
             return new Status(Status.State.YELLOW, FRAMEWORK_NOT_STARTED + 
message);

Modified: 
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/SystemReadyMonitorImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/SystemReadyMonitorImpl.java?rev=1834342&r1=1834341&r2=1834342&view=diff
==============================================================================
--- 
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/SystemReadyMonitorImpl.java
 (original)
+++ 
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/SystemReadyMonitorImpl.java
 Mon Jun 25 16:30:55 2018
@@ -18,7 +18,10 @@
  */
 package org.apache.felix.systemready.impl;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
@@ -27,11 +30,10 @@ import java.util.stream.Collectors;
 
 import org.apache.felix.systemready.CheckStatus;
 import org.apache.felix.systemready.Status;
-import org.apache.felix.systemready.SystemReadyCheck;
 import org.apache.felix.systemready.SystemReady;
+import org.apache.felix.systemready.SystemReadyCheck;
 import org.apache.felix.systemready.SystemReadyMonitor;
 import org.apache.felix.systemready.SystemStatus;
-import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.annotations.Activate;
@@ -77,17 +79,17 @@ public class SystemReadyMonitorImpl impl
     
     private AtomicReference<SystemStatus> systemState;
 
-    private static final CheckStatus frameworkStartingStatus = new 
CheckStatus("implicit check",
-            new Status(Status.State.YELLOW, "Framework is starting"));
-
+    public SystemReadyMonitorImpl() {
+        SystemStatus initialStatus = new SystemStatus(Status.State.YELLOW, 
Collections.emptyList());
+        this.systemState = new AtomicReference<>(initialStatus);
+    }
 
     @Activate
     public void activate(BundleContext context, final Config config) {
         this.context = context;
-        this.systemState = new AtomicReference<>(new 
SystemStatus(Status.State.YELLOW, Collections.emptyList()));
         this.executor = Executors.newSingleThreadScheduledExecutor();
         this.executor.scheduleAtFixedRate(this::check, 0, 
config.poll_interval(), TimeUnit.MILLISECONDS);
-        log.info("Activated");
+        log.info("Activated. Running checks every {} ms.", 
config.poll_interval());
     }
 
     @Deactivate
@@ -113,21 +115,20 @@ public class SystemReadyMonitorImpl impl
 
     private void check() {
         Status.State prevState = systemState.get().getState();
-        List<CheckStatus> statuses = (isFrameworkStartingAndCheckMissing()) ? 
Arrays.asList(frameworkStartingStatus) : evaluateAllChecks();
+        List<SystemReadyCheck> currentChecks = new ArrayList<>(checks);
+        List<String> checkNames = currentChecks.stream().map(check -> 
check.getName()).collect(Collectors.toList());
+        log.debug("Running system checks {}", checkNames);
+        List<CheckStatus> statuses = evaluateAllChecks(currentChecks);
         Status.State currState = 
Status.State.worstOf(statuses.stream().map(status -> 
status.getStatus().getState()));
         this.systemState.set(new SystemStatus(currState, statuses));
         if (currState != prevState) {
             manageMarkerService(currState);
         }
+        log.debug("Checks finished");
     }
 
-    private boolean isFrameworkStartingAndCheckMissing() {
-        return (checks.stream().noneMatch(c -> 
c.getClass().equals(FrameworkStartCheck.class)))
-                && (context.getBundle(0).getState() != Bundle.ACTIVE);
-    }
-
-    private List<CheckStatus> evaluateAllChecks() {
-        return checks.stream()
+    private List<CheckStatus> evaluateAllChecks(List<SystemReadyCheck> 
currentChecks) {
+        return currentChecks.stream()
                 .map(SystemReadyMonitorImpl::getStatus)
                 .sorted(Comparator.comparing(CheckStatus::getCheckName))
                 .collect(Collectors.toList());

Modified: 
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ComponentsCheckTest.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ComponentsCheckTest.java?rev=1834342&r1=1834341&r2=1834342&view=diff
==============================================================================
--- 
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ComponentsCheckTest.java
 (original)
+++ 
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ComponentsCheckTest.java
 Mon Jun 25 16:30:55 2018
@@ -19,7 +19,6 @@
 package org.apache.felix.systemready.osgi;
 
 import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
 import static org.ops4j.pax.tinybundles.core.TinyBundles.bundle;
 
@@ -30,9 +29,9 @@ import javax.inject.Inject;
 import org.apache.felix.systemready.Status;
 import org.apache.felix.systemready.SystemReadyCheck;
 import org.apache.felix.systemready.impl.ComponentsCheck;
+import org.apache.felix.systemready.osgi.examples.CompWithoutService;
 import org.apache.felix.systemready.osgi.examples.CompWithoutService2;
 import org.apache.felix.systemready.osgi.util.BaseTest;
-import org.apache.felix.systemready.osgi.examples.CompWithoutService;
 import org.apache.felix.systemready.osgi.util.BndDSOptions;
 import org.hamcrest.Matchers;
 import org.junit.Test;

Modified: 
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestGreen.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestGreen.java?rev=1834342&r1=1834341&r2=1834342&view=diff
==============================================================================
--- 
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestGreen.java
 (original)
+++ 
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestGreen.java
 Mon Jun 25 16:30:55 2018
@@ -18,7 +18,6 @@
  */
 package org.apache.felix.systemready.osgi;
 
-import static org.junit.Assert.assertEquals;
 import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
 
 import javax.inject.Inject;

Modified: 
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/SystemReadyMonitorTest.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/SystemReadyMonitorTest.java?rev=1834342&r1=1834341&r2=1834342&view=diff
==============================================================================
--- 
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/SystemReadyMonitorTest.java
 (original)
+++ 
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/SystemReadyMonitorTest.java
 Mon Jun 25 16:30:55 2018
@@ -32,6 +32,7 @@ import org.apache.felix.systemready.Chec
 import org.apache.felix.systemready.Status;
 import org.apache.felix.systemready.SystemReadyCheck;
 import org.apache.felix.systemready.SystemReadyMonitor;
+import org.apache.felix.systemready.SystemStatus;
 import org.apache.felix.systemready.osgi.examples.TestSystemReadyCheck;
 import org.apache.felix.systemready.osgi.util.BaseTest;
 import org.awaitility.Awaitility;
@@ -49,7 +50,7 @@ public class SystemReadyMonitorTest exte
     @Inject
     SystemReadyMonitor monitor;
 
-    private final ConditionFactory wait = await().atMost(1000, 
TimeUnit.MILLISECONDS);
+    private final ConditionFactory wait = await();
 
     @Configuration
     public Option[] configuration() throws MalformedURLException {
@@ -90,7 +91,6 @@ public class SystemReadyMonitorTest exte
         assertNumChecks(1);
         wait.until(monitor::isReady, is(false));
 
-
         // register a second check
         TestSystemReadyCheck check2 = new TestSystemReadyCheck();
         context.registerService(SystemReadyCheck.class, check2, null);
@@ -106,6 +106,10 @@ public class SystemReadyMonitorTest exte
     }
 
     private void assertNumChecks(int expectedNum) {
-        wait.until(() -> monitor.getStatus().getCheckStates().size(), 
is(expectedNum));
+        wait.until(this::numChecks, is(expectedNum));
+    }
+
+    private int numChecks() {
+        return monitor.getStatus().getCheckStates().size();
     }
 }

Modified: 
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/util/BaseTest.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/util/BaseTest.java?rev=1834342&r1=1834341&r2=1834342&view=diff
==============================================================================
--- 
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/util/BaseTest.java
 (original)
+++ 
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/util/BaseTest.java
 Mon Jun 25 16:30:55 2018
@@ -23,6 +23,9 @@ import static org.ops4j.pax.exam.CoreOpt
 import static org.ops4j.pax.exam.CoreOptions.systemProperty;
 import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
 
+import java.util.Optional;
+import java.util.function.Predicate;
+
 import javax.inject.Inject;
 
 import org.apache.felix.systemready.SystemReadyMonitor;
@@ -35,12 +38,14 @@ import org.ops4j.pax.exam.Option;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.component.runtime.ServiceComponentRuntime;
 import org.osgi.service.component.runtime.dto.ComponentDescriptionDTO;
-
-import java.util.Optional;
-import java.util.function.Predicate;
+import org.osgi.util.promise.Promise;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 public class BaseTest {
+    private Logger log = LoggerFactory.getLogger(this.getClass());
+    
     @Inject
     public BundleContext context;
 
@@ -84,7 +89,7 @@ public class BaseTest {
     
     public Option monitorConfig() {
         return newConfiguration(SystemReadyMonitor.PID)
-                .put("poll.interval", 50)
+                .put("poll.interval", 100)
                 .asOption();
     }
     
@@ -122,7 +127,13 @@ public class BaseTest {
 
     public void disableComponent(String name) {
         ComponentDescriptionDTO desc = getComponentDesc(name);
-        scr.disableComponent(desc);
+        log.info("Deactivating component {}", desc.name);
+        Promise<Void> promise = scr.disableComponent(desc);
+        try {
+            promise.getValue();
+        } catch (Exception e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
     }
 
     public void disableFrameworkStartCheck() {


Reply via email to