瀏覽代碼

SONAR-8883 Fix Server::getVersion() on scanner side, and reenable IssueJsonReportTest IT

tags/6.3-RC4
Julien HENRY 7 年之前
父節點
當前提交
ea8d74d261

+ 11
- 18
it/it-tests/src/test/java/it/analysis/IssueJsonReportTest.java 查看文件

import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.regex.Pattern;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.json.simple.JSONArray; import org.json.simple.JSONArray;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
import org.junit.Before; import org.junit.Before;
import org.junit.ClassRule; import org.junit.ClassRule;
import org.junit.Ignore;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.TemporaryFolder; import org.junit.rules.TemporaryFolder;


import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;


@Ignore("Temporarily disabled as non-SNAPSHOT versions are not supported")
public class IssueJsonReportTest { public class IssueJsonReportTest {


private static final String SONAR_VERSION_PLACEHOLDER = "<SONAR_VERSION>";

@ClassRule @ClassRule
public static Orchestrator orchestrator = Category3Suite.ORCHESTRATOR; public static Orchestrator orchestrator = Category3Suite.ORCHESTRATOR;


assertThat(report).isFile().exists(); assertThat(report).isFile().exists();


String json = sanitize(FileUtils.readFileToString(report)); String json = sanitize(FileUtils.readFileToString(report));
String expectedJson = sanitize(IOUtils.toString(getResourceInputStream("no-server-analysis.json")));
String expectedJson = expected("no-server-analysis.json");
JSONAssert.assertEquals(expectedJson, json, false); JSONAssert.assertEquals(expectedJson, json, false);
} }


assertThat(report).isFile().exists(); assertThat(report).isFile().exists();


String json = sanitize(FileUtils.readFileToString(report)); String json = sanitize(FileUtils.readFileToString(report));
String expectedJson = sanitize(IOUtils.toString(getResourceInputStream("report-on-single-module.json")));
String expectedJson = expected("report-on-single-module.json");
JSONAssert.assertEquals(expectedJson, json, false); JSONAssert.assertEquals(expectedJson, json, false);
} }


assertThat(report).isFile().exists(); assertThat(report).isFile().exists();


String json = sanitize(FileUtils.readFileToString(report)); String json = sanitize(FileUtils.readFileToString(report));
String expectedJson = sanitize(IOUtils.toString(getResourceInputStream("report-on-single-module-branch.json")));
String expectedJson = expected("report-on-single-module-branch.json");
JSONAssert.assertEquals(expectedJson, json, false); JSONAssert.assertEquals(expectedJson, json, false);
} }




String json = sanitize(FileUtils.readFileToString(report)); String json = sanitize(FileUtils.readFileToString(report));
// SONAR-5218 All issues are updated as their root project id has changed (it's now the sub module) // SONAR-5218 All issues are updated as their root project id has changed (it's now the sub module)
String expectedJson = sanitize(IOUtils.toString(getResourceInputStream("report-on-sub-module.json")));
String expectedJson = expected("report-on-sub-module.json");
JSONAssert.assertEquals(expectedJson, json, false); JSONAssert.assertEquals(expectedJson, json, false);
} }


assertThat(report).isFile().exists(); assertThat(report).isFile().exists();


String json = sanitize(FileUtils.readFileToString(report)); String json = sanitize(FileUtils.readFileToString(report));
String expectedJson = sanitize(IOUtils.toString(getResourceInputStream("report-on-root-module.json")));
String expectedJson = expected("report-on-root-module.json");
JSONAssert.assertEquals(expectedJson, json, false); JSONAssert.assertEquals(expectedJson, json, false);
} }


@Test
public void sanityCheck() {
assertThat(sanitize("5.0-SNAPSHOT")).isEqualTo("<SONAR_VERSION>");
assertThat(sanitize("5.0.0-5868-SNAPSHOT")).isEqualTo("<SONAR_VERSION>");
assertThat(sanitize("5.0-build1234")).isEqualTo("<SONAR_VERSION>");
assertThat(sanitize("5.0.1-build1234")).isEqualTo("<SONAR_VERSION>");
assertThat(sanitize("\"5.0.1-build1234\"")).isEqualTo("\"<SONAR_VERSION>\"");
private String expected(String path) throws IOException, FileNotFoundException {
return sanitize(IOUtils.toString(getResourceInputStream(path)))
.replaceAll(Pattern.quote(SONAR_VERSION_PLACEHOLDER), orchestrator.getServer().version().toString());
} }


@Test @Test
} }


