Browse Source

SQSCANNER-101 Do not parse configuration twice

tags/4.8.0.2856
Julien HENRY 2 years ago
parent
commit
8c73aabed5

+ 1
- 11
src/main/java/org/sonarsource/scanner/cli/Conf.java View File

import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import javax.annotation.Nullable; import javax.annotation.Nullable;
private static final String PROPERTY_PROJECT_BASEDIR = "sonar.projectBaseDir"; private static final String PROPERTY_PROJECT_BASEDIR = "sonar.projectBaseDir";
private static final String PROPERTY_PROJECT_CONFIG_FILE = "sonar.projectConfigFile"; private static final String PROPERTY_PROJECT_CONFIG_FILE = "sonar.projectConfigFile";
private static final String SONAR_PROJECT_PROPERTIES_FILENAME = "sonar-project.properties"; private static final String SONAR_PROJECT_PROPERTIES_FILENAME = "sonar-project.properties";
private static final String PROPERTY_SONAR_HOST_URL = "sonar.host.url";
static final String PROPERTY_SONAR_HOST_URL = "sonar.host.url";


private final Cli cli; private final Cli cli;
private final Logs logger; private final Logs logger;
return result; return result;
} }


boolean isSonarCloud(@Nullable Properties testProperties) {
String hostUrl = testProperties != null ? testProperties.getProperty(PROPERTY_SONAR_HOST_URL) : properties().getProperty(PROPERTY_SONAR_HOST_URL);
if (hostUrl != null) {
return hostUrl.toLowerCase(Locale.getDefault()).contains("sonarcloud");
}

return false;
}

private Properties resolve(Properties props) { private Properties resolve(Properties props) {
PropertyResolver resolver = new PropertyResolver(props, env); PropertyResolver resolver = new PropertyResolver(props, env);
return resolver.resolve(); return resolver.resolve();

+ 21
- 7
src/main/java/org/sonarsource/scanner/cli/Main.java View File

*/ */
package org.sonarsource.scanner.cli; package org.sonarsource.scanner.cli;


import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import org.sonarsource.scanner.api.EmbeddedScanner; import org.sonarsource.scanner.api.EmbeddedScanner;
private final Exit exit; private final Exit exit;
private final Cli cli; private final Cli cli;
private final Conf conf; private final Conf conf;
private EmbeddedScanner runner;
private ScannerFactory runnerFactory;
private Logs logger;
private EmbeddedScanner embeddedScanner;
private final ScannerFactory runnerFactory;
private final Logs logger;


Main(Exit exit, Cli cli, Conf conf, ScannerFactory runnerFactory, Logs logger) { Main(Exit exit, Cli cli, Conf conf, ScannerFactory runnerFactory, Logs logger) {
this.exit = exit; this.exit = exit;
checkSkip(p); checkSkip(p);
configureLogging(p); configureLogging(p);
init(p); init(p);
runner.start();
logger.info(String.format("Analyzing on %s", conf.isSonarCloud(null) ? "SonarCloud" : ("SonarQube server " + runner.serverVersion())));
embeddedScanner.start();
if (isSonarCloud(p)) {
logger.info("Analyzing on SonarCloud");
} else {
String serverVersion = embeddedScanner.serverVersion();
logger.info(String.format("Analyzing on SonarQube server %s", serverVersion));
}
execute(stats, p); execute(stats, p);
status = Exit.SUCCESS; status = Exit.SUCCESS;
} catch (Throwable e) { } catch (Throwable e) {
} finally { } finally {
exit.exit(status); exit.exit(status);
} }
}

static boolean isSonarCloud(Properties props) {
String hostUrl = props.getProperty(Conf.PROPERTY_SONAR_HOST_URL);
if (hostUrl != null) {
return hostUrl.toLowerCase(Locale.ENGLISH).contains("sonarcloud");
}


return false;
} }


private void checkSkip(Properties properties) { private void checkSkip(Properties properties) {
exit.exit(Exit.SUCCESS); exit.exit(Exit.SUCCESS);
} }


runner = runnerFactory.create(p, cli.getInvokedFrom());
embeddedScanner = runnerFactory.create(p, cli.getInvokedFrom());
} }


private void configureLogging(Properties props) { private void configureLogging(Properties props) {
} }


private void execute(Stats stats, Properties p) { private void execute(Stats stats, Properties p) {
runner.execute((Map) p);
embeddedScanner.execute((Map) p);
displayExecutionResult(stats, "SUCCESS"); displayExecutionResult(stats, "SUCCESS");
} }



+ 0
- 34
src/test/java/org/sonarsource/scanner/cli/ConfTest.java View File

assertThat(properties.get("sonar.prop")).isEqualTo("expected"); assertThat(properties.get("sonar.prop")).isEqualTo("expected");
} }


// SQSCANNER-57
@Test
public void should_return_true_is_sonar_cloud() {

args.setProperty("sonar.host.url", "https://sonarcloud.io");

conf.properties();

assertThat(conf.isSonarCloud(null)).isTrue();
}

// SQSCANNER-57
@Test
public void should_return_false_is_sonar_cloud() {
args.setProperty("sonar.host.url", "https://mysonarqube.com:9000/");

//Still returns false, sonarcloud not detected in the content of the url
Properties properties = conf.properties();

assertThat(properties.getProperty("sonar.host.url")).isEqualTo("https://mysonarqube.com:9000/");

assertThat(conf.isSonarCloud(null)).isFalse();
}

// SQSCANNER-57
@Test
public void should_return_false_is_sonar_cloud_host_is_null() {

Properties emptyProperties = new Properties();

assertThat(emptyProperties.getProperty("sonar.host.url")).isNull();

assertThat(conf.isSonarCloud(emptyProperties)).isFalse();
}
} }

+ 26
- 1
src/test/java/org/sonarsource/scanner/cli/MainTest.java View File

@Test @Test
public void should_log_SonarCloud_server() { public void should_log_SonarCloud_server() {
Properties p = new Properties(); Properties p = new Properties();
p.setProperty("sonar.host.url", "https://sonarcloud.io");
when(conf.properties()).thenReturn(p); when(conf.properties()).thenReturn(p);
when(conf.isSonarCloud(null)).thenReturn(true);
when(cli.getInvokedFrom()).thenReturn(""); when(cli.getInvokedFrom()).thenReturn("");


Main main = new Main(exit, cli, conf, scannerFactory, logs); Main main = new Main(exit, cli, conf, scannerFactory, logs);
verify(logs).info("Analyzing on SonarCloud"); verify(logs).info("Analyzing on SonarCloud");
} }


// SQSCANNER-57
@Test
public void should_return_true_is_sonar_cloud() {

Properties properties = new Properties();
properties.setProperty("sonar.host.url", "https://sonarcloud.io");

assertThat(Main.isSonarCloud(properties)).isTrue();
}

// SQSCANNER-57
@Test
public void should_return_false_is_sonar_cloud() {
Properties properties = new Properties();
properties.setProperty("sonar.host.url", "https://mysonarqube.com:9000/");

assertThat(Main.isSonarCloud(properties)).isFalse();
}

// SQSCANNER-57
@Test
public void should_return_false_is_sonar_cloud_host_is_null() {
assertThat(Main.isSonarCloud(new Properties())).isFalse();
}

@Test @Test
public void should_configure_logging() { public void should_configure_logging() {
Properties analysisProps = testLogging("sonar.verbose", "true"); Properties analysisProps = testLogging("sonar.verbose", "true");

Loading…
Cancel
Save