From 06065657445f4e4511cc3f58d269716584f58e18 Mon Sep 17 00:00:00 2001 From: Steve Marion Date: Thu, 1 Feb 2024 13:55:56 +0100 Subject: [PATCH] SONAR-20582 make the gitlab vulnerability synchronization conditional on having sent a sast report to gitlab at least once. --- .../measure/PreMeasuresComputationCheck.java | 4 +++- .../measure/PreMeasuresComputationChecksStep.java | 13 ++++++++++++- .../PreMeasuresComputationChecksStepTest.java | 12 ++++++++++-- .../java/org/sonar/db/property/PropertiesDaoIT.java | 8 ++++++-- .../java/org/sonar/db/property/PropertiesDao.java | 7 +++++++ 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationCheck.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationCheck.java index c747d892539..cda06cbb481 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationCheck.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationCheck.java @@ -21,6 +21,7 @@ package org.sonar.ce.task.projectanalysis.measure; import org.sonar.api.ExtensionPoint; import org.sonar.api.ce.ComputeEngineSide; +import org.sonar.api.config.Configuration; import org.sonar.ce.task.projectanalysis.analysis.Branch; /** @@ -47,9 +48,10 @@ public interface PreMeasuresComputationCheck { Branch getBranch(); + Configuration getConfiguration(); } - class PreMeasuresComputationCheckException extends Exception { + class PreMeasuresComputationCheckException extends RuntimeException { public PreMeasuresComputationCheckException(String message) { super(message); } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStep.java index c88c88ae4c6..6eb936f9d11 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStep.java @@ -19,10 +19,12 @@ */ package org.sonar.ce.task.projectanalysis.measure; +import org.sonar.api.config.Configuration; import org.sonar.api.utils.System2; import org.sonar.ce.task.log.CeTaskMessages; import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder; import org.sonar.ce.task.projectanalysis.analysis.Branch; +import org.sonar.ce.task.projectanalysis.component.ConfigurationRepository; import org.sonar.ce.task.step.ComputationStep; import org.sonar.db.dismissmessage.MessageType; @@ -38,11 +40,15 @@ public class PreMeasuresComputationChecksStep implements ComputationStep { private final AnalysisMetadataHolder analysisMetadataHolder; private final PreMeasuresComputationCheck[] extensions; private final CeTaskMessages ceTaskMessages; + private final ConfigurationRepository configurationRepository; - public PreMeasuresComputationChecksStep(AnalysisMetadataHolder analysisMetadataHolder, CeTaskMessages ceTaskMessages, PreMeasuresComputationCheck... extensions) { + public PreMeasuresComputationChecksStep( + AnalysisMetadataHolder analysisMetadataHolder, CeTaskMessages ceTaskMessages, + ConfigurationRepository configurationRepository, PreMeasuresComputationCheck... extensions) { this.analysisMetadataHolder = analysisMetadataHolder; this.ceTaskMessages = ceTaskMessages; + this.configurationRepository = configurationRepository; this.extensions = extensions; } @@ -75,5 +81,10 @@ public class PreMeasuresComputationChecksStep implements ComputationStep { return analysisMetadataHolder.getBranch(); } + @Override + public Configuration getConfiguration() { + return configurationRepository.getConfiguration(); + } + } } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStepTest.java index 6654d5edb1b..de68f6843df 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStepTest.java @@ -19,12 +19,14 @@ */ package org.sonar.ce.task.projectanalysis.measure; +import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.InOrder; import org.sonar.ce.task.log.CeTaskMessages; import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolderRule; import org.sonar.ce.task.projectanalysis.analysis.Branch; +import org.sonar.ce.task.projectanalysis.component.ConfigurationRepository; import org.sonar.ce.task.projectanalysis.measure.PreMeasuresComputationCheck.Context; import org.sonar.ce.task.step.TestComputationStepContext; import org.sonar.db.component.BranchType; @@ -44,6 +46,12 @@ public class PreMeasuresComputationChecksStepTest { public AnalysisMetadataHolderRule analysisMetadataHolder = mock(); public CeTaskMessages ceTaskMessages = mock(); + public ConfigurationRepository configurationRepository = mock(); + + @Before + public void setup() { + + } @Test public void execute_extensions() throws PreMeasuresComputationCheckException { @@ -114,9 +122,9 @@ public class PreMeasuresComputationChecksStepTest { private PreMeasuresComputationChecksStep newStep(PreMeasuresComputationCheck... preMeasuresComputationChecks) { if (preMeasuresComputationChecks.length == 0) { - return new PreMeasuresComputationChecksStep(analysisMetadataHolder, ceTaskMessages); + return new PreMeasuresComputationChecksStep(analysisMetadataHolder, ceTaskMessages, configurationRepository); } - return new PreMeasuresComputationChecksStep(analysisMetadataHolder, ceTaskMessages, preMeasuresComputationChecks); + return new PreMeasuresComputationChecksStep(analysisMetadataHolder, ceTaskMessages, configurationRepository, preMeasuresComputationChecks); } private void mockBranch(String branchName) { diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/property/PropertiesDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/property/PropertiesDaoIT.java index d300c2da130..ace5247e7f8 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/property/PropertiesDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/property/PropertiesDaoIT.java @@ -446,8 +446,8 @@ public class PropertiesDaoIT { insertProperty("global.two", "two", null, null, null, null, null); List properties = underTest.selectGlobalProperties(db.getSession()); - assertThat(properties.size()) - .isEqualTo(2); + assertThat(properties) + .hasSize(2); assertThat(findByKey(properties, "global.one")) .extracting(PropertyDto::getKey, PropertyDto::getEntityUuid, PropertyDto::getUserUuid, PropertyDto::getValue) @@ -535,6 +535,10 @@ public class PropertiesDaoIT { assertThat(property) .extracting(PropertyDto::getKey, PropertyDto::getEntityUuid, PropertyDto::getUserUuid, PropertyDto::getValue) .containsExactly("project.one", "uuid10", null, "one"); + + assertThat(underTest.selectProjectProperty("uuid10", "project.one")) + .isPresent() + .contains(property); } @Test diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java index b6034ab4d64..7b024c72b48 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java @@ -27,6 +27,7 @@ import java.sql.SQLException; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.Set; import javax.annotation.CheckForNull; import javax.annotation.Nullable; @@ -136,6 +137,12 @@ public class PropertiesDao implements Dao { return getMapper(dbSession).selectByKey(new PropertyDto().setKey(propertyKey).setEntityUuid(projectUuid)); } + public Optional selectProjectProperty(String projectUuid, String propertyKey) { + try (DbSession session = mybatis.openSession(false)) { + return Optional.ofNullable(selectProjectProperty(session, projectUuid, propertyKey)); + } + } + public List selectByQuery(PropertyQuery query, DbSession session) { return getMapper(session).selectByQuery(query); } -- 2.39.5