private static String sanitize(String s) { private static String sanitize(String s) {
// sanitize sonarqube version: "5.4-SNAPSHOT" or "5.4-build1234"
s = s.replaceAll("\\d\\.\\d(.\\d)?(\\-.*)?\\-SNAPSHOT", "<SONAR_VERSION>");
s = s.replaceAll("\\d\\.\\d(.\\d)?(\\-.*)?\\-build(\\d)+", "<SONAR_VERSION>");

// sanitize issue uuid keys // sanitize issue uuid keys
s = s.replaceAll("\"[a-zA-Z_0-9\\-]{15,20}\"", "<ISSUE_KEY>"); s = s.replaceAll("\"[a-zA-Z_0-9\\-]{15,20}\"", "<ISSUE_KEY>");



+ 0
- 1
sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java 查看文件

@Deprecated @Deprecated
String CORE_AUTHENTICATOR_UPDATE_USER_ATTRIBUTES = "sonar.security.updateUserAttributes"; String CORE_AUTHENTICATOR_UPDATE_USER_ATTRIBUTES = "sonar.security.updateUserAttributes";


String SERVER_VERSION = "sonar.core.version";
String SERVER_ID = "sonar.core.id"; String SERVER_ID = "sonar.core.id";


// format is yyyy-MM-dd'T'HH:mm:ssZ // format is yyyy-MM-dd'T'HH:mm:ssZ

+ 5
- 2
sonar-scanner-engine/src/main/java/org/sonar/scanner/platform/DefaultServer.java 查看文件

import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.sonar.api.CoreProperties; import org.sonar.api.CoreProperties;
import org.sonar.api.SonarRuntime;
import org.sonar.api.batch.ScannerSide; import org.sonar.api.batch.ScannerSide;
import org.sonar.api.config.Settings; import org.sonar.api.config.Settings;
import org.sonar.api.platform.Server; import org.sonar.api.platform.Server;


private final Settings settings; private final Settings settings;
private final ScannerWsClient client; private final ScannerWsClient client;
private final SonarRuntime runtime;


public DefaultServer(Settings settings, ScannerWsClient client) {
public DefaultServer(Settings settings, ScannerWsClient client, SonarRuntime runtime) {
this.settings = settings; this.settings = settings;
this.client = client; this.client = client;
this.runtime = runtime;
} }


@Override @Override


@Override @Override
public String getVersion() { public String getVersion() {
return settings.getString(CoreProperties.SERVER_VERSION);
return runtime.getApiVersion().toString();
} }


@Override @Override

+ 7
- 5
sonar-scanner-engine/src/test/java/org/sonar/scanner/platform/DefaultServerTest.java 查看文件



import org.junit.Test; import org.junit.Test;
import org.sonar.api.CoreProperties; import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
import org.sonar.api.SonarQubeSide;
import org.sonar.api.config.MapSettings; import org.sonar.api.config.MapSettings;
import org.sonar.api.config.Settings;
import org.sonar.api.internal.SonarRuntimeImpl;
import org.sonar.api.utils.Version;
import org.sonar.scanner.bootstrap.ScannerWsClient; import org.sonar.scanner.bootstrap.ScannerWsClient;


import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
public void shouldLoadServerProperties() { public void shouldLoadServerProperties() {
Settings settings = new MapSettings(); Settings settings = new MapSettings();
settings.setProperty(CoreProperties.SERVER_ID, "123"); settings.setProperty(CoreProperties.SERVER_ID, "123");
settings.setProperty(CoreProperties.SERVER_VERSION, "2.2");
settings.setProperty(CoreProperties.SERVER_STARTTIME, "2010-05-18T17:59:00+0000"); settings.setProperty(CoreProperties.SERVER_STARTTIME, "2010-05-18T17:59:00+0000");
settings.setProperty(CoreProperties.PERMANENT_SERVER_ID, "abcde"); settings.setProperty(CoreProperties.PERMANENT_SERVER_ID, "abcde");
ScannerWsClient client = mock(ScannerWsClient.class); ScannerWsClient client = mock(ScannerWsClient.class);
when(client.baseUrl()).thenReturn("http://foo.com"); when(client.baseUrl()).thenReturn("http://foo.com");


DefaultServer metadata = new DefaultServer(settings, client);
DefaultServer metadata = new DefaultServer(settings, client, SonarRuntimeImpl.forSonarQube(Version.parse("2.2"), SonarQubeSide.SCANNER));


assertThat(metadata.getId()).isEqualTo("123"); assertThat(metadata.getId()).isEqualTo("123");
assertThat(metadata.getVersion()).isEqualTo("2.2"); assertThat(metadata.getVersion()).isEqualTo("2.2");
Settings settings = new MapSettings(); Settings settings = new MapSettings();
ScannerWsClient client = mock(ScannerWsClient.class); ScannerWsClient client = mock(ScannerWsClient.class);
when(client.baseUrl()).thenReturn("http://foo.com/"); when(client.baseUrl()).thenReturn("http://foo.com/");
DefaultServer metadata = new DefaultServer(settings, client);
DefaultServer metadata = new DefaultServer(settings, client, null);


settings.setProperty(CoreProperties.SERVER_BASE_URL, "http://server.com/"); settings.setProperty(CoreProperties.SERVER_BASE_URL, "http://server.com/");
assertThat(metadata.getPublicRootUrl()).isEqualTo("http://server.com"); assertThat(metadata.getPublicRootUrl()).isEqualTo("http://server.com");
Settings settings = new MapSettings(); Settings settings = new MapSettings();
settings.setProperty(CoreProperties.SERVER_STARTTIME, "invalid"); settings.setProperty(CoreProperties.SERVER_STARTTIME, "invalid");
ScannerWsClient client = mock(ScannerWsClient.class); ScannerWsClient client = mock(ScannerWsClient.class);
DefaultServer metadata = new DefaultServer(settings, client);
DefaultServer metadata = new DefaultServer(settings, client, null);
metadata.getStartedAt(); metadata.getStartedAt();
} }
} }

Loading…
取消
儲存