]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7086 use firstAnalysis flag in LoadPeriodsStep
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Tue, 21 Aug 2018 13:15:09 +0000 (15:15 +0200)
committersonartech <sonartech@sonarsource.com>
Wed, 3 Oct 2018 07:28:21 +0000 (09:28 +0200)
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStep.java
server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepTest.java

index a64e45b36789872914f29a9ef6bbc1c283ee7e54..32a76daf6ae1907ebb82819f00cb8a2bfa1f6d89 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.sonar.ce.task.projectanalysis.step;
 
-import com.google.common.base.Optional;
 import javax.annotation.CheckForNull;
 import org.sonar.api.config.Configuration;
 import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder;
@@ -36,7 +35,6 @@ import org.sonar.ce.task.projectanalysis.period.PeriodHolderImpl;
 import org.sonar.ce.task.step.ComputationStep;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
-import org.sonar.db.component.ComponentDto;
 
 /**
  * Populates the {@link PeriodHolder}
@@ -48,23 +46,27 @@ import org.sonar.db.component.ComponentDto;
  */
 public class LoadPeriodsStep implements ComputationStep {
 
+  private final AnalysisMetadataHolder analysisMetadataHolder;
   private final DbClient dbClient;
   private final ConfigurationRepository configRepository;
   private final TreeRootHolder treeRootHolder;
-  private final AnalysisMetadataHolder analysisMetadataHolder;
   private final PeriodHolderImpl periodsHolder;
 
-  public LoadPeriodsStep(DbClient dbClient, ConfigurationRepository settingsRepository, TreeRootHolder treeRootHolder, AnalysisMetadataHolder analysisMetadataHolder,
-    PeriodHolderImpl periodsHolder) {
+  public LoadPeriodsStep(AnalysisMetadataHolder analysisMetadataHolder, DbClient dbClient,
+    ConfigurationRepository configurationRepository, TreeRootHolder treeRootHolder, PeriodHolderImpl periodsHolder) {
+    this.analysisMetadataHolder = analysisMetadataHolder;
     this.dbClient = dbClient;
-    this.configRepository = settingsRepository;
+    this.configRepository = configurationRepository;
     this.treeRootHolder = treeRootHolder;
-    this.analysisMetadataHolder = analysisMetadataHolder;
     this.periodsHolder = periodsHolder;
   }
 
   @Override
   public void execute(ComputationStep.Context context) {
+    if (analysisMetadataHolder.isFirstAnalysis()) {
+      return;
+    }
+
     new DepthTraversalTypeAwareCrawler(
       new TypeAwareVisitorAdapter(CrawlerDepthLimit.PROJECT, ComponentVisitor.Order.PRE_ORDER) {
         @Override
@@ -82,14 +84,8 @@ public class LoadPeriodsStep implements ComputationStep {
 
   @CheckForNull
   private Period buildPeriod(Component projectOrView, DbSession session) {
-    Optional<ComponentDto> projectDto = dbClient.componentDao().selectByKey(session, projectOrView.getKey());
-    // No project on first analysis, no period
-    if (!projectDto.isPresent()) {
-      return null;
-    }
-
     boolean isReportType = projectOrView.getType().isReportType();
-    PeriodResolver periodResolver = new PeriodResolver(dbClient, session, projectDto.get().uuid(), analysisMetadataHolder.getAnalysisDate(),
+    PeriodResolver periodResolver = new PeriodResolver(dbClient, session, projectOrView.getUuid(), analysisMetadataHolder.getAnalysisDate(),
       isReportType ? projectOrView.getReportAttributes().getVersion() : null);
 
     Configuration config = configRepository.getConfiguration();
index 70284f87c7fd426158fdb33f7d0e74837ea96ca4..4efb2491c4c01cd3c7d2470819b64780eb96a378 100644 (file)
@@ -21,6 +21,7 @@ package org.sonar.ce.task.projectanalysis.step;
 
 import com.tngtech.java.junit.dataprovider.DataProviderRunner;
 import java.text.SimpleDateFormat;
+import org.apache.commons.lang.RandomStringUtils;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -30,10 +31,13 @@ import org.sonar.api.config.internal.MapSettings;
 import org.sonar.api.utils.System2;
 import org.sonar.api.utils.log.LogTester;
 import org.sonar.api.utils.log.LoggerLevel;
+import org.sonar.ce.task.projectanalysis.analysis.Analysis;
+import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder;
 import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolderRule;
 import org.sonar.ce.task.projectanalysis.component.Component;
 import org.sonar.ce.task.projectanalysis.component.ConfigurationRepository;
 import org.sonar.ce.task.projectanalysis.component.ReportComponent;
+import org.sonar.ce.task.projectanalysis.component.TreeRootHolder;
 import org.sonar.ce.task.projectanalysis.component.TreeRootHolderRule;
 import org.sonar.ce.task.projectanalysis.period.Period;
 import org.sonar.ce.task.projectanalysis.period.PeriodHolderImpl;
@@ -47,6 +51,8 @@ import org.sonar.db.organization.OrganizationDto;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 import static org.sonar.core.config.CorePropertyDefinitions.LEAK_PERIOD_MODE_DATE;
 import static org.sonar.core.config.CorePropertyDefinitions.LEAK_PERIOD_MODE_DAYS;
@@ -77,7 +83,7 @@ public class LoadPeriodsStepTest extends BaseStepTest {
   private MapSettings settings = new MapSettings();
   private ConfigurationRepository settingsRepository = mock(ConfigurationRepository.class);
 
-  private LoadPeriodsStep underTest = new LoadPeriodsStep(dbClient, settingsRepository, treeRootHolder, analysisMetadataHolder, periodsHolder);
+  private LoadPeriodsStep underTest = new LoadPeriodsStep(analysisMetadataHolder, dbClient, settingsRepository, treeRootHolder, periodsHolder);
 
   @Override
   protected ComputationStep step() {
@@ -87,16 +93,24 @@ public class LoadPeriodsStepTest extends BaseStepTest {
   @Before
   public void setUp() throws Exception {
     analysisMetadataHolder.setAnalysisDate(DATE_FORMAT.parse("2008-11-30").getTime());
+    analysisMetadataHolder.setBaseAnalysis(new Analysis.Builder().setUuid(RandomStringUtils.randomAlphabetic(15)).setId(888).setCreatedAt(5_666_777_888L).build());
   }
 
   @Test
   public void no_period_on_first_analysis() {
-    treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setKey("ROOT_KEY").setVersion("1.1").build());
+    DbClient dbClientMock = mock(DbClient.class);
+    ConfigurationRepository configurationRepositoryMock = mock(ConfigurationRepository.class);
+    TreeRootHolder treeRootHolderMock = mock(TreeRootHolder.class);
+    PeriodHolderImpl periodHolderMock = mock(PeriodHolderImpl.class);
+    AnalysisMetadataHolder analysisMetadataHolderMock = mock(AnalysisMetadataHolder.class);
+    when(analysisMetadataHolderMock.isFirstAnalysis()).thenReturn(true);
+
+    LoadPeriodsStep underTest = new LoadPeriodsStep(analysisMetadataHolderMock, dbClientMock, configurationRepositoryMock, treeRootHolderMock, periodHolderMock);
 
-    // No project, no snapshot
     underTest.execute(new TestComputationStepContext());
 
-    assertThat(periodsHolder.hasPeriod()).isFalse();
+    verify(analysisMetadataHolderMock).isFirstAnalysis();
+    verifyZeroInteractions(dbClientMock, configurationRepositoryMock, treeRootHolderMock, periodHolderMock);
   }
 
   @Test