From 1c7578d2065a55ce92735a10e74c2a6cfac30bc8 Mon Sep 17 00:00:00 2001 From: Albert Tregnaghi Date: Tue, 28 Jan 2025 13:42:07 +0100 Subject: [PATCH] Added integration tests for templates health check + fix tests #3616 - restdoc test path problem fixed (was wrong usecase) - template servcie + config service + repository added missing implementation + tests to find all project ids which uses a template - Existing integration test for templates extended with healthcheck parts (scenario1). Has no errors in output because products do not support templates, so no conflict detected (correct) - Created new test (scenario9) for templates which fails with errors because product does support templates... --- .../TemplateRestControllerRestDocTest.java | 2 +- .../sechub/integrationtest/api/AsUser.java | 7 + .../sechub/integrationtest/api/TestAPI.java | 6 + .../scenario1/TemplateScenario1IntTest.java | 69 +++++++++- .../scenario9/TemplateScenario9IntTest.java | 120 ++++++++++++++++++ .../IntegrationTestScanRestController.java | 13 +- .../scan/project/ScanProjectConfig.java | 4 + .../project/ScanProjectConfigRepository.java | 3 + .../project/ScanProjectConfigService.java | 14 +- .../RelevantScanTemplateDefinitionFilter.java | 14 ++ .../template/TemplateHealthCheckEntry.java | 11 ++ .../domain/scan/template/TemplateService.java | 29 +++-- .../TemplateTypeScanConfigIdResolver.java | 14 ++ .../template/TemplatesHealthCheckService.java | 18 ++- .../ScanProjectConfigRepositoryDBTest.java | 84 ++++++++++++ .../project/ScanProjectConfigServiceTest.java | 99 ++++++++++----- .../scan/template/TemplateServiceTest.java | 34 ++++- .../TemplateTypeScanConfigIdResolverTest.java | 17 ++- .../TemplatesHealthCheckServiceTest.java | 64 +++++++--- .../sechub/test/SecHubTestURLBuilder.java | 4 + 20 files changed, 540 insertions(+), 86 deletions(-) create mode 100644 sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario9/TemplateScenario9IntTest.java diff --git a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/TemplateRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/TemplateRestControllerRestDocTest.java index 8a18db8e37..d5da28cd18 100644 --- a/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/TemplateRestControllerRestDocTest.java +++ b/sechub-doc/src/test/java/com/mercedesbenz/sechub/restdoc/TemplateRestControllerRestDocTest.java @@ -306,7 +306,7 @@ public void restdoc_admin_executes_templates_healthcheck() throws Exception { when(templateHealthCheckService.executeHealthCheck()).thenReturn(healthCheckResult); String apiEndpoint = https(PORT_USED).buildAdminExecutesTemplatesCheck(); - Class useCase = UseCaseAdminFetchesAllTemplateIds.class; + Class useCase = UseCaseAdminExecutesTemplatesHealthcheck.class; /* execute + test @formatter:off */ this.mockMvc.perform( diff --git a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/AsUser.java b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/AsUser.java index dd5d0c08cd..d41977dd92 100644 --- a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/AsUser.java +++ b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/AsUser.java @@ -44,6 +44,7 @@ import com.mercedesbenz.sechub.domain.administration.project.ProjectDetailInformation; import com.mercedesbenz.sechub.domain.scan.asset.AssetDetailData; import com.mercedesbenz.sechub.domain.scan.project.FalsePositiveProjectData; +import com.mercedesbenz.sechub.domain.scan.template.TemplatesHealthCheckResult; import com.mercedesbenz.sechub.integrationtest.JSONTestSupport; import com.mercedesbenz.sechub.integrationtest.internal.IntegrationTestContext; import com.mercedesbenz.sechub.integrationtest.internal.IntegrationTestExampleConstants; @@ -1480,6 +1481,12 @@ public List fetchTemplateList() { return JSONConverter.get().fromJSONtoListOf(String.class, json); } + public TemplatesHealthCheckResult executeTemplatesHealthcheck() { + String url = getUrlBuilder().buildAdminExecutesTemplatesCheck(); + String json = getRestHelper().getJSON(url); + return TemplatesHealthCheckResult.fromJson(json); + } + public AsUser uploadAssetFile(String assetId, File file) { String url = getUrlBuilder().buildAdminUploadsAssetFile(assetId); String checkSum = TestAPI.createSHA256Of(file); diff --git a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/TestAPI.java b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/TestAPI.java index 08289ece95..729e85fa5a 100644 --- a/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/TestAPI.java +++ b/sechub-integrationtest/src/main/java/com/mercedesbenz/sechub/integrationtest/api/TestAPI.java @@ -1712,4 +1712,10 @@ public static List fetchScanProjectConfigurations(TestProject return JSONConverter.get().fromJSONtoListOf(ScanProjectConfig.class, json); } + + public static void clearAllExistingTemplates() { + String url = getURLBuilder().buildIntegrationTestClearAllTemplates(); + getSuperAdminRestHelper().post(url); + + } } diff --git a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario1/TemplateScenario1IntTest.java b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario1/TemplateScenario1IntTest.java index d01362bc9c..b8d4b197a2 100644 --- a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario1/TemplateScenario1IntTest.java +++ b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario1/TemplateScenario1IntTest.java @@ -1,11 +1,9 @@ // SPDX-License-Identifier: MIT package com.mercedesbenz.sechub.integrationtest.scenario1; -import static com.mercedesbenz.sechub.integrationtest.api.TestAPI.SUPER_ADMIN; +import static com.mercedesbenz.sechub.integrationtest.api.TestAPI.*; import static com.mercedesbenz.sechub.integrationtest.api.TestAPI.as; -import static com.mercedesbenz.sechub.integrationtest.api.TestAPI.executeResilient; -import static com.mercedesbenz.sechub.integrationtest.api.TestAPI.fetchScanProjectConfigurations; -import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.*; import java.util.List; @@ -18,11 +16,22 @@ import com.mercedesbenz.sechub.commons.model.template.TemplateType; import com.mercedesbenz.sechub.domain.scan.project.ScanProjectConfig; import com.mercedesbenz.sechub.domain.scan.project.ScanProjectConfigID; +import com.mercedesbenz.sechub.domain.scan.template.TemplateHealthCheckEntry; +import com.mercedesbenz.sechub.domain.scan.template.TemplateHealthCheckProblemType; +import com.mercedesbenz.sechub.domain.scan.template.TemplatesHealthCheckResult; +import com.mercedesbenz.sechub.domain.scan.template.TemplatesHealthCheckStatus; import com.mercedesbenz.sechub.integrationtest.api.IntegrationTestExtension; +import com.mercedesbenz.sechub.integrationtest.api.TestAPI; import com.mercedesbenz.sechub.integrationtest.api.WithTestScenario; @ExtendWith(IntegrationTestExtension.class) @WithTestScenario(Scenario1.class) +/** + * Info: There are similarities to TemplateScenario9IntTest, but here we have no + * product in executor configurations which supports templates. This means that + * testing templates here, can only check common parts - e.g. info that template + * exists but is not assigned to any project. + */ class TemplateScenario1IntTest { private String templateId; @@ -59,10 +68,17 @@ void beforeEach() { definitionWithId = TemplateDefinition.from(fullTemplateDefinitionJson); updateDefinition = TemplateDefinition.from(fullTemplateDefinitionJson.replace(templateId, "will-not-be-changed-by-update")); + + /* + * we need to clear old template data , to be able to restart the test for + * development + */ + TestAPI.clearAllExistingTemplates(); + } @Test - void template_crud_test() { + void template_crud_and_healthcheck_test() { /* prepare */ as(SUPER_ADMIN).createProject(Scenario1.PROJECT_1, SUPER_ADMIN); // not done in this scenario automatically @@ -70,16 +86,25 @@ void template_crud_test() { assertTemplateNotInsideTemplateList(); /* execute + test */ + + assertTemplateHealthCheckSaysOKwithoutAnyEntries(); // beforeEach drops any old template data, so we can test here + assertTemplateCanBeCreated(); assertTemplateCanBeUpdated(); + assertTemplateHealthCheckSaysOkButInfoThatTemplateIsNotAssigned(); + assertTemplateCanBeAssignedToProject(); assertTemplateCanBeUnassignedFromProject(); assertTemplateCanBeAssignedToProject(); + assertTemplateHealthCheckSaysOkWithoutEntries(); // ok without entries... why? because template is assigned, no asset file + // exists, but... there is no product which would support templates, so no + // runtime problems! + assertTemplateCanBeDeletedAndAssignmentIsPurged(); assertTemplateCanBeRecreatedWithSameId(); @@ -101,6 +126,40 @@ void template_crud_test() { } + private void assertTemplateHealthCheckSaysOKwithoutAnyEntries() { + TemplatesHealthCheckResult result = as(SUPER_ADMIN).executeTemplatesHealthcheck(); + + executeResilient(() -> { + assertThat(result.getStatus()).isEqualTo(TemplatesHealthCheckStatus.OK); + assertThat(result.getEntries()).isEmpty(); + + }); + } + + private void assertTemplateHealthCheckSaysOkWithoutEntries() { + TemplatesHealthCheckResult result = as(SUPER_ADMIN).executeTemplatesHealthcheck(); + + executeResilient(() -> { + assertThat(result.getStatus()).isEqualTo(TemplatesHealthCheckStatus.OK); + assertThat(result.getEntries()).hasSize(0); + + }); + } + + private void assertTemplateHealthCheckSaysOkButInfoThatTemplateIsNotAssigned() { + TemplatesHealthCheckResult result = as(SUPER_ADMIN).executeTemplatesHealthcheck(); + + executeResilient(() -> { + assertThat(result.getStatus()).isEqualTo(TemplatesHealthCheckStatus.OK); + assertThat(result.getEntries()).hasSize(1); + TemplateHealthCheckEntry firstEntry = result.getEntries().iterator().next(); + assertThat(firstEntry.getType()).isEqualTo(TemplateHealthCheckProblemType.INFO); + assertThat(firstEntry.getDescription()).contains("The template is defined, but not assigned to any project"); + + }); + + } + private void assertTemplateNotInsideTemplateList() { List templateIds = as(SUPER_ADMIN).fetchTemplateList(); executeResilient(() -> assertThat(templateIds).doesNotContain(templateId)); diff --git a/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario9/TemplateScenario9IntTest.java b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario9/TemplateScenario9IntTest.java new file mode 100644 index 0000000000..294d8a2004 --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/mercedesbenz/sechub/integrationtest/scenario9/TemplateScenario9IntTest.java @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: MIT +package com.mercedesbenz.sechub.integrationtest.scenario9; + +import static com.mercedesbenz.sechub.integrationtest.api.TestAPI.*; +import static com.mercedesbenz.sechub.integrationtest.api.TestAPI.as; +import static com.mercedesbenz.sechub.integrationtest.scenario9.Scenario9.*; +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import com.mercedesbenz.sechub.commons.model.template.TemplateDefinition; +import com.mercedesbenz.sechub.commons.model.template.TemplateDefinition.TemplateVariable; +import com.mercedesbenz.sechub.commons.model.template.TemplateType; +import com.mercedesbenz.sechub.domain.scan.template.TemplateHealthCheckEntry; +import com.mercedesbenz.sechub.domain.scan.template.TemplateHealthCheckProblemType; +import com.mercedesbenz.sechub.domain.scan.template.TemplatesHealthCheckResult; +import com.mercedesbenz.sechub.domain.scan.template.TemplatesHealthCheckStatus; +import com.mercedesbenz.sechub.integrationtest.api.IntegrationTestExtension; +import com.mercedesbenz.sechub.integrationtest.api.TestAPI; +import com.mercedesbenz.sechub.integrationtest.api.WithTestScenario; + +@ExtendWith(IntegrationTestExtension.class) +@WithTestScenario(Scenario9.class) +/** + * This is similar to TemplateScenario1IntTest, but here we got errors inside + * template check because the product (PDS) is supporting templates and the scan + * type (Web scan) is supported as well! + */ +class TemplateScenario9IntTest { + + private String templateId; + + private TemplateDefinition createDefinition; + + @BeforeEach + void beforeEach() { + + templateId = "template-1_" + System.nanoTime(); + + /* @formatter:off */ + createDefinition = TemplateDefinition.builder(). + templateId(templateId). + templateType(TemplateType.WEBSCAN_LOGIN). + assetId("asset1"). + build(); + /* @formatter:on */ + TemplateVariable usernameVariable = new TemplateVariable(); + usernameVariable.setName("username"); + + TemplateVariable passwordVariable = new TemplateVariable(); + passwordVariable.setName("password"); + + createDefinition.getVariables().add(usernameVariable); + createDefinition.getVariables().add(passwordVariable); + + /* + * we need to clear old template data , to be able to restart the test for + * development + */ + TestAPI.clearAllExistingTemplates(); + + } + + @Test + void template_healthcheck_test_for_situation_that_pds_product_is_able_to_use_templates_and_scan_type_also_supported() { + /* prepare */ + + /* execute + test */ + assertTemplateHealthCheckSaysOKwithoutAnyEntries(); // beforeEach drops any old template data, so we can test here + + as(SUPER_ADMIN).createOrUpdateTemplate(templateId, createDefinition); + + assertTemplateHealthCheckSaysOkButInfoThatTemplateIsNotAssigned(); + + as(SUPER_ADMIN).assignTemplateToProject(templateId, PROJECT_1); + + assertTemplateHealthCheckSaysErrorBecauseAssetNotAvailable(); + + } + + private void assertTemplateHealthCheckSaysOKwithoutAnyEntries() { + TemplatesHealthCheckResult result = as(SUPER_ADMIN).executeTemplatesHealthcheck(); + + executeResilient(() -> { + assertThat(result.getStatus()).isEqualTo(TemplatesHealthCheckStatus.OK); + assertThat(result.getEntries()).isEmpty(); + + }); + } + + private void assertTemplateHealthCheckSaysOkButInfoThatTemplateIsNotAssigned() { + TemplatesHealthCheckResult result = as(SUPER_ADMIN).executeTemplatesHealthcheck(); + + executeResilient(() -> { + assertThat(result.getStatus()).isEqualTo(TemplatesHealthCheckStatus.OK); + assertThat(result.getEntries()).hasSize(1); + TemplateHealthCheckEntry firstEntry = result.getEntries().iterator().next(); + assertThat(firstEntry.getType()).isEqualTo(TemplateHealthCheckProblemType.INFO); + assertThat(firstEntry.getDescription()).contains("The template is defined, but not assigned to any project"); + + }); + + } + + private void assertTemplateHealthCheckSaysErrorBecauseAssetNotAvailable() { + TemplatesHealthCheckResult result = as(SUPER_ADMIN).executeTemplatesHealthcheck(); + + executeResilient(() -> { + assertThat(result.getStatus()).isEqualTo(TemplatesHealthCheckStatus.ERROR); + assertThat(result.getEntries()).hasSize(1); + TemplateHealthCheckEntry firstEntry = result.getEntries().iterator().next(); + assertThat(firstEntry.getType()).isEqualTo(TemplateHealthCheckProblemType.ERROR); + assertThat(firstEntry.getDescription()).contains("The file 'asset1/PDS_INTTEST_PRODUCT_WS_SARIF.zip' does not exist!"); + + }); + } + +} diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/IntegrationTestScanRestController.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/IntegrationTestScanRestController.java index d949f38dd4..5e8a234236 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/IntegrationTestScanRestController.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/IntegrationTestScanRestController.java @@ -40,6 +40,7 @@ import com.mercedesbenz.sechub.domain.scan.project.ScanProjectConfig; import com.mercedesbenz.sechub.domain.scan.project.ScanProjectConfigRepository; import com.mercedesbenz.sechub.domain.scan.report.ScanReportCountService; +import com.mercedesbenz.sechub.domain.scan.template.TemplateService; import com.mercedesbenz.sechub.sharedkernel.ProductIdentifier; import com.mercedesbenz.sechub.sharedkernel.Profiles; import com.mercedesbenz.sechub.sharedkernel.mapping.MappingIdentifier; @@ -97,6 +98,9 @@ public class IntegrationTestScanRestController { @Autowired private ScanProjectConfigRepository scanProjectConfigRepository; + @Autowired + private TemplateService templateService; + @RequestMapping(path = APIConstants.API_ANONYMOUS + "integrationtest/autocleanup/inspection/scan/days", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE }) public long fetchScheduleAutoCleanupConfiguredDays() { @@ -221,7 +225,6 @@ public MappingData fetchScanMappingData(@PathVariable("mappingId") String mappin } - @SuppressWarnings("deprecation") @RequestMapping(path = APIConstants.API_ANONYMOUS + "integrationtest/config/namepattern/{namePatternProviderId}/{name}", method = RequestMethod.GET) public String getIdForNameByProvider(@PathVariable("namePatternProviderId") String namePatternProviderId, @PathVariable("name") String name) { MappingIdentifier mappingIdentifier = MappingIdentifier.valueOf(namePatternProviderId); @@ -234,6 +237,14 @@ public String getIdForNameByProvider(@PathVariable("namePatternProviderId") Stri } + @RequestMapping(path = APIConstants.API_ANONYMOUS + "integrationtest/templates/clear-all", method = RequestMethod.POST) + public void clearAllTemplates() { + List templateIds = templateService.fetchAllTemplateIds(); + for (String templateId : templateIds) { + templateService.deleteTemplate(templateId); + } + } + @RequestMapping(path = APIConstants.API_ANONYMOUS + "integrationtest/job/{jobUUID}/pds/uuids", method = RequestMethod.GET) public List getPDSJobUUIDSForSecHubJOob(@PathVariable("jobUUID") UUID sechubJob) { List list = new ArrayList<>(); diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfig.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfig.java index 042f6f384e..3a44ddebc0 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfig.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfig.java @@ -49,6 +49,10 @@ public class ScanProjectConfig { public static final String QUERY_FIND_ALL_DATA_FOR_CONFIG_ID = "SELECT c." + PROPERTY_DATA + " FROM ScanProjectConfig c where c." + PROPERTY_KEY + "." + ScanProjectConfigCompositeKey.PROPERTY_CONFIG_ID + " =:configId"; + public static final String QUERY_FIND_ALL_PROJECT_IDS_FOR_SET_OF_CONFIG_IDS_AND_DATA = "SELECT c." + PROPERTY_KEY + "." + + ScanProjectConfigCompositeKey.PROPERTY_PROJECT_ID + " FROM ScanProjectConfig c where c." + PROPERTY_KEY + "." + + ScanProjectConfigCompositeKey.PROPERTY_CONFIG_ID + " in :configIds AND c." + PROPERTY_DATA + " =:data"; + @EmbeddedId ScanProjectConfigCompositeKey key; diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfigRepository.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfigRepository.java index 933d78ded1..779167e256 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfigRepository.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfigRepository.java @@ -29,4 +29,7 @@ public interface ScanProjectConfigRepository extends JpaRepository findAllDataForConfigId(@Param("configId") String configId); + @Query(value = ScanProjectConfig.QUERY_FIND_ALL_PROJECT_IDS_FOR_SET_OF_CONFIG_IDS_AND_DATA) + Set findAllProjectsWhereConfigurationHasGivenData(@Param("configIds") Set configIds, @Param("data") String data); + } diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfigService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfigService.java index 6cd15a2dde..c2bb1fa666 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfigService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/project/ScanProjectConfigService.java @@ -126,8 +126,18 @@ public void deleteAllConfigurationsOfGivenConfigIdsAndValue(Set configId repository.deleteAllConfigurationsOfGivenConfigIdsAndValue(configIds, value); } - public List findAllData(ScanProjectConfigID scanConfigType) { - return repository.findAllDataForConfigId(scanConfigType.getId()); + /** + * Find all data for given configuration identifier + * + * @param configId + * @return all data inside a list, never null + */ + public List findAllData(ScanProjectConfigID configId) { + return repository.findAllDataForConfigId(configId.getId()); + } + + public Set findAllProjectsWhereConfigurationHasGivenData(Set possibleConfigIds, String data) { + return repository.findAllProjectsWhereConfigurationHasGivenData(possibleConfigIds, data); } } diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/template/RelevantScanTemplateDefinitionFilter.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/template/RelevantScanTemplateDefinitionFilter.java index a94f012f74..9bdab18cfc 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/template/RelevantScanTemplateDefinitionFilter.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/template/RelevantScanTemplateDefinitionFilter.java @@ -13,6 +13,7 @@ import com.mercedesbenz.sechub.commons.model.template.TemplateDataResolver; import com.mercedesbenz.sechub.commons.model.template.TemplateDefinition; import com.mercedesbenz.sechub.commons.model.template.TemplateType; +import com.mercedesbenz.sechub.sharedkernel.ProductIdentifier; @Component /** @@ -85,4 +86,17 @@ public boolean isScanTypeSupportingTemplate(ScanType scanType, TemplateDefinitio return false; } + public boolean isProductAbleToHandleTemplates(ProductIdentifier productIdentifier) { + if (productIdentifier == null) { + return false; + } + if (productIdentifier.name().startsWith("PDS")) { + /* + * The PDS server implementation is always same and is able to handle templates. + */ + return true; + } + return false; + } + } diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/template/TemplateHealthCheckEntry.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/template/TemplateHealthCheckEntry.java index fbb7724a5d..055ce64534 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/template/TemplateHealthCheckEntry.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/template/TemplateHealthCheckEntry.java @@ -18,7 +18,13 @@ public class TemplateHealthCheckEntry { private String assetId; private String fileName; + /** + * @return type, never null + */ public TemplateHealthCheckProblemType getType() { + if (type == null) { + return TemplateHealthCheckProblemType.INFO; + } return type; } @@ -86,4 +92,9 @@ public Set getHints() { return hints; } + @Override + public String toString() { + return "TemplateHealthCheckEntry [" + (type != null ? "type=" + type + ", " : "") + (description != null ? "description=" + description : "") + "]"; + } + } diff --git a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/template/TemplateService.java b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/template/TemplateService.java index e76c922727..6f82106b9b 100644 --- a/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/template/TemplateService.java +++ b/sechub-scan/src/main/java/com/mercedesbenz/sechub/domain/scan/template/TemplateService.java @@ -37,7 +37,7 @@ public class TemplateService { private final ScanProjectConfigService configService; - private final TemplateTypeScanConfigIdResolver resolver; + private final TemplateTypeScanConfigIdResolver scanProjectConfigIdResolver; private final UserInputAssertion inputAssertion; @@ -45,7 +45,7 @@ public class TemplateService { TemplateTypeScanConfigIdResolver resolver) { this.repository = repository; this.configService = configService; - this.resolver = resolver; + this.scanProjectConfigIdResolver = resolver; this.inputAssertion = inputAssertion; } @@ -97,7 +97,7 @@ public void deleteTemplate(String templateId) { if (templateId == null) { throw new IllegalArgumentException("Template id may not be null!"); } - Set allTemplateConfigIds = resolver.resolveAllPossibleConfigIds(); + Set allTemplateConfigIds = scanProjectConfigIdResolver.resolveAllPossibleConfigIds(); configService.deleteAllConfigurationsOfGivenConfigIdsAndValue(allTemplateConfigIds, templateId); repository.deleteById(templateId); @@ -113,9 +113,8 @@ public void deleteTemplate(String templateId) { */ @UseCaseAdminFetchesTemplate(@Step(number = 2, name = "Service fetches template")) public TemplateDefinition fetchTemplateDefinition(String templateId) { - if (templateId == null) { - throw new IllegalArgumentException("Template id may not be null!"); - } + inputAssertion.assertIsValidTemplateId(templateId); + Optional