Skip to content

Commit

Permalink
SONAR-7086 use firstAnalysis flag in LoadPeriodsStep
Browse files Browse the repository at this point in the history
  • Loading branch information
sns-seb authored and sonartech committed Oct 3, 2018
1 parent d8bee94 commit b783802
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 18 deletions.
Expand Up @@ -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;
Expand All @@ -36,7 +35,6 @@
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}
Expand All @@ -48,23 +46,27 @@
*/
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
Expand All @@ -82,14 +84,8 @@ public void execute(Component projectOrView) {

@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();
Expand Down
Expand Up @@ -21,6 +21,7 @@

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;
Expand All @@ -30,10 +31,13 @@
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;
Expand All @@ -47,6 +51,8 @@

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;
Expand Down Expand Up @@ -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() {
Expand All @@ -87,16 +93,24 @@ protected ComputationStep step() {
@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
Expand Down

0 comments on commit b783802

Please sign in to comment.