Skip to content

Commit

Permalink
SONAR-7534 implement Server#getUrl on the server side
Browse files Browse the repository at this point in the history
  • Loading branch information
sns-seb committed May 12, 2016
1 parent 71b97ad commit 59336a2
Show file tree
Hide file tree
Showing 3 changed files with 121 additions and 5 deletions.
Expand Up @@ -45,14 +45,19 @@

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;
Expand Down Expand Up @@ -193,7 +198,39 @@ private static Properties read(String filename) throws IOException {

@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) {
Expand Down
Expand Up @@ -23,6 +23,7 @@
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;
Expand All @@ -38,6 +39,10 @@

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
Expand Down Expand Up @@ -203,15 +208,89 @@ public void is_secured_on_not_secured_server() throws Exception {

@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");
}
}
Expand Up @@ -70,8 +70,8 @@ public abstract class Server {
public abstract boolean isSecured();

/**
* @return the server URL when executed from batch, else null.
* @since 2.4
* @return the server URL
* @since since 2.4 on batch side only, since 5.6 on both batch side and server side
*/
public abstract String getURL();

Expand Down

0 comments on commit 59336a2

Please sign in to comment.