Repository: karaf
Updated Branches:
  refs/heads/karaf-2.3.x b8b5a2bf6 -> 345d44bfd


[KARAF-2815] Generate ports used for RMI and JMX in integration tests


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/345d44bf
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/345d44bf
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/345d44bf

Branch: refs/heads/karaf-2.3.x
Commit: 345d44bfd04c48c97f5910aad75f4dee4f950f69
Parents: b8b5a2b
Author: Jean-Baptiste Onofré <[email protected]>
Authored: Tue Apr 29 15:50:06 2014 +0200
Committer: Jean-Baptiste Onofré <[email protected]>
Committed: Tue Apr 29 15:50:06 2014 +0200

----------------------------------------------------------------------
 .../apache/karaf/itests/KarafTestSupport.java   | 38 +++++++++++++++++---
 .../container/internal/KarafTestContainer.java  |  3 +-
 .../internal/KarafTestContainerFactory.java     |  2 +-
 3 files changed, 36 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/345d44bf/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 2744fb8..39a4a74 100644
--- a/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
+++ b/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
@@ -19,6 +19,7 @@ import org.apache.karaf.features.Feature;
 import org.apache.karaf.features.FeaturesService;
 import org.apache.karaf.tooling.exam.options.LogLevelOption;
 import org.junit.Assert;
+import org.ops4j.net.FreePort;
 import org.ops4j.pax.exam.MavenUtils;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.TestProbeBuilder;
@@ -26,6 +27,8 @@ import org.ops4j.pax.exam.junit.Configuration;
 import org.ops4j.pax.exam.junit.ProbeBuilder;
 import org.osgi.framework.*;
 import org.osgi.util.tracker.ServiceTracker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.inject.Inject;
 import javax.management.remote.JMXConnector;
@@ -34,18 +37,19 @@ import javax.management.remote.JMXServiceURL;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.PrintStream;
 import java.util.*;
 import java.util.concurrent.*;
 
-import static 
org.apache.karaf.tooling.exam.options.KarafDistributionOption.karafDistributionConfiguration;
-import static 
org.apache.karaf.tooling.exam.options.KarafDistributionOption.keepRuntimeFolder;
-import static 
org.apache.karaf.tooling.exam.options.KarafDistributionOption.logLevel;
-
+import static org.apache.karaf.tooling.exam.options.KarafDistributionOption.*;
 import static org.ops4j.pax.exam.CoreOptions.maven;
 
 public class KarafTestSupport {
 
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(KarafTestSupport.class);
+    private static final int RMI_BASE_PORT = 33221;
+
     static final Long COMMAND_TIMEOUT = 10000L;
     static final Long SERVICE_TIMEOUT = 30000L;
 
@@ -65,10 +69,17 @@ public class KarafTestSupport {
 
     @Configuration
     public Option[] config() {
+        // ports to override values from etc/org.apache.karaf.management.cfg
+        int rmiRegistryPort = new FreePort(RMI_BASE_PORT + 1, RMI_BASE_PORT + 
100).getPort();
+        int rmiServerPort = new FreePort(rmiRegistryPort +1, rmiRegistryPort + 
100).getPort();
+        LOGGER.info("Port selected for Karaf RMI Registry: {}", 
rmiRegistryPort);
+        LOGGER.info("Port selected for JMX Server connection: {}", 
rmiServerPort);
         return new Option[]{
                 
karafDistributionConfiguration().frameworkUrl(maven().groupId("org.apache.karaf").artifactId("apache-karaf").versionAsInProject().type("tar.gz"))
                         
.karafVersion(MavenUtils.getArtifactVersion("org.apache.karaf", 
"apache-karaf")).name("Apache Karaf").unpackDirectory(new File("target/exam")),
                 keepRuntimeFolder(),
+                
editConfigurationFilePut("etc/org.apache.karaf.management.cfg", 
"rmiRegistryPort", Integer.toString(rmiRegistryPort)),
+                
editConfigurationFilePut("etc/org.apache.karaf.management.cfg", 
"rmiServerPort", Integer.toString(rmiServerPort)),
                 logLevel(LogLevelOption.LogLevel.ERROR)};
     }
 
@@ -199,7 +210,24 @@ public class KarafTestSupport {
     }
 
     public JMXConnector getJMXConnector() throws Exception {
-        JMXServiceURL url = new 
JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-root");
+        String karafBase = System.getProperty("karaf.base");
+        File managementCfgFile = new File(karafBase + "/etc", 
"org.apache.karaf.management.cfg");
+        String rmiServerAddress = "";
+        String rmiRegistryAddress = "localhost:1099";
+        if (managementCfgFile.exists()) {
+            Properties properties = new Properties();
+            properties.load(new FileInputStream(managementCfgFile));
+            if (properties.containsKey("rmiServerPort")) {
+                rmiServerAddress = "localhost:" + 
properties.getProperty("rmiServerPort");
+            }
+            if (properties.containsKey("rmiRegistryPort")) {
+                rmiRegistryAddress = "localhost:" + 
properties.getProperty("rmiRegistryPort");
+            }
+
+        }
+        String jmxConnectionInfo = 
String.format("service:jmx:rmi://%s/jndi/rmi://%s/karaf-root", rmiServerAddress,
+                rmiRegistryAddress);
+        JMXServiceURL url = new JMXServiceURL(jmxConnectionInfo);
         Hashtable env = new Hashtable();
         String[] credentials = new String[]{"karaf", "karaf"};
         env.put("jmx.remote.credentials", credentials);

http://git-wip-us.apache.org/repos/asf/karaf/blob/345d44bf/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainer.java
----------------------------------------------------------------------
diff --git 
a/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainer.java
 
b/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainer.java
index 0bc1c7f..836a023 100644
--- 
a/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainer.java
+++ 
b/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainer.java
@@ -101,7 +101,8 @@ public class KarafTestContainer implements TestContainer {
                             systemProperty(RMI_NAME_PROPERTY).value(name),
                             invokerConfiguration,
                             systemProperty(EXAM_INJECT_PROPERTY).value("true"),
-                            
editConfigurationFileExtend("etc/system.properties", "jline.shutdownhook", 
"true")
+                            
editConfigurationFileExtend("etc/system.properties", "jline.shutdownhook", 
"true"),
+                            new 
KarafDistributionConfigurationConsoleOption(false, true)
                     ));
             target = new RBCRemoteTarget(name, registry.getPort(), 
subsystem.getTimeout());
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/345d44bf/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainerFactory.java
----------------------------------------------------------------------
diff --git 
a/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainerFactory.java
 
b/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainerFactory.java
index 6754d2f..d051827 100644
--- 
a/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainerFactory.java
+++ 
b/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainerFactory.java
@@ -41,7 +41,6 @@ public class KarafTestContainerFactory implements 
TestContainerFactory {
     private RMIRegistry m_rmiRegistry;
 
     public KarafTestContainerFactory() {
-        m_rmiRegistry = new RMIRegistry(DEFAULTPORT, DEFAULTPORT + 1, 
DEFAULTPORT + 99).selectGracefully();
     }
 
     /**
@@ -49,6 +48,7 @@ public class KarafTestContainerFactory implements 
TestContainerFactory {
      */
     @Override
     public TestContainer[] create(ExamSystem system) {
+        m_rmiRegistry = new RMIRegistry(DEFAULTPORT, DEFAULTPORT + 1, 
DEFAULTPORT + 99).selectGracefully();
         List<TestContainer> containers = new ArrayList<TestContainer>();
         KarafDistributionKitConfigurationOption[] kitOptions =
                 
system.getOptions(KarafDistributionKitConfigurationOption.class);

Reply via email to