]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5939 delete report folder at the end of the analysis - disabled at the moment
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Mon, 15 Dec 2014 16:01:26 +0000 (17:01 +0100)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Tue, 16 Dec 2014 08:05:11 +0000 (09:05 +0100)
server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportService.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/DataCleanerStep.java
server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportServiceTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/DataCleanerStepMediumTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/DataCleanerStepTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/DigestReportStepTest.java
server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/empty.xml [new file with mode: 0644]
server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/snapshots.xml [new file with mode: 0644]
server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/sub-folder/zip.zip [new file with mode: 0644]

index 130b0ee8bca2bf3ad16bd407ada46416ea400e7c..d6b11c828063d2e3169a748f5b5216a4a40ebcd8 100644 (file)
 
 package org.sonar.server.computation;
 
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.sonar.api.ServerComponent;
 import org.sonar.core.component.ComponentDto;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.server.db.DbClient;
 
-public class AnalysisReportService {
+import javax.annotation.Nullable;
 
+import java.io.File;
+import java.io.IOException;
+
+public class AnalysisReportService implements ServerComponent {
+  private static final Logger LOG = LoggerFactory.getLogger(AnalysisReportService.class);
   private final DbClient dbClient;
 
   public AnalysisReportService(DbClient dbClient) {
@@ -37,4 +46,16 @@ public class AnalysisReportService {
 
     context.setReportDirectory(dbClient.analysisReportDao().getDecompressedReport(session, project.getId()));
   }
+
+  public void clean(@Nullable File directory) {
+    if (directory == null) {
+      return;
+    }
+
+    try {
+      FileUtils.deleteDirectory(directory);
+    } catch (IOException e) {
+      LOG.warn(String.format("Failed to delete directory '%s'", directory.getPath()), e);
+    }
+  }
 }
index 7020e6294ee61f455aeee68f3a4e3b25de904ded..00b3092e540fcbecfde0f00110f278c22d1f8a7d 100644 (file)
 
 package org.sonar.server.computation.step;
 
+import org.sonar.core.computation.dbcleaner.ProjectCleaner;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.purge.IdUuidPair;
-import org.sonar.core.computation.dbcleaner.ProjectCleaner;
+import org.sonar.server.computation.AnalysisReportService;
 import org.sonar.server.computation.ComputeEngineContext;
 
 public class DataCleanerStep implements ComputationStep {
   private final ProjectCleaner projectCleaner;
+  private final AnalysisReportService reportService;
 
-  public DataCleanerStep(ProjectCleaner projectCleaner) {
+  public DataCleanerStep(ProjectCleaner projectCleaner, AnalysisReportService reportService) {
     this.projectCleaner = projectCleaner;
+    this.reportService = reportService;
   }
 
   @Override
   public void execute(DbSession session, ComputeEngineContext context) {
     projectCleaner.purge(session, new IdUuidPair(context.getProject().getId(), context.getProject().uuid()));
+    // reportService.clean(context.getReportDirectory());
   }
 
   @Override
index 387c67a55040770771afaa2624a35d76d5a5a927..672e232f8e3abeee965718b04ec0b015e4f5ccb7 100644 (file)
 
 package org.sonar.server.computation;
 
+import org.apache.commons.io.FileUtils;
 import org.junit.Test;
+import org.sonar.core.component.ComponentDto;
+import org.sonar.core.computation.db.AnalysisReportDto;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.server.computation.db.AnalysisReportDao;
 import org.sonar.server.db.DbClient;
 
+import java.io.File;
+
+import static org.fest.assertions.Assertions.assertThat;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.*;
 
@@ -38,9 +44,30 @@ public class AnalysisReportServiceTest {
     AnalysisReportDao dao = mock(AnalysisReportDao.class);
     when(dbClient.analysisReportDao()).thenReturn(dao);
     sut = new AnalysisReportService(dbClient);
+    ComputeEngineContext context = new ComputeEngineContext(mock(AnalysisReportDto.class), mock(ComponentDto.class));
+
+    sut.decompress(mock(DbSession.class), context);
+
+    verify(dao).getDecompressedReport(any(DbSession.class), anyLong());
+  }
+
+  @Test
+  public void clean_null_directory_does_not_throw_any_exception() throws Exception {
+    sut = new AnalysisReportService(mock(DbClient.class));
+
+    sut.clean(null);
+  }
+
+  @Test
+  public void clean_temp_folder() throws Exception {
+    sut = new AnalysisReportService(mock(DbClient.class));
+    File origin = new File(getClass().getResource("/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder").getFile());
+    File destination = new File("target/tmp/report-folder-to-delete");
+    FileUtils.copyDirectory(origin, destination);
+    assertThat(destination.exists()).isTrue();
 
-    sut.decompress(mock(DbSession.class), , 123L);
+    sut.clean(destination);
 
-    verify(dao).getDecompressedReport(any(DbSession.class), eq(123L));
+    assertThat(destination.exists()).isFalse();
   }
 }
index 20423d1a34d9af0d720c90d41f0f357b1fd06da9..8f82068a82e095ec212155a6ce41cce20432e1a5 100644 (file)
@@ -297,7 +297,7 @@ public class AnalysisReportDaoTest {
   }
 
   @Test
-  public void insert_and_then_retrieve_report_data_with_uncompressed_files_medium_test() throws Exception {
+  public void insert_and_then_retrieve_report_data_with_decompressed_files_medium_test() throws Exception {
     // ARRANGE
     db.prepareDbUnit(getClass(), "empty.xml");
     AnalysisReportDto report = newDefaultAnalysisReport();
index ffbd0b7c47678f9d38dc2eba65e3f0410308d57c..c031d425ace2e7049e615a876e861dc3c95a3af0 100644 (file)
@@ -36,11 +36,9 @@ import org.sonar.core.persistence.MyBatis;
 import org.sonar.core.properties.PropertyDto;
 import org.sonar.server.component.ComponentTesting;
 import org.sonar.server.component.SnapshotTesting;
+import org.sonar.server.computation.AnalysisReportService;
 import org.sonar.server.computation.ComputeEngineContext;
 import org.sonar.server.db.DbClient;
-import org.sonar.server.properties.ProjectSettingsFactory;
-import org.sonar.server.search.IndexClient;
-import org.sonar.server.source.index.SourceLineIndexer;
 import org.sonar.server.tester.ServerTester;
 
 import java.util.Date;
@@ -55,22 +53,18 @@ public class DataCleanerStepMediumTest {
   private DataCleanerStep sut;
   private DbClient dbClient;
   private DbSession dbSession;
-  private IndexClient indexClient;
-  private SourceLineIndexer sourceLineIndexer;
-  private ProjectSettingsFactory projectSettingsFactory;
   private ProjectCleaner purgeTask;
+  private AnalysisReportService reportService;
 
   @Before
   public void before() throws Exception {
     this.dbClient = tester.get(DbClient.class);
     this.dbSession = dbClient.openSession(false);
 
-    this.indexClient = tester.get(IndexClient.class);
-    this.projectSettingsFactory = tester.get(ProjectSettingsFactory.class);
     this.purgeTask = tester.get(ProjectCleaner.class);
-    this.sourceLineIndexer = tester.get(SourceLineIndexer.class);
+    this.reportService = tester.get(AnalysisReportService.class);
 
-    this.sut = new DataCleanerStep(purgeTask);
+    this.sut = new DataCleanerStep(purgeTask, reportService);
   }
 
   @After
index c0b60752e654001d25110d4b2748182d56677a1b..b350790bed27b105064845a8c3c7c4234ef6b25b 100644 (file)
@@ -27,6 +27,7 @@ import org.sonar.core.computation.db.AnalysisReportDto;
 import org.sonar.core.computation.dbcleaner.ProjectCleaner;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.purge.IdUuidPair;
+import org.sonar.server.computation.AnalysisReportService;
 import org.sonar.server.computation.ComputeEngineContext;
 
 import static org.mockito.Matchers.any;
@@ -36,12 +37,14 @@ public class DataCleanerStepTest {
 
   private DataCleanerStep sut;
   private ProjectCleaner projectCleaner;
+  private AnalysisReportService reportService;
 
   @Before
   public void before() {
     this.projectCleaner = mock(ProjectCleaner.class);
+    this.reportService = mock(AnalysisReportService.class);
 
-    this.sut = new DataCleanerStep(projectCleaner);
+    this.sut = new DataCleanerStep(projectCleaner, reportService);
   }
 
   @Test
@@ -54,5 +57,6 @@ public class DataCleanerStepTest {
     sut.execute(mock(DbSession.class), context);
 
     verify(projectCleaner).purge(any(DbSession.class), any(IdUuidPair.class));
+    // verify(reportService).clean(any(File.class));
   }
 }
index bc28affc6d6ba83f9284530cad43b261c48e595f..a7c9f1bd8da9104df34fc63bf2c080bc7da9e920 100644 (file)
@@ -39,12 +39,11 @@ public class DigestReportStepTest {
   @Test
   public void call_service_method() throws Exception {
     AnalysisReportService service = mock(AnalysisReportService.class);
-    AnalysisReportDto report = AnalysisReportDto.newForTests(123L);
     sut = new DigestReportStep(service);
-    ComputeEngineContext context = new ComputeEngineContext(report, mock(ComponentDto.class));
+    ComputeEngineContext context = new ComputeEngineContext(mock(AnalysisReportDto.class), mock(ComponentDto.class));
 
     sut.execute(mock(DbSession.class), context);
 
-    verify(service).decompress(any(DbSession.class), , eq(123L));
+    verify(service).decompress(any(DbSession.class), eq(context));
   }
 }
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/empty.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/empty.xml
new file mode 100644 (file)
index 0000000..871dedc
--- /dev/null
@@ -0,0 +1,3 @@
+<dataset>
+
+</dataset>
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/snapshots.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/snapshots.xml
new file mode 100644 (file)
index 0000000..642ac79
--- /dev/null
@@ -0,0 +1,149 @@
+<dataset>
+
+  <!-- NEW SNAPSHOT -->
+  <snapshots id="1" project_id="123" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1"
+             status="U" islast="[false]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+  <snapshots id="2" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1"
+             status="U" islast="[false]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+  <snapshots id="3" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1"
+             status="U" islast="[false]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+  <!-- PROJECT_ID = 3 – no last snapshot -->
+  <snapshots id="4" project_id="3" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1"
+             status="U" islast="[false]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+  <!-- Child of snapshot id=1 -->
+  <snapshots id="5" project_id="55" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="1"
+             status="U" islast="[false]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-03" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+
+  <!-- LAST FLAGGED SNAPSHOT -->
+  <snapshots id="21" project_id="123" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21"
+             status="P" islast="[true]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+  <snapshots id="22" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21"
+             status="P" islast="[true]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+  <snapshots id="23" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21"
+             status="P" islast="[true]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+  <!-- PROJECT_ID = 3 – no last snapshot -->
+  <snapshots id="24" project_id="3" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21"
+             status="P" islast="[true]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+  <!-- Child of snapshot id=1 -->
+  <snapshots id="25" project_id="55" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="21"
+             status="P" islast="[true]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-02" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+
+  <!-- OLD SNAPSHOT -->
+  <snapshots id="46" project_id="123" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46"
+             status="P" islast="[false]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+  <snapshots id="47" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46"
+             status="P" islast="[false]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+  <snapshots id="48" project_id="1" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46"
+             status="P" islast="[false]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+  <!-- PROJECT_ID = 3 – no last snapshot -->
+  <snapshots id="49" project_id="3" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46"
+             status="P" islast="[false]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="DIR" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+  <!-- Child of snapshot id=1 -->
+  <snapshots id="50" project_id="55" parent_snapshot_id="2" root_project_id="123" root_snapshot_id="46"
+             status="P" islast="[false]" purge_status="1"
+             period1_mode="days1" period1_param="30" period1_date="2011-09-24"
+             period2_mode="days2" period2_param="31" period2_date="2011-09-25"
+             period3_mode="days3" period3_param="32" period3_date="2011-09-26"
+             period4_mode="days4" period4_param="33" period4_date="2011-09-27"
+             period5_mode="days5" period5_param="34" period5_date="2011-09-28"
+             depth="1" scope="PRJ" qualifier="PAC" created_at="2008-12-01" build_date="2011-09-29"
+             version="2.1-SNAPSHOT" path="1.2."/>
+</dataset>
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/sub-folder/zip.zip b/server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/sub-folder/zip.zip
new file mode 100644 (file)
index 0000000..a540bc5
Binary files /dev/null and b/server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/sub-folder/zip.zip differ