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