<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<maven.deploy.skip>true</maven.deploy.skip>
<source.skip>true</source.skip>
<enforcer.skip>true</enforcer.skip>
+ <sqZipDir>../sonar-application/target</sqZipDir>
</properties>
<modules>
<module>upgrade</module>
</modules>
+ <profiles>
+ <profile>
+ <id>qa</id>
+ <activation>
+ <property>
+ <name>env.SONARSOURCE_QA</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-sonarqube-zip</id>
+ <phase>generate-test-resources</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>sonar-application</artifactId>
+ <version>${project.version}</version>
+ <type>zip</type>
+ <overWrite>true</overWrite>
+ </artifactItem>
+ </artifactItems>
+ <outputDirectory>${sqZipDir}</outputDirectory>
+ <overWriteReleases>true</overWriteReleases>
+ <overWriteSnapshots>true</overWriteSnapshots>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
</project>
import com.sonar.orchestrator.Orchestrator;
import com.sonar.orchestrator.OrchestratorBuilder;
import com.sonar.orchestrator.build.MavenBuild;
-import com.sonar.orchestrator.config.Configuration;
import com.sonar.orchestrator.container.Server;
import com.sonar.orchestrator.locator.FileLocation;
import com.sonar.orchestrator.version.Version;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;
-import java.util.stream.Stream;
import org.apache.commons.io.IOUtils;
import org.junit.After;
import org.junit.Test;
public class UpgradeTest {
private static final String PROJECT_KEY = "org.apache.struts:struts-parent";
- private static final String SQ_VERSION_DEV = "DEV";
private static final String LATEST_JAVA_RELEASE = "LATEST_RELEASE";
private Orchestrator orchestrator;
@Test
public void test_upgrade_from_5_6_1() {
- testDatabaseUpgrade("3.14", Version.create("5.6.1"));
+ testDatabaseUpgrade(Version.create("5.6.1"));
}
@Test
public void test_upgrade_from_5_2_via_5_6() {
- testDatabaseUpgrade("3.14", Version.create("5.2"), Version.create("5.6"));
+ testDatabaseUpgrade(Version.create("5.2"), Version.create("5.6"));
}
- private void testDatabaseUpgrade(String javaVersion, Version fromVersion, Version... intermediaryVersions) {
- startOldServer(fromVersion, javaVersion);
+ @Test
+ public void test_upgrade_from_6_0() {
+ testDatabaseUpgrade(Version.create("6.0"));
+ }
+
+ @Test
+ public void test_upgrade_from_6_1() {
+ testDatabaseUpgrade(Version.create("6.1"));
+ }
+
+ private void testDatabaseUpgrade(Version fromVersion, Version... intermediaryVersions) {
+ startOldVersionServer(fromVersion, false);
scanProject();
int files = countFiles(PROJECT_KEY);
assertThat(files).isGreaterThan(0);
stopServer();
- Stream.concat(Arrays.stream(intermediaryVersions).map(Version::toString), Stream.of(SQ_VERSION_DEV))
- .forEach((sqVersion) -> {
- upgradeTo(sqVersion, javaVersion);
+ Arrays.stream(intermediaryVersions).forEach((sqVersion) -> {
+ startOldVersionServer(sqVersion, true);
+ upgrade();
+ verifyAnalysis(files);
+ stopServer();
+ });
- assertThat(countFiles(PROJECT_KEY)).isEqualTo(files);
- scanProject();
- assertThat(countFiles(PROJECT_KEY)).isEqualTo(files);
- browseWebapp();
+ startDevServer();
+ upgrade();
+ verifyAnalysis(files);
+ stopServer();
+ }
- stopServer();
- });
+ private void verifyAnalysis(int expectedNumberOfFiles) {
+ assertThat(countFiles(PROJECT_KEY)).isEqualTo(expectedNumberOfFiles);
+ scanProject();
+ assertThat(countFiles(PROJECT_KEY)).isEqualTo(expectedNumberOfFiles);
+ browseWebapp();
}
- private void upgradeTo(String sqVersion, String javaVersion) {
- startNewServer(sqVersion, SQ_VERSION_DEV.equals(sqVersion) ? LATEST_JAVA_RELEASE : javaVersion);
+ private void upgrade() {
checkSystemStatus(ServerStatusResponse.Status.DB_MIGRATION_NEEDED);
checkUrlsBeforeUpgrade();
testUrl("/profiles");
}
- private void upgrade() {
- ServerMigrationResponse serverMigrationResponse = new ServerMigrationCall(orchestrator).callAndWait();
-
- assertThat(serverMigrationResponse.getStatus()).isEqualTo(ServerMigrationResponse.Status.MIGRATION_SUCCEEDED);
- }
-
- private void startOldServer(Version sqVersion, String javaVersion) {
- String jdbcUrl = MssqlConfig.fixUrl(Configuration.createEnv(), sqVersion);
- orchestrator = Orchestrator.builderEnv()
- .setOrchestratorProperty("sonar.jdbc.url", jdbcUrl)
+ private void startOldVersionServer(Version sqVersion, boolean keepDatabase) {
+ OrchestratorBuilder builder = Orchestrator.builderEnv()
.setSonarVersion(sqVersion.toString())
- .setOrchestratorProperty("orchestrator.keepDatabase", "false")
- .restoreProfileAtStartup(FileLocation.ofClasspath("/sonar-way-5.1.xml"))
- .setOrchestratorProperty("javaVersion", javaVersion)
- .addPlugin("java").build();
+ .setOrchestratorProperty("orchestrator.keepDatabase", String.valueOf(keepDatabase))
+ .setOrchestratorProperty("javaVersion", "3.14")
+ .addPlugin("java")
+ .setStartupLogWatcher(log -> log.contains("Process[web] is up"));
+ orchestrator = builder.build();
orchestrator.start();
}
- private void startNewServer(String sqVersion, String javaVersion) {
+ private void startDevServer() {
OrchestratorBuilder builder = Orchestrator.builderEnv()
- .setSonarVersion(sqVersion)
+ .setZipFile(FileLocation.byWildcardMavenFilename(new File("../../sonar-application/target"), "sonar*.zip").getFile())
.setOrchestratorProperty("orchestrator.keepDatabase", "true")
- .setOrchestratorProperty("javaVersion", javaVersion)
- .setStartupLogWatcher(log -> log.contains("Process[web] is up"))
- .addPlugin("java");
+ .setOrchestratorProperty("javaVersion", LATEST_JAVA_RELEASE)
+ .addPlugin("java")
+ .setStartupLogWatcher(log -> log.contains("Process[web] is up"));
orchestrator = builder.build();
orchestrator.start();
}
.setCleanSonarGoals()
.setProperty("sonar.dynamicAnalysis", "false")
.setProperty("sonar.scm.disabled", "true")
- .setProperty("sonar.cpd.cross_project", "true")
- .setProperty("sonar.profile", "sonar-way-5.1");
+ .setProperty("sonar.cpd.cross_project", "true");
orchestrator.executeBuild(build);
}