]> source.dussan.org Git - sonarqube.git/commitdiff
Add project name in compute report queue 322/head
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 22 May 2015 09:29:43 +0000 (11:29 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 25 May 2015 06:42:11 +0000 (08:42 +0200)
12 files changed:
server/sonar-server/src/main/java/org/sonar/server/computation/ReportQueue.java
server/sonar-server/src/main/java/org/sonar/server/computation/ws/QueueAction.java
server/sonar-server/src/main/java/org/sonar/server/computation/ws/SubmitReportAction.java
server/sonar-server/src/test/java/org/sonar/server/computation/ReportQueueTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/ws/QueueActionTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/ws/SubmitReportActionTest.java
server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml
server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select.xml
server/sonar-server/src/test/resources/org/sonar/server/computation/ws/QueueActionTest/list_queue_reports.json
sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java
sonar-core/src/main/resources/org/sonar/core/computation/db/AnalysisReportMapper.xml

index afd4fe1a92c862c1cc6cf60d2f8e3eb0ab09ca89..5dbdfe8fef57266923f29008e6188fc5b285f96a 100644 (file)
@@ -21,8 +21,8 @@
 package org.sonar.server.computation;
 
 import org.apache.commons.io.FileUtils;
-import org.sonar.api.server.ServerSide;
 import org.sonar.api.config.Settings;
+import org.sonar.api.server.ServerSide;
 import org.sonar.api.utils.internal.Uuids;
 import org.sonar.api.utils.log.Loggers;
 import org.sonar.core.computation.db.AnalysisReportDto;
@@ -51,7 +51,7 @@ public class ReportQueue {
     this.settings = settings;
   }
 
-  public Item add(String projectKey, InputStream reportData) {
+  public Item add(String projectKey, String projectName, InputStream reportData) {
     String uuid = Uuids.create();
     File file = reportFileForUuid(uuid);
 
@@ -60,7 +60,7 @@ public class ReportQueue {
       checkThatProjectExistsInDatabase(projectKey, session);
 
       saveReportOnDisk(reportData, file);
-      AnalysisReportDto dto = saveReportMetadataInDatabase(projectKey, uuid, session);
+      AnalysisReportDto dto = saveReportMetadataInDatabase(projectKey, projectName, uuid, session);
 
       return new Item(dto, file);
     } catch (Exception e) {
@@ -71,9 +71,10 @@ public class ReportQueue {
     }
   }
 
-  private AnalysisReportDto saveReportMetadataInDatabase(String projectKey, String uuid, DbSession session) {
+  private AnalysisReportDto saveReportMetadataInDatabase(String projectKey, String projectName, String uuid, DbSession session) {
     AnalysisReportDto dto = new AnalysisReportDto()
       .setProjectKey(projectKey)
+      .setProjectName(projectName)
       .setStatus(PENDING)
       .setUuid(uuid);
     dao().insert(session, dto);
@@ -124,15 +125,6 @@ public class ReportQueue {
     }
   }
 
-  public List<AnalysisReportDto> selectByProjectKey(String projectKey) {
-    DbSession session = dbClient.openSession(false);
-    try {
-      return dao().selectByProjectKey(session, projectKey);
-    } finally {
-      MyBatis.closeQuietly(session);
-    }
-  }
-
   /**
    * Truncates table ANALYSIS_REPORTS and delete all files from directory {data}/analysis
    */
index fd20ecf2977442f1562ad0a809fc948fd36cd057..0fe4c3d210cdd23c25e2f5800530d9488027be95 100644 (file)
@@ -67,7 +67,7 @@ public class QueueAction implements ComputationWsAction {
       json.beginObject();
       json.prop("key", report.getId());
       json.prop("projectKey", report.getProjectKey());
-      json.prop("projectName", report.getProjectKey());
+      json.prop("projectName", report.getProjectName());
       json.propDateTime("startedAt", longToDate(report.getStartedAt()));
       json.propDateTime("finishedAt", longToDate(report.getFinishedAt()));
       json.propDateTime("submittedAt", longToDate(report.getCreatedAt()));
index 86f290b1f7dd0d154cc7e05ce7deb423feea45fb..8bd4ecb212ce7f635cf35707fa8098cfdeecf35c 100644 (file)
@@ -35,6 +35,7 @@ public class SubmitReportAction implements ComputationWsAction {
 
   public static final String ACTION = "submit_report";
   public static final String PARAM_PROJECT_KEY = "projectKey";
+  public static final String PARAM_PROJECT_NAME = "projectName";
   public static final String PARAM_REPORT_DATA = "report";
 
   private final ReportQueue queue;
@@ -61,6 +62,12 @@ public class SubmitReportAction implements ComputationWsAction {
       .setDescription("Project key")
       .setExampleValue("org.codehaus.sonar:sonar");
 
+    action
+      .createParam(PARAM_PROJECT_NAME)
+      .setRequired(true)
+      .setDescription("Project name")
+      .setExampleValue("SonarQube");
+
     action
       .createParam(PARAM_REPORT_DATA)
       .setRequired(true)
@@ -71,9 +78,10 @@ public class SubmitReportAction implements ComputationWsAction {
   public void handle(Request request, Response response) throws Exception {
     userSession.checkGlobalPermission(GlobalPermissions.SCAN_EXECUTION);
     String projectKey = request.mandatoryParam(PARAM_PROJECT_KEY);
+    String projectName = request.mandatoryParam(PARAM_PROJECT_NAME);
     InputStream reportData = request.paramAsInputStream(PARAM_REPORT_DATA);
     try {
-      ReportQueue.Item item = queue.add(projectKey, reportData);
+      ReportQueue.Item item = queue.add(projectKey, projectName, reportData);
       workerLauncher.startAnalysisTaskNow();
       response.newJsonWriter()
         .beginObject()
index ba5ec765781a4e6f065d86fc6d7babf693cac1ff..36de2139087f3a8ca8ce075533d15473502127f3 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.server.computation;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -57,6 +58,9 @@ public class ReportQueueTest {
   @Rule
   public DbTester db = new DbTester();
 
+  DbClient dbClient;
+  DbSession session;
+
   @Rule
   public TemporaryFolder temp = new TemporaryFolder();
 
@@ -71,15 +75,19 @@ public class ReportQueueTest {
     settings.setProperty(ProcessProperties.PATH_DATA, dataDir.getAbsolutePath());
     when(system.now()).thenReturn(NOW);
 
-    DbClient dbClient = new DbClient(db.database(), db.myBatis(), new ComponentDao(), new AnalysisReportDao(system));
+    dbClient = new DbClient(db.database(), db.myBatis(), new ComponentDao(), new AnalysisReportDao(system));
     sut = new ReportQueue(dbClient, settings);
 
-    try (DbSession session = dbClient.openSession(false)) {
+    session = dbClient.openSession(false);
       dbClient.componentDao().insert(session, ComponentTesting.newProjectDto().setKey("P1"));
       dbClient.componentDao().insert(session, ComponentTesting.newProjectDto().setKey("P2"));
       dbClient.componentDao().insert(session, ComponentTesting.newProjectDto().setKey("P3"));
       session.commit();
-    }
+  }
+
+  @After
+  public void tearDown() throws Exception {
+    session.close();
   }
 
   @Test
@@ -87,20 +95,21 @@ public class ReportQueueTest {
     // must:
     // 1. insert metadata in db
     // 2. copy report content to directory /data/analysis
-    ReportQueue.Item item = sut.add("P1", generateData());
+    ReportQueue.Item item = sut.add("P1", "Project 1", generateData());
 
     assertThat(item).isNotNull();
     assertThat(item.zipFile).isFile().exists().hasContent("some data").hasParent(new File(dataDir, "analysis"));
     assertThat(item.dto.getUuid()).isNotEmpty();
     assertThat(item.dto.getId()).isGreaterThan(0L);
 
-    List<AnalysisReportDto> reports = sut.selectByProjectKey("P1");
+    List<AnalysisReportDto> reports = dbClient.analysisReportDao().selectByProjectKey(session, "P1");
     assertThat(reports).hasSize(1);
     AnalysisReportDto report = reports.get(0);
 
     assertThat(reports).hasSize(1);
     assertThat(report.getStatus()).isEqualTo(PENDING);
     assertThat(report.getProjectKey()).isEqualTo("P1");
+    assertThat(report.getProjectName()).isEqualTo("Project 1");
     assertThat(report.getUuid()).isNotEmpty();
     assertThat(report.getId()).isGreaterThan(0L);
     assertThat(report.getCreatedAt()).isEqualTo(NOW);
@@ -111,18 +120,11 @@ public class ReportQueueTest {
     assertThat(FileUtils.listFiles(analysisDir(), new String[] {"zip"}, false)).hasSize(1);
   }
 
-  @Test
-  public void find_by_project_key() {
-    sut.add("P1", generateData());
-    assertThat(sut.selectByProjectKey("P1")).hasSize(1).extracting("projectKey").containsExactly("P1");
-    assertThat(sut.selectByProjectKey("P2")).isEmpty();
-  }
-
   @Test
   public void pop_pending_items_in_fifo_order() {
-    sut.add("P1", generateData());
-    sut.add("P2", generateData());
-    sut.add("P3", generateData());
+    sut.add("P1", "Project 1", generateData());
+    sut.add("P2", "Project 2", generateData());
+    sut.add("P3", "Project 3", generateData());
 
     ReportQueue.Item item = sut.pop();
     assertThat(item.dto.getProjectKey()).isEqualTo("P1");
@@ -145,7 +147,7 @@ public class ReportQueueTest {
 
   @Test
   public void remove() {
-    ReportQueue.Item item = sut.add("P1", generateData());
+    ReportQueue.Item item = sut.add("P1", "Project 1", generateData());
     assertThat(db.countRowsOfTable("analysis_reports")).isEqualTo(1);
 
     sut.remove(item);
@@ -155,7 +157,7 @@ public class ReportQueueTest {
 
   @Test
   public void do_not_pop_corrupted_item() {
-    ReportQueue.Item item = sut.add("P1", generateData());
+    ReportQueue.Item item = sut.add("P1", "Project 1", generateData());
 
     // emulate corruption: file is missing on FS
     FileUtils.deleteQuietly(item.zipFile);
@@ -168,8 +170,8 @@ public class ReportQueueTest {
 
   @Test
   public void clear() {
-    sut.add("P1", generateData());
-    sut.add("P2", generateData());
+    sut.add("P1", "Project 1", generateData());
+    sut.add("P2", "Project 2", generateData());
     assertThat(analysisDir()).exists().isDirectory();
 
     sut.clear();
@@ -186,14 +188,14 @@ public class ReportQueueTest {
 
   @Test(expected = IllegalStateException.class)
   public void add_on_non_existent_project() {
-    sut.add("UNKNOWN_PROJECT_KEY", generateData());
+    sut.add("UNKNOWN_PROJECT_KEY", "Unknown project", generateData());
   }
 
   @Test
   public void reset_to_pending_status() {
     // 2 pending
-    sut.add("P1", generateData());
-    sut.add("P2", generateData());
+    sut.add("P1", "Project 1", generateData());
+    sut.add("P2", "Project 2", generateData());
 
     // pop 1 -> 1 pending and 1 working
     ReportQueue.Item workingItem = sut.pop();
@@ -202,7 +204,6 @@ public class ReportQueueTest {
 
     sut.resetToPendingStatus();
     assertThat(sut.all()).extracting("status").containsOnly(PENDING).hasSize(2);
-
   }
 
   private InputStream generateData() {
index 6e3a09a0df387b17e2bf75b03dd00e28ffc0a40d..0b636a01c33421cacd78781a6b49bdc4c52514e6 100644 (file)
@@ -75,8 +75,8 @@ public class AnalysisReportDaoTest {
   public void insert_multiple_reports() {
     db.prepareDbUnit(getClass(), "empty.xml");
 
-    AnalysisReportDto report1 = newDefaultAnalysisReport().setUuid("UUID_1");
-    AnalysisReportDto report2 = newDefaultAnalysisReport().setUuid("UUID_2");
+    AnalysisReportDto report1 = new AnalysisReportDto().setProjectKey("ProjectKey1").setProjectName("Project 1").setUuid("UUID_1").setStatus(PENDING);
+    AnalysisReportDto report2 = new AnalysisReportDto().setProjectKey("ProjectKey2").setProjectName("Project 2").setUuid("UUID_2").setStatus(PENDING);
 
     sut.insert(session, report1);
     sut.insert(session, report2);
@@ -115,6 +115,8 @@ public class AnalysisReportDaoTest {
 
     assertThat(reports).hasSize(1);
     assertThat(report.getProjectKey()).isEqualTo(projectKey);
+    assertThat(report.getProjectName()).isEqualTo("Project 1");
+    assertThat(report.getStatus()).isEqualTo(AnalysisReportDto.Status.WORKING);
     assertThat(report.getId()).isEqualTo(1);
   }
 
@@ -206,11 +208,4 @@ public class AnalysisReportDaoTest {
 
     assertThat(reports).hasSize(3);
   }
-
-  private AnalysisReportDto newDefaultAnalysisReport() {
-    return AnalysisReportDto.newForTests(1L)
-      .setProjectKey(DEFAULT_PROJECT_KEY)
-      .setUuid("REPORT_UUID")
-      .setStatus(PENDING);
-  }
 }
index 86e27721204c77a72cfde9725602ba0712797a40..9da351bc172d3a027e80295a799e17ba1f5673b1 100644 (file)
@@ -51,6 +51,7 @@ public class QueueActionTest {
     AnalysisReportDto report = AnalysisReportDto
       .newForTests(1L)
       .setProjectKey("project-key")
+      .setProjectName("Project name")
       .setStatus(PENDING)
       .setUuid("PROJECT_UUID")
       .setCreatedAt(DateUtils.parseDateTime("2014-10-13T00:00:00+0200").getTime())
index 72652f59a43818055ce1b50763f0667756c26f56..e0dd67608047be12cc1fcc290727f88818784794 100644 (file)
@@ -42,6 +42,7 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 public class SubmitReportActionTest {
+
   @Rule
   public UserSessionRule userSessionRule = UserSessionRule.standalone();
 
@@ -65,7 +66,7 @@ public class SubmitReportActionTest {
 
     WebService.Action action = context.controller("api/computation").action("submit_report");
     assertThat(action).isNotNull();
-    assertThat(action.params()).hasSize(2);
+    assertThat(action.params()).hasSize(3);
   }
 
   @Test
@@ -73,15 +74,16 @@ public class SubmitReportActionTest {
     userSessionRule.setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION);
     AnalysisReportDto dto = mock(AnalysisReportDto.class);
     when(dto.getId()).thenReturn(42L);
-    when(queue.add(any(String.class), any(InputStream.class))).thenReturn(new ReportQueue.Item(dto, null));
+    when(queue.add(any(String.class), any(String.class), any(InputStream.class))).thenReturn(new ReportQueue.Item(dto, null));
 
     WsTester.TestRequest request = wsTester
       .newPostRequest(ComputationWs.ENDPOINT, "submit_report")
       .setParam(SubmitReportAction.PARAM_PROJECT_KEY, "P1")
+      .setParam(SubmitReportAction.PARAM_PROJECT_NAME, "Project 1")
       .setParam(SubmitReportAction.PARAM_REPORT_DATA, null);
     WsTester.Result response = request.execute();
 
-    verify(queue).add(eq("P1"), any(InputStream.class));
+    verify(queue).add(eq("P1"), eq("Project 1"), any(InputStream.class));
     verify(workerLauncher).startAnalysisTaskNow();
     assertThat(response.outputAsString()).isEqualTo("{\"key\":\"42\"}");
   }
@@ -93,6 +95,7 @@ public class SubmitReportActionTest {
     WsTester.TestRequest request = wsTester
       .newPostRequest(ComputationWs.ENDPOINT, "submit_report")
       .setParam(SubmitReportAction.PARAM_PROJECT_KEY, "P1")
+      .setParam(SubmitReportAction.PARAM_PROJECT_NAME, "Project 1")
       .setParam(SubmitReportAction.PARAM_REPORT_DATA, null);
     request.execute();
 
index 4fd579504fe6946aaa3d3bd33e294bfae9bca64a..d25e3641ce9fd471a2548365db723638343d01a5 100644 (file)
@@ -1,8 +1,8 @@
 <dataset>
   <analysis_reports
       id="1"
-      project_key="123456789-987654321"
-      project_name="[null]"
+      project_key="ProjectKey1"
+      project_name="Project 1"
       uuid="UUID_1"
       report_status="PENDING"
       started_at="[null]"
@@ -12,8 +12,8 @@
       />
   <analysis_reports
       id="2"
-      project_key="123456789-987654321"
-      project_name="[null]"
+      project_key="ProjectKey2"
+      project_name="Project 2"
       uuid="UUID_2"
       report_status="PENDING"
       started_at="[null]"
index c1e3284f108315987a8496e22848e695e4652ef1..de9d5b9f330be0f9a31530f32dafc98b487280a7 100644 (file)
@@ -2,6 +2,7 @@
   <analysis_reports
       id="1"
       project_key="123456789-987654321"
+      project_name="Project 1"
       uuid="UUID_1"
       report_status="WORKING"
       created_at="1411509600000"
@@ -10,6 +11,7 @@
   <analysis_reports
       id="2"
       project_key="987654321-123456789"
+      project_name="Project 2"
       uuid="UUID_2"
       report_status="WORKING"
       created_at="1411596000000"
@@ -18,6 +20,7 @@
   <analysis_reports
       id="3"
       project_key="987654321-123456789"
+      project_name="Project 2"
       uuid="UUID_3"
       report_status="PENDING"
       created_at="1411682400000"
index 67f2234136f9c701e2647f58315b73b9cc1d7cfb..10247f2e942b167063b2bf94634aeba744387c33 100644 (file)
@@ -3,11 +3,11 @@
     {
       "key": 1,
       "status": "PENDING",
-      "projectName": "project-key",
+      "projectName": "Project name",
       "projectKey": "project-key",
       "submittedAt": "2014-10-13T00:00:00+0200",
       "startedAt": "2014-10-13T00:00:00+0200",
       "finishedAt": "2014-10-13T00:00:00+0200"
     }
   ]
-}
\ No newline at end of file
+}
index 83c7bb7bb5a08578f41d54c0835846774f800880..e09270fa4f51b560b5bfad4f01a17e11221c9e87 100644 (file)
@@ -27,6 +27,7 @@ import javax.annotation.CheckForNull;
 public class AnalysisReportDto {
   private Long id;
   private String projectKey;
+  private String projectName;
   private Status status;
   private String uuid;
   private Long createdAt;
@@ -51,6 +52,15 @@ public class AnalysisReportDto {
     return this;
   }
 
+  public String getProjectName() {
+    return projectName;
+  }
+
+  public AnalysisReportDto setProjectName(String projectName) {
+    this.projectName = projectName;
+    return this;
+  }
+
   public Status getStatus() {
     return status;
   }
index 7e37e574d99515e9c5a7ad2430d9d470367d955f..28b7d9fbf57b5d5c9c444d574dead4496e93e476 100644 (file)
@@ -6,6 +6,7 @@
     <!-- the data report is not brought back by default as it could be too big in memory -->
     ar.id,
     ar.project_key as projectKey,
+    ar.project_name as projectName,
     ar.report_status as status,
     ar.uuid as uuid,
     ar.created_at as createdAt,
@@ -16,9 +17,9 @@
 
   <insert id="insert" parameterType="AnalysisReport" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
     insert into analysis_reports
-    (project_key, uuid, report_status, created_at, updated_at, started_at, finished_at)
+    (project_key, project_name, uuid, report_status, created_at, updated_at, started_at, finished_at)
     values (
-    #{projectKey,jdbcType=VARCHAR}, #{uuid,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR},
+    #{projectKey,jdbcType=VARCHAR}, #{projectName,jdbcType=VARCHAR}, #{uuid,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR},
     #{createdAt,jdbcType=BIGINT}, #{updatedAt,jdbcType=BIGINT}, #{startedAt,jdbcType=BIGINT},
     #{finishedAt,jdbcType=BIGINT}
     )