import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
import org.sonarsource.scanner.api.internal.shaded.minimaljson.Json;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatCode;
+import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
import static org.junit.Assume.assumeTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@Rule
public TemporaryFolder temp = new TemporaryFolder();
- @Rule
- public ExpectedException exception = ExpectedException.none();
-
private final Map<String, String> env = new HashMap<>();
private final Properties args = new Properties();
private final Logs logs = new Logs(System.out, System.err);
args.setProperty("scanner.home", home.toAbsolutePath().toString());
Properties properties = conf.properties();
- assertThat(properties.get("sonar.prop")).isEqualTo("value");
+ assertThat(properties).containsEntry("sonar.prop", "value");
}
@Test
assertThat(conf.properties().getProperty("sonar.projectBaseDir")).isEqualTo(Paths.get("").toAbsolutePath().toString());
}
+ @Test
+ public void should_set_bootstrap_time_only_once() {
+ Properties properties = conf.properties();
+
+ assertThat(properties).containsKey("sonar.scanner.bootstrapStartTime");
+ String value = properties.getProperty("sonar.scanner.bootstrapStartTime");
+
+ assertThat(conf.properties())
+ .containsEntry("sonar.scanner.bootstrapStartTime", value);
+ }
+
@Test
public void base_dir_can_be_relative() throws URISyntaxException {
Path projectHome = Paths.get(getClass().getResource("ConfTest/shouldLoadModuleConfiguration/project").toURI());
Path settings = Paths.get(getClass().getResource("ConfTest/shouldLoadRunnerSettingsByDirectPath/other-conf.properties").toURI());
args.setProperty("scanner.settings", settings.toAbsolutePath().toString());
- assertThat(conf.properties().get("sonar.prop")).isEqualTo("otherValue");
+ assertThat(conf.properties()).containsEntry("sonar.prop", "otherValue");
}
@Test
@Test
public void shouldFailWithInvalidEnvironmentProperties() {
env.put("SONARQUBE_SCANNER_PARAMS", "{sonar.key1: \"v1\", \"sonar.key2\" : \"v2\"}");
- exception.expect(IllegalStateException.class);
- exception.expectMessage("JSON");
- conf.properties();
+
+ assertThatIllegalStateException()
+ .isThrownBy(conf::properties)
+ .withMessage("Failed to parse JSON in SONARQUBE_SCANNER_PARAMS environment variable");
}
@Test
args.setProperty("sonar.modules", "module1");
args.setProperty("module1.sonar.projectBaseDir", "invalid");
- exception.expect(IllegalStateException.class);
- exception.expectMessage("The base directory of the module 'module1' does not exist");
- conf.properties();
+ assertThatIllegalStateException()
+ .isThrownBy(conf::properties)
+ .withMessageStartingWith("The base directory of the module 'module1' does not exist");
}
@Test
args.setProperty("sonar.modules", "module1");
args.setProperty("module1.sonar.projectConfigFile", "invalid");
- exception.expect(IllegalStateException.class);
- exception.expectMessage("The properties file of the module 'module1' does not exist");
- conf.properties();
+ assertThatIllegalStateException()
+ .isThrownBy(conf::properties)
+ .withMessageStartingWith("The properties file of the module 'module1' does not exist");
}
@Test
args.setProperty("project.home", temp.newFolder().getCanonicalPath());
args.setProperty("sonar.projectBaseDir", projectHome.toAbsolutePath().toString());
- conf.properties();
+ assertThatCode(conf::properties)
+ .doesNotThrowAnyException();
}
@Test
args.setProperty("project.home", home.toAbsolutePath().toString());
Properties properties = conf.properties();
- assertThat(properties.get("sonar.prop")).isEqualTo("default");
+ assertThat(properties).containsEntry("sonar.prop", "default");
args.setProperty("project.settings", home.resolve("conf/sq-project.properties").toAbsolutePath().toString());
properties = conf.properties();
- assertThat(properties.get("sonar.prop")).isEqualTo("expected");
+ assertThat(properties).containsEntry("sonar.prop", "expected");
}
// SQSCANNER-61
args.setProperty("project.home", home.toAbsolutePath().toString());
Properties properties = conf.properties();
- assertThat(properties.get("sonar.prop")).isEqualTo("default");
+ assertThat(properties).containsEntry("sonar.prop", "default");
String jsonString = Json.object()
.add("project.settings", home.resolve("conf/sq-project.properties").toAbsolutePath().toString())
env.put("SONARQUBE_SCANNER_PARAMS", jsonString);
properties = conf.properties();
- assertThat(properties.get("sonar.prop")).isEqualTo("expected");
+ assertThat(properties).containsEntry("sonar.prop", "expected");
}
}
assertThat(analysisProps.getProperty("sonar.log.level")).isEqualTo("TRACE");
}
+ @Test
+ public void should_set_bootstrap_start_time_in_millis() {
+ Properties analysisProps = execute("sonar.scanner.bootstrapStartTime", "1714137496104");
+ assertThat(analysisProps.getProperty("sonar.scanner.bootstrapStartTime")).isEqualTo("1714137496104");
+ }
+
@Test
public void should_configure_logging_debug() {
Properties analysisProps = testLogging("sonar.log.level", "DEBUG");
}
private Properties testLogging(String propKey, String propValue) {
+ Properties actualProps = execute(propKey, propValue);
+
+ // Logger used for callback should have debug enabled
+ verify(logs).setDebugEnabled(true);
+
+ return actualProps;
+ }
+
+ private Properties execute(String propKey, String propValue) {
Properties p = new Properties();
p.put(propKey, propValue);
+
when(conf.properties()).thenReturn(p);
when(cli.getInvokedFrom()).thenReturn("");
Main main = new Main(exit, cli, conf, scannerFactory, logs);
main.execute();
- // Logger used for callback should have debug enabled
- verify(logs).setDebugEnabled(true);
-
ArgumentCaptor<Properties> propertiesCapture = ArgumentCaptor.forClass(Properties.class);
verify(scanner).execute((Map) propertiesCapture.capture());