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() {