summaryrefslogtreecommitdiffstats
path: root/it
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2016-01-05 16:44:14 +0100
committerJulien Lancelot <julien.lancelot@sonarsource.com>2016-01-06 12:41:22 +0100
commit36619d7c9a56bef27d2430b77685e7a4f65abb55 (patch)
tree0c77a8cc220e36b6ec9296ceb4564bc320313c98 /it
parenta07fbac7ad588c9a8936deee82b2250afb98be1c (diff)
downloadsonarqube-36619d7c9a56bef27d2430b77685e7a4f65abb55.tar.gz
sonarqube-36619d7c9a56bef27d2430b77685e7a4f65abb55.zip
SONAR-7093 Allow projects to define their leak period
Diffstat (limited to 'it')
-rw-r--r--it/it-tests/src/test/java/it/measureHistory/DifferentialPeriodsTest.java60
-rw-r--r--it/it-tests/src/test/java/util/ItUtils.java13
-rw-r--r--it/it-tests/src/test/resources/measureHistory/DifferentialPeriodsTest/define-leak-period-on-project.html49
3 files changed, 111 insertions, 11 deletions
diff --git a/it/it-tests/src/test/java/it/measureHistory/DifferentialPeriodsTest.java b/it/it-tests/src/test/java/it/measureHistory/DifferentialPeriodsTest.java
index c1e9606ab4e..9bf64ac8fc4 100644
--- a/it/it-tests/src/test/java/it/measureHistory/DifferentialPeriodsTest.java
+++ b/it/it-tests/src/test/java/it/measureHistory/DifferentialPeriodsTest.java
@@ -5,6 +5,7 @@ import com.sonar.orchestrator.build.SonarRunner;
import com.sonar.orchestrator.locator.FileLocation;
import com.sonar.orchestrator.selenium.Selenese;
import it.Category1Suite;
+import java.util.Date;
import java.util.List;
import org.junit.After;
import org.junit.Before;
@@ -14,13 +15,18 @@ import org.sonar.wsclient.services.Measure;
import org.sonar.wsclient.services.Resource;
import org.sonar.wsclient.services.ResourceQuery;
import util.ItUtils;
+import util.selenium.SeleneseTest;
+import static org.apache.commons.lang.time.DateUtils.addDays;
import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.formatDate;
import static util.ItUtils.projectDir;
import static util.ItUtils.setServerProperty;
public class DifferentialPeriodsTest {
+ static final String PROJECT_KEY = "sample";
+
@ClassRule
public static final Orchestrator orchestrator = Category1Suite.ORCHESTRATOR;
@@ -46,18 +52,18 @@ public class DifferentialPeriodsTest {
*/
@Test
public void ensure_differential_period_4_and_5_defined_at_project_level_is_taken_into_account() throws Exception {
- setServerProperty(orchestrator, "sonar.timemachine.period4", "30");
- setServerProperty(orchestrator, "sonar.timemachine.period5", "previous_analysis");
+ orchestrator.getServer().provisionProject(PROJECT_KEY, PROJECT_KEY);
+ setServerProperty(orchestrator, PROJECT_KEY, "sonar.timemachine.period4", "30");
+ setServerProperty(orchestrator, PROJECT_KEY, "sonar.timemachine.period5", "previous_analysis");
// Execute an analysis in the past to have a past snapshot without any issues
- orchestrator.getServer().provisionProject("sample", "sample");
- orchestrator.getServer().associateProjectToQualityProfile("sample", "xoo", "empty");
+ orchestrator.getServer().associateProjectToQualityProfile(PROJECT_KEY, "xoo", "empty");
orchestrator.executeBuild(SonarRunner.create(projectDir("shared/xoo-sample"))
- .setProperty("sonar.projectDate", "2013-01-01"));
+ .setProperty("sonar.projectDate", formatDate(addDays(new Date(), -60))));
// Second analysis -> issues will be created
orchestrator.getServer().restoreProfile(FileLocation.ofClasspath("/measureHistory/one-issue-per-line-profile.xml"));
- orchestrator.getServer().associateProjectToQualityProfile("sample", "xoo", "one-issue-per-line");
+ orchestrator.getServer().associateProjectToQualityProfile(PROJECT_KEY, "xoo", "one-issue-per-line");
orchestrator.executeBuild(SonarRunner.create(projectDir("shared/xoo-sample")));
// New technical debt only comes from new issues
@@ -68,7 +74,7 @@ public class DifferentialPeriodsTest {
assertThat(measures.get(0).getVariation5()).isEqualTo(17);
// Third analysis, with exactly the same profile -> no new issues so no new technical debt
- orchestrator.getServer().associateProjectToQualityProfile("sample", "xoo", "one-issue-per-line");
+ orchestrator.getServer().associateProjectToQualityProfile(PROJECT_KEY, "xoo", "one-issue-per-line");
orchestrator.executeBuild(SonarRunner.create(projectDir("shared/xoo-sample")));
newTechnicalDebt = orchestrator.getServer().getWsClient().find(
@@ -80,12 +86,48 @@ public class DifferentialPeriodsTest {
}
/**
+ * SONAR-7093
+ */
+ @Test
+ public void ensure_leak_period_defined_at_project_level_is_taken_into_account() throws Exception {
+ orchestrator.getServer().provisionProject(PROJECT_KEY, PROJECT_KEY);
+
+ // Set a global property and a project property to ensure project property is used
+ setServerProperty(orchestrator, "sonar.timemachine.period1", "previous_analysis");
+ setServerProperty(orchestrator, PROJECT_KEY, "sonar.timemachine.period1", "30");
+
+ // Execute an analysis in the past to have a past snapshot without any issues
+ orchestrator.getServer().associateProjectToQualityProfile(PROJECT_KEY, "xoo", "empty");
+ orchestrator.executeBuild(SonarRunner.create(projectDir("shared/xoo-sample"))
+ .setProperty("sonar.projectDate", formatDate(addDays(new Date(), -15))));
+
+ // Second analysis -> issues will be created
+ orchestrator.getServer().restoreProfile(FileLocation.ofClasspath("/measureHistory/one-issue-per-line-profile.xml"));
+ orchestrator.getServer().associateProjectToQualityProfile(PROJECT_KEY, "xoo", "one-issue-per-line");
+ orchestrator.executeBuild(SonarRunner.create(projectDir("shared/xoo-sample")));
+
+ // Third analysis -> There's no new issue from previous analysis
+ orchestrator.executeBuild(SonarRunner.create(projectDir("shared/xoo-sample")));
+
+ // Project should have 17 new issues for period 1
+ Resource newTechnicalDebt = orchestrator.getServer().getWsClient()
+ .find(ResourceQuery.createForMetrics(PROJECT_KEY, "violations").setIncludeTrends(true));
+ List<Measure> measures = newTechnicalDebt.getMeasures();
+ assertThat(measures.get(0).getVariation1()).isEqualTo(17);
+
+ // Check on ui that it's possible to define leak period on project
+ new SeleneseTest(Selenese.builder().setHtmlTestsInClasspath("define-leak-period-on-project",
+ "/measureHistory/DifferentialPeriodsTest/define-leak-period-on-project.html"
+ ).build()).runOn(orchestrator);
+ }
+
+ /**
* SONAR-4700
*/
@Test
public void not_display_periods_selection_dropdown_on_first_analysis() {
- orchestrator.getServer().provisionProject("sample", "sample");
- orchestrator.getServer().associateProjectToQualityProfile("sample", "xoo", "empty");
+ orchestrator.getServer().provisionProject(PROJECT_KEY, PROJECT_KEY);
+ orchestrator.getServer().associateProjectToQualityProfile(PROJECT_KEY, "xoo", "empty");
orchestrator.executeBuild(SonarRunner.create(projectDir("shared/xoo-sample")));
// Use old way to execute Selenium because 'assertSelectOptions' action is not supported by SeleneseTest
diff --git a/it/it-tests/src/test/java/util/ItUtils.java b/it/it-tests/src/test/java/util/ItUtils.java
index 6270b999363..c5f6e0d06dc 100644
--- a/it/it-tests/src/test/java/util/ItUtils.java
+++ b/it/it-tests/src/test/java/util/ItUtils.java
@@ -201,10 +201,14 @@ public class ItUtils {
}
public static void setServerProperty(Orchestrator orchestrator, String key, @Nullable String value) {
+ setServerProperty(orchestrator, null, key, value);
+ }
+
+ public static void setServerProperty(Orchestrator orchestrator, @Nullable String componentKey, String key, @Nullable String value) {
if (value == null) {
- orchestrator.getServer().getAdminWsClient().delete(new PropertyDeleteQuery(key));
+ orchestrator.getServer().getAdminWsClient().delete(new PropertyDeleteQuery(key).setResourceKeyOrId(componentKey));
} else {
- orchestrator.getServer().getAdminWsClient().update(new PropertyUpdateQuery().setKey(key).setValue(value));
+ orchestrator.getServer().getAdminWsClient().update(new PropertyUpdateQuery().setKey(key).setResourceKeyOrId(componentKey).setValue(value));
}
}
@@ -248,4 +252,9 @@ public class ItUtils {
}
}
+ public static String formatDate(Date d) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ return sdf.format(d);
+ }
+
}
diff --git a/it/it-tests/src/test/resources/measureHistory/DifferentialPeriodsTest/define-leak-period-on-project.html b/it/it-tests/src/test/resources/measureHistory/DifferentialPeriodsTest/define-leak-period-on-project.html
new file mode 100644
index 00000000000..1d426c899f0
--- /dev/null
+++ b/it/it-tests/src/test/resources/measureHistory/DifferentialPeriodsTest/define-leak-period-on-project.html
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <title>display-added-files</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+ <thead>
+ <tr>
+ <td rowspan="1" colspan="3">should_display_added_files_in_differential_drilldown</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>open</td>
+ <td>/sonar/sessions/logout</td>
+ <td></td>
+</tr>
+<tr>
+ <td>open</td>
+ <td>/sonar/project/settings?id=sample&amp;category=general&amp;subcategory=differentialviews</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>id=login</td>
+ <td>admin</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>id=password</td>
+ <td>admin</td>
+</tr>
+<tr>
+ <td>clickAndWait</td>
+ <td>name=commit</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>properties</td>
+ <td>*Leak Period*</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>