diff options
author | Travis Collins <travistx@gmail.com> | 2025-03-12 14:22:35 -0600 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2025-03-13 20:03:15 +0000 |
commit | 6de6e05a4cd112c021ae0c8ddbf29078097dbbc1 (patch) | |
tree | 32d8881ab6ffc6ca60a13df89027f37dc5484cba | |
parent | 1d76a5e4176ca2715475781896a3c1bdfa8558ab (diff) | |
download | sonarqube-6de6e05a4cd112c021ae0c8ddbf29078097dbbc1.tar.gz sonarqube-6de6e05a4cd112c021ae0c8ddbf29078097dbbc1.zip |
SCA-101 Scanner property to disable SCA scanning
-rw-r--r-- | sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/ScaExecutor.java | 9 | ||||
-rw-r--r-- | sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaExecutorTest.java | 53 |
2 files changed, 50 insertions, 12 deletions
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/ScaExecutor.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/ScaExecutor.java index 0ab6feb1aaa..06142fadb8f 100644 --- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/ScaExecutor.java +++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/ScaExecutor.java @@ -53,8 +53,15 @@ public class ScaExecutor { } public void execute(DefaultInputModule root) { + // Global feature flag if (!featureFlagsRepository.isEnabled(SCA_FEATURE_NAME)) { - LOG.debug("Dependency analysis skipped"); + LOG.info("Dependency analysis skipped"); + return; + } + + // Project or scanner level feature flag + if (!configuration.getBoolean("sonar.sca.enabled").orElse(true)) { + LOG.info("Dependency analysis disabled for this project"); return; } diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaExecutorTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaExecutorTest.java index ded24657569..aecbc7011a9 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaExecutorTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaExecutorTest.java @@ -21,6 +21,7 @@ package org.sonar.scanner.sca; import java.io.File; import java.io.IOException; +import java.util.Optional; import org.assertj.core.util.Files; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -64,17 +65,6 @@ class ScaExecutorTest { } @Test - void execute_shouldSkipAnalysisWhenFeatureFlagDisabled() { - when(featureFlagsRepository.isEnabled("sca")).thenReturn(false); - logTester.setLevel(Level.DEBUG); - - underTest.execute(root); - - assertThat(logTester.logs()).contains("Dependency analysis skipped"); - verifyNoInteractions(cliService, cliCacheService); - } - - @Test void execute_shouldCallCliAndPublisher() throws IOException { File mockCliFile = Files.newTemporaryFile(); File mockManifestZip = Files.newTemporaryFile(); @@ -130,4 +120,45 @@ class ScaExecutorTest { verify(cliService, never()).generateManifestsZip(root, mockCliFile, configuration); } + + @Test + void execute_whenGlobalFeatureDisabled_skips() { + when(featureFlagsRepository.isEnabled("sca")).thenReturn(false); + logTester.setLevel(Level.DEBUG); + + underTest.execute(root); + + assertThat(logTester.logs()).contains("Dependency analysis skipped"); + verifyNoInteractions(cliService, cliCacheService); + } + + @Test + void execute_whenProjectPropertyDisabled_skips() { + when(configuration.getBoolean("sonar.sca.enabled")).thenReturn(Optional.of(false)); + logTester.setLevel(Level.DEBUG); + + underTest.execute(root); + + assertThat(logTester.logs()).contains("Dependency analysis disabled for this project"); + verifyNoInteractions(cliService, cliCacheService); + } + + @Test + void execute_whenProjectPropertyExplicitlyEnabled_CallsCli() throws IOException { + when(configuration.getBoolean("sonar.sca.enabled")).thenReturn(Optional.of(true)); + File mockCliFile = Files.newTemporaryFile(); + File mockManifestZip = Files.newTemporaryFile(); + ScannerReportWriter mockReportWriter = mock(ScannerReportWriter.class); + when(cliCacheService.cacheCli()).thenReturn(mockCliFile); + when(cliService.generateManifestsZip(root, mockCliFile, configuration)).thenReturn(mockManifestZip); + when(reportPublisher.getWriter()).thenReturn(mockReportWriter); + logTester.setLevel(Level.DEBUG); + + underTest.execute(root); + + verify(cliService).generateManifestsZip(root, mockCliFile, configuration); + verify(mockReportWriter).writeScaFile(mockManifestZip); + assertThat(logTester.logs(Level.DEBUG)).contains("Zip ready for report: " + mockManifestZip); + assertThat(logTester.logs(Level.DEBUG)).contains("Manifest zip written to report"); + } } |