From 92b10db93759bac7f5c78d341e62ef36f4f420e2 Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Mon, 15 Dec 2014 17:01:26 +0100 Subject: [PATCH] SONAR-5939 delete report folder at the end of the analysis - disabled at the moment --- .../computation/AnalysisReportService.java | 23 ++- .../computation/step/DataCleanerStep.java | 8 +- .../AnalysisReportServiceTest.java | 31 +++- .../computation/db/AnalysisReportDaoTest.java | 2 +- .../step/DataCleanerStepMediumTest.java | 14 +- .../computation/step/DataCleanerStepTest.java | 6 +- .../step/DigestReportStepTest.java | 5 +- .../fake-report-folder/empty.xml | 3 + .../fake-report-folder/snapshots.xml | 149 ++++++++++++++++++ .../fake-report-folder/sub-folder/zip.zip | Bin 0 -> 578 bytes 10 files changed, 221 insertions(+), 20 deletions(-) create mode 100644 server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/empty.xml create mode 100644 server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/snapshots.xml create mode 100644 server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/sub-folder/zip.zip diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportService.java b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportService.java index 130b0ee8bca..d6b11c82806 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportService.java @@ -20,12 +20,21 @@ 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); + } + } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/DataCleanerStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/DataCleanerStep.java index 7020e6294ee..00b3092e540 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/DataCleanerStep.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/DataCleanerStep.java @@ -20,21 +20,25 @@ 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 diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportServiceTest.java index 387c67a5504..672e232f8e3 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportServiceTest.java @@ -20,11 +20,17 @@ 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(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java index 20423d1a34d..8f82068a82e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java @@ -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(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/DataCleanerStepMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/DataCleanerStepMediumTest.java index ffbd0b7c476..c031d425ace 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/DataCleanerStepMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/DataCleanerStepMediumTest.java @@ -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 diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/DataCleanerStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/DataCleanerStepTest.java index c0b60752e65..b350790bed2 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/DataCleanerStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/DataCleanerStepTest.java @@ -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)); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/DigestReportStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/DigestReportStepTest.java index bc28affc6d6..a7c9f1bd8da 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/DigestReportStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/DigestReportStepTest.java @@ -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 index 00000000000..871dedcb5e9 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/empty.xml @@ -0,0 +1,3 @@ + + + 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 index 00000000000..642ac79c026 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/AnalysisReportServiceTest/fake-report-folder/snapshots.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 index 0000000000000000000000000000000000000000..a540bc5b5ca4634c3959cf307cb5808a49a08368 GIT binary patch literal 578 zcmWIWW@Zs#-~hr`D=VxRkN`V_07Ft@kzPqfNoWKQ1DEGX&j|aIo?jV77`(l7niv@Z zyxBR<_m(_k18U+1;sBsgTwntP*P|N60yHWmvq&Fg&R>s{o=iZqK<0pSKrFww3RQ;) zR7XZ?PENjFK~a7|YEemMYB9_uoQ_bJZ1H7+IK+UVo)u_0Gt?mvW1nL2Q(AsLvY&im zemdRiAd`5&CNVOJG9$tV*}Lpu6+lG{3=T^gK@>c+IN+fb;0-bWSEzuj z00W1&j^029B#b!VVFb~Q2%+;xo)kf`z80z*GrS;f0fiT`X`p~X_9&`nt^iGg2NT2q YP%s5}vx4H9fdvTp7#SGkfS7>+0M>MKNdN!< literal 0 HcmV?d00001 -- 2.39.5