]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8574 Replace usage of api/resources/index by api/measures/component in ITs
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 17 Jan 2017 11:19:23 +0000 (12:19 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 18 Jan 2017 14:23:40 +0000 (15:23 +0100)
41 files changed:
it/it-tests/src/test/java/it/analysis/IssuesModeTest.java
it/it-tests/src/test/java/it/analysis/MultiLanguageTest.java
it/it-tests/src/test/java/it/analysis/ProjectBuilderTest.java
it/it-tests/src/test/java/it/analysis/ScannerTest.java
it/it-tests/src/test/java/it/analysisExclusion/FileExclusionsTest.java
it/it-tests/src/test/java/it/analysisExclusion/IssueExclusionsTest.java
it/it-tests/src/test/java/it/customMeasure/CustomMeasuresTest.java
it/it-tests/src/test/java/it/duplication/CrossModuleDuplicationsTest.java
it/it-tests/src/test/java/it/duplication/CrossProjectDuplicationsOnRemoveFileTest.java
it/it-tests/src/test/java/it/duplication/CrossProjectDuplicationsTest.java
it/it-tests/src/test/java/it/duplication/DuplicationsTest.java
it/it-tests/src/test/java/it/duplication/NewDuplicationsTest.java
it/it-tests/src/test/java/it/issue/IssueFilterExtensionTest.java
it/it-tests/src/test/java/it/issue/IssueFilterTest.java
it/it-tests/src/test/java/it/issue/IssueMeasureTest.java
it/it-tests/src/test/java/it/issue/NewIssuesMeasureTest.java
it/it-tests/src/test/java/it/measure/DecimalScaleMetricTest.java
it/it-tests/src/test/java/it/measureHistory/DifferentialPeriodsTest.java
it/it-tests/src/test/java/it/measureHistory/SincePreviousVersionHistoryTest.java
it/it-tests/src/test/java/it/measureHistory/SinceXDaysHistoryTest.java
it/it-tests/src/test/java/it/measureHistory/TimeMachineTest.java
it/it-tests/src/test/java/it/plugins/checks/Validation.java
it/it-tests/src/test/java/it/projectAdministration/ProjectAdministrationTest.java
it/it-tests/src/test/java/it/qualityGate/QualityGateNotificationTest.java
it/it-tests/src/test/java/it/qualityGate/QualityGateOnRatingMeasuresTest.java
it/it-tests/src/test/java/it/qualityGate/QualityGateTest.java
it/it-tests/src/test/java/it/qualityModel/MaintainabilityMeasureTest.java
it/it-tests/src/test/java/it/qualityModel/MaintainabilityRatingMeasureTest.java
it/it-tests/src/test/java/it/qualityModel/NewDebtRatioMeasureTest.java
it/it-tests/src/test/java/it/qualityModel/ReliabilityMeasureTest.java
it/it-tests/src/test/java/it/qualityModel/SecurityMeasureTest.java
it/it-tests/src/test/java/it/qualityModel/TechnicalDebtMeasureVariationTest.java
it/it-tests/src/test/java/it/test/CoverageTest.java
it/it-tests/src/test/java/it/test/NewCoverageTest.java
it/it-tests/src/test/java/it/test/TestExecutionTest.java
it/it-tests/src/test/java/util/ItUtils.java
server/sonar-server/src/test/java/org/sonar/server/component/ws/ShowActionTest.java
tests/perf/pom.xml
tests/perf/src/test/java/org/sonarsource/sonarqube/perf/scanner/suite/DuplicationTest.java
tests/upgrade/pom.xml
tests/upgrade/src/test/java/org/sonarsource/sonarqube/upgrade/UpgradeTest.java

index 905ceb7abb8aa62bc9df468d437f07ad6f2b9fc4..15115e6e42f906e68e14064fbaa77e9a2cdf309c 100644 (file)
@@ -56,13 +56,13 @@ import org.sonar.wsclient.issue.Issue;
 import org.sonar.wsclient.issue.IssueClient;
 import org.sonar.wsclient.issue.IssueQuery;
 import org.sonar.wsclient.issue.Issues;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import org.sonar.wsclient.user.UserParameters;
 import util.ItUtils;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.fail;
+import static util.ItUtils.getComponent;
+import static util.ItUtils.getMeasureAsDouble;
 
 public class IssuesModeTest {
 
@@ -206,7 +206,7 @@ public class IssuesModeTest {
     assertThat(result.getLogs()).doesNotContain("'One Issue Per Line' skipped because there is no related file in current project");
     ItUtils.assertIssuesInJsonReport(result, 3, 0, 17);
   }
-  
+
   // SONAR-8518
   @Test
   public void shoud_support_sonar_profile_prop() throws IOException {
@@ -214,8 +214,8 @@ public class IssuesModeTest {
     restoreProfile("empty.xml");
     orchestrator.getServer().provisionProject("sample", "xoo-sample");
     orchestrator.getServer().associateProjectToQualityProfile("sample", "xoo", "empty");
-    
-    SonarScanner runner = configureRunner("shared/xoo-sample", 
+
+    SonarScanner runner = configureRunner("shared/xoo-sample",
       "sonar.verbose", "true",
       "sonar.analysis.mode", "issues",
       "sonar.profile", "one-issue-per-line");
@@ -231,14 +231,13 @@ public class IssuesModeTest {
     orchestrator.getServer().associateProjectToQualityProfile("sample", "xoo", "with-many-rules");
 
     SonarScanner runner = configureRunner("analysis/xoo-sample-with-spaces/v2");
-    BuildResult result = orchestrator.executeBuild(runner);
-    assertThat(getResource("sample:my sources/main/xoo/sample/My Sample.xoo")).isNotNull();
+    orchestrator.executeBuild(runner);
+    assertThat(getComponent(orchestrator, "sample:my sources/main/xoo/sample/My Sample.xoo")).isNotNull();
 
     runner = configureRunnerIssues("analysis/xoo-sample-with-spaces/v2", null);
-    result = orchestrator.executeBuild(runner);
+    BuildResult result = orchestrator.executeBuild(runner);
     // Analysis is not persisted in database
-    Resource project = getResource("com.sonarsource.it.samples:simple-sample");
-    assertThat(project).isNull();
+    assertThat(getComponent(orchestrator, "com.sonarsource.it.samples:simple-sample")).isNull();
     assertThat(result.getLogs()).contains("Issues");
     assertThat(result.getLogs()).contains("ANALYSIS SUCCESSFUL");
   }
@@ -251,19 +250,19 @@ public class IssuesModeTest {
 
     // First real scan with source
     SonarScanner runner = configureRunner("shared/xoo-history-v2");
-    BuildResult result = orchestrator.executeBuild(runner);
-    assertThat(getResource("sample:src/main/xoo/sample/ClassAdded.xoo")).isNotNull();
+    orchestrator.executeBuild(runner);
+    assertThat(getComponent(orchestrator, "sample:src/main/xoo/sample/ClassAdded.xoo")).isNotNull();
 
     // Second scan should remove ClassAdded.xoo
     runner = configureRunner("shared/xoo-history-v1");
-    result = orchestrator.executeBuild(runner);
-    assertThat(getResource("sample:src/main/xoo/sample/ClassAdded.xoo")).isNull();
+    orchestrator.executeBuild(runner);
+    assertThat(getMeasureAsDouble(orchestrator, "sample:src/main/xoo/sample/ClassAdded.xoo", "ncloc")).isNull();
 
     // Re-add ClassAdded.xoo in local workspace
     runner = configureRunnerIssues("shared/xoo-history-v2", null);
-    result = orchestrator.executeBuild(runner);
+    BuildResult result = orchestrator.executeBuild(runner);
 
-    assertThat(getResource("sample:src/main/xoo/sample/ClassAdded.xoo")).isNull();
+    assertThat(getMeasureAsDouble(orchestrator, "sample:src/main/xoo/sample/ClassAdded.xoo", "ncloc")).isNull();
     assertThat(result.getLogs()).contains("Issues");
     assertThat(result.getLogs()).contains("ANALYSIS SUCCESSFUL");
   }
@@ -433,10 +432,6 @@ public class IssuesModeTest {
     orchestrator.getServer().restoreProfile(FileLocation.ofClasspath("/analysis/IssuesModeTest/" + fileName));
   }
 
-  private Resource getResource(String key) {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(key, "lines"));
-  }
-
   private SonarScanner configureRunnerIssues(String projectDir, @Nullable File homeDir, String... props) throws IOException {
     SonarScanner scanner = SonarScanner.create(ItUtils.projectDir(projectDir),
       "sonar.working.directory", temp.newFolder().getAbsolutePath(),
index 9442fc8ab699fc325a10f0de4395e7e33161419d..c9b1b6ff92971de9cb403aa49de95bc81ac77d9f 100644 (file)
@@ -24,14 +24,15 @@ import com.sonar.orchestrator.build.BuildResult;
 import com.sonar.orchestrator.build.SonarScanner;
 import com.sonar.orchestrator.locator.FileLocation;
 import it.Category3Suite;
+import java.util.Map;
 import org.junit.After;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import util.ItUtils;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasureAsDouble;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
 
 public class MultiLanguageTest {
 
@@ -55,7 +56,7 @@ public class MultiLanguageTest {
     orchestrator.getServer().provisionProject("multi-language-sample", "multi-language-sample");
 
     orchestrator.getServer().associateProjectToQualityProfile("multi-language-sample", "xoo", "one-issue-per-line");
-    orchestrator.getServer().associateProjectToQualityProfile("multi-language-sample","xoo2", "one-issue-per-line-xoo2");
+    orchestrator.getServer().associateProjectToQualityProfile("multi-language-sample", "xoo2", "one-issue-per-line-xoo2");
 
     SonarScanner build = SonarScanner.create().setProjectDir(ItUtils.projectDir("analysis/xoo-multi-languages"));
     BuildResult result = orchestrator.executeBuild(build);
@@ -65,18 +66,11 @@ public class MultiLanguageTest {
     assertThat(result.getLogs()).contains("Quality profile for xoo2: one-issue-per-line-xoo2");
 
     // modules
-    Resource project = getResource("multi-language-sample", "files", "violations");
-    assertThat(project.getMeasureIntValue("files")).isEqualTo(2);
-    assertThat(project.getMeasureIntValue("violations")).isEqualTo(26);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, "multi-language-sample", "files", "violations");
+    assertThat(measures.get("files")).isEqualTo(2);
+    assertThat(measures.get("violations")).isEqualTo(26);
 
-    Resource xooFile = getResource("multi-language-sample:src/sample/Sample.xoo", "violations");
-    assertThat(xooFile.getMeasureIntValue("violations")).isEqualTo(13);
-
-    Resource xoo2File = getResource("multi-language-sample:src/sample/Sample.xoo2", "violations");
-    assertThat(xoo2File.getMeasureIntValue("violations")).isEqualTo(13);
-  }
-
-  private Resource getResource(String resourceKey, String... metricKeys) {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(resourceKey, metricKeys));
+    assertThat(getMeasureAsDouble(orchestrator, "multi-language-sample:src/sample/Sample.xoo", "violations")).isEqualTo(13);
+    assertThat(getMeasureAsDouble(orchestrator, "multi-language-sample:src/sample/Sample.xoo2", "violations")).isEqualTo(13);
   }
 }
index 8236c5fed5262f64dad688c754080345c46592e3..f1d59cf9e1cc68d7806cd9202fa31dbc1823a2b0 100644 (file)
@@ -22,13 +22,14 @@ package it.analysis;
 import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.MavenBuild;
 import it.Category3Suite;
+import java.util.Map;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import util.ItUtils;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getComponent;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
 
 /**
  * Test the extension point org.sonar.api.batch.bootstrap.ProjectBuilder
@@ -56,34 +57,30 @@ public class ProjectBuilderTest {
     checkSubProject("project-builder-module-b");
     checkFile("project-builder-module-a", "src/HelloA.java");
     checkFile("project-builder-module-b", "src/HelloB.java");
-    assertThat(getResource("com.sonarsource.it.projects.batch:project-builder-module-b:src/IgnoredFile.java")).isNull();
+    assertThat(getComponent(orchestrator, "com.sonarsource.it.projects.batch:project-builder-module-b:src/IgnoredFile.java")).isNull();
   }
 
   private void checkProject() {
-    Resource project = getResource("com.sonarsource.it.projects.batch:project-builder");
-
     // name has been changed by plugin
-    assertThat(project.getName()).isEqualTo("Name changed by plugin");
+    assertThat(getComponent(orchestrator, "com.sonarsource.it.projects.batch:project-builder").getName()).isEqualTo("Name changed by plugin");
 
-    assertThat(project).isNotNull();
-    assertThat(project.getMeasureIntValue("files")).isEqualTo(2);
-    assertThat(project.getMeasureIntValue("lines")).isGreaterThan(10);
+    Map<String, Double> measures = getMeasures("com.sonarsource.it.projects.batch:project-builder");
+    assertThat(measures.get("files")).isEqualTo(2);
+    assertThat(measures.get("lines")).isGreaterThan(10);
   }
 
   private void checkSubProject(String subProjectKey) {
-    Resource subProject = getResource("com.sonarsource.it.projects.batch:" + subProjectKey);
-    assertThat(subProject).isNotNull();
-    assertThat(subProject.getMeasureIntValue("files")).isEqualTo(1);
-    assertThat(subProject.getMeasureIntValue("lines")).isGreaterThan(5);
+    Map<String, Double> measures = getMeasures("com.sonarsource.it.projects.batch:" + subProjectKey);
+    assertThat(measures.get("files")).isEqualTo(1);
+    assertThat(measures.get("lines")).isGreaterThan(5);
   }
 
   private void checkFile(String subProjectKey, String fileKey) {
-    Resource file = getResource("com.sonarsource.it.projects.batch:" + subProjectKey + ":" + fileKey);
-    assertThat(file).isNotNull();
-    assertThat(file.getMeasureIntValue("lines")).isGreaterThan(5);
+    Map<String, Double> measures = getMeasures("com.sonarsource.it.projects.batch:" + subProjectKey + ":" + fileKey);
+    assertThat(measures.get("lines")).isGreaterThan(5);
   }
 
-  private Resource getResource(String key) {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(key, "lines", "files"));
+  private Map<String, Double> getMeasures(String key) {
+    return getMeasuresAsDoubleByMetricKey(orchestrator, key, "lines", "files");
   }
 }
index da7ff0ad2e5c9aecc6cfca62efb2234ed2085598..20030ca3982515f8384a9bc88af7b871197297fc 100644 (file)
@@ -26,7 +26,7 @@ import com.sonar.orchestrator.locator.FileLocation;
 import it.Category3Suite;
 import java.io.File;
 import java.io.IOException;
-import java.util.Date;
+import java.util.Map;
 import org.apache.commons.io.FileUtils;
 import org.junit.Assume;
 import org.junit.Before;
@@ -36,12 +36,16 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.junit.rules.TemporaryFolder;
-import org.sonar.wsclient.Sonar;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.client.component.SearchWsRequest;
 import util.ItUtils;
 
+import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getComponent;
+import static util.ItUtils.getComponentNavigation;
+import static util.ItUtils.getMeasureAsDouble;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
+import static util.ItUtils.newAdminWsClient;
 import static util.ItUtils.resetSettings;
 import static util.ItUtils.setServerProperty;
 
@@ -70,14 +74,10 @@ public class ScannerTest {
     scan("shared/xoo-multi-modules-sample");
     scan("shared/xoo-multi-modules-sample", "sonar.branch", "branch/0.x");
 
-    Sonar sonar = orchestrator.getServer().getWsClient();
-    assertThat(sonar.findAll(new ResourceQuery().setQualifiers("TRK"))).hasSize(2);
-
-    Resource master = sonar.find(new ResourceQuery("com.sonarsource.it.samples:multi-modules-sample"));
-    assertThat(master.getName()).isEqualTo("Sonar :: Integration Tests :: Multi-modules Sample");
-
-    Resource branch = sonar.find(new ResourceQuery("com.sonarsource.it.samples:multi-modules-sample:branch/0.x"));
-    assertThat(branch.getName()).isEqualTo("Sonar :: Integration Tests :: Multi-modules Sample branch/0.x");
+    assertThat(newAdminWsClient(orchestrator).components().search(new SearchWsRequest().setQualifiers(singletonList("TRK"))).getComponentsList()).hasSize(2);
+    assertThat(getComponent(orchestrator, "com.sonarsource.it.samples:multi-modules-sample").getName()).isEqualTo("Sonar :: Integration Tests :: Multi-modules Sample");
+    assertThat(getComponent(orchestrator, "com.sonarsource.it.samples:multi-modules-sample:branch/0.x").getName())
+      .isEqualTo("Sonar :: Integration Tests :: Multi-modules Sample branch/0.x");
   }
 
   @Test
@@ -85,8 +85,7 @@ public class ScannerTest {
     scan("shared/xoo-multi-modules-sample",
       "sonar.profile", "one-issue-per-line",
       "sonar.verbose", "true");
-    Resource r = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics("com.sonarsource.it.samples:multi-modules-sample", "violations"));
-    assertThat(r.getMeasureIntValue("violations")).isEqualTo(61);
+    assertThat(getMeasureAsDouble(orchestrator, "com.sonarsource.it.samples:multi-modules-sample", "violations")).isEqualTo(61);
   }
 
   // SONAR-4680
@@ -149,11 +148,10 @@ public class ScannerTest {
     orchestrator.getServer().associateProjectToQualityProfile("com.sonarsource.it.projects.batch:duplicate-source", "xoo", "one-issue-per-line");
     scan("analysis/duplicate-source");
 
-    Sonar sonar = orchestrator.getServer().getAdminWsClient();
-    Resource project = sonar.find(new ResourceQuery("com.sonarsource.it.projects.batch:duplicate-source").setMetrics("files", "directories"));
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, "com.sonarsource.it.projects.batch:duplicate-source", "files", "directories");
     // 2 main files and 1 test file all with same deprecated key
-    assertThat(project.getMeasureIntValue("files")).isEqualTo(2);
-    assertThat(project.getMeasureIntValue("directories")).isEqualTo(2);
+    assertThat(measures.get("files")).isEqualTo(2);
+    assertThat(measures.get("directories")).isEqualTo(2);
   }
 
   /**
@@ -224,11 +222,8 @@ public class ScannerTest {
   }
 
   private void assertNameAndVersion(String projectKey, String expectedProjectName, String expectedProjectVersion) {
-    // new WS Client with api/components doesn't return the project version, so use the old one
-    Resource resource = orchestrator.getServer().getAdminWsClient().find(new ResourceQuery(projectKey));
-    assertThat(resource.getName()).isEqualTo(expectedProjectName);
-    assertThat(resource.getVersion()).isEqualTo(expectedProjectVersion);
-
+    assertThat(getComponent(orchestrator, projectKey).getName()).isEqualTo(expectedProjectName);
+    assertThat(getComponentNavigation(orchestrator, projectKey).getVersion()).isEqualTo(expectedProjectVersion);
   }
 
   @Test
@@ -366,9 +361,9 @@ public class ScannerTest {
     orchestrator.getServer().associateProjectToQualityProfile("case-sensitive-file-extensions", "xoo", "one-issue-per-line");
     scan("analysis/case-sensitive-file-extensions");
 
-    Resource project = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics("case-sensitive-file-extensions", "files", "ncloc"));
-    assertThat(project.getMeasureIntValue("files")).isEqualTo(2);
-    assertThat(project.getMeasureIntValue("ncloc")).isEqualTo(5 + 2);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, "case-sensitive-file-extensions", "files", "ncloc");
+    assertThat(measures.get("files")).isEqualTo(2);
+    assertThat(measures.get("ncloc")).isEqualTo(5 + 2);
   }
 
   /**
@@ -379,8 +374,8 @@ public class ScannerTest {
     orchestrator.getServer().provisionProject("com.sonarsource.it.samples:multi-modules-sample", "Sonar :: Integration Tests :: Multi-modules Sample");
     orchestrator.getServer().associateProjectToQualityProfile("com.sonarsource.it.samples:multi-modules-sample", "xoo", "one-issue-per-line");
     scan("analysis/custom-module-key");
-    assertThat(getResource("com.sonarsource.it.samples:moduleA")).isNotNull();
-    assertThat(getResource("com.sonarsource.it.samples:moduleB")).isNotNull();
+    assertThat(getComponent(orchestrator, "com.sonarsource.it.samples:moduleA")).isNotNull();
+    assertThat(getComponent(orchestrator, "com.sonarsource.it.samples:moduleB")).isNotNull();
   }
 
   /**
@@ -392,8 +387,8 @@ public class ScannerTest {
     orchestrator.getServer().provisionProject("projectAB", "project AB");
     orchestrator.getServer().associateProjectToQualityProfile("projectAB", "xoo", "one-issue-per-line");
     scan("analysis/prevent-common-module/projectAB");
-    assertThat(getResource("com.sonarsource.it.samples:moduleA")).isNotNull();
-    assertThat(getResource("com.sonarsource.it.samples:moduleB")).isNotNull();
+    assertThat(getComponent(orchestrator, "com.sonarsource.it.samples:moduleA")).isNotNull();
+    assertThat(getComponent(orchestrator, "com.sonarsource.it.samples:moduleB")).isNotNull();
 
     orchestrator.getServer().provisionProject("projectAC", "project AC");
     orchestrator.getServer().associateProjectToQualityProfile("projectAC", "xoo", "one-issue-per-line");
@@ -403,20 +398,6 @@ public class ScannerTest {
     assertThat(result.getLogs()).contains("Module \"com.sonarsource.it.samples:moduleA\" is already part of project \"projectAB\"");
   }
 
-  /**
-   * SONAR-4235
-   */
-  @Test
-  public void test_project_creation_date() {
-    long before = new Date().getTime() - 2000l;
-    orchestrator.getServer().provisionProject("sample", "xoo-sample");
-    orchestrator.getServer().associateProjectToQualityProfile("sample", "xoo", "one-issue-per-line");
-    orchestrator.executeBuild(SonarScanner.create(ItUtils.projectDir("shared/xoo-sample")));
-    long after = new Date().getTime() + 2000l;
-    Resource xooSample = orchestrator.getServer().getWsClient().find(new ResourceQuery().setResourceKeyOrId("sample"));
-    assertThat(xooSample.getCreationDate().getTime()).isGreaterThan(before).isLessThan(after);
-  }
-
   /**
    * SONAR-4334
    */
@@ -438,10 +419,6 @@ public class ScannerTest {
     assertThat(result.getLogs()).contains("This property may only be used to rebuild the past in a chronological order.");
   }
 
-  private Resource getResource(String key) {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(key, "lines"));
-  }
-
   private BuildResult scan(String projectPath, String... props) {
     SonarScanner scanner = configureScanner(projectPath, props);
     return orchestrator.executeBuild(scanner);
index 4612bad12a28aea290d5ceab13884d115122f45c..651e27d8bebdc2b30e741bb4936ace24dcb02485 100644 (file)
@@ -23,14 +23,18 @@ import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.SonarScanner;
 import it.Category4Suite;
 import java.util.List;
+import java.util.Map;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.WsComponents.Component;
+import org.sonarqube.ws.client.component.TreeWsRequest;
 import util.ItUtils;
 
+import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
+import static util.ItUtils.newWsClient;
 
 public class FileExclusionsTest {
   static final String PROJECT = "exclusions";
@@ -50,11 +54,10 @@ public class FileExclusionsTest {
       "sonar.exclusions", "**/*Exclude*.xoo,src/main/xoo/org/sonar/tests/packageToExclude/**",
       "sonar.test.exclusions", "**/ClassTwoTest.xoo");
 
-    Resource project = projectWithMetrics("ncloc", "files", "directories");
-
-    assertThat(project.getMeasureIntValue("files")).isEqualTo(4);
-    assertThat(project.getMeasureIntValue("ncloc")).isEqualTo(60);
-    assertThat(project.getMeasureIntValue("directories")).isEqualTo(2);
+    Map<String, Double> measures = getMeasuresAsDouble("ncloc", "files", "directories");
+    assertThat(measures.get("files").intValue()).isEqualTo(4);
+    assertThat(measures.get("ncloc").intValue()).isEqualTo(60);
+    assertThat(measures.get("directories").intValue()).isEqualTo(2);
   }
 
   /**
@@ -67,11 +70,9 @@ public class FileExclusionsTest {
       "sonar.exclusions", "**/*Exclude*.xoo,org/sonar/tests/packageToExclude/**",
       "sonar.test.exclusions", "**/ClassTwoTest.xoo");
 
-    List<Resource> testFiles = orchestrator.getServer().getWsClient()
-      .findAll(new ResourceQuery(PROJECT).setQualifiers("UTS").setDepth(-1));
-
+    List<Component> testFiles = getComponents("UTS");
     assertThat(testFiles).hasSize(2);
-    assertThat(testFiles).extracting("name").doesNotContain("ClassTwoTest.xoo");
+    assertThat(testFiles).extracting(Component::getName).doesNotContain("ClassTwoTest.xoo");
   }
 
   /**
@@ -83,14 +84,11 @@ public class FileExclusionsTest {
       "sonar.dynamicAnalysis", "false",
       "sonar.inclusions", "**/*One.xoo,**/*Two.xoo");
 
-    Resource project = projectWithMetrics("files");
-    assertThat(project.getMeasureIntValue("files")).isEqualTo(2);
-
-    List<Resource> sourceFiles = orchestrator.getServer().getWsClient()
-      .findAll(new ResourceQuery(PROJECT).setQualifiers("FIL").setDepth(-1));
+    assertThat(getMeasuresAsDouble("files").get("files")).isEqualTo(2);
 
+    List<Component> sourceFiles = getComponents("FIL");
     assertThat(sourceFiles).hasSize(2);
-    assertThat(sourceFiles).extracting("name").containsOnly("ClassOne.xoo", "ClassTwo.xoo");
+    assertThat(sourceFiles).extracting(Component::getName).containsOnly("ClassOne.xoo", "ClassTwo.xoo");
   }
 
   /**
@@ -100,14 +98,11 @@ public class FileExclusionsTest {
   public void include_test_files() {
     scan("sonar.test.inclusions", "src/test/xoo/**/*One*.xoo,src/test/xoo/**/*Two*.xoo");
 
-    Resource project = projectWithMetrics("tests");
-    assertThat(project.getMeasureIntValue("tests")).isEqualTo(2);
-
-    List<Resource> testFiles = orchestrator.getServer().getWsClient()
-      .findAll(new ResourceQuery(PROJECT).setQualifiers("UTS").setDepth(-1));
+    assertThat(getMeasuresAsDouble("tests").get("tests")).isEqualTo(2);
 
+    List<Component> testFiles = getComponents("UTS");
     assertThat(testFiles).hasSize(2);
-    assertThat(testFiles).extracting("name").containsOnly("ClassOneTest.xoo", "ClassTwoTest.xoo");
+    assertThat(testFiles).extracting(Component::getName).containsOnly("ClassOneTest.xoo", "ClassTwoTest.xoo");
   }
 
   /**
@@ -122,15 +117,13 @@ public class FileExclusionsTest {
       // exclude ClassThree and ClassToExclude
       "sonar.exclusions", "file:**/src/main/xoo/org/**/packageToExclude/*.xoo,file:**/src/main/xoo/org/**/*Exclude.xoo");
 
-    List<Resource> sourceFiles = orchestrator.getServer().getWsClient()
-      .findAll(new ResourceQuery(PROJECT).setQualifiers("FIL").setDepth(-1));
-
+    List<Component> sourceFiles = getComponents("FIL");
     assertThat(sourceFiles).hasSize(4);
-    assertThat(sourceFiles).extracting("name").containsOnly("ClassOne.xoo", "ClassToIgnoreGlobally.xoo", "ClassTwo.xoo", "NoSonarComment.xoo");
+    assertThat(sourceFiles).extracting(Component::getName).containsOnly("ClassOne.xoo", "ClassToIgnoreGlobally.xoo", "ClassTwo.xoo", "NoSonarComment.xoo");
   }
 
-  static Resource projectWithMetrics(String... metricKeys) {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT, metricKeys));
+  static Map<String, Double> getMeasuresAsDouble(String... metricKeys) {
+    return getMeasuresAsDoubleByMetricKey(orchestrator, PROJECT, metricKeys);
   }
 
   private void scan(String... properties) {
@@ -139,4 +132,8 @@ public class FileExclusionsTest {
       .setProperties(properties);
     orchestrator.executeBuild(build);
   }
+
+  public static List<Component> getComponents(String qualifier) {
+    return newWsClient(orchestrator).components().tree(new TreeWsRequest().setBaseComponentKey(PROJECT).setQualifiers(singletonList(qualifier))).getComponentsList();
+  }
 }
index 2103ed3f7a441b6b98f02dc3919633d30b37928e..5e0057207fd7daeabecdf46da398ab129402f118 100644 (file)
@@ -24,14 +24,14 @@ import com.sonar.orchestrator.build.BuildResult;
 import com.sonar.orchestrator.build.SonarScanner;
 import com.sonar.orchestrator.locator.FileLocation;
 import it.Category4Suite;
+import java.util.Map;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import util.ItUtils;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
 
 public class IssueExclusionsTest {
 
@@ -71,7 +71,7 @@ public class IssueExclusionsTest {
       "sonar.issue.enforce.multicriteria.1.ruleKey", "*");
 
     checkIssueCountBySeverity(
-      1 /* tag */+ 18 /* lines in HelloA1.xoo */+ 1 /* file */,
+      1 /* tag */ + 18 /* lines in HelloA1.xoo */ + 1 /* file */,
       0 + 1,
       0 + 18,
       0 + 1,
@@ -89,7 +89,7 @@ public class IssueExclusionsTest {
       "sonar.issue.enforce.multicriteria.2.ruleKey", "*");
 
     checkIssueCountBySeverity(
-      2 /* tags */+ 18 /* lines in HelloA1.xoo */+ 15 /* lines in HelloA2.xoo */+ 2 /* files */,
+      2 /* tags */ + 18 /* lines in HelloA1.xoo */ + 15 /* lines in HelloA2.xoo */ + 2 /* files */,
       0 + 2,
       0 + 18 + 15,
       0 + 2,
@@ -107,7 +107,7 @@ public class IssueExclusionsTest {
       "sonar.issue.enforce.multicriteria.2.ruleKey", "xoo:HasTag");
 
     checkIssueCountBySeverity(
-      1 /* tag in HelloA2 */+ 18 /* lines in HelloA1.xoo */+ 4 /* files */+ 4 /* modules */,
+      1 /* tag in HelloA2 */ + 18 /* lines in HelloA1.xoo */ + 4 /* files */ + 4 /* modules */,
       0 + 1,
       0 + 18,
       4,
@@ -122,7 +122,7 @@ public class IssueExclusionsTest {
       "sonar.issue.ignore.allfile.1.fileRegexp", "EXTERMINATE-ALL-ISSUES");
 
     checkIssueCountBySeverity(
-      67 - 1 /* tag */- 18 /* lines in HelloA1.xoo */- 1 /* file */,
+      67 - 1 /* tag */ - 18 /* lines in HelloA1.xoo */ - 1 /* file */,
       2 - 1,
       57 - 18,
       4 - 1,
@@ -138,7 +138,7 @@ public class IssueExclusionsTest {
       "sonar.issue.ignore.block.1.endBlockRegexp", "UNMUTE-SONAR");
 
     checkIssueCountBySeverity(
-      67 - 1 /* tag */- 5 /* lines in HelloA2.xoo */,
+      67 - 1 /* tag */ - 5 /* lines in HelloA2.xoo */,
       2 - 1,
       57 - 5,
       4,
@@ -154,7 +154,7 @@ public class IssueExclusionsTest {
       "sonar.issue.ignore.block.1.endBlockRegexp", "");
 
     checkIssueCountBySeverity(
-      67 - 1 /* tag */- 7 /* remaining lines in HelloA2.xoo */,
+      67 - 1 /* tag */ - 7 /* remaining lines in HelloA2.xoo */,
       2 - 1,
       57 - 7,
       4,
@@ -191,8 +191,8 @@ public class IssueExclusionsTest {
       "sonar.issue.ignore.multicriteria.1.ruleKey", "xoo:OneIssuePerLine");
 
     checkIssueCountBySeverity(
-      67 - 1 /* tag in HelloA1.xoo */- 1 /* tag in HelloA2.xoo */
-        - 18 /* lines in HelloA1.xoo */- 5 /* lines in HelloA2.xoo */- 12 /* lines in HelloB1.xoo */
+      67 - 1 /* tag in HelloA1.xoo */ - 1 /* tag in HelloA2.xoo */
+        - 18 /* lines in HelloA1.xoo */ - 5 /* lines in HelloA2.xoo */ - 12 /* lines in HelloB1.xoo */
         - 1 /* HelloA1.xoo file */,
       0,
       57 - 18 - 5 - 12,
@@ -246,15 +246,14 @@ public class IssueExclusionsTest {
   }
 
   private void checkIssueCountBySeverity(int total, int taggedXoo, int perLine, int perFile, int blocker, int perModule) {
-    Resource project = orchestrator.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics(PROJECT_KEY, "violations", "info_violations", "minor_violations", "major_violations",
-        "blocker_violations", "critical_violations"));
-    assertThat(project.getMeasureIntValue("violations")).isEqualTo(total);
-    assertThat(project.getMeasureIntValue("info_violations")).isEqualTo(taggedXoo); // Has tag 'xoo'
-    assertThat(project.getMeasureIntValue("minor_violations")).isEqualTo(perLine); // One per line
-    assertThat(project.getMeasureIntValue("major_violations")).isEqualTo(perFile); // One per file
-    assertThat(project.getMeasureIntValue("blocker_violations")).isEqualTo(blocker);
-    assertThat(project.getMeasureIntValue("critical_violations")).isEqualTo(perModule); // One per module
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, PROJECT_KEY, "violations", "info_violations", "minor_violations", "major_violations",
+      "blocker_violations", "critical_violations");
+    assertThat(measures.get("violations").intValue()).isEqualTo(total);
+    assertThat(measures.get("info_violations").intValue()).isEqualTo(taggedXoo); // Has tag 'xoo'
+    assertThat(measures.get("minor_violations").intValue()).isEqualTo(perLine); // One per line
+    assertThat(measures.get("major_violations").intValue()).isEqualTo(perFile); // One per file
+    assertThat(measures.get("blocker_violations").intValue()).isEqualTo(blocker);
+    assertThat(measures.get("critical_violations").intValue()).isEqualTo(perModule); // One per module
   }
 
   private void checkAnalysisFails(String... properties) {
index b2ade28a916e10f567394173ccaeeae16dbb836f..c3ba2dc6c5cb64264f9b9c66d249be6a6edd1517 100644 (file)
@@ -27,9 +27,7 @@ import java.util.regex.Pattern;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import util.ItUtils;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static util.ItUtils.projectDir;
@@ -52,13 +50,13 @@ public class CustomMeasuresTest {
     setBurnedBudget(1200.3);
     setTeamSize(4);
 
-    assertThat(getMeasure("team_size")).isNull();
-    assertThat(getMeasure("burned_budget")).isNull();
+    assertThat(getMeasureAsDouble("team_size")).isNull();
+    assertThat(getMeasureAsDouble("burned_budget")).isNull();
 
     analyzeProject();
 
-    assertThat(getMeasure("burned_budget").getValue()).isEqualTo(1200.3);
-    assertThat(getMeasure("team_size").getIntValue()).isEqualTo(4);
+    assertThat(getMeasureAsDouble("burned_budget")).isEqualTo(1200.3);
+    assertThat(getMeasureAsDouble("team_size")).isEqualTo(4d);
   }
 
   @Test
@@ -67,9 +65,9 @@ public class CustomMeasuresTest {
     setTeamSize(4);
     analyzeProject();
     updateTeamSize(15);
-    assertThat(getMeasure("team_size").getIntValue()).isEqualTo(4);
+    assertThat(getMeasureAsDouble("team_size")).isEqualTo(4d);
     analyzeProject();// the value is available when the project is analyzed again
-    assertThat(getMeasure("team_size").getIntValue()).isEqualTo(15);
+    assertThat(getMeasureAsDouble("team_size")).isEqualTo(15d);
   }
 
   @Test
@@ -78,10 +76,11 @@ public class CustomMeasuresTest {
     setTeamSize(4);
     analyzeProject();
     deleteCustomMeasure("team_size");
-    assertThat(getMeasure("team_size").getIntValue()).isEqualTo(4);// the value is still available. It will be removed during next analyzed
+    assertThat(getMeasureAsDouble("team_size")).isEqualTo(4d);// the value is still available. It will be removed during next
+                                                                           // analyzed
 
     analyzeProject();
-    assertThat(getMeasure("team_size")).isNull();
+    assertThat(getMeasureAsDouble("team_size")).isNull();
   }
 
   private void analyzeProject() {
@@ -112,8 +111,7 @@ public class CustomMeasuresTest {
     orchestrator.getServer().adminWsClient().post("api/custom_measures/delete", "id", customMeasureId);
   }
 
-  private Measure getMeasure(String metricKey) {
-    Resource resource = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT_KEY, metricKey));
-    return resource != null ? resource.getMeasure(metricKey) : null;
+  private Double getMeasureAsDouble(String metricKey) {
+    return ItUtils.getMeasureAsDouble(orchestrator, PROJECT_KEY, metricKey);
   }
 }
index 371a49172494049071f584f6b1986e35826af872..6ffa169c9d78b17b8f9d92168441fe3a5e33b5a6 100644 (file)
@@ -26,6 +26,7 @@ import com.sonar.orchestrator.locator.FileLocation;
 import it.Category4Suite;
 import java.io.File;
 import java.io.IOException;
+import java.util.Map;
 import org.apache.commons.io.FileUtils;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -33,11 +34,10 @@ import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import util.ItUtils;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
 
 public class CrossModuleDuplicationsTest {
   private static final String PROJECT_KEY = "cross-module";
@@ -59,7 +59,7 @@ public class CrossModuleDuplicationsTest {
   public void setUpProject() throws IOException {
     orchestrator.resetData();
     orchestrator.getServer().restoreProfile(FileLocation.ofClasspath("/duplication/xoo-duplication-profile.xml"));
-    
+
     FileUtils.copyDirectory(ItUtils.projectDir(PROJECT_DIR), temp.getRoot());
     projectDir = temp.getRoot();
   }
@@ -135,17 +135,10 @@ public class CrossModuleDuplicationsTest {
   }
 
   private static void verifyDuplicationMeasures(String componentKey, int duplicatedBlocks, int duplicatedLines, int duplicatedFiles, double duplicatedLinesDensity) {
-    Resource file = getComponent(componentKey);
-    assertThat(file.getMeasureValue("duplicated_blocks").intValue()).isEqualTo(duplicatedBlocks);
-    assertThat(file.getMeasureValue("duplicated_lines").intValue()).isEqualTo(duplicatedLines);
-    assertThat(file.getMeasureValue("duplicated_files").intValue()).isEqualTo(duplicatedFiles);
-    assertThat(file.getMeasureValue("duplicated_lines_density")).isEqualTo(duplicatedLinesDensity);
-  }
-
-  private static Resource getComponent(String key) {
-    Resource component = orchestrator.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics(key, "duplicated_lines", "duplicated_blocks", "duplicated_files", "duplicated_lines_density"));
-    assertThat(component).isNotNull();
-    return component;
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, componentKey, "duplicated_lines", "duplicated_blocks", "duplicated_files", "duplicated_lines_density");
+    assertThat(measures.get("duplicated_blocks").intValue()).isEqualTo(duplicatedBlocks);
+    assertThat(measures.get("duplicated_lines").intValue()).isEqualTo(duplicatedLines);
+    assertThat(measures.get("duplicated_files").intValue()).isEqualTo(duplicatedFiles);
+    assertThat(measures.get("duplicated_lines_density")).isEqualTo(duplicatedLinesDensity);
   }
 }
index 3c063cb4a37ae8c7116039f9bc919efda3294304..8134aad50573bfc26ef61718316d876772368c8b 100644 (file)
@@ -26,10 +26,10 @@ import org.apache.commons.io.IOUtils;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.ResourceQuery;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.skyscreamer.jsonassert.JSONAssert.assertEquals;
+import static util.ItUtils.getComponent;
 import static util.ItUtils.runProjectAnalysis;
 import static util.selenium.Selenese.runSelenese;
 
@@ -52,7 +52,7 @@ public class CrossProjectDuplicationsOnRemoveFileTest {
 
     // Remove origin project
     orchestrator.getServer().adminWsClient().post("api/projects/bulk_delete", "keys", ORIGIN_PROJECT);
-    assertThat(orchestrator.getServer().getAdminWsClient().find(ResourceQuery.create(ORIGIN_PROJECT))).isNull();
+    assertThat(getComponent(orchestrator, ORIGIN_PROJECT)).isNull();
   }
 
   @Test
index 88702941d789b08883451177c7635cab379bb32a..109ac4ddacd7b1bbd2585c0e2b7c45588d56add3 100644 (file)
@@ -23,19 +23,22 @@ import com.google.common.collect.ObjectArrays;
 import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.locator.FileLocation;
 import it.Category4Suite;
-import java.util.List;
+import java.util.Map;
 import org.apache.commons.io.IOUtils;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.issue.Issue;
-import org.sonar.wsclient.issue.IssueQuery;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.client.GetRequest;
+import org.sonarqube.ws.client.issue.SearchWsRequest;
+import util.issue.IssueRule;
 
+import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.skyscreamer.jsonassert.JSONAssert.assertEquals;
+import static util.ItUtils.getMeasureAsDouble;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
+import static util.ItUtils.newAdminWsClient;
 import static util.ItUtils.runProjectAnalysis;
 import static util.ItUtils.setServerProperty;
 import static util.selenium.Selenese.runSelenese;
@@ -56,6 +59,9 @@ public class CrossProjectDuplicationsTest {
   @ClassRule
   public static Orchestrator orchestrator = Category4Suite.ORCHESTRATOR;
 
+  @ClassRule
+  public static final IssueRule issueRule = IssueRule.from(orchestrator);
+
   @BeforeClass
   public static void analyzeProjects() {
     orchestrator.resetData();
@@ -83,20 +89,17 @@ public class CrossProjectDuplicationsTest {
 
   @Test
   public void duplicate_project_has_duplication_as_it_has_been_analyzed_twice() throws Exception {
-    assertThat(getMeasure(DUPLICATE_PROJECT, "duplicated_lines")).isEqualTo(27);
-    assertThat(getMeasure(DUPLICATE_PROJECT, "duplicated_blocks")).isEqualTo(1);
-    assertThat(getMeasure(DUPLICATE_PROJECT, "duplicated_files")).isEqualTo(1);
-    assertThat(getComponent(DUPLICATE_PROJECT, "duplicated_lines_density").getMeasureValue("duplicated_lines_density")).isEqualTo(45d);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, DUPLICATE_PROJECT, "duplicated_lines", "duplicated_blocks", "duplicated_files", "duplicated_lines_density");
+    assertThat(measures.get("duplicated_lines").intValue()).isEqualTo(27);
+    assertThat(measures.get("duplicated_blocks").intValue()).isEqualTo(1);
+    assertThat(measures.get("duplicated_files").intValue()).isEqualTo(1);
+    assertThat(measures.get("duplicated_lines_density")).isEqualTo(45d);
   }
 
   @Test
   public void issue_on_duplicated_blocks_is_generated_on_file() throws Exception {
-    List<Issue> issues = orchestrator.getServer().wsClient().issueClient()
-      .find(IssueQuery.create()
-        .components(DUPLICATE_FILE)
-        .rules("common-xoo:DuplicatedBlocks"))
-      .list();
-    assertThat(issues).hasSize(1);
+    assertThat(issueRule.search(new SearchWsRequest().setComponentKeys(singletonList(DUPLICATE_FILE)).setRules(singletonList("common-xoo:DuplicatedBlocks"))).getIssuesList())
+      .hasSize(1);
   }
 
   @Test
@@ -155,22 +158,12 @@ public class CrossProjectDuplicationsTest {
         additionalProperties, String.class));
   }
 
-  private static int getMeasure(String projectKey, String metricKey) {
-    Integer intMeasure = getComponent(projectKey, metricKey).getMeasureIntValue(metricKey);
-    assertThat(intMeasure).isNotNull();
-    return intMeasure;
-  }
-
-  private static Resource getComponent(String projectKey, String metricKey) {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(projectKey, metricKey));
-  }
-
   private static void assertProjectHasNoDuplication(String projectKey) {
-    assertThat(getMeasure(projectKey, "duplicated_lines")).isZero();
+    assertThat(getMeasureAsDouble(orchestrator, projectKey, "duplicated_lines")).isZero();
   }
 
   private static void verifyWsResultOnDuplicateFile(String ws, String expectedFilePath) throws Exception {
-    String duplication = orchestrator.getServer().adminWsClient().get(ws, "key", DUPLICATE_FILE);
+    String duplication = newAdminWsClient(orchestrator).wsConnector().call(new GetRequest(ws).setParam("key", DUPLICATE_FILE)).content();
     assertEquals(IOUtils.toString(CrossProjectDuplicationsTest.class.getResourceAsStream("/duplication/CrossProjectDuplicationsTest/" + expectedFilePath), "UTF-8"), duplication,
       false);
   }
index 18e2d20d49809d849673e9e53996fa9dd009d521..79e645af3d05d73e796181aa1f28ee7c336126b4 100644 (file)
@@ -23,19 +23,19 @@ import com.google.common.collect.ObjectArrays;
 import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.locator.FileLocation;
 import it.Category4Suite;
-import java.util.List;
+import java.util.Map;
 import org.apache.commons.io.IOUtils;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.issue.Issue;
-import org.sonar.wsclient.issue.IssueQuery;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.client.issue.SearchWsRequest;
+import util.issue.IssueRule;
 
+import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.skyscreamer.jsonassert.JSONAssert.assertEquals;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
 import static util.ItUtils.runProjectAnalysis;
 import static util.ItUtils.setServerProperty;
 
@@ -48,6 +48,9 @@ public class DuplicationsTest {
   @ClassRule
   public static Orchestrator orchestrator = Category4Suite.ORCHESTRATOR;
 
+  @ClassRule
+  public static final IssueRule issueRule = IssueRule.from(orchestrator);
+
   @BeforeClass
   public static void analyzeProjects() {
     orchestrator.resetData();
@@ -119,11 +122,7 @@ public class DuplicationsTest {
 
   @Test
   public void issues_on_duplicated_blocks_are_generated_on_each_file() throws Exception {
-    List<Issue> issues = orchestrator.getServer().wsClient().issueClient()
-      .find(IssueQuery.create()
-        .rules("common-xoo:DuplicatedBlocks"))
-      .list();
-    assertThat(issues).hasSize(13);
+    assertThat(issueRule.search(new SearchWsRequest().setRules(singletonList("common-xoo:DuplicatedBlocks"))).getIssuesList()).hasSize(13);
   }
 
   @Test
@@ -138,19 +137,16 @@ public class DuplicationsTest {
       "api/duplications/show", "duplications_show-expected.json");
   }
 
-  private static Resource getComponent(String key) {
-    Resource component = orchestrator.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics(key, "duplicated_lines", "duplicated_blocks", "duplicated_files", "duplicated_lines_density"));
-    assertThat(component).isNotNull();
-    return component;
+  private static Map<String, Double> getMeasures(String key) {
+    return getMeasuresAsDoubleByMetricKey(orchestrator, key, "duplicated_lines", "duplicated_blocks", "duplicated_files", "duplicated_lines_density");
   }
 
   private static void verifyDuplicationMeasures(String componentKey, int duplicatedBlocks, int duplicatedLines, int duplicatedFiles, double duplicatedLinesDensity) {
-    Resource file = getComponent(componentKey);
-    assertThat(file.getMeasureValue("duplicated_blocks").intValue()).isEqualTo(duplicatedBlocks);
-    assertThat(file.getMeasureValue("duplicated_lines").intValue()).isEqualTo(duplicatedLines);
-    assertThat(file.getMeasureValue("duplicated_files").intValue()).isEqualTo(duplicatedFiles);
-    assertThat(file.getMeasureValue("duplicated_lines_density")).isEqualTo(duplicatedLinesDensity);
+    Map<String, Double> measures = getMeasures(componentKey);
+    assertThat(measures.get("duplicated_blocks").intValue()).isEqualTo(duplicatedBlocks);
+    assertThat(measures.get("duplicated_lines").intValue()).isEqualTo(duplicatedLines);
+    assertThat(measures.get("duplicated_files").intValue()).isEqualTo(duplicatedFiles);
+    assertThat(measures.get("duplicated_lines_density")).isEqualTo(duplicatedLinesDensity);
   }
 
   private static void analyzeProject(String projectKey, String... additionalProperties) {
index b0c3bf917e6c4a85f9de86ac9bf6f30c652e3c22..0e30868ba005dc038a6b41a86af881e867eeb2d2 100644 (file)
@@ -21,14 +21,16 @@ package it.duplication;
 
 import com.sonar.orchestrator.Orchestrator;
 import it.Category4Suite;
+import java.util.Map;
 import org.assertj.core.data.Offset;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.WsMeasures;
 
+import static java.lang.Double.parseDouble;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasuresWithVariationsByMetricKey;
 import static util.ItUtils.runProjectAnalysis;
 
 public class NewDuplicationsTest {
@@ -51,35 +53,32 @@ public class NewDuplicationsTest {
 
   @Test
   public void new_duplications_on_project() throws Exception {
-    Resource project = getComponent("new-duplications");
-    assertThat(project.getMeasure("new_lines").getVariation1()).isEqualTo(83d, DEFAULT_OFFSET);
-    assertThat(project.getMeasure("new_duplicated_lines").getVariation1()).isEqualTo(71d, DEFAULT_OFFSET);
-    assertThat(project.getMeasure("new_duplicated_lines_density").getVariation1()).isEqualTo(85.5d, DEFAULT_OFFSET);
-    assertThat(project.getMeasure("new_duplicated_blocks").getVariation1()).isEqualTo(12d, DEFAULT_OFFSET);
+    Map<String, WsMeasures.Measure> measures = getMeasures("new-duplications");
+    assertThat(parseDouble(measures.get("new_lines").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(83d, DEFAULT_OFFSET);
+    assertThat(parseDouble(measures.get("new_duplicated_lines").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(71d, DEFAULT_OFFSET);
+    assertThat(parseDouble(measures.get("new_duplicated_lines_density").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(85.5d, DEFAULT_OFFSET);
+    assertThat(parseDouble(measures.get("new_duplicated_blocks").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(12d, DEFAULT_OFFSET);
   }
 
   @Test
   public void new_duplications_on_directory() throws Exception {
-    Resource project = getComponent("new-duplications:src/main/xoo/duplicated_lines_with_other_dir1");
-    assertThat(project.getMeasure("new_lines").getVariation1()).isEqualTo(24d, DEFAULT_OFFSET);
-    assertThat(project.getMeasure("new_duplicated_lines").getVariation1()).isEqualTo(24d, DEFAULT_OFFSET);
-    assertThat(project.getMeasure("new_duplicated_lines_density").getVariation1()).isEqualTo(100d, DEFAULT_OFFSET);
-    assertThat(project.getMeasure("new_duplicated_blocks").getVariation1()).isEqualTo(7d, DEFAULT_OFFSET);
+    Map<String, WsMeasures.Measure> measures = getMeasures("new-duplications:src/main/xoo/duplicated_lines_with_other_dir1");
+    assertThat(parseDouble(measures.get("new_lines").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(24d, DEFAULT_OFFSET);
+    assertThat(parseDouble(measures.get("new_duplicated_lines").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(24d, DEFAULT_OFFSET);
+    assertThat(parseDouble(measures.get("new_duplicated_lines_density").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(100d, DEFAULT_OFFSET);
+    assertThat(parseDouble(measures.get("new_duplicated_blocks").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(7d, DEFAULT_OFFSET);
   }
 
   @Test
   public void new_duplications_on_file() throws Exception {
-    Resource project = getComponent("new-duplications:src/main/xoo/duplicated_lines_within_same_file/DuplicatedLinesInSameFile.xoo");
-    assertThat(project.getMeasure("new_lines").getVariation1()).isEqualTo(41d, DEFAULT_OFFSET);
-    assertThat(project.getMeasure("new_duplicated_lines").getVariation1()).isEqualTo(29d, DEFAULT_OFFSET);
-    assertThat(project.getMeasure("new_duplicated_lines_density").getVariation1()).isEqualTo(70.7d, DEFAULT_OFFSET);
-    assertThat(project.getMeasure("new_duplicated_blocks").getVariation1()).isEqualTo(2d, DEFAULT_OFFSET);
+    Map<String, WsMeasures.Measure> measures = getMeasures("new-duplications:src/main/xoo/duplicated_lines_within_same_file/DuplicatedLinesInSameFile.xoo");
+    assertThat(parseDouble(measures.get("new_lines").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(41d, DEFAULT_OFFSET);
+    assertThat(parseDouble(measures.get("new_duplicated_lines").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(29d, DEFAULT_OFFSET);
+    assertThat(parseDouble(measures.get("new_duplicated_lines_density").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(70.7d, DEFAULT_OFFSET);
+    assertThat(parseDouble(measures.get("new_duplicated_blocks").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(2d, DEFAULT_OFFSET);
   }
 
-  private static Resource getComponent(String key) {
-    Resource component = orchestrator.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics(key, "new_lines", "new_duplicated_lines", "new_duplicated_lines_density", "new_duplicated_blocks").setIncludeTrends(true));
-    assertThat(component).isNotNull();
-    return component;
+  private static Map<String, WsMeasures.Measure> getMeasures(String key) {
+    return getMeasuresWithVariationsByMetricKey(orchestrator, key, "new_lines", "new_duplicated_lines", "new_duplicated_lines_density", "new_duplicated_blocks");
   }
 }
index d580259b6680869cb465360c0ea72f7efd46b895..b05c94c81aaecb9c08a8640c44db380fb3f6816a 100644 (file)
 package it.issue;
 
 import java.util.List;
+import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.sonar.wsclient.issue.Issue;
 import org.sonar.wsclient.issue.IssueQuery;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import util.ProjectAnalysis;
 import util.ProjectAnalysisRule;
+import util.issue.IssueRule;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasureAsDouble;
 
 /**
  * Tests the extension point IssueFilter
@@ -40,6 +40,9 @@ public class IssueFilterExtensionTest extends AbstractIssueTest {
   @Rule
   public final ProjectAnalysisRule projectAnalysisRule = ProjectAnalysisRule.from(ORCHESTRATOR);
 
+  @ClassRule
+  public static final IssueRule issueRule = IssueRule.from(ORCHESTRATOR);
+
   private final String manyRuleProfileKey = projectAnalysisRule.registerProfile("/issue/IssueFilterExtensionTest/xoo-with-many-rules.xml");
   private final String xooMultiModuleProjectKey = projectAnalysisRule.registerProject("shared/xoo-multi-modules-sample");
   private final ProjectAnalysis analysis = projectAnalysisRule.newProjectAnalysis(xooMultiModuleProjectKey)
@@ -56,7 +59,7 @@ public class IssueFilterExtensionTest extends AbstractIssueTest {
       assertThat(issue.componentKey()).doesNotContain("HelloA1");
     }
 
-    assertThat(getMeasure(xooMultiModuleProjectKey, "violations").getIntValue()).isEqualTo(issues.size());
+    assertThat(getMeasureAsDouble(ORCHESTRATOR, xooMultiModuleProjectKey, "violations").intValue()).isEqualTo(issues.size());
   }
 
   @Test
@@ -86,17 +89,12 @@ public class IssueFilterExtensionTest extends AbstractIssueTest {
     }
   }
 
-  private static List<Issue> searchUnresolvedIssues(String projectName) {
-    return searchIssues(IssueQuery.create().componentRoots(projectName).resolved(true));
-  }
-
-  private static List<Issue> searchResolvedIssues(String projectName) {
-    return searchIssues(IssueQuery.create().componentRoots(projectName).resolved(false));
+  private static List<Issue> searchUnresolvedIssues(String projectKey) {
+    return searchIssues(IssueQuery.create().componentRoots(projectKey).resolved(true));
   }
 
-  private static Measure getMeasure(String projectKey, String metricKey) {
-    Resource resource = ORCHESTRATOR.getServer().getWsClient().find(ResourceQuery.createForMetrics(projectKey, metricKey));
-    return resource == null ? null : resource.getMeasure(metricKey);
+  private static List<Issue> searchResolvedIssues(String projectKey) {
+    return searchIssues(IssueQuery.create().componentRoots(projectKey).resolved(false));
   }
 
   private static int countModuleIssues(List<Issue> issues) {
index 6482270f2c4294f9cf73917df76d9e42ddd2014f..2f061f9b3ae8a7787db3d0f8417771fbdba943bf 100644 (file)
 package it.issue;
 
 import com.sonar.orchestrator.locator.FileLocation;
+import java.util.Map;
 import org.junit.Before;
 import org.junit.Test;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
 import static util.ItUtils.runProjectAnalysis;
 import static util.ItUtils.setServerProperties;
 
@@ -105,13 +105,11 @@ public class IssueFilterTest extends AbstractIssueTest {
   }
 
   private void checkIssueCountBySeverity(int total, int perFile, int perCommonRule, int perModule) {
-    Resource project = ORCHESTRATOR.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics(PROJECT_KEY, "violations", "major_violations", "blocker_violations", "critical_violations"));
-    assertThat(project.getMeasureIntValue("violations")).isEqualTo(total);
-    assertThat(project.getMeasureIntValue("major_violations")).isEqualTo(perFile); // One per file
-    assertThat(project.getMeasureIntValue("blocker_violations")).isEqualTo(perCommonRule); // On per common rule
-                                                                                           // 'InsufficientCommentDensity'
-    assertThat(project.getMeasureIntValue("critical_violations")).isEqualTo(perModule); // One per module
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(ORCHESTRATOR, PROJECT_KEY, "violations", "major_violations", "blocker_violations", "critical_violations");
+    assertThat(measures.get("violations").intValue()).isEqualTo(total);
+    assertThat(measures.get("major_violations").intValue()).isEqualTo(perFile); // One per file
+    assertThat(measures.get("blocker_violations").intValue()).isEqualTo(perCommonRule); // On per common rule
+    assertThat(measures.get("critical_violations").intValue()).isEqualTo(perModule); // One per module
   }
 
 }
index 507d88cc349350ab9e326cbb9b96995727378f01..e3f36cba061cf827ca68199bcbc88864a3696739 100644 (file)
@@ -21,15 +21,14 @@ package it.issue;
 
 import com.sonar.orchestrator.locator.FileLocation;
 import java.util.List;
+import java.util.Map;
 import org.junit.Before;
 import org.junit.Test;
-import org.sonar.wsclient.Sonar;
 import org.sonar.wsclient.issue.Issue;
 import org.sonar.wsclient.issue.IssueQuery;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
 import static util.ItUtils.runProjectAnalysis;
 
 public class IssueMeasureTest extends AbstractIssueTest {
@@ -51,15 +50,15 @@ public class IssueMeasureTest extends AbstractIssueTest {
 
     assertThat(search(IssueQuery.create().componentRoots(MULTI_MODULE_SAMPLE_PROJECT_KEY)).paging().total()).isEqualTo(136);
 
-    Resource project = ORCHESTRATOR.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics(MULTI_MODULE_SAMPLE_PROJECT_KEY, "violations", "info_violations", "minor_violations", "major_violations",
-        "blocker_violations", "critical_violations"));
-    assertThat(project.getMeasureIntValue("violations")).isEqualTo(136);
-    assertThat(project.getMeasureIntValue("info_violations")).isEqualTo(2);
-    assertThat(project.getMeasureIntValue("minor_violations")).isEqualTo(61);
-    assertThat(project.getMeasureIntValue("major_violations")).isEqualTo(65);
-    assertThat(project.getMeasureIntValue("blocker_violations")).isEqualTo(4);
-    assertThat(project.getMeasureIntValue("critical_violations")).isEqualTo(4);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(ORCHESTRATOR, MULTI_MODULE_SAMPLE_PROJECT_KEY, "violations", "info_violations", "minor_violations",
+      "major_violations",
+      "blocker_violations", "critical_violations");
+    assertThat(measures.get("violations")).isEqualTo(136);
+    assertThat(measures.get("info_violations")).isEqualTo(2);
+    assertThat(measures.get("minor_violations")).isEqualTo(61);
+    assertThat(measures.get("major_violations")).isEqualTo(65);
+    assertThat(measures.get("blocker_violations")).isEqualTo(4);
+    assertThat(measures.get("critical_violations")).isEqualTo(4);
   }
 
   /**
@@ -86,13 +85,13 @@ public class IssueMeasureTest extends AbstractIssueTest {
     // Re analyze the project to compute measures
     runProjectAnalysis(ORCHESTRATOR, "shared/xoo-sample");
 
-    Resource project = ORCHESTRATOR.getServer().getWsClient().find(
-      ResourceQuery.createForMetrics(SAMPLE_PROJECT_KEY, "false_positive_issues", "wont_fix_issues", "open_issues", "reopened_issues", "confirmed_issues"));
-    assertThat(project.getMeasureIntValue("false_positive_issues")).isEqualTo(1);
-    assertThat(project.getMeasureIntValue("wont_fix_issues")).isEqualTo(1);
-    assertThat(project.getMeasureIntValue("open_issues")).isEqualTo(13);
-    assertThat(project.getMeasureIntValue("reopened_issues")).isEqualTo(1);
-    assertThat(project.getMeasureIntValue("confirmed_issues")).isEqualTo(1);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(ORCHESTRATOR, SAMPLE_PROJECT_KEY, "false_positive_issues", "wont_fix_issues", "open_issues", "reopened_issues",
+      "confirmed_issues");
+    assertThat(measures.get("false_positive_issues")).isEqualTo(1);
+    assertThat(measures.get("wont_fix_issues")).isEqualTo(1);
+    assertThat(measures.get("open_issues")).isEqualTo(13);
+    assertThat(measures.get("reopened_issues")).isEqualTo(1);
+    assertThat(measures.get("confirmed_issues")).isEqualTo(1);
   }
 
   @Test
@@ -105,9 +104,9 @@ public class IssueMeasureTest extends AbstractIssueTest {
 
     assertThat(searchIssuesByProject(SAMPLE_PROJECT_KEY)).isEmpty();
 
-    Resource project = ORCHESTRATOR.getServer().getWsClient().find(ResourceQuery.createForMetrics(SAMPLE_PROJECT_KEY, "violations", "blocker_violations"));
-    assertThat(project.getMeasureIntValue("violations")).isEqualTo(0);
-    assertThat(project.getMeasureIntValue("blocker_violations")).isEqualTo(0);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(ORCHESTRATOR, SAMPLE_PROJECT_KEY, "violations", "blocker_violations");
+    assertThat(measures.get("violations")).isEqualTo(0);
+    assertThat(measures.get("blocker_violations")).isEqualTo(0);
   }
 
   /**
@@ -123,11 +122,9 @@ public class IssueMeasureTest extends AbstractIssueTest {
     ORCHESTRATOR.getServer().associateProjectToQualityProfile(projectKey, "xoo", "one-issue-per-file-profile");
     runProjectAnalysis(ORCHESTRATOR, "shared/xoo-sample-with-tests");
 
-    Sonar wsClient = ORCHESTRATOR.getServer().getAdminWsClient();
-
     // Store current number of issues
-    Resource project = wsClient.find(ResourceQuery.createForMetrics(testKey, "violations"));
-    assertThat(project.getMeasureIntValue("violations")).isEqualTo(1);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(ORCHESTRATOR, testKey, "violations");
+    assertThat(measures.get("violations")).isEqualTo(1);
   }
 
 }
index 39c4985a940de7f08463edb89d6f1c948caf417d..b28d7db8b2d92d412ac3f8e3baa7045eee85a50b 100644 (file)
@@ -21,18 +21,20 @@ package it.issue;
 
 import com.sonar.orchestrator.build.SonarScanner;
 import com.sonar.orchestrator.locator.FileLocation;
-import java.util.List;
+import java.util.Map;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.sonar.wsclient.issue.IssueQuery;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.WsMeasures;
+import org.sonarqube.ws.WsMeasures.Measure;
 import util.ItUtils;
 
+import static java.lang.Integer.parseInt;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasuresWithVariationsByMetricKey;
+import static util.ItUtils.getPeriodMeasureValuesByIndex;
 import static util.ItUtils.projectDir;
 import static util.ItUtils.setServerProperty;
 
@@ -72,19 +74,15 @@ public class NewIssuesMeasureTest extends AbstractIssueTest {
     ORCHESTRATOR.executeBuild(SonarScanner.create(projectDir("shared/xoo-sample")));
 
     assertThat(ORCHESTRATOR.getServer().wsClient().issueClient().find(IssueQuery.create()).list()).isNotEmpty();
-    Resource newIssues = ORCHESTRATOR.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics("sample:src/main/xoo/sample/Sample.xoo", "new_violations").setIncludeTrends(true));
-    List<Measure> measures = newIssues.getMeasures();
-    assertThat(measures.get(0).getVariation1().intValue()).isEqualTo(17);
-    assertThat(measures.get(0).getVariation2().intValue()).isEqualTo(17);
+    Map<Integer, Double> newIssues = getPeriodMeasureValuesByIndex(ORCHESTRATOR, "sample:src/main/xoo/sample/Sample.xoo", "new_violations");
+    assertThat(newIssues.get(1)).isEqualTo(17);
+    assertThat(newIssues.get(2)).isEqualTo(17);
 
     // second analysis, with exactly the same profile -> no new issues
     ORCHESTRATOR.executeBuild(SonarScanner.create(projectDir("shared/xoo-sample")));
 
     assertThat(ORCHESTRATOR.getServer().wsClient().issueClient().find(IssueQuery.create()).list()).isNotEmpty();
-    newIssues = ORCHESTRATOR.getServer().getWsClient().find(ResourceQuery.createForMetrics("sample:src/main/xoo/sample/Sample.xoo", "new_violations").setIncludeTrends(true));
-    // No variation => measure is purged
-    assertThat(newIssues).isNull();
+    assertThat(getPeriodMeasureValuesByIndex(ORCHESTRATOR, "sample:src/main/xoo/sample/Sample.xoo", "new_violations").values()).containsOnly(0d, 0d, 0d);
   }
 
   @Test
@@ -99,11 +97,9 @@ public class NewIssuesMeasureTest extends AbstractIssueTest {
     ORCHESTRATOR.executeBuild(SonarScanner.create(projectDir("shared/xoo-sample")));
 
     // new issues measures should be to 0 on project on 2 periods as new issues has been created
-    Resource file = ORCHESTRATOR.getServer().getWsClient().find(ResourceQuery.createForMetrics("sample", "new_violations").setIncludeTrends(true));
-    List<Measure> measures = file.getMeasures();
-    Measure newIssues = find(measures, "new_violations");
-    assertThat(newIssues.getVariation1().intValue()).isEqualTo(0);
-    assertThat(newIssues.getVariation2().intValue()).isEqualTo(0);
+    Map<Integer, Double> measures = getPeriodMeasureValuesByIndex(ORCHESTRATOR, "sample", "new_violations");
+    assertThat(measures.get(1)).isZero();
+    assertThat(measures.get(2)).isZero();
   }
 
   /**
@@ -123,21 +119,17 @@ public class NewIssuesMeasureTest extends AbstractIssueTest {
     ORCHESTRATOR.executeBuilds(SonarScanner.create(projectDir("shared/xoo-history-v2")));
 
     assertThat(ORCHESTRATOR.getServer().wsClient().issueClient().find(IssueQuery.create()).list()).isNotEmpty();
-    Resource file = ORCHESTRATOR.getServer().getWsClient().find(ResourceQuery.createForMetrics("sample", "new_violations", "violations", "ncloc").setIncludeTrends(true));
-    List<Measure> measures = file.getMeasures();
-    Measure newIssues = find(measures, "new_violations");
-    assertThat(newIssues.getVariation1().intValue()).isEqualTo(17);
-    assertThat(newIssues.getVariation2().intValue()).isEqualTo(17);
-
-    Measure violations = find(measures, "violations");
-    assertThat(violations.getValue().intValue()).isEqualTo(43);
-    assertThat(violations.getVariation1().intValue()).isEqualTo(17);
-    assertThat(violations.getVariation2().intValue()).isEqualTo(17);
-
-    Measure ncloc = find(measures, "ncloc");
-    assertThat(ncloc.getValue().intValue()).isEqualTo(40);
-    assertThat(ncloc.getVariation1().intValue()).isEqualTo(16);
-    assertThat(ncloc.getVariation2().intValue()).isEqualTo(16);
+
+    Map<String, Measure> measures = getMeasuresWithVariationsByMetricKey(ORCHESTRATOR, "sample", "new_violations", "violations", "ncloc");
+    assertThat(measures.get("new_violations").getPeriods().getPeriodsValueList()).extracting(WsMeasures.PeriodValue::getValue).containsOnly("17", "17", "17");
+
+    Measure violations = measures.get("violations");
+    assertThat(parseInt(violations.getValue())).isEqualTo(43);
+    assertThat(violations.getPeriods().getPeriodsValueList()).extracting(periodValue -> parseInt(periodValue.getValue())).containsOnly(17, 17, 17);
+
+    Measure ncloc = measures.get("ncloc");
+    assertThat(parseInt(ncloc.getValue())).isEqualTo(40);
+    assertThat(ncloc.getPeriods().getPeriodsValueList()).extracting(periodValue -> parseInt(periodValue.getValue())).containsOnly(16, 16, 16);
   }
 
   @Test
@@ -155,20 +147,8 @@ public class NewIssuesMeasureTest extends AbstractIssueTest {
     ORCHESTRATOR.getServer().associateProjectToQualityProfile("com.sonarsource.it.samples:multi-modules-sample", "xoo", "profile2");
     ORCHESTRATOR.executeBuild(SonarScanner.create(projectDir("shared/xoo-multi-modules-sample")));
 
-    Resource project = ORCHESTRATOR.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics("com.sonarsource.it.samples:multi-modules-sample", "new_violations", "violations").setIncludeTrends(true));
-    List<Measure> measures = project.getMeasures();
-    Measure newIssues = find(measures, "new_violations");
-    assertThat(newIssues.getVariation1().intValue()).isEqualTo(65);
-  }
-
-  private Measure find(List<Measure> measures, String metricKey) {
-    for (Measure measure : measures) {
-      if (measure.getMetricKey().equals(metricKey)) {
-        return measure;
-      }
-    }
-    return null;
+    Map<Integer, Double> periodMeasures = getPeriodMeasureValuesByIndex(ORCHESTRATOR, "com.sonarsource.it.samples:multi-modules-sample", "new_violations");
+    assertThat(periodMeasures.get(1)).isEqualTo(65);
   }
 
 }
index b874aa16de1ecc07a5dfba3c939f889c4db02445..455d4ec907f91c8701fa4725c75b5cfcd85ef1bd 100644 (file)
@@ -23,11 +23,10 @@ import com.sonar.orchestrator.Orchestrator;
 import it.Category3Suite;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import util.ItUtils;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasureAsDouble;
 
 /**
  * SONAR-6939
@@ -49,10 +48,6 @@ public class DecimalScaleMetricTest {
       "sonar.projectKey", projectKey,
       "sonar.scanner.feedDecimalScaleMetric", String.valueOf(true));
 
-    Resource resource = orchestrator.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics(projectKey, metricKey));
-    // Ability to define decimal scale of metrics was introduced in v5.3. By default it is 1.
-    assertThat(resource.getMeasureValue(metricKey)).isEqualTo(0.0001);
-    assertThat(resource.getMeasureFormattedValue(metricKey, null)).isEqualTo("0.0001");
+    assertThat(getMeasureAsDouble(orchestrator, projectKey, metricKey)).isEqualTo(0.0001);
   }
 }
index 81a757b9fda78141c7d99a8b376fb855ad304bc9..50904a3583138ccf1452534d289a84990d07c076 100644 (file)
  */
 package it.measureHistory;
 
-import com.google.common.collect.ImmutableMap;
 import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.locator.FileLocation;
 import it.Category1Suite;
-import java.util.ArrayList;
 import java.util.Date;
-import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
-import org.sonarqube.ws.WsMeasures;
 import org.sonarqube.ws.client.WsClient;
-import org.sonarqube.ws.client.measure.ComponentWsRequest;
 import pageobjects.Navigation;
 
-import static java.util.Arrays.asList;
-import static java.util.Collections.singletonList;
 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.getMeasure;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
+import static util.ItUtils.getPeriodMeasureValuesByIndex;
 import static util.ItUtils.newAdminWsClient;
 import static util.ItUtils.resetPeriods;
 import static util.ItUtils.runProjectAnalysis;
@@ -98,21 +90,16 @@ public class DifferentialPeriodsTest {
     runProjectAnalysis(orchestrator, "shared/xoo-sample", "sonar.projectDate", formatDate(addDays(new Date(), -20)));
 
     // New technical debt only comes from new issues
-    Resource newTechnicalDebt = orchestrator.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics("sample:src/main/xoo/sample/Sample.xoo", "new_technical_debt").setIncludeTrends(true));
-    List<Measure> measures = newTechnicalDebt.getMeasures();
-    assertThat(measures.get(0).getVariation4()).isEqualTo(17);
-    assertThat(measures.get(0).getVariation5()).isEqualTo(17);
+    Map<Integer, Double> periodsMeasure = getPeriodMeasureValuesByIndex(orchestrator, "sample:src/main/xoo/sample/Sample.xoo", "new_technical_debt");
+    assertThat(periodsMeasure.get(4)).isEqualTo(17);
+    assertThat(periodsMeasure.get(5)).isEqualTo(17);
 
     // Third analysis, today, with exactly the same profile -> no new issues so no new technical debt
     orchestrator.getServer().associateProjectToQualityProfile(PROJECT_KEY, "xoo", "one-issue-per-line");
     runProjectAnalysis(orchestrator, "shared/xoo-sample");
 
-    newTechnicalDebt = orchestrator.getServer().getWsClient().find(
-      ResourceQuery.createForMetrics("sample:src/main/xoo/sample/Sample.xoo", "new_technical_debt").setIncludeTrends(true));
-
     // No variation => measure is purged
-    assertThat(newTechnicalDebt).isNull();
+    assertThat(getMeasure(orchestrator, "sample:src/main/xoo/sample/Sample.xoo", "new_technical_debt")).isNull();
   }
 
   /**
@@ -139,10 +126,8 @@ public class DifferentialPeriodsTest {
     runProjectAnalysis(orchestrator, "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);
+    Map<Integer, Double> periodsMeasure = getPeriodMeasureValuesByIndex(orchestrator, PROJECT_KEY, "violations");
+    assertThat(periodsMeasure.get(1)).isEqualTo(17);
 
     // Check on ui that it's possible to define leak period on project
     Navigation.get(orchestrator).openHomepage().logIn().asAdmin().openSettings("sample")
@@ -171,10 +156,8 @@ public class DifferentialPeriodsTest {
       "sonar.modules", "module_a,module_b");
 
     // Variation on module b should exist
-    Resource ncloc = orchestrator.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics(MULTI_MODULE_PROJECT_KEY + ":module_b", "ncloc").setIncludeTrends(true));
-    List<Measure> measures = ncloc.getMeasures();
-    assertThat(measures.get(0).getVariation1()).isEqualTo(24);
+    Map<Integer, Double> periodsMeasure = getPeriodMeasureValuesByIndex(orchestrator, MULTI_MODULE_PROJECT_KEY + ":module_b", "ncloc");
+    assertThat(periodsMeasure.get(1)).isEqualTo(24);
   }
 
   @Test
@@ -214,25 +197,11 @@ public class DifferentialPeriodsTest {
       "sonar.scm.provider", "xoo", "sonar.scm.disabled", "false");
 
     // New lines measures is zero
-    assertMeasures(projectKey, ImmutableMap.of("new_lines", 0, "new_lines_to_cover", 0));
-  }
-
-  private void assertMeasures(String projectKey, Map<String, Integer> expectedMeasures) {
-    WsMeasures.ComponentWsResponse response = CLIENT.measures().component(new ComponentWsRequest()
-      .setComponentKey(projectKey)
-      .setMetricKeys(new ArrayList<>(expectedMeasures.keySet()))
-      .setAdditionalFields(singletonList("periods")));
-    Map<String, Integer> measures = response.getComponent().getMeasuresList().stream()
-      .collect(Collectors.toMap(WsMeasures.Measure::getMetric, m -> Integer.parseInt(m.getPeriods().getPeriodsValue(0).getValue())));
-    assertThat(measures).isEqualTo(expectedMeasures);
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, projectKey, "new_lines").get(1)).isEqualTo(0);
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, projectKey, "new_lines_to_cover").get(1)).isEqualTo(0);
   }
 
   private void assertNoMeasures(String projectKey, String... metrics) {
-    WsMeasures.ComponentWsResponse response = CLIENT.measures().component(new ComponentWsRequest()
-      .setComponentKey(projectKey)
-      .setMetricKeys(asList(metrics))
-      .setAdditionalFields(singletonList("periods")));
-    assertThat(response.getComponent().getMeasuresList()).isEmpty();
+    assertThat(getMeasuresAsDoubleByMetricKey(orchestrator, projectKey, metrics)).isEmpty();
   }
-
 }
index fdade6ab96950cfacf1621a211ccc1ac30ad16f5..5fccc477dd50c4578e0cabb14aaac6999b943905 100644 (file)
@@ -31,12 +31,15 @@ import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import util.ItUtils;
 
+import static java.lang.Integer.parseInt;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.groups.Tuple.tuple;
+import static org.sonarqube.ws.WsMeasures.Measure;
+import static org.sonarqube.ws.WsMeasures.PeriodValue;
+import static util.ItUtils.getMeasureWithVariations;
+import static util.ItUtils.getPeriodMeasureValuesByIndex;
 import static util.ItUtils.projectDir;
 import static util.ItUtils.setServerProperty;
 
@@ -101,20 +104,16 @@ public class SincePreviousVersionHistoryTest {
     analyzeProject("1.0-SNAPSHOT");
     analyzeProject("1.0-SNAPSHOT");
 
-    Resource project = getProject("files");
-    Measure measure = project.getMeasure("files");
+    Measure measure = getMeasureWithVariations(orchestrator, PROJECT, "files");
 
     // There are 4 files
-    assertThat(measure.getValue()).isEqualTo(4);
-
-    // nothing changed in the previous analysis
-    assertThat(project.getPeriod1Mode()).isEqualTo("previous_analysis");
-    assertThat(measure.getVariation1()).isEqualTo(0);
-
-    // but 2 files were added since the first analysis which was version 0.9
-    assertThat(project.getPeriod3Mode()).isEqualTo("previous_version");
-    assertThat(project.getPeriod3Param()).isEqualTo("0.9");
-    assertThat(measure.getVariation3()).isEqualTo(2);
+    assertThat(parseInt(measure.getValue())).isEqualTo(4);
+    assertThat(measure.getPeriods().getPeriodsValueList()).extracting(PeriodValue::getIndex, PeriodValue::getValue)
+      .contains(
+        // nothing changed in the previous analysis
+        tuple(1, "0"),
+        // but 2 files were added since the first analysis which was version 0.9
+        tuple(3, "2"));
   }
 
   /**
@@ -127,19 +126,15 @@ public class SincePreviousVersionHistoryTest {
     // Analyze project by excluding some files
     analyzeProject("1.0-SNAPSHOT", "**/*2.xoo", toStringDate(DateUtils.addDays(now, -2)));
     // No difference measure after first analysis
-    assertThat(getProject("files").getMeasure("files").getVariation3()).isNull();
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, PROJECT, "files").get(3)).isNull();
 
     analyzeProjectWithDate("1.0-SNAPSHOT", toStringDate(DateUtils.addDays(now, -1)));
     // No new version, first analysis is used -> 2 new files
-    assertThat(getProject("files").getMeasure("files").getVariation3()).isEqualTo(2);
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, PROJECT, "files").get(3)).isEqualTo(2);
 
     analyzeProjectWithDate("1.0-SNAPSHOT", toStringDate(now));
     // Still no new version, first analysis is used -> 2 new files
-    assertThat(getProject("files").getMeasure("files").getVariation3()).isEqualTo(2);
-  }
-
-  private Resource getProject(String... metricKeys) {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT, metricKeys).setIncludeTrends(true));
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, PROJECT, "files").get(3)).isEqualTo(2);
   }
 
 }
index 1e49b43399e58112a67609a2775b993796fef4a0..dd2dc29143c102fa6be65719191ae0e311fc9ee6 100644 (file)
@@ -31,12 +31,13 @@ import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.WsMeasures;
 import util.ItUtils;
 
+import static java.lang.Integer.parseInt;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.groups.Tuple.tuple;
+import static util.ItUtils.getMeasureWithVariations;
 import static util.ItUtils.projectDir;
 import static util.ItUtils.setServerProperty;
 
@@ -80,16 +81,6 @@ public class SinceXDaysHistoryTest {
     ItUtils.resetPeriods(orchestrator);
   }
 
-  @Test
-  public void periods_are_well_defined() throws Exception {
-    Resource project = getProject("files");
-
-    assertThat(project.getPeriod1Mode()).isEqualTo("previous_analysis");
-
-    assertThat(project.getPeriod2Mode()).isEqualTo("days");
-    assertThat(project.getPeriod2Param()).isEqualTo("30");
-  }
-
   @Test
   public void check_files_variation() throws Exception {
     checkMeasure("files", 2, 3);
@@ -105,16 +96,10 @@ public class SinceXDaysHistoryTest {
     checkMeasure("new_violations", 24, 45);
   }
 
-  private void checkMeasure(String measure, int variation1, int variation2){
-    Resource project = getProject(measure);
-    Measure newTechnicalDebt = project.getMeasure(measure);
-
-    assertThat(newTechnicalDebt.getVariation1().intValue()).isEqualTo(variation1);
-    assertThat(newTechnicalDebt.getVariation2().intValue()).isEqualTo(variation2);
-  }
-
-  private Resource getProject(String... metricKeys) {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT, metricKeys).setIncludeTrends(true));
+  private void checkMeasure(String metric, int variation1, int variation2) {
+    WsMeasures.Measure measure = getMeasureWithVariations(orchestrator, PROJECT, metric);
+    assertThat(measure.getPeriods().getPeriodsValueList()).extracting(WsMeasures.PeriodValue::getIndex, periodValue -> parseInt(periodValue.getValue()))
+      .contains(tuple(1, variation1), tuple(2, variation2));
   }
 
   private static void analyzeProject() {
@@ -132,7 +117,7 @@ public class SinceXDaysHistoryTest {
     orchestrator.executeBuild(runner);
   }
 
-  private static String getPastDate(int nbPastDays){
+  private static String getPastDate(int nbPastDays) {
     return new SimpleDateFormat("yyyy-MM-dd").format(DateUtils.addDays(new Date(), nbPastDays * -1));
   }
 
index b6a2cbf8957062e730c0d4eccbe1a677e940c54c..8e08021888078ea67d4bf794c296171e421e4d50 100644 (file)
@@ -25,18 +25,23 @@ import com.sonar.orchestrator.build.SonarScanner;
 import com.sonar.orchestrator.locator.FileLocation;
 import it.Category1Suite;
 import java.util.Date;
+import java.util.Map;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import org.sonar.wsclient.services.TimeMachine;
 import org.sonar.wsclient.services.TimeMachineCell;
 import org.sonar.wsclient.services.TimeMachineQuery;
+import org.sonarqube.ws.WsMeasures.Measure;
 import util.ItUtils;
+import util.ItUtils.ComponentNavigation;
 
+import static java.lang.Double.parseDouble;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getComponentNavigation;
+import static util.ItUtils.getMeasuresByMetricKey;
+import static util.ItUtils.getMeasuresWithVariationsByMetricKey;
 import static util.ItUtils.projectDir;
 import static util.ItUtils.setServerProperty;
 
@@ -75,8 +80,9 @@ public class TimeMachineTest {
 
   @Test
   public void projectIsAnalyzed() {
-    assertThat(orchestrator.getServer().getWsClient().find(new ResourceQuery(PROJECT)).getVersion()).isEqualTo("1.0-SNAPSHOT");
-    assertThat(orchestrator.getServer().getWsClient().find(new ResourceQuery(PROJECT)).getDate().getMonth()).isEqualTo(10); // November
+    ComponentNavigation component = getComponentNavigation(orchestrator, PROJECT);
+    assertThat(component.getVersion()).isEqualTo("1.0-SNAPSHOT");
+    assertThat(component.getDate().getMonth()).isEqualTo(10); // November
   }
 
   @Test
@@ -143,35 +149,24 @@ public class TimeMachineTest {
 
   @Test
   public void test_measure_variations() {
-    Resource project = getProject("files", "ncloc", "violations");
-
-    // period 1 : previous analysis
-    assertThat(project.getPeriod1Mode()).isEqualTo("previous_analysis");
-    assertThat(project.getPeriod1Date()).isNotNull();
-
+    Map<String, Measure> measures = getMeasuresWithVariationsByMetricKey(orchestrator, PROJECT, "files", "ncloc", "violations");
     // variations from previous analysis
-    assertThat(project.getMeasure("files").getVariation1()).isEqualTo(1.0);
-    assertThat(project.getMeasure("ncloc").getVariation1()).isEqualTo(16.0);
-    assertThat(project.getMeasure("violations").getVariation1()).isGreaterThan(0.0);
+    assertThat(parseDouble(measures.get("files").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(1.0);
+    assertThat(parseDouble(measures.get("ncloc").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(16.0);
+    assertThat(parseDouble(measures.get("violations").getPeriods().getPeriodsValue(0).getValue())).isGreaterThan(0.0);
   }
 
   /**
    * SONAR-4962
    */
   @Test
-  public void measure_variations_are_only_meaningful_when_includetrends() {
-    String[] metricKeys = {"violations", "new_violations"};
-
-    Resource projectWithTrends = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT, metricKeys).setIncludeTrends(true));
-    assertThat(projectWithTrends.getMeasure("violations")).isNotNull();
-    assertThat(projectWithTrends.getMeasure("new_violations")).isNotNull();
-
-    Resource projectWithoutTrends = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT, metricKeys).setIncludeTrends(false));
-    assertThat(projectWithoutTrends.getMeasure("violations")).isNotNull();
-    assertThat(projectWithoutTrends.getMeasure("new_violations")).isNull();
-  }
-
-  private Resource getProject(String... metricKeys) {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT, metricKeys).setIncludeTrends(true));
+  public void measure_variations_are_only_meaningful_when_additional_fields_contains_periods() {
+    Map<String, Measure> measures = getMeasuresWithVariationsByMetricKey(orchestrator, PROJECT, "violations", "new_violations");
+    assertThat(measures.get("violations")).isNotNull();
+    assertThat(measures.get("new_violations")).isNotNull();
+
+    measures = getMeasuresByMetricKey(orchestrator, PROJECT, "violations", "new_violations");
+    assertThat(measures.get("violations")).isNotNull();
+    assertThat(measures.get("new_violations")).isNull();
   }
 }
index e923ec8b6a8c44c44f99832a8d8d9aba0e3507e8..1f0eccd22c1df5ae22d4f6306793cee980a60259 100644 (file)
 package it.plugins.checks;
 
 import com.google.common.base.Joiner;
+import com.google.gson.Gson;
 import com.sonar.orchestrator.Orchestrator;
 import it.plugins.Project;
 import java.io.File;
+import java.util.List;
+import java.util.Map;
 import org.hamcrest.Matchers;
 import org.junit.rules.ErrorCollector;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
-import org.sonar.wsclient.services.Source;
-import org.sonar.wsclient.services.SourceQuery;
+import org.sonarqube.ws.client.GetRequest;
+import org.sonarqube.ws.client.WsResponse;
 
 import static java.util.Arrays.asList;
+import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
+import static util.ItUtils.newAdminWsClient;
 
 /**
  *
@@ -76,14 +79,15 @@ public class Validation {
   }
 
   private void fileMustHaveMeasures(String filePath, String[] metricKeys, int min) {
-    Resource resource = getMeasureForComponentKey(filePathToKey(filePath), metricKeys);
-    errorCollector.checkThat("Measures " + Joiner.on(",").join(metricKeys) + " are set on file " + filePath, resource, notNullValue());
-    if (resource != null) {
+    String componentKey = filePathToKey(filePath);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, componentKey, metricKeys);
+    errorCollector.checkThat("Measures " + Joiner.on(",").join(metricKeys) + " are set on file " + filePath, componentKey, notNullValue());
+    if (!measures.isEmpty()) {
       for (String metricKey : metricKeys) {
-        Measure measure = resource.getMeasure(metricKey);
+        Double measure = measures.get(metricKey);
         errorCollector.checkThat("Measure " + metricKey + " is set on file " + filePath, measure, notNullValue());
-        if (measure != null && measure.getIntValue() != null) {
-          errorCollector.checkThat("Measure " + metricKey + " is positive on file " + filePath, measure.getIntValue(), Matchers.greaterThanOrEqualTo(min));
+        if (measure != null) {
+          errorCollector.checkThat("Measure " + metricKey + " is positive on file " + filePath, measure.intValue(), Matchers.greaterThanOrEqualTo(min));
         }
       }
     }
@@ -103,10 +107,11 @@ public class Validation {
 
   private void mustHaveSourceWithAtLeast(String path, int minLines) {
     for (String filePath : toFiles(path)) {
-      Source source = orchestrator.getServer().getWsClient().find(SourceQuery.create(filePathToKey(filePath)));
-      errorCollector.checkThat("Source is set on file " + filePath, source, notNullValue());
+      WsResponse response = newAdminWsClient(orchestrator).wsConnector().call(new GetRequest("api/sources/lines").setParam("key", filePathToKey(filePath)));
+      errorCollector.checkThat("Source is set on file " + filePath, response.isSuccessful(), is(true));
+      Sources source = Sources.parse(response.content());
       if (source != null) {
-        errorCollector.checkThat("Source is not empty on file " + filePath, source.getLines().size(), Matchers.greaterThanOrEqualTo(minLines));
+        errorCollector.checkThat("Source is empty on file " + filePath, source.getSources().size(), Matchers.greaterThanOrEqualTo(minLines));
       }
     }
   }
@@ -122,11 +127,37 @@ public class Validation {
     return asList(path);
   }
 
-  public Resource getMeasureForComponentKey(String resourceKey, String... metricKeys) {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(resourceKey, metricKeys));
-  }
-
   private String filePathToKey(String filePath) {
     return "all-langs:" + filePath;
   }
+
+  public static class Sources {
+
+    private List<Source> sources;
+
+    private Sources(List<Source> sources) {
+      this.sources = sources;
+    }
+
+    public List<Source> getSources() {
+      return sources;
+    }
+
+    public static Sources parse(String json) {
+      Gson gson = new Gson();
+      return gson.fromJson(json, Sources.class);
+    }
+
+    public static class Source {
+      private final String line;
+
+      private Source(String line) {
+        this.line = line;
+      }
+
+      public String getLine() {
+        return line;
+      }
+    }
+  }
 }
index 190cc51517c1c608bef26139a9e09bde1b024863..78b2b7d0221816c2b577ec60eb13b2883b86d010 100644 (file)
@@ -37,13 +37,13 @@ import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.sonar.wsclient.SonarClient;
 import org.sonar.wsclient.base.HttpException;
-import org.sonar.wsclient.services.ResourceQuery;
 import org.sonar.wsclient.user.UserParameters;
 import pageobjects.Navigation;
 import pageobjects.settings.SettingsPage;
 
 import static org.apache.commons.lang.time.DateUtils.addDays;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getComponent;
 import static util.ItUtils.projectDir;
 import static util.selenium.Selenese.runSelenese;
 
@@ -74,13 +74,13 @@ public class ProjectAdministrationTest {
   public void delete_project_by_web_service() {
     scanSampleWithDate(ANALYSIS_DATE);
 
-    assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(PROJECT_KEY))).isNotNull();
-    assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(FILE_KEY))).isNotNull();
+    assertThat(getComponent(orchestrator, PROJECT_KEY)).isNotNull();
+    assertThat(getComponent(orchestrator, FILE_KEY)).isNotNull();
 
     orchestrator.getServer().adminWsClient().post(DELETE_WS_ENDPOINT, "keys", PROJECT_KEY);
 
-    assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(PROJECT_KEY))).isNull();
-    assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(FILE_KEY))).isNull();
+    assertThat(getComponent(orchestrator, PROJECT_KEY)).isNull();
+    assertThat(getComponent(orchestrator, FILE_KEY)).isNull();
   }
 
   @Test
@@ -88,8 +88,8 @@ public class ProjectAdministrationTest {
     expectedException.expect(HttpException.class);
     scanSampleWithDate(ANALYSIS_DATE);
 
-    assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(PROJECT_KEY))).isNotNull();
-    assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(FILE_KEY))).isNotNull();
+    assertThat(getComponent(orchestrator, PROJECT_KEY)).isNotNull();
+    assertThat(getComponent(orchestrator, FILE_KEY)).isNotNull();
 
     // it's forbidden to delete only some files
     orchestrator.getServer().adminWsClient().post(DELETE_WS_ENDPOINT, "keys", FILE_KEY);
@@ -100,7 +100,7 @@ public class ProjectAdministrationTest {
     expectedException.expect(HttpException.class);
     scanSampleWithDate(ANALYSIS_DATE);
 
-    assertThat(orchestrator.getServer().getWsClient().find(ResourceQuery.create(PROJECT_KEY))).isNotNull();
+    assertThat(getComponent(orchestrator, PROJECT_KEY)).isNotNull();
 
     // use wsClient() instead of adminWsClient()
     orchestrator.getServer().wsClient().post(DELETE_WS_ENDPOINT, "keys", PROJECT_KEY);
index bd02216a3185bd8e675c79794880a273b5d4090c..17fa0e3829a051a7060d0f59953d8b84380d5081 100644 (file)
@@ -32,17 +32,15 @@ import org.junit.Test;
 import org.sonar.wsclient.qualitygate.NewCondition;
 import org.sonar.wsclient.qualitygate.QualityGate;
 import org.sonar.wsclient.qualitygate.QualityGateClient;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import org.sonarqube.ws.client.PostRequest;
 import org.sonarqube.ws.client.WsClient;
-import org.sonarqube.ws.client.setting.SettingsService;
 import org.subethamail.wiser.Wiser;
 import org.subethamail.wiser.WiserMessage;
 import util.user.UserRule;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.sonarqube.ws.WsMeasures.Measure;
+import static util.ItUtils.getMeasure;
 import static util.ItUtils.newAdminWsClient;
 import static util.ItUtils.newUserWsClient;
 import static util.ItUtils.projectDir;
@@ -64,12 +62,8 @@ public class QualityGateNotificationTest {
 
   private static Wiser smtpServer;
 
-  private static SettingsService adminSettingsService;
-
   @BeforeClass
   public static void init() throws Exception {
-    adminSettingsService = newAdminWsClient(orchestrator).settingsService();
-
     DEFAULT_QUALITY_GATE = qgClient().list().defaultGate().id();
 
     setServerProperty(orchestrator, "sonar.timemachine.period1", "previous_analysis");
@@ -124,10 +118,10 @@ public class QualityGateNotificationTest {
 
     SonarScanner analysis = SonarScanner.create(projectDir("qualitygate/xoo-sample"));
     orchestrator.executeBuild(analysis);
-    assertThat(fetchGateStatus().getData()).isEqualTo("OK");
+    assertThat(getGateStatusMeasure().getValue()).isEqualTo("OK");
 
     orchestrator.executeBuild(analysis);
-    assertThat(fetchGateStatus().getData()).isEqualTo("WARN");
+    assertThat(getGateStatusMeasure().getValue()).isEqualTo("WARN");
 
     qgClient().unsetDefault();
     qgClient().destroy(simple.id());
@@ -149,12 +143,8 @@ public class QualityGateNotificationTest {
     assertThat(emails.hasNext()).isFalse();
   }
 
-  private Measure fetchGateStatus() {
-    return fetchResourceWithGateStatus().getMeasure("alert_status");
-  }
-
-  private Resource fetchResourceWithGateStatus() {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT_KEY, "alert_status").setIncludeAlerts(true));
+  private Measure getGateStatusMeasure() {
+    return getMeasure(orchestrator, PROJECT_KEY, "alert_status");
   }
 
   private static QualityGateClient qgClient() {
index 18d5f13230fde7035387b2d9337c550ac5704236..6863f459859977c46605604275896b9a235cf959 100644 (file)
@@ -28,15 +28,14 @@ import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.sonar.wsclient.qualitygate.QualityGateClient;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.WsMeasures;
 import org.sonarqube.ws.client.WsClient;
 import org.sonarqube.ws.client.qualitygate.CreateConditionRequest;
 import org.sonarqube.ws.client.qualitygate.QualityGatesService;
 import org.sonarqube.ws.client.qualitygate.SelectWsRequest;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasure;
 import static util.ItUtils.newAdminWsClient;
 import static util.ItUtils.resetSettings;
 import static util.ItUtils.runProjectAnalysis;
@@ -88,7 +87,7 @@ public class QualityGateOnRatingMeasuresTest {
 
     runProjectAnalysis(orchestrator, "qualitygate/xoo-sample");
 
-    assertThat(fetchGateStatus().getData()).isEqualTo("WARN");
+    assertThat(getGateStatusMeasure().getValue()).isEqualTo("WARN");
   }
 
   @Test
@@ -105,21 +104,17 @@ public class QualityGateOnRatingMeasuresTest {
     // Run first analysis with empty quality gate -> quality gate is green
     orchestrator.getServer().associateProjectToQualityProfile(PROJECT_KEY, "xoo", "empty");
     runProjectAnalysis(orchestrator, "qualitygate/xoo-sample");
-    assertThat(fetchGateStatus().getData()).isEqualTo("OK");
+    assertThat(getGateStatusMeasure().getValue()).isEqualTo("OK");
 
     // Run second analysis with some rules that makes Security Rating to E -> quality gate is red
     orchestrator.getServer().restoreProfile(FileLocation.ofClasspath("/qualityGate/QualityGateOnRatingMeasuresTest/with-many-rules.xml"));
     orchestrator.getServer().associateProjectToQualityProfile(PROJECT_KEY, "xoo", "with-many-rules");
     runProjectAnalysis(orchestrator, "qualitygate/xoo-sample");
-    assertThat(fetchGateStatus().getData()).isEqualTo("ERROR");
+    assertThat(getGateStatusMeasure().getValue()).isEqualTo("ERROR");
   }
 
-  private Measure fetchGateStatus() {
-    return fetchResourceWithGateStatus().getMeasure("alert_status");
-  }
-
-  private Resource fetchResourceWithGateStatus() {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT_KEY, "alert_status").setIncludeAlerts(true));
+  private WsMeasures.Measure getGateStatusMeasure() {
+    return getMeasure(orchestrator, PROJECT_KEY, "alert_status");
   }
 
   private static QualityGateClient qgClient() {
index 46b3160a6674a4a5de9ca0593cd3069696056ad3..c660fa891093d58fc9b01a36e37e3747787a6cf4 100644 (file)
@@ -19,6 +19,7 @@
  */
 package it.qualityGate;
 
+import com.google.gson.Gson;
 import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.BuildResult;
 import com.sonar.orchestrator.build.SonarScanner;
@@ -27,6 +28,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.StringReader;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 import java.util.stream.Collectors;
@@ -42,19 +44,20 @@ import org.sonar.wsclient.project.NewProject;
 import org.sonar.wsclient.qualitygate.NewCondition;
 import org.sonar.wsclient.qualitygate.QualityGate;
 import org.sonar.wsclient.qualitygate.QualityGateClient;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import org.sonarqube.ws.MediaTypes;
 import org.sonarqube.ws.WsCe;
+import org.sonarqube.ws.WsMeasures.Measure;
 import org.sonarqube.ws.WsQualityGates.ProjectStatusWsResponse;
 import org.sonarqube.ws.client.GetRequest;
 import org.sonarqube.ws.client.WsClient;
 import org.sonarqube.ws.client.WsResponse;
 import org.sonarqube.ws.client.qualitygate.ProjectStatusWsRequest;
+import util.ItUtils;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.groups.Tuple.tuple;
 import static util.ItUtils.extractCeTaskId;
+import static util.ItUtils.getMeasure;
 import static util.ItUtils.newAdminWsClient;
 import static util.ItUtils.projectDir;
 
@@ -100,7 +103,7 @@ public class QualityGateTest {
 
     verifyQGStatusInPostTask(buildResult, TASK_STATUS_SUCCESS, QG_STATUS_NO_QG);
 
-    assertThat(fetchResourceWithGateStatus()).isNull();
+    assertThat(getGateStatusMeasure()).isNull();
   }
 
   @Test
@@ -114,7 +117,7 @@ public class QualityGateTest {
 
       verifyQGStatusInPostTask(buildResult, TASK_STATUS_SUCCESS, QG_STATUS_OK);
 
-      assertThat(fetchGateStatus().getData()).isEqualTo("OK");
+      assertThat(getGateStatusMeasure().getValue()).isEqualTo("OK");
     } finally {
       qgClient().unsetDefault();
       qgClient().destroy(empty.id());
@@ -133,7 +136,7 @@ public class QualityGateTest {
 
       verifyQGStatusInPostTask(buildResult, TASK_STATUS_SUCCESS, QG_STATUS_OK);
 
-      assertThat(fetchGateStatus().getData()).isEqualTo("OK");
+      assertThat(getGateStatusMeasure().getValue()).isEqualTo("OK");
     } finally {
       qgClient().unsetDefault();
       qgClient().destroy(simple.id());
@@ -152,7 +155,7 @@ public class QualityGateTest {
 
       verifyQGStatusInPostTask(buildResult, TASK_STATUS_SUCCESS, QG_STATUS_WARN);
 
-      assertThat(fetchGateStatus().getData()).isEqualTo("WARN");
+      assertThat(getGateStatusMeasure().getValue()).isEqualTo("WARN");
     } finally {
       qgClient().unsetDefault();
       qgClient().destroy(simple.id());
@@ -172,7 +175,7 @@ public class QualityGateTest {
 
       verifyQGStatusInPostTask(buildResult, TASK_STATUS_SUCCESS, QG_STATUS_ERROR);
 
-      assertThat(fetchGateStatus().getData()).isEqualTo("ERROR");
+      assertThat(getGateStatusMeasure().getValue()).isEqualTo("ERROR");
     } finally {
       qgClient().unsetDefault();
       qgClient().destroy(simple.id());
@@ -195,7 +198,7 @@ public class QualityGateTest {
 
       verifyQGStatusInPostTask(buildResult, TASK_STATUS_SUCCESS, QG_STATUS_ERROR);
 
-      assertThat(fetchGateStatus().getData()).isEqualTo("ERROR");
+      assertThat(getGateStatusMeasure().getValue()).isEqualTo("ERROR");
     } finally {
       qgClient().unsetDefault();
       qgClient().destroy(alert.id());
@@ -218,11 +221,13 @@ public class QualityGateTest {
 
       verifyQGStatusInPostTask(buildResult, TASK_STATUS_SUCCESS, QG_STATUS_WARN);
 
-      Measure alertStatus = fetchGateStatus();
-      assertThat(alertStatus.getData()).isEqualTo("WARN");
-      assertThat(alertStatus.getAlertText())
-        .contains("Lines of Code > 10")
-        .contains("Duplicated Lines (%) > 20");
+      Measure alertStatus = getGateStatusMeasure();
+      assertThat(alertStatus.getValue()).isEqualTo("WARN");
+
+      String qualityGateDetailJson = ItUtils.getMeasure(orchestrator, PROJECT_KEY, "quality_gate_details").getValue();
+      assertThat(QualityGateDetails.parse(qualityGateDetailJson).getConditions())
+        .extracting(QualityGateDetails.Conditions::getMetric, QualityGateDetails.Conditions::getOp, QualityGateDetails.Conditions::getWarning)
+        .contains(tuple("ncloc", "GT", "10"), tuple("duplicated_lines_density", "GT", "20"));
     } finally {
       qgClient().unsetDefault();
       qgClient().destroy(allTypes.id());
@@ -290,12 +295,8 @@ public class QualityGateTest {
     return props.getProperty("ceTaskId");
   }
 
-  private Measure fetchGateStatus() {
-    return fetchResourceWithGateStatus().getMeasure("alert_status");
-  }
-
-  private Resource fetchResourceWithGateStatus() {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT_KEY, "alert_status").setIncludeAlerts(true));
+  private Measure getGateStatusMeasure() {
+    return getMeasure(orchestrator, PROJECT_KEY, "alert_status");
   }
 
   private static QualityGateClient qgClient() {
@@ -308,4 +309,60 @@ public class QualityGateTest {
       .filter(s -> s.contains(taskUuid))
       .collect(Collectors.toList());
   }
+
+  static class QualityGateDetails {
+
+    private String level;
+
+    private List<Conditions> conditions = new ArrayList<>();
+
+    String getLevel() {
+      return level;
+    }
+
+    List<Conditions> getConditions() {
+      return conditions;
+    }
+
+    public static QualityGateDetails parse(String json) {
+      Gson gson = new Gson();
+      return gson.fromJson(json, QualityGateDetails.class);
+    }
+
+    public static class Conditions {
+      private final String metric;
+      private final String op;
+      private final String warning;
+      private final String actual;
+      private final String level;
+
+      private Conditions(String metric, String op, String values, String actual, String level) {
+        this.metric = metric;
+        this.op = op;
+        this.warning = values;
+        this.actual = actual;
+        this.level = level;
+      }
+
+      String getMetric() {
+        return metric;
+      }
+
+      String getOp() {
+        return op;
+      }
+
+      String getWarning() {
+        return warning;
+      }
+
+      String getActual() {
+        return actual;
+      }
+
+      String getLevel() {
+        return level;
+      }
+    }
+  }
 }
index 18e8034a172327ead75b993880a1621ef4771d3f..dde8b15bca52a7e8e9384a12ba47e508ecc2d425 100644 (file)
@@ -27,11 +27,9 @@ import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasureAsDouble;
 import static util.ItUtils.projectDir;
 
 /**
@@ -72,30 +70,30 @@ public class MaintainabilityMeasureTest {
     orchestrator.getServer().associateProjectToQualityProfile(PROJECT, "xoo", "with-many-rules");
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-multi-modules-sample")));
 
-    assertThat(getMeasure(PROJECT, CODE_SMELLS_METRIC).getValue()).isEqualTo(71);
-    assertThat(getMeasure(PROJECT, MAINTAINABILITY_REMEDIATION_EFFORT_METRIC).getValue()).isEqualTo(445);
-    assertThat(getMeasure(PROJECT, MAINTAINABILITY_RATING_METRIC).getData()).isEqualTo("C");
-    assertThat(getMeasure(PROJECT, EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_METRIC).getValue()).isEqualTo(292);
-
-    assertThat(getMeasure(MODULE, CODE_SMELLS_METRIC).getValue()).isEqualTo(43);
-    assertThat(getMeasure(MODULE, MAINTAINABILITY_REMEDIATION_EFFORT_METRIC).getValue()).isEqualTo(231);
-    assertThat(getMeasure(MODULE, MAINTAINABILITY_RATING_METRIC).getData()).isEqualTo("C");
-    assertThat(getMeasure(MODULE, EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_METRIC).getValue()).isEqualTo(150);
-
-    assertThat(getMeasure(SUB_MODULE, CODE_SMELLS_METRIC).getValue()).isEqualTo(19);
-    assertThat(getMeasure(SUB_MODULE, MAINTAINABILITY_REMEDIATION_EFFORT_METRIC).getValue()).isEqualTo(113);
-    assertThat(getMeasure(SUB_MODULE, MAINTAINABILITY_RATING_METRIC).getData()).isEqualTo("C");
-    assertThat(getMeasure(SUB_MODULE, EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_METRIC).getValue()).isEqualTo(77);
-
-    assertThat(getMeasure(DIRECTORY, CODE_SMELLS_METRIC).getValue()).isEqualTo(18);
-    assertThat(getMeasure(DIRECTORY, MAINTAINABILITY_REMEDIATION_EFFORT_METRIC).getValue()).isEqualTo(28);
-    assertThat(getMeasure(DIRECTORY, MAINTAINABILITY_RATING_METRIC).getData()).isEqualTo("A");
-    assertThat(getMeasure(DIRECTORY, EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_METRIC).getValue()).isEqualTo(0);
-
-    assertThat(getMeasure(FILE, CODE_SMELLS_METRIC).getValue()).isEqualTo(18);
-    assertThat(getMeasure(FILE, MAINTAINABILITY_REMEDIATION_EFFORT_METRIC).getValue()).isEqualTo(28);
-    assertThat(getMeasure(FILE, MAINTAINABILITY_RATING_METRIC).getData()).isEqualTo("A");
-    assertThat(getMeasure(FILE, EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_METRIC)).isNull();
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, CODE_SMELLS_METRIC)).isEqualTo(71);
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, MAINTAINABILITY_REMEDIATION_EFFORT_METRIC)).isEqualTo(445);
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, MAINTAINABILITY_RATING_METRIC)).isEqualTo(3);
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_METRIC)).isEqualTo(292);
+
+    assertThat(getMeasureAsDouble(orchestrator, MODULE, CODE_SMELLS_METRIC)).isEqualTo(43);
+    assertThat(getMeasureAsDouble(orchestrator, MODULE, MAINTAINABILITY_REMEDIATION_EFFORT_METRIC)).isEqualTo(231);
+    assertThat(getMeasureAsDouble(orchestrator, MODULE, MAINTAINABILITY_RATING_METRIC)).isEqualTo(3);
+    assertThat(getMeasureAsDouble(orchestrator, MODULE, EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_METRIC)).isEqualTo(150);
+
+    assertThat(getMeasureAsDouble(orchestrator, SUB_MODULE, CODE_SMELLS_METRIC)).isEqualTo(19);
+    assertThat(getMeasureAsDouble(orchestrator, SUB_MODULE, MAINTAINABILITY_REMEDIATION_EFFORT_METRIC)).isEqualTo(113);
+    assertThat(getMeasureAsDouble(orchestrator, SUB_MODULE, MAINTAINABILITY_RATING_METRIC)).isEqualTo(3);
+    assertThat(getMeasureAsDouble(orchestrator, SUB_MODULE, EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_METRIC)).isEqualTo(77);
+
+    assertThat(getMeasureAsDouble(orchestrator, DIRECTORY, CODE_SMELLS_METRIC)).isEqualTo(18);
+    assertThat(getMeasureAsDouble(orchestrator, DIRECTORY, MAINTAINABILITY_REMEDIATION_EFFORT_METRIC)).isEqualTo(28);
+    assertThat(getMeasureAsDouble(orchestrator, DIRECTORY, MAINTAINABILITY_RATING_METRIC)).isEqualTo(1);
+    assertThat(getMeasureAsDouble(orchestrator, DIRECTORY, EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_METRIC)).isZero();
+
+    assertThat(getMeasureAsDouble(orchestrator, FILE, CODE_SMELLS_METRIC)).isEqualTo(18);
+    assertThat(getMeasureAsDouble(orchestrator, FILE, MAINTAINABILITY_REMEDIATION_EFFORT_METRIC)).isEqualTo(28);
+    assertThat(getMeasureAsDouble(orchestrator, FILE, MAINTAINABILITY_RATING_METRIC)).isEqualTo(1);
+    assertThat(getMeasureAsDouble(orchestrator, FILE, EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_METRIC)).isZero();
   }
 
   @Test
@@ -104,17 +102,10 @@ public class MaintainabilityMeasureTest {
     orchestrator.getServer().associateProjectToQualityProfile(PROJECT, "xoo", "without-type-code-smells");
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-multi-modules-sample")));
 
-    assertThat(getMeasure(PROJECT, CODE_SMELLS_METRIC).getIntValue()).isEqualTo(0);
-    assertThat(getMeasure(PROJECT, MAINTAINABILITY_REMEDIATION_EFFORT_METRIC).getIntValue()).isEqualTo(0);
-    assertThat(getMeasure(PROJECT, MAINTAINABILITY_RATING_METRIC).getData()).isEqualTo("A");
-    assertThat(getMeasure(PROJECT, EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_METRIC).getIntValue()).isEqualTo(0);
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, CODE_SMELLS_METRIC)).isZero();
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, MAINTAINABILITY_REMEDIATION_EFFORT_METRIC)).isZero();
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, MAINTAINABILITY_RATING_METRIC)).isEqualTo(1);
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_METRIC)).isZero();
   }
 
-  private Measure getMeasure(String resource, String metricKey) {
-    Resource res = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(resource, metricKey));
-    if (res == null) {
-      return null;
-    }
-    return res.getMeasure(metricKey);
-  }
 }
index aed422800cc8272f1c7c6acf3afec91762511c38..cd189580a5b76d1be5403a4f73ef26fff59313c9 100644 (file)
@@ -23,16 +23,13 @@ import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.SonarScanner;
 import com.sonar.orchestrator.locator.FileLocation;
 import it.Category2Suite;
-import javax.annotation.CheckForNull;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasureAsDouble;
 import static util.ItUtils.projectDir;
 
 /**
@@ -68,20 +65,11 @@ public class MaintainabilityRatingMeasureTest {
 
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-multi-modules-sample")));
 
-    assertThat(getMeasure(PROJECT, "sqale_rating").getIntValue()).isEqualTo(3);
-    assertThat(getMeasure(PROJECT, "sqale_rating").getData()).isEqualTo("C");
-
-    assertThat(getMeasure(MODULE, "sqale_rating").getIntValue()).isEqualTo(3);
-    assertThat(getMeasure(MODULE, "sqale_rating").getData()).isEqualTo("C");
-
-    assertThat(getMeasure(SUB_MODULE, "sqale_rating").getIntValue()).isEqualTo(3);
-    assertThat(getMeasure(SUB_MODULE, "sqale_rating").getData()).isEqualTo("C");
-
-    assertThat(getMeasure(DIRECTORY, "sqale_rating").getIntValue()).isEqualTo(1);
-    assertThat(getMeasure(DIRECTORY, "sqale_rating").getData()).isEqualTo("A");
-
-    assertThat(getMeasure(FILE, "sqale_rating").getIntValue()).isEqualTo(1);
-    assertThat(getMeasure(FILE, "sqale_rating").getData()).isEqualTo("A");
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, "sqale_rating")).isEqualTo(3);
+    assertThat(getMeasureAsDouble(orchestrator, MODULE, "sqale_rating")).isEqualTo(3);
+    assertThat(getMeasureAsDouble(orchestrator, SUB_MODULE, "sqale_rating")).isEqualTo(3);
+    assertThat(getMeasureAsDouble(orchestrator, DIRECTORY, "sqale_rating")).isEqualTo(1);
+    assertThat(getMeasureAsDouble(orchestrator, FILE, "sqale_rating")).isEqualTo(1);
   }
 
   @Test
@@ -92,11 +80,11 @@ public class MaintainabilityRatingMeasureTest {
 
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-multi-modules-sample")));
 
-    assertThat(getMeasure(PROJECT, "sqale_debt_ratio").getValue()).isEqualTo(29.1d);
-    assertThat(getMeasure(MODULE, "sqale_debt_ratio").getValue()).isEqualTo(28.5d);
-    assertThat(getMeasure(SUB_MODULE, "sqale_debt_ratio").getValue()).isEqualTo(31.4d);
-    assertThat(getMeasure(DIRECTORY, "sqale_debt_ratio").getValue()).isEqualTo(7.8d);
-    assertThat(getMeasure(FILE, "sqale_debt_ratio").getValue()).isEqualTo(7.8d);
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, "sqale_debt_ratio")).isEqualTo(29.1d);
+    assertThat(getMeasureAsDouble(orchestrator, MODULE, "sqale_debt_ratio")).isEqualTo(28.5d);
+    assertThat(getMeasureAsDouble(orchestrator, SUB_MODULE, "sqale_debt_ratio")).isEqualTo(31.4d);
+    assertThat(getMeasureAsDouble(orchestrator, DIRECTORY, "sqale_debt_ratio")).isEqualTo(7.8d);
+    assertThat(getMeasureAsDouble(orchestrator, FILE, "sqale_debt_ratio")).isEqualTo(7.8d);
   }
 
   @Test
@@ -107,16 +95,12 @@ public class MaintainabilityRatingMeasureTest {
 
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-sample")));
 
-    Measure rating = getMeasure("sample", "sqale_rating");
-    assertThat(rating.getIntValue()).isEqualTo(1);
-    assertThat(rating.getData()).isEqualTo("A");
+    assertThat(getMeasureAsDouble(orchestrator, "sample", "sqale_rating")).isEqualTo(1);
 
     debtConfiguration.updateDevelopmentCost(2);
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-sample")));
 
-    rating = getMeasure("sample", "sqale_rating");
-    assertThat(rating.getIntValue()).isEqualTo(4);
-    assertThat(rating.getData()).isEqualTo("D");
+    assertThat(getMeasureAsDouble(orchestrator, "sample", "sqale_rating")).isEqualTo(4);
   }
 
   @Test
@@ -127,18 +111,14 @@ public class MaintainabilityRatingMeasureTest {
 
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-multi-modules-sample")));
 
-    Measure rating = getMeasure(PROJECT, "sqale_rating");
-    assertThat(rating.getIntValue()).isEqualTo(1);
-    assertThat(rating.getData()).isEqualTo("A");
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, "sqale_rating")).isEqualTo(1);
 
     debtConfiguration.updateLanguageDevelopmentCost("xoo", 1);
     orchestrator.executeBuild(
       SonarScanner.create(projectDir("shared/xoo-multi-modules-sample"))
         .setProfile("one-issue-per-line"));
 
-    rating = getMeasure(PROJECT, "sqale_rating");
-    assertThat(rating.getIntValue()).isEqualTo(5);
-    assertThat(rating.getData()).isEqualTo("E");
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, "sqale_rating")).isEqualTo(5);
   }
 
   @Test
@@ -149,16 +129,12 @@ public class MaintainabilityRatingMeasureTest {
 
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-sample")));
 
-    Measure rating = getMeasure("sample", "sqale_rating");
-    assertThat(rating.getIntValue()).isEqualTo(1);
-    assertThat(rating.getData()).isEqualTo("A");
+    assertThat(getMeasureAsDouble(orchestrator, "sample", "sqale_rating")).isEqualTo(1);
 
     debtConfiguration.updateRatingGrid(0.001d, 0.005d, 0.01d, 0.015d);
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-sample")));
 
-    rating = getMeasure("sample", "sqale_rating");
-    assertThat(rating.getIntValue()).isEqualTo(5);
-    assertThat(rating.getData()).isEqualTo("E");
+    assertThat(getMeasureAsDouble(orchestrator, "sample", "sqale_rating")).isEqualTo(5);
   }
 
   @Test
@@ -169,30 +145,20 @@ public class MaintainabilityRatingMeasureTest {
 
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-multi-modules-sample")));
 
-    assertThat(getMeasure(PROJECT, "sqale_rating").getData()).isEqualTo("C");
-    assertThat(getMeasure(PROJECT, "effort_to_reach_maintainability_rating_a").getIntValue()).isEqualTo(292);
-
-    assertThat(getMeasure(MODULE, "sqale_rating").getData()).isEqualTo("C");
-    assertThat(getMeasure(MODULE, "effort_to_reach_maintainability_rating_a").getIntValue()).isEqualTo(150);
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, "sqale_rating")).isEqualTo(3);
+    assertThat(getMeasureAsDouble(orchestrator, PROJECT, "effort_to_reach_maintainability_rating_a")).isEqualTo(292);
 
-    assertThat(getMeasure(SUB_MODULE, "sqale_rating").getData()).isEqualTo("C");
-    assertThat(getMeasure(SUB_MODULE, "effort_to_reach_maintainability_rating_a").getIntValue()).isEqualTo(77);
+    assertThat(getMeasureAsDouble(orchestrator, MODULE, "sqale_rating")).isEqualTo(3);
+    assertThat(getMeasureAsDouble(orchestrator, MODULE, "effort_to_reach_maintainability_rating_a")).isEqualTo(150);
 
-    assertThat(getMeasure(DIRECTORY, "sqale_rating").getData()).isEqualTo("A");
-    assertThat(getMeasure(DIRECTORY, "effort_to_reach_maintainability_rating_a").getIntValue()).isEqualTo(0);
+    assertThat(getMeasureAsDouble(orchestrator, SUB_MODULE, "sqale_rating")).isEqualTo(3);
+    assertThat(getMeasureAsDouble(orchestrator, SUB_MODULE, "effort_to_reach_maintainability_rating_a")).isEqualTo(77);
 
-    assertThat(getMeasure(FILE, "sqale_rating").getData()).isEqualTo("A");
-    // Best value is 0 => no measure
-    assertThat(getMeasure(FILE, "effort_to_reach_maintainability_rating_a")).isNull();
-  }
+    assertThat(getMeasureAsDouble(orchestrator, DIRECTORY, "sqale_rating")).isEqualTo(1);
+    assertThat(getMeasureAsDouble(orchestrator, DIRECTORY, "effort_to_reach_maintainability_rating_a")).isZero();
 
-  @CheckForNull
-  private Measure getMeasure(String resource, String metricKey) {
-    Resource res = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(resource, metricKey));
-    if (res == null) {
-      return null;
-    }
-    return res.getMeasure(metricKey);
+    assertThat(getMeasureAsDouble(orchestrator, FILE, "sqale_rating")).isEqualTo(1);
+    assertThat(getMeasureAsDouble(orchestrator, FILE, "effort_to_reach_maintainability_rating_a")).isZero();
   }
 
 }
index 05e96062aedd17bbd2319af23379c319b6b4a880..afac16173622e58858052a715ced18ede6294680 100644 (file)
@@ -23,21 +23,19 @@ import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.locator.FileLocation;
 import it.Category2Suite;
 import java.util.Date;
-import java.util.List;
+import java.util.Map;
 import javax.annotation.Nullable;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import util.ItUtils;
 
 import static org.apache.commons.lang.time.DateUtils.addDays;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.within;
 import static util.ItUtils.formatDate;
+import static util.ItUtils.getPeriodMeasureValuesByIndex;
 import static util.ItUtils.resetPeriods;
 import static util.ItUtils.setServerProperty;
 import static util.ItUtils.toDate;
@@ -92,14 +90,13 @@ public class NewDebtRatioMeasureTest {
   }
 
   private void assertNoNewDebtRatio() {
-    assertThat(getFileResourceWithVariations(NEW_DEBT_RATIO_METRIC_KEY)).isNull();
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, "sample:src/main/xoo/sample/Sample.xoo", NEW_DEBT_RATIO_METRIC_KEY)).isEmpty();
   }
 
   private void assertNewDebtRatio(@Nullable Double valuePeriod1, @Nullable Double valuePeriod2) {
-    Resource newTechnicalDebt = getFileResourceWithVariations(NEW_DEBT_RATIO_METRIC_KEY);
-    List<Measure> measures = newTechnicalDebt.getMeasures();
-    assertThat(measures.get(0).getVariation1()).isEqualTo(valuePeriod1, within(0.01));
-    assertThat(measures.get(0).getVariation2()).isEqualTo(valuePeriod2, within(0.01));
+    Map<Integer, Double> newTechnicalDebt = getPeriodMeasureValuesByIndex(orchestrator, "sample:src/main/xoo/sample/Sample.xoo", NEW_DEBT_RATIO_METRIC_KEY);
+    assertThat(newTechnicalDebt.get(1)).isEqualTo(valuePeriod1, within(0.01));
+    assertThat(newTechnicalDebt.get(2)).isEqualTo(valuePeriod2, within(0.01));
   }
 
   private void setSampleProjectQualityProfile(String qualityProfileKey) {
@@ -123,8 +120,4 @@ public class NewDebtRatioMeasureTest {
         "sonar.scm.disabled", "false"));
   }
 
-  private Resource getFileResourceWithVariations(String metricKey) {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics("sample:src/main/xoo/sample/Sample.xoo", metricKey).setIncludeTrends(true));
-  }
-
 }
index a54cc22358307826f40347d388d8f51a485a8c0c..0114f41abb27dbce90bd540a6a5c536702b9003b 100644 (file)
@@ -23,15 +23,15 @@ import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.SonarScanner;
 import com.sonar.orchestrator.locator.FileLocation;
 import it.Category2Suite;
-import javax.annotation.CheckForNull;
+import java.util.Map;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.WsMeasures;
 
+import static java.lang.Double.parseDouble;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasuresByMetricKey;
 import static util.ItUtils.projectDir;
 
 public class ReliabilityMeasureTest {
@@ -46,6 +46,8 @@ public class ReliabilityMeasureTest {
   private static final String RELIABILITY_REMEDIATION_EFFORT_METRIC = "reliability_remediation_effort";
   private static final String RELIABILITY_RATING_METRIC = "reliability_rating";
 
+  private static final String[] METRICS = new String[] {BUGS_METRIC, RELIABILITY_RATING_METRIC, RELIABILITY_REMEDIATION_EFFORT_METRIC};
+
   @ClassRule
   public static Orchestrator orchestrator = Category2Suite.ORCHESTRATOR;
 
@@ -62,25 +64,11 @@ public class ReliabilityMeasureTest {
     orchestrator.getServer().associateProjectToQualityProfile(PROJECT, "xoo", "with-many-rules");
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-multi-modules-sample")));
 
-    assertThat(getMeasure(PROJECT, BUGS_METRIC).getIntValue()).isEqualTo(61);
-    assertThat(getMeasure(PROJECT, RELIABILITY_REMEDIATION_EFFORT_METRIC).getIntValue()).isEqualTo(305);
-    assertThat(getMeasure(PROJECT, RELIABILITY_RATING_METRIC).getData()).isEqualTo("D");
-
-    assertThat(getMeasure(MODULE, BUGS_METRIC).getIntValue()).isEqualTo(37);
-    assertThat(getMeasure(MODULE, RELIABILITY_REMEDIATION_EFFORT_METRIC).getIntValue()).isEqualTo(185);
-    assertThat(getMeasure(MODULE, RELIABILITY_RATING_METRIC).getData()).isEqualTo("D");
-
-    assertThat(getMeasure(SUB_MODULE, BUGS_METRIC).getIntValue()).isEqualTo(16);
-    assertThat(getMeasure(SUB_MODULE, RELIABILITY_REMEDIATION_EFFORT_METRIC).getIntValue()).isEqualTo(80);
-    assertThat(getMeasure(SUB_MODULE, RELIABILITY_RATING_METRIC).getData()).isEqualTo("D");
-
-    assertThat(getMeasure(DIRECTORY, BUGS_METRIC).getIntValue()).isEqualTo(16);
-    assertThat(getMeasure(DIRECTORY, RELIABILITY_REMEDIATION_EFFORT_METRIC).getIntValue()).isEqualTo(80);
-    assertThat(getMeasure(DIRECTORY, RELIABILITY_RATING_METRIC).getData()).isEqualTo("D");
-
-    assertThat(getMeasure(FILE, BUGS_METRIC).getIntValue()).isEqualTo(16);
-    assertThat(getMeasure(FILE, RELIABILITY_REMEDIATION_EFFORT_METRIC).getIntValue()).isEqualTo(80);
-    assertThat(getMeasure(FILE, RELIABILITY_RATING_METRIC).getData()).isEqualTo("D");
+    assertMeasures(PROJECT, 61, 305, 4);
+    assertMeasures(MODULE, 37, 185, 4);
+    assertMeasures(SUB_MODULE, 16, 80, 4);
+    assertMeasures(DIRECTORY, 16, 80, 4);
+    assertMeasures(FILE, 16, 80, 4);
   }
 
   @Test
@@ -89,17 +77,14 @@ public class ReliabilityMeasureTest {
     orchestrator.getServer().associateProjectToQualityProfile(PROJECT, "xoo", "without-type-bug");
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-multi-modules-sample")));
 
-    assertThat(getMeasure(PROJECT, BUGS_METRIC).getIntValue()).isEqualTo(0);
-    assertThat(getMeasure(PROJECT, RELIABILITY_REMEDIATION_EFFORT_METRIC).getIntValue()).isEqualTo(0);
-    assertThat(getMeasure(PROJECT, RELIABILITY_RATING_METRIC).getData()).isEqualTo("A");
+    assertMeasures(PROJECT, 0, 0, 1);
   }
 
-  @CheckForNull
-  private Measure getMeasure(String resource, String metricKey) {
-    Resource res = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(resource, metricKey));
-    if (res == null) {
-      return null;
-    }
-    return res.getMeasure(metricKey);
+  private void assertMeasures(String componentKey, int expectedBugs, int expectedReliabilityRemediationEffort, int expectedReliabilityRating) {
+    Map<String, WsMeasures.Measure> measures = getMeasuresByMetricKey(orchestrator, componentKey, METRICS);
+    assertThat(parseDouble(measures.get(BUGS_METRIC).getValue())).isEqualTo(expectedBugs);
+    assertThat(parseDouble(measures.get(RELIABILITY_REMEDIATION_EFFORT_METRIC).getValue())).isEqualTo(expectedReliabilityRemediationEffort);
+    assertThat(parseDouble(measures.get(RELIABILITY_RATING_METRIC).getValue())).isEqualTo(expectedReliabilityRating);
   }
+
 }
index 6caf217bd4772e6f3254bb90a720a9b31f830310..554e37baed6ab5460845f9e43bd53317d507bb73 100644 (file)
@@ -23,15 +23,15 @@ import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.SonarScanner;
 import com.sonar.orchestrator.locator.FileLocation;
 import it.Category2Suite;
-import javax.annotation.CheckForNull;
+import java.util.Map;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.WsMeasures;
 
+import static java.lang.Double.parseDouble;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasuresByMetricKey;
 import static util.ItUtils.projectDir;
 
 public class SecurityMeasureTest {
@@ -46,6 +46,8 @@ public class SecurityMeasureTest {
   private static final String SECURITY_REMEDIATION_EFFORT_METRIC = "security_remediation_effort";
   private static final String SECURITY_RATING_METRIC = "security_rating";
 
+  private static final String[] METRICS = new String[] {VULNERABILITIES_METRIC, SECURITY_REMEDIATION_EFFORT_METRIC, SECURITY_RATING_METRIC};
+
   @ClassRule
   public static Orchestrator orchestrator = Category2Suite.ORCHESTRATOR;
 
@@ -62,25 +64,11 @@ public class SecurityMeasureTest {
     orchestrator.getServer().associateProjectToQualityProfile(PROJECT, "xoo", "with-many-rules");
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-multi-modules-sample")));
 
-    assertThat(getMeasure(PROJECT, VULNERABILITIES_METRIC).getIntValue()).isEqualTo(4);
-    assertThat(getMeasure(PROJECT, SECURITY_REMEDIATION_EFFORT_METRIC).getIntValue()).isEqualTo(340);
-    assertThat(getMeasure(PROJECT, SECURITY_RATING_METRIC).getData()).isEqualTo("E");
-
-    assertThat(getMeasure(MODULE, VULNERABILITIES_METRIC).getIntValue()).isEqualTo(2);
-    assertThat(getMeasure(MODULE, SECURITY_REMEDIATION_EFFORT_METRIC).getIntValue()).isEqualTo(170);
-    assertThat(getMeasure(MODULE, SECURITY_RATING_METRIC).getData()).isEqualTo("E");
-
-    assertThat(getMeasure(SUB_MODULE, VULNERABILITIES_METRIC).getIntValue()).isEqualTo(1);
-    assertThat(getMeasure(SUB_MODULE, SECURITY_REMEDIATION_EFFORT_METRIC).getIntValue()).isEqualTo(85);
-    assertThat(getMeasure(SUB_MODULE, SECURITY_RATING_METRIC).getData()).isEqualTo("E");
-
-    assertThat(getMeasure(DIRECTORY, VULNERABILITIES_METRIC).getIntValue()).isEqualTo(0);
-    assertThat(getMeasure(DIRECTORY, SECURITY_REMEDIATION_EFFORT_METRIC).getIntValue()).isEqualTo(0);
-    assertThat(getMeasure(DIRECTORY, SECURITY_RATING_METRIC).getData()).isEqualTo("A");
-
-    assertThat(getMeasure(FILE, VULNERABILITIES_METRIC)).isNull();
-    assertThat(getMeasure(FILE, SECURITY_REMEDIATION_EFFORT_METRIC)).isNull();
-    assertThat(getMeasure(FILE, SECURITY_RATING_METRIC).getData()).isEqualTo("A");
+    assertMeasures(PROJECT, 4, 340, 5);
+    assertMeasures(MODULE, 2, 170, 5);
+    assertMeasures(SUB_MODULE, 1, 85, 5);
+    assertMeasures(DIRECTORY, 0, 0, 1);
+    assertMeasures(FILE, 0, 0, 1);
   }
 
   @Test
@@ -89,17 +77,13 @@ public class SecurityMeasureTest {
     orchestrator.getServer().associateProjectToQualityProfile(PROJECT, "xoo", "without-type-vulnerability");
     orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-multi-modules-sample")));
 
-    assertThat(getMeasure(PROJECT, VULNERABILITIES_METRIC).getIntValue()).isEqualTo(0);
-    assertThat(getMeasure(PROJECT, SECURITY_REMEDIATION_EFFORT_METRIC).getIntValue()).isEqualTo(0);
-    assertThat(getMeasure(PROJECT, SECURITY_RATING_METRIC).getData()).isEqualTo("A");
+    assertMeasures(PROJECT, 0, 0, 1);
   }
 
-  @CheckForNull
-  private Measure getMeasure(String resource, String metricKey) {
-    Resource res = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(resource, metricKey));
-    if (res == null) {
-      return null;
-    }
-    return res.getMeasure(metricKey);
+  private void assertMeasures(String componentKey, int expectedVulnerabilities, int expectedReliabilityRemediationEffort, int expectedReliabilityRating) {
+    Map<String, WsMeasures.Measure> measures = getMeasuresByMetricKey(orchestrator, componentKey, METRICS);
+    assertThat(parseDouble(measures.get(VULNERABILITIES_METRIC).getValue())).isEqualTo(expectedVulnerabilities);
+    assertThat(parseDouble(measures.get(SECURITY_REMEDIATION_EFFORT_METRIC).getValue())).isEqualTo(expectedReliabilityRemediationEffort);
+    assertThat(parseDouble(measures.get(SECURITY_RATING_METRIC).getValue())).isEqualTo(expectedReliabilityRating);
   }
 }
index 5980edcfa970e777b01c367b2051a36f2b092351..c0281aec65dcd8113e71c238f007e15af71a4b23 100644 (file)
@@ -22,18 +22,16 @@ package it.qualityModel;
 import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.locator.FileLocation;
 import it.Category2Suite;
-import java.util.List;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 import util.ItUtils;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.entry;
+import static util.ItUtils.getPeriodMeasureValuesByIndex;
 import static util.ItUtils.setServerProperty;
 
 /**
@@ -76,19 +74,14 @@ public class TechnicalDebtMeasureVariationTest {
     runSampleProjectAnalysis();
 
     // New technical debt only comes from new issues
-    Resource newTechnicalDebt = getSampleProjectResourceWithVariations("new_technical_debt");
-    List<Measure> measures = newTechnicalDebt.getMeasures();
-    assertThat(measures.get(0).getVariation1()).isEqualTo(17);
-    assertThat(measures.get(0).getVariation2()).isEqualTo(17);
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, "sample:src/main/xoo/sample/Sample.xoo", "new_technical_debt"))
+      .contains(entry(1, 17d), entry(2, 17d));
 
     // Third analysis, with exactly the same profile -> no new issues so no new technical debt
     runSampleProjectAnalysis();
-
-    newTechnicalDebt = orchestrator.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics("sample:src/main/xoo/sample/Sample.xoo", "new_technical_debt").setIncludeTrends(true));
-
-    // No variation => measure is purged
-    assertThat(newTechnicalDebt).isNull();
+    // No variation => measure is 0 (best value)
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, "sample:src/main/xoo/sample/Sample.xoo", "new_technical_debt"))
+      .contains(entry(1, 0d), entry(2, 0d));
   }
 
   @Test
@@ -104,17 +97,13 @@ public class TechnicalDebtMeasureVariationTest {
 
     // Third analysis, existing issues on OneIssuePerFile will have their technical debt updated with the effort to fix
     runSampleProjectAnalysis("sonar.oneIssuePerFile.effortToFix", "10");
-
-    Resource newTechnicalDebt = getSampleProjectResourceWithVariations("new_technical_debt");
-    List<Measure> measures = newTechnicalDebt.getMeasures();
-    assertThat(measures.get(0).getVariation1()).isEqualTo(90);
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, "sample:src/main/xoo/sample/Sample.xoo", "new_technical_debt")
+      .get(1)).isEqualTo(90);
 
     // Fourth analysis, with exactly the same profile -> no new issues so no new technical debt since previous analysis
     runSampleProjectAnalysis("sonar.oneIssuePerFile.effortToFix", "10");
-
-    newTechnicalDebt = getSampleProjectResourceWithVariations("new_technical_debt");
-    measures = newTechnicalDebt.getMeasures();
-    assertThat(measures.get(0).getVariation1()).isEqualTo(0);
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, "sample:src/main/xoo/sample/Sample.xoo", "new_technical_debt")
+      .get(1)).isZero();
   }
 
   @Test
@@ -134,18 +123,14 @@ public class TechnicalDebtMeasureVariationTest {
 
     // Third analysis, existing issues on OneIssuePerFile will have their technical debt updated with the effort to fix
     runSampleProjectAnalysis("sonar.oneIssuePerFile.effortToFix", "10");
-
-    Resource newTechnicalDebt = getSampleProjectResourceWithVariations("new_technical_debt");
-    List<Measure> measures = newTechnicalDebt.getMeasures();
-    assertThat(measures.get(0).getVariation2()).isEqualTo(90);
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, "sample:src/main/xoo/sample/Sample.xoo", "new_technical_debt")
+      .get(2)).isEqualTo(90);
 
     // Fourth analysis, with exactly the same profile -> no new issues so no new technical debt since previous analysis but still since 30
     // days
     runSampleProjectAnalysis("sonar.oneIssuePerFile.effortToFix", "10");
-
-    newTechnicalDebt = getSampleProjectResourceWithVariations("new_technical_debt");
-    measures = newTechnicalDebt.getMeasures();
-    assertThat(measures.get(0).getVariation2()).isEqualTo(90);
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, "sample:src/main/xoo/sample/Sample.xoo", "new_technical_debt")
+      .get(2)).isEqualTo(90);
   }
 
   /**
@@ -163,9 +148,8 @@ public class TechnicalDebtMeasureVariationTest {
 
     // Execute a second analysis with a smaller effort to fix -> Added technical debt should be 0, not negative
     runSampleProjectAnalysis("sonar.oneIssuePerFile.effortToFix", "10");
-
-    Resource newTechnicalDebt = getSampleProjectResourceWithVariations("new_technical_debt");
-    assertThat(newTechnicalDebt).isNull();
+    assertThat(getPeriodMeasureValuesByIndex(orchestrator, "sample:src/main/xoo/sample/Sample.xoo", "new_technical_debt"))
+      .contains(entry(1, 0d), entry(2, 0d));
   }
 
   private void setSampleProjectQualityProfile(String qualityProfileKey) {
@@ -184,8 +168,4 @@ public class TechnicalDebtMeasureVariationTest {
     ItUtils.runVerboseProjectAnalysis(TechnicalDebtMeasureVariationTest.orchestrator, "shared/xoo-sample", properties);
   }
 
-  private Resource getSampleProjectResourceWithVariations(String metricKey) {
-    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics("sample:src/main/xoo/sample/Sample.xoo", metricKey).setIncludeTrends(true));
-  }
-
 }
index e6eee0c983e316229d2084eddd77c938404cab4b..848b38cf3199ea2863c6edddef1e3e16e2399479 100644 (file)
@@ -23,6 +23,7 @@ import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.SonarScanner;
 import it.Category2Suite;
 import java.io.File;
+import java.util.Map;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.filefilter.TrueFileFilter;
@@ -31,10 +32,9 @@ import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.skyscreamer.jsonassert.JSONAssert;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
 import static util.ItUtils.projectDir;
 
 public class CoverageTest {
@@ -58,18 +58,18 @@ public class CoverageTest {
   public void coverage() throws Exception {
     orchestrator.executeBuilds(SonarScanner.create(projectDir("testing/xoo-sample-ut-coverage")));
 
-    Resource project = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics("sample-ut-coverage", ALL_COVERAGE_METRICS));
-    assertThat(project.getMeasureValue("line_coverage")).isEqualTo(50.0);
-    assertThat(project.getMeasureValue("lines_to_cover")).isEqualTo(4);
-    assertThat(project.getMeasureValue("uncovered_lines")).isEqualTo(2);
-    assertThat(project.getMeasureValue("branch_coverage")).isEqualTo(50.0);
-    assertThat(project.getMeasureValue("conditions_to_cover")).isEqualTo(2);
-    assertThat(project.getMeasureValue("uncovered_conditions")).isEqualTo(1);
-    assertThat(project.getMeasureValue("coverage")).isEqualTo(50.0);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, "sample-ut-coverage", ALL_COVERAGE_METRICS);
+    assertThat(measures.get("line_coverage")).isEqualTo(50.0);
+    assertThat(measures.get("lines_to_cover")).isEqualTo(4d);
+    assertThat(measures.get("uncovered_lines")).isEqualTo(2d);
+    assertThat(measures.get("branch_coverage")).isEqualTo(50.0);
+    assertThat(measures.get("conditions_to_cover")).isEqualTo(2d);
+    assertThat(measures.get("uncovered_conditions")).isEqualTo(1d);
+    assertThat(measures.get("coverage")).isEqualTo(50.0);
 
-    assertThat(project.getMeasureValue("it_coverage")).isNull();
+    assertThat(measures.get("it_coverage")).isNull();
 
-    assertThat(project.getMeasureValue("overall_coverage")).isNull();
+    assertThat(measures.get("overall_coverage")).isNull();
 
     String coverage = cleanupScmAndDuplication(orchestrator.getServer().adminWsClient().get("api/sources/lines", "key", "sample-ut-coverage:src/main/xoo/sample/Sample.xoo"));
     // Use strict checking to be sure IT coverage is not present
@@ -89,18 +89,18 @@ public class CoverageTest {
   public void coverage_no_condition() throws Exception {
     orchestrator.executeBuilds(SonarScanner.create(projectDir("testing/xoo-sample-ut-coverage-no-condition")));
 
-    Resource project = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics("sample-ut-coverage", ALL_COVERAGE_METRICS));
-    assertThat(project.getMeasureValue("line_coverage")).isEqualTo(50.0);
-    assertThat(project.getMeasureValue("lines_to_cover")).isEqualTo(4);
-    assertThat(project.getMeasureValue("uncovered_lines")).isEqualTo(2);
-    assertThat(project.getMeasureValue("branch_coverage")).isNull();
-    assertThat(project.getMeasureValue("conditions_to_cover")).isNull();
-    assertThat(project.getMeasureValue("uncovered_conditions")).isNull();
-    assertThat(project.getMeasureValue("coverage")).isEqualTo(50.0);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, "sample-ut-coverage", ALL_COVERAGE_METRICS);
+    assertThat(measures.get("line_coverage")).isEqualTo(50.0);
+    assertThat(measures.get("lines_to_cover")).isEqualTo(4d);
+    assertThat(measures.get("uncovered_lines")).isEqualTo(2d);
+    assertThat(measures.get("branch_coverage")).isNull();
+    assertThat(measures.get("conditions_to_cover")).isNull();
+    assertThat(measures.get("uncovered_conditions")).isNull();
+    assertThat(measures.get("coverage")).isEqualTo(50.0);
 
-    assertThat(project.getMeasureValue("it_coverage")).isNull();
+    assertThat(measures.get("it_coverage")).isNull();
 
-    assertThat(project.getMeasureValue("overall_coverage")).isNull();
+    assertThat(measures.get("overall_coverage")).isNull();
 
     String coverage = cleanupScmAndDuplication(orchestrator.getServer().adminWsClient().get("api/sources/lines", "key", "sample-ut-coverage:src/main/xoo/sample/Sample.xoo"));
     // Use strict checking to be sure IT coverage is not present
@@ -114,21 +114,21 @@ public class CoverageTest {
   public void it_coverage_imported_as_coverage() throws Exception {
     orchestrator.executeBuilds(SonarScanner.create(projectDir("testing/xoo-sample-it-coverage")));
 
-    Resource project = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics("sample-it-coverage", ALL_COVERAGE_METRICS));
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, "sample-it-coverage", ALL_COVERAGE_METRICS);
 
     // Since SQ 6.2 all coverage reports are merged as coverage
 
-    assertThat(project.getMeasureValue("line_coverage")).isEqualTo(50.0);
-    assertThat(project.getMeasureValue("lines_to_cover")).isEqualTo(4);
-    assertThat(project.getMeasureValue("uncovered_lines")).isEqualTo(2);
-    assertThat(project.getMeasureValue("branch_coverage")).isEqualTo(50.0);
-    assertThat(project.getMeasureValue("conditions_to_cover")).isEqualTo(2);
-    assertThat(project.getMeasureValue("uncovered_conditions")).isEqualTo(1);
-    assertThat(project.getMeasureValue("coverage")).isEqualTo(50.0);
+    assertThat(measures.get("line_coverage")).isEqualTo(50.0);
+    assertThat(measures.get("lines_to_cover")).isEqualTo(4d);
+    assertThat(measures.get("uncovered_lines")).isEqualTo(2d);
+    assertThat(measures.get("branch_coverage")).isEqualTo(50.0);
+    assertThat(measures.get("conditions_to_cover")).isEqualTo(2d);
+    assertThat(measures.get("uncovered_conditions")).isEqualTo(1d);
+    assertThat(measures.get("coverage")).isEqualTo(50.0);
 
-    assertThat(project.getMeasureValue("it_coverage")).isNull();
+    assertThat(measures.get("it_coverage")).isNull();
 
-    assertThat(project.getMeasureValue("overall_coverage")).isNull();
+    assertThat(measures.get("overall_coverage")).isNull();
 
     String coverage = cleanupScmAndDuplication(orchestrator.getServer().adminWsClient().get("api/sources/lines", "key", "sample-it-coverage:src/main/xoo/sample/Sample.xoo"));
     // Use strict checking to be sure UT coverage is not present
@@ -143,18 +143,18 @@ public class CoverageTest {
 
     // Since SQ 6.2 all coverage reports are merged as coverage
 
-    Resource project = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics("sample-overall-coverage", ALL_COVERAGE_METRICS));
-    assertThat(project.getMeasureValue("line_coverage")).isEqualTo(75.0);
-    assertThat(project.getMeasureValue("lines_to_cover")).isEqualTo(4);
-    assertThat(project.getMeasureValue("uncovered_lines")).isEqualTo(1);
-    assertThat(project.getMeasureValue("branch_coverage")).isEqualTo(50.0);
-    assertThat(project.getMeasureValue("conditions_to_cover")).isEqualTo(4);
-    assertThat(project.getMeasureValue("uncovered_conditions")).isEqualTo(2);
-    assertThat(project.getMeasureValue("coverage")).isEqualTo(62.5);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, "sample-overall-coverage", ALL_COVERAGE_METRICS);
+    assertThat(measures.get("line_coverage")).isEqualTo(75.0);
+    assertThat(measures.get("lines_to_cover")).isEqualTo(4);
+    assertThat(measures.get("uncovered_lines")).isEqualTo(1);
+    assertThat(measures.get("branch_coverage")).isEqualTo(50.0);
+    assertThat(measures.get("conditions_to_cover")).isEqualTo(4);
+    assertThat(measures.get("uncovered_conditions")).isEqualTo(2);
+    assertThat(measures.get("coverage")).isEqualTo(62.5);
 
-    assertThat(project.getMeasureValue("it_coverage")).isNull();
+    assertThat(measures.get("it_coverage")).isNull();
 
-    assertThat(project.getMeasureValue("overall_coverage")).isNull();
+    assertThat(measures.get("overall_coverage")).isNull();
 
     String coverage = cleanupScmAndDuplication(orchestrator.getServer().adminWsClient().get("api/sources/lines", "key", "sample-overall-coverage:src/main/xoo/sample/Sample.xoo"));
     // Use strict checking to be sure no extra coverage is present
@@ -170,8 +170,7 @@ public class CoverageTest {
   public void should_compute_coverage_on_project() {
     orchestrator.executeBuilds(SonarScanner.create(projectDir("testing/xoo-half-covered")));
 
-    Resource project = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics("xoo-half-covered", ALL_COVERAGE_METRICS));
-    assertThat(project.getMeasureValue("coverage")).isEqualTo(50.0);
+    assertThat(getMeasuresAsDoubleByMetricKey(orchestrator, "xoo-half-covered", ALL_COVERAGE_METRICS).get("coverage")).isEqualTo(50.0);
 
     verifyComputeEngineTempDirIsEmpty();
   }
@@ -184,8 +183,7 @@ public class CoverageTest {
     orchestrator.executeBuilds(SonarScanner.create(projectDir("testing/xoo-half-covered"))
       .setProperty("sonar.coverage.exclusions", "src/main/xoo/org/sonar/tests/halfcovered/UnCovered.xoo"));
 
-    Resource project = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics("xoo-half-covered", ALL_COVERAGE_METRICS));
-    assertThat(project.getMeasureValue("coverage")).isEqualTo(100.0);
+    assertThat(getMeasuresAsDoubleByMetricKey(orchestrator, "xoo-half-covered", ALL_COVERAGE_METRICS).get("coverage")).isEqualTo(100.0);
 
     verifyComputeEngineTempDirIsEmpty();
   }
@@ -198,8 +196,7 @@ public class CoverageTest {
     orchestrator.executeBuilds(SonarScanner.create(projectDir("testing/xoo-half-covered"))
       .setProperty("sonar.coverage.exclusions", "**/UnCovered*"));
 
-    Resource project = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics("xoo-half-covered", ALL_COVERAGE_METRICS));
-    assertThat(project.getMeasureValue("coverage")).isEqualTo(100.0);
+    assertThat(getMeasuresAsDoubleByMetricKey(orchestrator, "xoo-half-covered", ALL_COVERAGE_METRICS).get("coverage")).isEqualTo(100.0);
 
     verifyComputeEngineTempDirIsEmpty();
   }
@@ -212,8 +209,7 @@ public class CoverageTest {
     orchestrator.executeBuilds(SonarScanner.create(projectDir("testing/xoo-half-covered"))
       .setProperty("sonar.coverage.exclusions", "**/*"));
 
-    Resource project = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics("xoo-half-covered", ALL_COVERAGE_METRICS));
-    assertThat(project.getMeasureValue("coverage")).isNull();
+    assertThat(getMeasuresAsDoubleByMetricKey(orchestrator, "xoo-half-covered", ALL_COVERAGE_METRICS).get("coverage")).isNull();
 
     verifyComputeEngineTempDirIsEmpty();
   }
index 9e12e33fe54858db3c3fb80dfab01df502cb1d36..dd9adee1099c5db297b0c0b8b80a9f982fbfb18b 100644 (file)
@@ -22,14 +22,16 @@ package it.test;
 import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.SonarScanner;
 import it.Category2Suite;
+import java.util.Map;
 import org.assertj.core.data.Offset;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.WsMeasures;
 
+import static java.lang.Double.parseDouble;
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasuresWithVariationsByMetricKey;
 import static util.ItUtils.projectDir;
 
 public class NewCoverageTest {
@@ -58,10 +60,10 @@ public class NewCoverageTest {
 
   @Test
   public void new_coverage() throws Exception {
-    Resource project = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT_KEY, ALL_NEW_COVERAGE_METRICS).setIncludeTrends(true));
-    assertThat(project.getMeasure("new_coverage").getVariation1()).isEqualTo(66.6d, DEFAULT_OFFSET);
-    assertThat(project.getMeasure("new_line_coverage").getVariation1()).isEqualTo(100d, DEFAULT_OFFSET);
-    assertThat(project.getMeasure("new_branch_coverage").getVariation1()).isEqualTo(42.8, DEFAULT_OFFSET);
+    Map<String, WsMeasures.Measure> measures = getMeasuresWithVariationsByMetricKey(orchestrator, PROJECT_KEY, ALL_NEW_COVERAGE_METRICS);
+    assertThat(parseDouble(measures.get("new_coverage").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(66.6d, DEFAULT_OFFSET);
+    assertThat(parseDouble(measures.get("new_line_coverage").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(100d, DEFAULT_OFFSET);
+    assertThat(parseDouble(measures.get("new_branch_coverage").getPeriods().getPeriodsValue(0).getValue())).isEqualTo(42.8, DEFAULT_OFFSET);
   }
 
 }
index 34c75e01a4791fad08a607f1ca2d8a6dfec68d6f..e273a076d51b96f8e79c814acac71ad601344101 100644 (file)
@@ -22,15 +22,15 @@ package it.test;
 import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.SonarScanner;
 import it.Category2Suite;
+import java.util.Map;
 import org.apache.commons.io.IOUtils;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.skyscreamer.jsonassert.JSONAssert;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.getMeasuresAsDoubleByMetricKey;
 import static util.ItUtils.projectDir;
 
 public class TestExecutionTest {
@@ -47,14 +47,14 @@ public class TestExecutionTest {
   public void test_execution_details() throws Exception {
     orchestrator.executeBuilds(SonarScanner.create(projectDir("testing/xoo-sample-with-tests-execution-details")));
 
-    Resource project = orchestrator.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics("sample-with-tests", "test_success_density", "test_failures", "test_errors", "tests", "skipped_tests", "test_execution_time"));
-    assertThat(project.getMeasureValue("test_success_density")).isEqualTo(33.3);
-    assertThat(project.getMeasureIntValue("test_failures")).isEqualTo(1);
-    assertThat(project.getMeasureIntValue("test_errors")).isEqualTo(1);
-    assertThat(project.getMeasureIntValue("tests")).isEqualTo(3);
-    assertThat(project.getMeasureIntValue("skipped_tests")).isEqualTo(1);
-    assertThat(project.getMeasureIntValue("test_execution_time")).isEqualTo(8);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, "sample-with-tests",
+      "test_success_density", "test_failures", "test_errors", "tests", "skipped_tests", "test_execution_time");
+    assertThat(measures.get("test_success_density")).isEqualTo(33.3);
+    assertThat(measures.get("test_failures")).isEqualTo(1);
+    assertThat(measures.get("test_errors")).isEqualTo(1);
+    assertThat(measures.get("tests")).isEqualTo(3);
+    assertThat(measures.get("skipped_tests")).isEqualTo(1);
+    assertThat(measures.get("test_execution_time")).isEqualTo(8);
 
     String json = orchestrator.getServer().adminWsClient().get("api/tests/list", "testFileKey", "sample-with-tests:src/test/xoo/sample/SampleTest.xoo");
     JSONAssert.assertEquals(IOUtils.toString(this.getClass().getResourceAsStream("/test/TestExecutionTest/expected.json"), "UTF-8"), json, false);
@@ -64,13 +64,13 @@ public class TestExecutionTest {
   public void test_execution_measures() throws Exception {
     orchestrator.executeBuilds(SonarScanner.create(projectDir("testing/xoo-sample-with-tests-execution-measures")));
 
-    Resource project = orchestrator.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics("sample-with-tests", "test_success_density", "test_failures", "test_errors", "tests", "skipped_tests", "test_execution_time"));
-    assertThat(project.getMeasureValue("test_success_density")).isEqualTo(33.3);
-    assertThat(project.getMeasureIntValue("test_failures")).isEqualTo(1);
-    assertThat(project.getMeasureIntValue("test_errors")).isEqualTo(1);
-    assertThat(project.getMeasureIntValue("tests")).isEqualTo(3);
-    assertThat(project.getMeasureIntValue("skipped_tests")).isEqualTo(1);
-    assertThat(project.getMeasureIntValue("test_execution_time")).isEqualTo(8);
+    Map<String, Double> measures = getMeasuresAsDoubleByMetricKey(orchestrator, "sample-with-tests",
+      "test_success_density", "test_failures", "test_errors", "tests", "skipped_tests", "test_execution_time");
+    assertThat(measures.get("test_success_density")).isEqualTo(33.3);
+    assertThat(measures.get("test_failures")).isEqualTo(1);
+    assertThat(measures.get("test_errors")).isEqualTo(1);
+    assertThat(measures.get("tests")).isEqualTo(3);
+    assertThat(measures.get("skipped_tests")).isEqualTo(1);
+    assertThat(measures.get("test_execution_time")).isEqualTo(8);
   }
 }
index 48ab757068f02a91f128b1593b1c8c0fa53e5d35..3fc95321bac8fd7630ba54d7f8cddc0cb90803ef 100644 (file)
@@ -39,11 +39,13 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
+import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
@@ -56,15 +58,24 @@ import org.sonar.wsclient.base.HttpException;
 import org.sonar.wsclient.issue.Issue;
 import org.sonar.wsclient.issue.IssueClient;
 import org.sonar.wsclient.issue.IssueQuery;
+import org.sonarqube.ws.WsComponents.Component;
+import org.sonarqube.ws.WsMeasures;
+import org.sonarqube.ws.WsMeasures.Measure;
+import org.sonarqube.ws.client.GetRequest;
 import org.sonarqube.ws.client.HttpConnector;
 import org.sonarqube.ws.client.WsClient;
 import org.sonarqube.ws.client.WsClientFactories;
+import org.sonarqube.ws.client.component.ShowWsRequest;
+import org.sonarqube.ws.client.measure.ComponentWsRequest;
 import org.sonarqube.ws.client.setting.ResetRequest;
 import org.sonarqube.ws.client.setting.SetRequest;
 
 import static com.google.common.base.Preconditions.checkState;
 import static com.sonar.orchestrator.container.Server.ADMIN_LOGIN;
 import static com.sonar.orchestrator.container.Server.ADMIN_PASSWORD;
+import static java.lang.Double.parseDouble;
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.fail;
 
@@ -244,6 +255,104 @@ public class ItUtils {
     resetSettings(orchestrator, null, "sonar.timemachine.period1", "sonar.timemachine.period2", "sonar.timemachine.period3");
   }
 
+  @CheckForNull
+  public static Measure getMeasure(Orchestrator orchestrator, String componentKey, String metricKey) {
+    return getMeasuresByMetricKey(orchestrator, componentKey, metricKey).get(metricKey);
+  }
+
+  @CheckForNull
+  public static Double getMeasureAsDouble(Orchestrator orchestrator, String componentKey, String metricKey) {
+    Measure measure = getMeasure(orchestrator, componentKey, metricKey);
+    return (measure == null) ? null : Double.parseDouble(measure.getValue());
+  }
+
+  public static Map<String, Measure> getMeasuresByMetricKey(Orchestrator orchestrator, String componentKey, String... metricKeys) {
+    return getStreamMeasures(orchestrator, componentKey, metricKeys)
+      .filter(Measure::hasValue)
+      .collect(Collectors.toMap(Measure::getMetric, Function.identity()));
+  }
+
+  public static Map<String, Double> getMeasuresAsDoubleByMetricKey(Orchestrator orchestrator, String componentKey, String... metricKeys) {
+    return getStreamMeasures(orchestrator, componentKey, metricKeys)
+      .filter(Measure::hasValue)
+      .collect(Collectors.toMap(Measure::getMetric, measure -> parseDouble(measure.getValue())));
+  }
+
+  private static Stream<Measure> getStreamMeasures(Orchestrator orchestrator, String componentKey, String... metricKeys) {
+    return newWsClient(orchestrator).measures().component(new ComponentWsRequest()
+      .setComponentKey(componentKey)
+      .setMetricKeys(asList(metricKeys)))
+      .getComponent().getMeasuresList()
+      .stream();
+  }
+
+  @CheckForNull
+  public static Measure getMeasureWithVariations(Orchestrator orchestrator, String componentKey, String metricKey) {
+    WsMeasures.ComponentWsResponse response = newWsClient(orchestrator).measures().component(new ComponentWsRequest()
+      .setComponentKey(componentKey)
+      .setMetricKeys(singletonList(metricKey))
+      .setAdditionalFields(singletonList("periods")));
+    List<Measure> measures = response.getComponent().getMeasuresList();
+    return measures.size() == 1 ? measures.get(0) : null;
+  }
+
+  @CheckForNull
+  public static Map<String, Measure> getMeasuresWithVariationsByMetricKey(Orchestrator orchestrator, String componentKey, String... metricKeys) {
+    return newWsClient(orchestrator).measures().component(new ComponentWsRequest()
+      .setComponentKey(componentKey)
+      .setMetricKeys(asList(metricKeys))
+      .setAdditionalFields(singletonList("periods"))).getComponent().getMeasuresList()
+      .stream()
+      .collect(Collectors.toMap(Measure::getMetric, Function.identity()));
+  }
+
+  /**
+   * Return period values as string by period index (from 1 to 5)
+   */
+  public static Map<Integer, Double> getPeriodMeasureValuesByIndex(Orchestrator orchestrator, String componentKey, String metricKey) {
+    return getMeasureWithVariations(orchestrator, componentKey, metricKey).getPeriods().getPeriodsValueList().stream()
+      .collect(Collectors.toMap(WsMeasures.PeriodValue::getIndex, measure -> parseDouble(measure.getValue())));
+  }
+
+  @CheckForNull
+  public static Component getComponent(Orchestrator orchestrator, String componentKey) {
+    try {
+      return newWsClient(orchestrator).components().show(new ShowWsRequest().setKey((componentKey))).getComponent();
+    } catch (org.sonarqube.ws.client.HttpException e) {
+      if (e.code() == 404) {
+        return null;
+      }
+      throw new IllegalStateException(e);
+    }
+  }
+
+  @CheckForNull
+  public static ComponentNavigation getComponentNavigation(Orchestrator orchestrator, String componentKey) {
+    // Waiting for SONAR-7745 to have version in api/components/show, we use internal api/navigation/component WS to get the component
+    // version
+    String content = newWsClient(orchestrator).wsConnector().call(new GetRequest("api/navigation/component").setParam("componentKey", componentKey)).failIfNotSuccessful()
+      .content();
+    return ComponentNavigation.parse(content);
+  }
+
+  public static class ComponentNavigation {
+    private String version;
+    private String snapshotDate;
+
+    public String getVersion() {
+      return version;
+    }
+
+    public Date getDate() {
+      return toDatetime(snapshotDate);
+    }
+
+    public static ComponentNavigation parse(String json) {
+      Gson gson = new Gson();
+      return gson.fromJson(json, ComponentNavigation.class);
+    }
+  }
+
   /**
    * Concatenates a vararg to a String array.
    *
index 96000dd4acdece60a64aa2921db6d617acba19ca..46a7ef74ad53c0b12b495ebf6dfb06d79eceec2a 100644 (file)
@@ -100,7 +100,7 @@ public class ShowActionTest {
 
   @Test
   public void show_provided_project() {
-    componentDb.insertComponent(newProjectDto(db.organizations().insert(), "project-uuid"));
+    componentDb.insertComponent(newProjectDto(db.organizations().insert(), "project-uuid").setEnabled(false));
 
     ShowWsResponse response = newRequest("project-uuid", null);
 
index 7ef689fdb728bf801b12b0da315ffda20c717df1..d385f5d48fe184e97b81f853b70fd5924b6a3615 100644 (file)
       <artifactId>sonar-update-center-common</artifactId>
       <version>1.12.1</version>
     </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>sonar-ws</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
     <dependency>
       <groupId>commons-lang</groupId>
       <artifactId>commons-lang</artifactId>
index b309b7f5b8f51e753cd9a190cfc666d4188ebe42..9b700a0b3a8f3ef6197fea55f93e3a9e8aff8c8c 100644 (file)
@@ -22,8 +22,9 @@ package org.sonarsource.sonarqube.perf.scanner.suite;
 import com.sonar.orchestrator.Orchestrator;
 import com.sonar.orchestrator.build.MavenBuild;
 import com.sonar.orchestrator.locator.FileLocation;
-import org.sonarsource.sonarqube.perf.PerfTestCase;
 import java.io.IOException;
+import java.util.Map;
+import java.util.stream.Collectors;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
@@ -31,9 +32,15 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ErrorCollector;
 import org.junit.rules.TemporaryFolder;
-import org.sonar.wsclient.services.Resource;
-import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.WsMeasures;
+import org.sonarqube.ws.client.HttpConnector;
+import org.sonarqube.ws.client.WsClient;
+import org.sonarqube.ws.client.WsClientFactories;
+import org.sonarqube.ws.client.measure.ComponentWsRequest;
+import org.sonarsource.sonarqube.perf.PerfTestCase;
 
+import static java.lang.Double.parseDouble;
+import static java.util.Arrays.asList;
 import static org.fest.assertions.Assertions.assertThat;
 
 public class DuplicationTest extends PerfTestCase {
@@ -68,12 +75,22 @@ public class DuplicationTest extends PerfTestCase {
       .setProperty("sonar.sourceEncoding", "UTF-8")
       .setCleanSonarGoals();
     orchestrator.executeBuild(build);
-    Resource file = getResource("com.sonarsource.it.samples:huge-file:src/main/java/huge/HugeFile.java");
-    assertThat(file.getMeasureValue("duplicated_lines")).isGreaterThan(50000.0);
+    Map<String, Double> measure = getMeasures("com.sonarsource.it.samples:huge-file:src/main/java/huge/HugeFile.java");
+    assertThat(measure.get("duplicated_lines")).isGreaterThan(50000.0);
+  }
+
+  private Map<String, Double> getMeasures(String key) {
+    return newWsClient().measures().component(new ComponentWsRequest()
+      .setComponentKey(key)
+      .setMetricKeys(asList("duplicated_lines", "duplicated_blocks", "duplicated_files", "duplicated_lines_density")))
+      .getComponent().getMeasuresList()
+      .stream()
+      .collect(Collectors.toMap(WsMeasures.Measure::getMetric, measure -> parseDouble(measure.getValue())));
   }
 
-  private Resource getResource(String key) {
-    return orchestrator.getServer().getWsClient()
-      .find(ResourceQuery.createForMetrics(key, "duplicated_lines", "duplicated_blocks", "duplicated_files", "duplicated_lines_density", "useless-duplicated-lines"));
+  private WsClient newWsClient() {
+    return WsClientFactories.getDefault().newClient(HttpConnector.newBuilder()
+      .url(orchestrator.getServer().getUrl())
+      .build());
   }
 }
index 59086bf5f6dec13a164d164f275fa1ebbbf8e616..eddab9a40ae0e6c514d7883f6e5455280e6b2781 100644 (file)
@@ -18,9 +18,9 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.codehaus.sonar</groupId>
-      <artifactId>sonar-ws-client</artifactId>
-      <version>5.1</version>
+      <groupId>org.sonarsource.sonarqube</groupId>
+      <artifactId>sonar-ws</artifactId>
+      <version>${project.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
index bad5a01d7f77bfcaba7ded05f5636e7cd94df5f9..480846415f399ce1a4306355c530db3fb9375d1d 100644 (file)
@@ -32,18 +32,22 @@ import java.io.IOException;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.Arrays;
+import java.util.Collections;
 import org.apache.commons.io.IOUtils;
 import org.junit.After;
 import org.junit.Test;
 import org.sonar.wsclient.services.ResourceQuery;
+import org.sonarqube.ws.WsMeasures.Measure;
 import org.sonarqube.ws.client.GetRequest;
 import org.sonarqube.ws.client.HttpConnector;
 import org.sonarqube.ws.client.WsClient;
 import org.sonarqube.ws.client.WsClientFactories;
 import org.sonarqube.ws.client.WsResponse;
+import org.sonarqube.ws.client.measure.ComponentWsRequest;
 
 import static com.codeborne.selenide.Condition.hasText;
 import static com.codeborne.selenide.Selenide.$;
+import static java.lang.Integer.parseInt;
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class UpgradeTest {
@@ -129,7 +133,7 @@ public class UpgradeTest {
     checkUrlIsReturningOk("/api/system/db_migration_status");
     checkUrlIsReturningOk("/api/webservices/list");
     // TODO Reactivate when latest Sonarqube version will be in repox
-//    checkUrlIsReturningOkOnlyForDevVersion("/api/l10n/index", sqVersion);
+    // checkUrlIsReturningOkOnlyForDevVersion("/api/l10n/index", sqVersion);
 
     // These urls should not be available when system requires a migration
     checkUrlIsReturningNotFound("/api/issues/search?projectKeys=org.apache.struts%3Astruts-core");
@@ -212,6 +216,11 @@ public class UpgradeTest {
   }
 
   private int countFiles(String key) {
+    if (orchestrator.getConfiguration().getSonarVersion().isGreaterThanOrEquals("5.4")) {
+      Measure measure = newWsClient(orchestrator).measures().component(new ComponentWsRequest().setComponentKey(key).setMetricKeys(Collections.singletonList("files")))
+        .getComponent().getMeasures(0);
+      return parseInt(measure.getValue());
+    }
     return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(key, "files")).getMeasureIntValue("files");
   }