aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2016-05-11 16:26:58 +0200
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>2016-05-12 15:35:49 +0200
commit59336a29a7c9377bfc2d32b10a3b9b65f8748479 (patch)
tree53962828d1ec9958c0e4269e8aa43f0363e1bc3a /server
parent71b97ad9af2ba00f153139c28b5c2ccdc139e67a (diff)
downloadsonarqube-59336a29a7c9377bfc2d32b10a3b9b65f8748479.tar.gz
sonarqube-59336a29a7c9377bfc2d32b10a3b9b65f8748479.zip
SONAR-7534 implement Server#getUrl on the server side
Diffstat (limited to 'server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/ServerImpl.java39
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/platform/ServerImplTest.java83
2 files changed, 119 insertions, 3 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerImpl.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerImpl.java
index 49c15d20089..5c7a8ecd6ad 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerImpl.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerImpl.java
@@ -45,14 +45,19 @@ import org.sonar.server.app.TomcatContexts;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
+import static org.apache.commons.lang.StringUtils.isEmpty;
+import static org.apache.commons.lang.StringUtils.isNotEmpty;
import static org.sonar.api.CoreProperties.SERVER_BASE_URL;
import static org.sonar.api.CoreProperties.SERVER_BASE_URL_DEFAULT_VALUE;
import static org.sonar.server.app.TomcatContexts.PROPERTY_CONTEXT;
public final class ServerImpl extends Server implements Startable {
private static final String PROPERTY_SONAR_CORE_STARTED_AT = "sonar.core.startedAt";
+ private static final int DEFAULT_HTTP_PORT = 80;
+ private static final String ALL_IPS_HOST = "0.0.0.0";
private static final Logger LOG = Loggers.get(ServerImpl.class);
+ public static final int DEFAULT_PORT = 9000;
private final Settings settings;
private final String buildProperties;
@@ -193,7 +198,39 @@ public final class ServerImpl extends Server implements Startable {
@Override
public String getURL() {
- return null;
+ String host = settings.getString("sonar.web.host");
+ int port = settings.getInt("sonar.web.port");
+ String context = settings.getString("sonar.web.context");
+
+ StringBuilder res = new StringBuilder();
+ res.append("http://");
+ appendHost(host, res);
+ appendPort(port, res);
+ appendContext(context, res);
+
+ return res.toString();
+ }
+
+ private static void appendHost(String host, StringBuilder res) {
+ if (isEmpty(host) || ALL_IPS_HOST.equals(host)) {
+ res.append("localhost");
+ } else {
+ res.append(host);
+ }
+ }
+
+ private static void appendPort(int port, StringBuilder res) {
+ if (port < 1) {
+ res.append(':').append(DEFAULT_PORT);
+ } else if (port != DEFAULT_HTTP_PORT) {
+ res.append(':').append(port);
+ }
+ }
+
+ private static void appendContext(String context, StringBuilder res) {
+ if (isNotEmpty(context)) {
+ res.append(context);
+ }
}
private String get(String key, String defaultValue) {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/ServerImplTest.java b/server/sonar-server/src/test/java/org/sonar/server/platform/ServerImplTest.java
index 44bf6aa07b2..84b7c009c14 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/platform/ServerImplTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/platform/ServerImplTest.java
@@ -23,6 +23,7 @@ import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.Random;
import org.hamcrest.core.Is;
import org.junit.Before;
import org.junit.Rule;
@@ -38,6 +39,10 @@ import static org.junit.Assert.assertThat;
public class ServerImplTest {
+ private static final String HOST_PROPERTY = "sonar.web.host";
+ private static final String PORT_PORPERTY = "sonar.web.port";
+ private static final String CONTEXT_PROPERTY = "sonar.web.context";
+
@Rule
public ExpectedException exception = ExpectedException.none();
@Rule
@@ -203,15 +208,89 @@ public class ServerImplTest {
@Test
public void get_context_path_from_settings() {
- settings.setProperty("sonar.web.context", "/my_path");
+ settings.setProperty(CONTEXT_PROPERTY, "/my_path");
underTest.start();
assertThat(underTest.getContextPath()).isEqualTo("/my_path");
}
@Test
public void sanitize_context_path_from_settings() {
- settings.setProperty("sonar.web.context", "/my_path///");
+ settings.setProperty(CONTEXT_PROPERTY, "/my_path///");
underTest.start();
assertThat(underTest.getContextPath()).isEqualTo("/my_path");
}
+
+ @Test
+ public void getUrl_returns_http_localhost_9000_when_not_settings_are_set() {
+ assertThat(underTest.getURL()).isEqualTo("http://localhost:9000");
+ }
+
+ @Test
+ public void getUrl_returns_http_localhost_9000_when_host_set_to_0_0_0_0() {
+ settings.setProperty(HOST_PROPERTY, "0.0.0.0");
+ assertThat(underTest.getURL()).isEqualTo("http://localhost:9000");
+ }
+
+ @Test
+ public void getUrl_returns_http_specified_host_9000_when_host_is_set() {
+ settings.setProperty(HOST_PROPERTY, "my_host");
+ assertThat(underTest.getURL()).isEqualTo("http://my_host:9000");
+ }
+
+ @Test
+ public void getUrl_returns_http_localhost_specified_port_when_port_is_set() {
+ settings.setProperty(PORT_PORPERTY, 951);
+ assertThat(underTest.getURL()).isEqualTo("http://localhost:951");
+ }
+
+ @Test
+ public void getUrl_returns_http_localhost_no_port_when_port_is_80() {
+ settings.setProperty(PORT_PORPERTY, 80);
+ assertThat(underTest.getURL()).isEqualTo("http://localhost");
+ }
+
+ @Test
+ public void getUrl_returns_http_localhost_9000_when_port_is_0() {
+ settings.setProperty(PORT_PORPERTY, 0);
+ assertThat(underTest.getURL()).isEqualTo("http://localhost:9000");
+ }
+
+ @Test
+ public void getUrl_returns_http_localhost_9000_when_port_is_less_then_0() {
+ settings.setProperty(PORT_PORPERTY, -(Math.abs(new Random().nextInt(256))));
+ assertThat(underTest.getURL()).isEqualTo("http://localhost:9000");
+ }
+
+ @Test
+ public void getUrl_throws_NFE_when_port_not_an_int() {
+ settings.setProperty(PORT_PORPERTY, "not a number");
+
+ exception.expect(NumberFormatException.class);
+
+ underTest.getURL();
+ }
+
+ @Test
+ public void getUrl_returns_http_localhost_900_specified_context_when_context_is_set() {
+ settings.setProperty(CONTEXT_PROPERTY, "sdsd");
+ assertThat(underTest.getURL()).isEqualTo("http://localhost:9000sdsd");
+ }
+
+ @Test
+ public void getUrl_returns_http_specified_host_no_port_when_host_is_set_and_port_is_80() {
+ settings.setProperty(HOST_PROPERTY, "foo");
+ settings.setProperty(PORT_PORPERTY, 80);
+ assertThat(underTest.getURL()).isEqualTo("http://foo");
+ }
+
+ @Test
+ public void getUrl_does_not_cache_returned_value() {
+ assertThat(underTest.getURL()).isEqualTo("http://localhost:9000");
+ settings.setProperty(HOST_PROPERTY, "foo");
+ assertThat(underTest.getURL()).isEqualTo("http://foo:9000");
+ settings.setProperty(PORT_PORPERTY, 666);
+ assertThat(underTest.getURL()).isEqualTo("http://foo:666");
+ settings.setProperty(CONTEXT_PROPERTY, "/bar");
+ assertThat(underTest.getURL()).isEqualTo("http://foo:666/bar");
+ }
}