You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ja...@apache.org on 2013/10/10 16:11:14 UTC
svn commit: r1530984 [5/5] - in /ace/trunk: org.apache.ace.agent.itest/
org.apache.ace.agent.itest/src/org/apache/ace/agent/itest/
org.apache.ace.agent.update.itest/ org.apache.ace.agent.update.itest/conf/
org.apache.ace.agent.update.itest/src/org/apac...
Modified: ace/trunk/org.apache.ace.test/src/org/apache/ace/it/IntegrationTestBase.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.test/src/org/apache/ace/it/IntegrationTestBase.java?rev=1530984&r1=1530983&r2=1530984&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.test/src/org/apache/ace/it/IntegrationTestBase.java (original)
+++ ace/trunk/org.apache.ace.test/src/org/apache/ace/it/IntegrationTestBase.java Thu Oct 10 14:11:13 2013
@@ -21,9 +21,11 @@ package org.apache.ace.it;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.apache.ace.test.utils.Util.properties;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
+import java.net.ConnectException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
@@ -36,6 +38,7 @@ import java.util.concurrent.TimeUnit;
import junit.framework.TestCase;
+import org.apache.ace.test.constants.TestConstants;
import org.apache.felix.dm.Component;
import org.apache.felix.dm.ComponentDependencyDeclaration;
import org.apache.felix.dm.ComponentStateListener;
@@ -128,6 +131,11 @@ public class IntegrationTestBase extends
* configure("org.apache.felix.http",
* "org.osgi.service.http.port", "1234");
* </pre>
+ *
+ * @param pid
+ * the configuration PID to configure;
+ * @param configuration
+ * the configuration key/values (as pairs).
*/
protected void configure(String pid, String... configuration) throws IOException {
Properties props = properties(configuration);
@@ -137,6 +145,60 @@ public class IntegrationTestBase extends
}
/**
+ * Configures the "org.apache.felix.http" and waits until the service is actually ready to process requests.
+ * <p>
+ * The reason that this method exists is that configuring the Felix HTTP bundle causes it to actually stop and
+ * restart, which is done asynchronously. This means that we cannot be sure that depending code is always able to
+ * directly use the HTTP service after its been configured.
+ * </p>
+ *
+ * @param port
+ * the new port to run the HTTP service on;
+ * @param configuration
+ * the extra (optional) configuration key/values (as pairs).
+ * @see #configure(String, String...)
+ */
+ protected void configureHttpService(int port, String... configuration) throws IOException, InterruptedException {
+ final String httpPID = "org.apache.felix.http";
+ final String portProperty = "org.osgi.service.http.port";
+ final String expectedPort = Integer.toString(port);
+
+ // Do not track this configuration (yet)...
+ Properties props = properties(configuration);
+ props.put(portProperty, expectedPort);
+
+ Configuration config = getConfiguration(httpPID);
+ config.update(props);
+
+ // This ugly warth is necessary as Felix HTTP currently brings the entire service down & up if it gets
+ // reconfigured. There is no other way for us to tell whether the server is ready to accept calls...
+ URL url = new URL(String.format("http://localhost:%d/", port));
+ int tries = 50;
+ boolean ready = false;
+ do {
+ Thread.sleep(50);
+
+ try {
+ InputStream is = url.openStream();
+ is.close();
+ ready = true;
+ }
+ catch (ConnectException exception) {
+ // Not there yet...
+ }
+ catch (FileNotFoundException exception) {
+ // Ok; expected...
+ ready = true;
+ }
+ }
+ while (!ready && tries-- > 0);
+
+ if (tries == 0) {
+ throw new IOException("Failed waiting on HTTP service?!");
+ }
+ }
+
+ /**
* The 'after' callback will be called after all components from {@link #getDependencies} have been started.<br>
* <br>
* The {@link #after} callback is most useful for configuring additional services after all mandatory services are
@@ -476,6 +538,11 @@ public class IntegrationTestBase extends
m_dependencyManager.add(component);
}
+ System.setProperty("org.apache.ace.server.port", Integer.toString(TestConstants.PORT));
+
+ // Ensure the HTTP service is running on the port we expect...
+ configureHttpService(TestConstants.PORT);
+
// Call back the implementation...
configureProvisionedServices();
@@ -486,10 +553,6 @@ public class IntegrationTestBase extends
}
configureAdditionalServices();
-
- // Wait for CM to settle or we may get "socket closed" due to HTTP service restarts
- // JaWi: no longer needed with Felix HTTP v2.2.1?
- // Thread.sleep(500);
}
catch (InterruptedException e) {
fail("Interrupted while waiting for services to get started.");
Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java?rev=1530984&r1=1530983&r2=1530984&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java Thu Oct 10 14:11:13 2013
@@ -114,11 +114,11 @@ public class VaadinClient extends com.va
private static long SESSION_ID = 1;
- private static String targetRepo = "target";
- private static String shopRepo = "shop";
- private static String deployRepo = "deployment";
- private static String customerName = "apache";
- private static String endpoint = "/repository";
+ private static final String targetRepo = "target";
+ private static final String shopRepo = "shop";
+ private static final String deployRepo = "deployment";
+ private static final String customerName = "apache";
+ private static final String endpoint = "/repository";
private volatile AuthenticationService m_authenticationService;
private volatile BundleContext m_context;
@@ -1029,7 +1029,7 @@ public class VaadinClient extends com.va
RepositoryAdminLoginContext context = m_admin.createLoginContext(user);
// @formatter:off
- context.setObrBase(m_obrUrl)
+ context
.add(context.createShopRepositoryContext()
.setLocation(m_repository).setCustomer(customerName).setName(shopRepo).setWriteable())
.add(context.createTargetRepositoryContext()