From 5320384c3890c912eac0fea422a8fc310ecf3301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Fuch=C3=9F?= Date: Fri, 23 Aug 2024 14:03:53 +0200 Subject: [PATCH] Squashed 'tests/integration-tests/' changes from 8f33b88..2d2daa0 2d2daa0 Merge branch 'main' into feature/directly-load-acm-files 7b0e7cd Loading of ACM files is possible for code now. git-subtree-dir: tests/integration-tests git-subtree-split: 2d2daa076c383fcb3eaf6611cc0af5eb48182a84 --- .../ardoco/core/tests/eval/CodeProject.java | 49 +++++-------------- .../ardoco/core/tests/eval/ProjectHelper.java | 5 -- .../core/tests/eval/CodeProjectTest.java | 3 +- .../HoldBackArCoTLModelProvider.java | 13 +++-- ...odeTraceabilityLinkRecoveryEvaluation.java | 9 +++- ...odeTraceabilityLinkRecoveryEvaluation.java | 8 ++- ...odeTraceabilityLinkRecoveryEvaluation.java | 9 +++- .../integration/TraceLinkEvaluationIT.java | 30 +++--------- .../TraceLinkEvaluationSadCodeDirectIT.java | 5 +- .../TraceabilityLinkRecoveryEvaluation.java | 12 ++--- 10 files changed, 61 insertions(+), 82 deletions(-) diff --git a/tests-base/src/main/java/edu/kit/kastel/mcse/ardoco/core/tests/eval/CodeProject.java b/tests-base/src/main/java/edu/kit/kastel/mcse/ardoco/core/tests/eval/CodeProject.java index bab51bb..9fdfab9 100644 --- a/tests-base/src/main/java/edu/kit/kastel/mcse/ardoco/core/tests/eval/CodeProject.java +++ b/tests-base/src/main/java/edu/kit/kastel/mcse/ardoco/core/tests/eval/CodeProject.java @@ -1,11 +1,10 @@ /* Licensed under MIT 2023-2024. */ package edu.kit.kastel.mcse.ardoco.core.tests.eval; +import static edu.kit.kastel.mcse.ardoco.core.tests.eval.ProjectHelper.loadFileFromResources; + import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; @@ -146,40 +145,18 @@ public String getCommitHash() { } /** - * {@return path of the code directory} - */ - public String getCodeLocation() { - return getTemporaryCodeLocation().getAbsolutePath(); - } - - /** - * {@return the directory of the code model} - */ - public String getCodeModelDirectory() { - try { - loadCodeModelFromResourcesIfNeeded(); - return getTemporaryCodeLocation().getAbsolutePath(); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - } - - /** - * Loads the code from resources or from the code directoy cache + * Get Code Location (ACM File or Temporary Directory) + * + * @param acmFile If true, the ACM file is loaded from resources * - * @throws IOException Can occur during file operations */ - public void loadCodeModelFromResourcesIfNeeded() throws IOException { - if (ProjectHelper.ANALYZE_CODE_DIRECTLY.get()) - return; - - File temporaryCodeLocation = getTemporaryCodeLocation(); - File codeModelFile = new File(temporaryCodeLocation + "/codeModel.acm"); - try (InputStream is = getClass().getResourceAsStream(this.codeModelLocationInResources)) { - try (FileOutputStream fos = new FileOutputStream(codeModelFile)) { - is.transferTo(fos); - } + public File getCodeLocation(boolean acmFile) { + if (acmFile) { + // If ACM load file from resources + return loadFileFromResources(this.codeModelLocationInResources); } + + return getTemporaryCodeLocation(); } /** @@ -202,7 +179,7 @@ public ExpectedResults getExpectedResultsForSadSamCode() { * @see TraceLinkUtilities#createTraceLinkString(String, String) */ public ImmutableList getSamCodeGoldStandard() { - File samCodeGoldStandardFile = ProjectHelper.loadFileFromResources(samCodeGoldStandardLocation); + File samCodeGoldStandardFile = loadFileFromResources(samCodeGoldStandardLocation); List lines = getLinesFromGoldStandardFile(samCodeGoldStandardFile); MutableList goldStandard = Lists.mutable.empty(); @@ -222,7 +199,7 @@ public ImmutableList getSamCodeGoldStandard() { * {@return all lines from the gold standard in csv format} */ public ImmutableList getSadCodeGoldStandard() { - File sadCodeGoldStandardFile = ProjectHelper.loadFileFromResources(sadCodeGoldStandardLocation); + File sadCodeGoldStandardFile = loadFileFromResources(sadCodeGoldStandardLocation); List lines = getLinesFromGoldStandardFile(sadCodeGoldStandardFile); return Lists.immutable.ofAll(lines); } diff --git a/tests-base/src/main/java/edu/kit/kastel/mcse/ardoco/core/tests/eval/ProjectHelper.java b/tests-base/src/main/java/edu/kit/kastel/mcse/ardoco/core/tests/eval/ProjectHelper.java index 45a5465..009099a 100644 --- a/tests-base/src/main/java/edu/kit/kastel/mcse/ardoco/core/tests/eval/ProjectHelper.java +++ b/tests-base/src/main/java/edu/kit/kastel/mcse/ardoco/core/tests/eval/ProjectHelper.java @@ -6,16 +6,11 @@ import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; -import java.util.concurrent.atomic.AtomicBoolean; /** * Helper class for {@link GoldStandardProject} implementations. */ public class ProjectHelper { - /** - * If set to false. The CodeProject will place the codeModel.acm file from the benchmark to the project directory. - */ - public static final AtomicBoolean ANALYZE_CODE_DIRECTLY = new AtomicBoolean(false); private ProjectHelper() { throw new IllegalAccessError(); diff --git a/tests-base/src/test/java/edu/kit/kastel/mcse/ardoco/core/tests/eval/CodeProjectTest.java b/tests-base/src/test/java/edu/kit/kastel/mcse/ardoco/core/tests/eval/CodeProjectTest.java index fff77ce..dbe3c76 100644 --- a/tests-base/src/test/java/edu/kit/kastel/mcse/ardoco/core/tests/eval/CodeProjectTest.java +++ b/tests-base/src/test/java/edu/kit/kastel/mcse/ardoco/core/tests/eval/CodeProjectTest.java @@ -12,8 +12,7 @@ void testFiles(CodeProject project) { Assertions.assertNotNull(project); Assertions.assertNotNull(project.getCodeRepository()); Assertions.assertNotNull(project.getCommitHash()); - Assertions.assertNotNull(project.getCodeLocation()); - Assertions.assertNotNull(project.getCodeModelDirectory()); + Assertions.assertNotNull(project.getCodeLocation(true)); Assertions.assertNotNull(project.getExpectedResultsForSamCode()); Assertions.assertNotNull(project.getExpectedResultsForSadSamCode()); Assertions.assertNotNull(project.getSamCodeGoldStandard()); diff --git a/tests-inconsistency/src/test/java/edu/kit/kastel/mcse/ardoco/id/tests/integration/inconsistencyhelper/HoldBackArCoTLModelProvider.java b/tests-inconsistency/src/test/java/edu/kit/kastel/mcse/ardoco/id/tests/integration/inconsistencyhelper/HoldBackArCoTLModelProvider.java index de6f019..9d64926 100644 --- a/tests-inconsistency/src/test/java/edu/kit/kastel/mcse/ardoco/id/tests/integration/inconsistencyhelper/HoldBackArCoTLModelProvider.java +++ b/tests-inconsistency/src/test/java/edu/kit/kastel/mcse/ardoco/id/tests/integration/inconsistencyhelper/HoldBackArCoTLModelProvider.java @@ -16,9 +16,11 @@ import edu.kit.kastel.mcse.ardoco.core.api.models.arcotl.Model; import edu.kit.kastel.mcse.ardoco.core.api.models.arcotl.architecture.ArchitectureComponent; import edu.kit.kastel.mcse.ardoco.core.data.DataRepository; +import edu.kit.kastel.mcse.ardoco.core.pipeline.agent.PipelineAgent; import edu.kit.kastel.mcse.ardoco.tlr.models.agents.ArCoTLModelProviderAgent; import edu.kit.kastel.mcse.ardoco.tlr.models.connectors.generators.Extractor; import edu.kit.kastel.mcse.ardoco.tlr.models.connectors.generators.architecture.pcm.PcmExtractor; +import edu.kit.kastel.mcse.ardoco.tlr.models.informants.ArCoTLModelProviderInformant; public class HoldBackArCoTLModelProvider { @@ -72,8 +74,8 @@ public ModelElement getCurrentHoldBack() { return components.get(currentHoldBackIndex); } - public ArCoTLModelProviderAgent get(SortedMap additionalConfigs, DataRepository dataRepository) { - ArCoTLModelProviderAgent agent = new ArCoTLModelProviderAgent(dataRepository, List.of(new Extractor("") { + public PipelineAgent get(SortedMap additionalConfigs, DataRepository dataRepository) { + PipelineAgent agent = new PipelineAgent(List.of(new ArCoTLModelProviderInformant(dataRepository, new Extractor("") { @Override public Model extractModel() { var elements = new ArrayList<>(initialModel.getContent()); @@ -86,7 +88,12 @@ public Model extractModel() { public ModelType getModelType() { return ArchitectureModelType.PCM; } - })); + })), ArCoTLModelProviderAgent.class.getSimpleName(), dataRepository) { + @Override + protected void delegateApplyConfigurationToInternalObjects(SortedMap additionalConfiguration) { + // empty + } + }; agent.applyConfiguration(additionalConfigs); return agent; } diff --git a/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/SadCodeTraceabilityLinkRecoveryEvaluation.java b/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/SadCodeTraceabilityLinkRecoveryEvaluation.java index fc5b62d..dbc44cd 100644 --- a/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/SadCodeTraceabilityLinkRecoveryEvaluation.java +++ b/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/SadCodeTraceabilityLinkRecoveryEvaluation.java @@ -26,6 +26,13 @@ class SadCodeTraceabilityLinkRecoveryEvaluation extends TraceabilityLinkRecoveryEvaluation { + private final boolean acmFile; + + public SadCodeTraceabilityLinkRecoveryEvaluation(boolean acmFile) { + super(); + this.acmFile = acmFile; + } + @Override protected boolean resultHasRequiredData(ArDoCoResult arDoCoResult) { var traceLinks = arDoCoResult.getSadCodeTraceLinks(); @@ -36,7 +43,7 @@ protected boolean resultHasRequiredData(ArDoCoResult arDoCoResult) { protected ArDoCoRunner getAndSetupRunner(CodeProject codeProject) { String name = codeProject.name().toLowerCase(); File textInput = codeProject.getTextFile(); - File inputCode = getInputCode(codeProject); + File inputCode = getInputCode(codeProject, acmFile); SortedMap additionalConfigsMap = new TreeMap<>(); File outputDir = new File(OUTPUT); diff --git a/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/SadSamCodeTraceabilityLinkRecoveryEvaluation.java b/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/SadSamCodeTraceabilityLinkRecoveryEvaluation.java index 4c71193..d8a50b2 100644 --- a/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/SadSamCodeTraceabilityLinkRecoveryEvaluation.java +++ b/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/SadSamCodeTraceabilityLinkRecoveryEvaluation.java @@ -25,6 +25,12 @@ import edu.kit.kastel.mcse.ardoco.tlr.execution.ArDoCoForSadSamCodeTraceabilityLinkRecovery; class SadSamCodeTraceabilityLinkRecoveryEvaluation extends TraceabilityLinkRecoveryEvaluation { + private final boolean acmFile; + + public SadSamCodeTraceabilityLinkRecoveryEvaluation(boolean acmFile) { + super(); + this.acmFile = acmFile; + } @Override protected boolean resultHasRequiredData(ArDoCoResult arDoCoResult) { @@ -37,7 +43,7 @@ protected ArDoCoRunner getAndSetupRunner(CodeProject codeProject) { String name = codeProject.name().toLowerCase(); File textInput = codeProject.getTextFile(); File inputArchitectureModel = codeProject.getModelFile(); - File inputCode = getInputCode(codeProject); + File inputCode = getInputCode(codeProject, acmFile); SortedMap additionalConfigsMap = new TreeMap<>(); File outputDir = new File(OUTPUT); diff --git a/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/SamCodeTraceabilityLinkRecoveryEvaluation.java b/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/SamCodeTraceabilityLinkRecoveryEvaluation.java index ae136f1..8316364 100644 --- a/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/SamCodeTraceabilityLinkRecoveryEvaluation.java +++ b/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/SamCodeTraceabilityLinkRecoveryEvaluation.java @@ -23,6 +23,13 @@ class SamCodeTraceabilityLinkRecoveryEvaluation extends TraceabilityLinkRecoveryEvaluation { + private final boolean acmFile; + + public SamCodeTraceabilityLinkRecoveryEvaluation(boolean acmFile) { + super(); + this.acmFile = acmFile; + } + @Override protected boolean resultHasRequiredData(ArDoCoResult arDoCoResult) { var traceLinks = arDoCoResult.getSamCodeTraceLinks(); @@ -32,7 +39,7 @@ protected boolean resultHasRequiredData(ArDoCoResult arDoCoResult) { @Override protected ArDoCoForSamCodeTraceabilityLinkRecovery getAndSetupRunner(CodeProject codeProject) { String name = codeProject.name().toLowerCase(); - File inputCode = getInputCode(codeProject); + File inputCode = getInputCode(codeProject, acmFile); File inputArchitectureModel = codeProject.getModelFile(); SortedMap additionalConfigsMap = new TreeMap<>(); File outputDir = new File(OUTPUT); diff --git a/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/TraceLinkEvaluationIT.java b/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/TraceLinkEvaluationIT.java index 25c165b..9cecb01 100644 --- a/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/TraceLinkEvaluationIT.java +++ b/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/TraceLinkEvaluationIT.java @@ -1,11 +1,8 @@ /* Licensed under MIT 2023-2024. */ package edu.kit.kastel.mcse.ardoco.tlr.tests.integration; -import static edu.kit.kastel.mcse.ardoco.core.tests.eval.ProjectHelper.ANALYZE_CODE_DIRECTLY; - import java.util.Arrays; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; import org.junit.jupiter.api.*; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; @@ -25,7 +22,6 @@ class TraceLinkEvaluationIT { protected static final String OUTPUT = "target/testout-tlr-it"; protected static final String LOGGING_ARDOCO_CORE = "org.slf4j.simpleLogger.log.edu.kit.kastel.mcse.ardoco.core"; - protected static AtomicBoolean analyzeCodeDirectly = ANALYZE_CODE_DIRECTLY; @BeforeAll static void beforeAll() { @@ -38,7 +34,7 @@ static void afterAll() { } private static void cleanUpCodeRepository(CodeProject codeProject) { - RepositoryHandler.removeRepository(codeProject.getCodeLocation()); + RepositoryHandler.removeRepository(codeProject.getCodeLocation(false).getAbsolutePath()); } @EnabledIfEnvironmentVariable(named = "testCodeFull", matches = ".*") @@ -47,11 +43,9 @@ private static void cleanUpCodeRepository(CodeProject codeProject) { @EnumSource(CodeProject.class) @Order(1) void evaluateSadSamCodeTlrFullIT(CodeProject project) { - analyzeCodeDirectly.set(true); - if (analyzeCodeDirectly.get()) - cleanUpCodeRepository(project); + cleanUpCodeRepository(project); - var evaluation = new SadSamCodeTraceabilityLinkRecoveryEvaluation(); + var evaluation = new SadSamCodeTraceabilityLinkRecoveryEvaluation(false); ArDoCoResult results = evaluation.runTraceLinkEvaluation(project); Assertions.assertNotNull(results); } @@ -62,11 +56,9 @@ void evaluateSadSamCodeTlrFullIT(CodeProject project) { @EnumSource(value = CodeProject.class) @Order(2) void evaluateSamCodeTlrFullIT(CodeProject project) { - analyzeCodeDirectly.set(true); - if (analyzeCodeDirectly.get()) - cleanUpCodeRepository(project); + cleanUpCodeRepository(project); - var evaluation = new SamCodeTraceabilityLinkRecoveryEvaluation(); + var evaluation = new SamCodeTraceabilityLinkRecoveryEvaluation(false); var results = evaluation.runTraceLinkEvaluation(project); Assertions.assertNotNull(results); } @@ -76,11 +68,7 @@ void evaluateSamCodeTlrFullIT(CodeProject project) { @EnumSource(CodeProject.class) @Order(9) void evaluateSadSamCodeTlrIT(CodeProject codeProject) { - analyzeCodeDirectly.set(false); - if (analyzeCodeDirectly.get()) - cleanUpCodeRepository(codeProject); - - var evaluation = new SadSamCodeTraceabilityLinkRecoveryEvaluation(); + var evaluation = new SadSamCodeTraceabilityLinkRecoveryEvaluation(true); var results = evaluation.runTraceLinkEvaluation(codeProject); Assertions.assertNotNull(results); @@ -92,11 +80,7 @@ void evaluateSadSamCodeTlrIT(CodeProject codeProject) { @EnumSource(CodeProject.class) @Order(10) void evaluateSamCodeTlrIT(CodeProject project) { - analyzeCodeDirectly.set(false); - if (analyzeCodeDirectly.get()) - cleanUpCodeRepository(project); - - var evaluation = new SamCodeTraceabilityLinkRecoveryEvaluation(); + var evaluation = new SamCodeTraceabilityLinkRecoveryEvaluation(true); ArDoCoResult results = evaluation.runTraceLinkEvaluation(project); Assertions.assertNotNull(results); } diff --git a/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/TraceLinkEvaluationSadCodeDirectIT.java b/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/TraceLinkEvaluationSadCodeDirectIT.java index 522c963..1300ce7 100644 --- a/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/TraceLinkEvaluationSadCodeDirectIT.java +++ b/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/TraceLinkEvaluationSadCodeDirectIT.java @@ -1,8 +1,6 @@ /* Licensed under MIT 2023-2024. */ package edu.kit.kastel.mcse.ardoco.tlr.tests.integration; -import static edu.kit.kastel.mcse.ardoco.core.tests.eval.ProjectHelper.ANALYZE_CODE_DIRECTLY; - import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -42,8 +40,7 @@ static void afterAll() { @ParameterizedTest(name = "{0}") @EnumSource(CodeProject.class) void evaluateSadCodeTlrIT(CodeProject project) { - ANALYZE_CODE_DIRECTLY.set(false); - var evaluation = new SadCodeTraceabilityLinkRecoveryEvaluation(); + var evaluation = new SadCodeTraceabilityLinkRecoveryEvaluation(true); ArDoCoResult results = evaluation.runTraceLinkEvaluation(project); Assertions.assertNotNull(results); } diff --git a/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/TraceabilityLinkRecoveryEvaluation.java b/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/TraceabilityLinkRecoveryEvaluation.java index 81658a0..aafee0d 100644 --- a/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/TraceabilityLinkRecoveryEvaluation.java +++ b/tests-tlr/src/test/java/edu/kit/kastel/mcse/ardoco/tlr/tests/integration/TraceabilityLinkRecoveryEvaluation.java @@ -63,13 +63,13 @@ protected final ArDoCoResult runTraceLinkEvaluation(T project) { protected abstract boolean resultHasRequiredData(ArDoCoResult potentialResults); - protected File getInputCode(CodeProject codeProject) { + protected File getInputCode(CodeProject codeProject, boolean acmFile) { File inputCode; - if (TraceLinkEvaluationIT.analyzeCodeDirectly.get()) { + if (!acmFile) { prepareCode(codeProject); - inputCode = new File(codeProject.getCodeLocation()); + inputCode = codeProject.getCodeLocation(false); } else { - inputCode = new File(codeProject.getCodeModelDirectory()); + inputCode = codeProject.getCodeLocation(true); } return inputCode; } @@ -77,10 +77,10 @@ protected File getInputCode(CodeProject codeProject) { protected abstract ArDoCoRunner getAndSetupRunner(T project); private void prepareCode(CodeProject codeProject) { - File codeLocation = new File(codeProject.getCodeLocation()); + File codeLocation = codeProject.getCodeLocation(false); if (!codeLocation.exists() || Objects.requireNonNull(codeLocation.listFiles()).length == 0) { - RepositoryHandler.shallowCloneRepository(codeProject.getCodeRepository(), codeProject.getCodeLocation(), codeProject.getCommitHash()); + RepositoryHandler.shallowCloneRepository(codeProject.getCodeRepository(), codeLocation.getAbsolutePath(), codeProject.getCommitHash()); } }