You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2014/03/24 17:32:22 UTC
[24/24] git commit: [KARAF-2805] Add a Registry#hasCommand() method
to speed-up integration tests
[KARAF-2805] Add a Registry#hasCommand() method to speed-up integration tests
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/7b47629b
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/7b47629b
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/7b47629b
Branch: refs/heads/master
Commit: 7b47629bdef7fa265993b35fd60aa732895c0232
Parents: d80852d
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Mon Mar 24 15:42:35 2014 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Mon Mar 24 17:30:14 2014 +0100
----------------------------------------------------------------------
.../apache/karaf/itests/KarafTestSupport.java | 20 ++++++++----
.../karaf/shell/api/console/Registry.java | 9 ++++++
.../shell/impl/action/osgi/RegistryImpl.java | 34 ++++++++++++++++++++
.../karaf/shell/impl/console/RegistryImpl.java | 34 ++++++++++++++++++++
4 files changed, 90 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/7b47629b/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
----------------------------------------------------------------------
diff --git a/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java b/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
index 9a59437..4669b1b 100644
--- a/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
+++ b/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
@@ -96,6 +96,9 @@ public class KarafTestSupport {
@Inject
protected FeaturesService featureService;
+ @Inject
+ protected SessionFactory sessionFactory;
+
/**
* To make sure the tests run only when the boot features are fully installed
*/
@@ -279,14 +282,17 @@ public class KarafTestSupport {
command = command.substring(0, spaceIdx);
}
int colonIndx = command.indexOf(':');
-
+ String scope = (colonIndx > 0) ? command.substring(0, colonIndx) : "*";
+ String name = (colonIndx > 0) ? command.substring(colonIndx + 1) : command;
try {
- if (colonIndx > 0) {
- String scope = command.substring(0, colonIndx);
- String function = command.substring(colonIndx + 1);
- waitForService("(&(osgi.command.scope=" + scope + ")(osgi.command.function=" + function + "))", SERVICE_TIMEOUT);
- } else {
- waitForService("(osgi.command.function=" + command + ")", SERVICE_TIMEOUT);
+ long start = System.currentTimeMillis();
+ long cur = start;
+ while (cur - start < SERVICE_TIMEOUT) {
+ if (sessionFactory.getRegistry().hasCommand(scope, name)) {
+ return;
+ }
+ Thread.sleep(100);
+ cur = System.currentTimeMillis();
}
} catch (Exception e) {
throw new RuntimeException(e);
http://git-wip-us.apache.org/repos/asf/karaf/blob/7b47629b/shell/core/src/main/java/org/apache/karaf/shell/api/console/Registry.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/api/console/Registry.java b/shell/core/src/main/java/org/apache/karaf/shell/api/console/Registry.java
index b768d69..35c7c75 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/api/console/Registry.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/api/console/Registry.java
@@ -36,6 +36,15 @@ public interface Registry {
List<Command> getCommands();
/**
+ *
+ * @param scope
+ * @param name
+ * @return
+ * @throws InterruptedException
+ */
+ boolean hasCommand(String scope, String name);
+
+ /**
* Register a delayed service (or factory).
* In cases where instances must be created for each injection,
* a {@link Callable} can be registered and each injection will
http://git-wip-us.apache.org/repos/asf/karaf/blob/7b47629b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/RegistryImpl.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/RegistryImpl.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/RegistryImpl.java
index 38f750a..e1cdd67 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/RegistryImpl.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/RegistryImpl.java
@@ -19,6 +19,7 @@
package org.apache.karaf.shell.impl.action.osgi;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -31,6 +32,7 @@ public class RegistryImpl implements Registry {
private final Registry parent;
private final Map<Object, Object> services = new LinkedHashMap<Object, Object>();
+ private final Map<String, List<Command>> commands = new HashMap<String, List<Command>>();
public RegistryImpl(Registry parent) {
this.parent = parent;
@@ -42,6 +44,17 @@ public class RegistryImpl implements Registry {
}
@Override
+ public boolean hasCommand(String scope, String name) {
+ if (parent != null && parent.hasCommand(scope, name)) {
+ return true;
+ }
+ synchronized (services) {
+ List<Command> cmds = commands.get(scope + ":" + name);
+ return cmds != null && !cmds.isEmpty();
+ }
+ }
+
+ @Override
public <T> void register(Callable<T> factory, Class<T> clazz) {
synchronized (services) {
services.put(clazz, new Factory<T>(clazz, factory));
@@ -52,6 +65,16 @@ public class RegistryImpl implements Registry {
public void register(Object service) {
synchronized (services) {
services.put(service, service);
+ if (service instanceof Command) {
+ Command cmd = (Command) service;
+ String key = cmd.getScope() + ":" + cmd.getName();
+ List<Command> cmds = commands.get(key);
+ if (cmds == null) {
+ cmds = new ArrayList<Command>();
+ commands.put(key, cmds);
+ }
+ cmds.add(cmd);
+ }
}
}
@@ -59,6 +82,17 @@ public class RegistryImpl implements Registry {
public void unregister(Object service) {
synchronized (services) {
services.remove(service);
+ if (service instanceof Command) {
+ Command cmd = (Command) service;
+ String key = cmd.getScope() + ":" + cmd.getName();
+ List<Command> cmds = commands.get(key);
+ if (cmds != null) {
+ cmds.remove(cmd);
+ if (cmds.isEmpty()) {
+ commands.remove(key);
+ }
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/7b47629b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/RegistryImpl.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/RegistryImpl.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/RegistryImpl.java
index b607c5e..99113b7 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/RegistryImpl.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/RegistryImpl.java
@@ -19,6 +19,7 @@
package org.apache.karaf.shell.impl.console;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -31,6 +32,7 @@ public class RegistryImpl implements Registry {
protected final Registry parent;
protected final Map<Object, Object> services = new LinkedHashMap<Object, Object>();
+ private final Map<String, List<Command>> commands = new HashMap<String, List<Command>>();
public RegistryImpl(Registry parent) {
this.parent = parent;
@@ -42,6 +44,17 @@ public class RegistryImpl implements Registry {
}
@Override
+ public boolean hasCommand(String scope, String name) {
+ if (parent != null && parent.hasCommand(scope, name)) {
+ return true;
+ }
+ synchronized (services) {
+ List<Command> cmds = commands.get(scope + ":" + name);
+ return cmds != null && !cmds.isEmpty();
+ }
+ }
+
+ @Override
public <T> void register(Callable<T> factory, Class<T> clazz) {
synchronized (services) {
services.put(factory, new Factory<T>(clazz, factory));
@@ -52,6 +65,16 @@ public class RegistryImpl implements Registry {
public void register(Object service) {
synchronized (services) {
services.put(service, service);
+ if (service instanceof Command) {
+ Command cmd = (Command) service;
+ String key = cmd.getScope() + ":" + cmd.getName();
+ List<Command> cmds = commands.get(key);
+ if (cmds == null) {
+ cmds = new ArrayList<Command>();
+ commands.put(key, cmds);
+ }
+ cmds.add(cmd);
+ }
}
}
@@ -59,6 +82,17 @@ public class RegistryImpl implements Registry {
public void unregister(Object service) {
synchronized (services) {
services.remove(service);
+ if (service instanceof Command) {
+ Command cmd = (Command) service;
+ String key = cmd.getScope() + ":" + cmd.getName();
+ List<Command> cmds = commands.get(key);
+ if (cmds != null) {
+ cmds.remove(cmd);
+ if (cmds.isEmpty()) {
+ commands.remove(key);
+ }
+ }
+ }
}
}