From 46ed670dbe597c95e87cad06d5ce975fa04bca9f Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 15 Dec 2023 07:33:02 +0100 Subject: [PATCH] [MNG-7965] Verify non-parseable POM is detected (#327) Co-authored-by: Tamas Cservenak --- .../MavenITmng7965PomDuplicateTagsTest.java | 69 +++++++++++++++++++ .../apache/maven/it/TestSuiteOrdering.java | 1 + .../mng-7965-pom-duplicate-tags/pom.xml | 43 ++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng7965PomDuplicateTagsTest.java create mode 100644 its/core-it-suite/src/test/resources/mng-7965-pom-duplicate-tags/pom.xml diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng7965PomDuplicateTagsTest.java b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng7965PomDuplicateTagsTest.java new file mode 100644 index 0000000000..07035e9121 --- /dev/null +++ b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng7965PomDuplicateTagsTest.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.maven.it; + +import java.io.File; +import java.util.List; +import java.util.regex.Pattern; + +import org.apache.maven.shared.verifier.VerificationException; +import org.apache.maven.shared.verifier.Verifier; +import org.apache.maven.shared.verifier.util.ResourceExtractor; +import org.junit.jupiter.api.Test; + +/** + * This is a test set for + * MNG-7965. + * Allow to exclude plugins from validation. Affected ones as Maven 4.0.0-alpha-8 and Maven 4.0.0-alpha-9. + */ +class MavenITmng7965PomDuplicateTagsTest extends AbstractMavenIntegrationTestCase { + + protected MavenITmng7965PomDuplicateTagsTest() { + super("(,4.0.0-alpha-8),(4.0.0-alpha-9,)"); + } + + @Test + void javadocIsExecutedAndFailed() throws Exception { + File testDir = ResourceExtractor.simpleExtractResources(getClass(), "/mng-7965-pom-duplicate-tags"); + + Verifier verifier = newVerifier(testDir.getAbsolutePath()); + verifier.deleteDirectory("target"); + verifier.addCliArgument("validate"); + + boolean invocationFailed = false; + // whatever outcome we do not fail here, but later + try { + verifier.execute(); + } catch (VerificationException e) { + invocationFailed = true; + } + + List logs = verifier.loadLines(verifier.getLogFileName(), null); + + // the POM is not parseable + verifyRegexInLog(logs, "\\[ERROR\\]\\s+Non-parseable POM"); + + assertTrue("The Maven invocation should have failed: the POM is non-parseable", invocationFailed); + } + + private void verifyRegexInLog(List logs, String text) { + Pattern p = Pattern.compile(text); + assertTrue("Log file not contains: " + text, logs.stream().anyMatch(p.asPredicate())); + } +} diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java b/its/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java index 27917aba30..e26a31574f 100644 --- a/its/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java +++ b/its/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java @@ -120,6 +120,7 @@ public class TestSuiteOrdering implements ClassOrderer { * the tests are to finishing. Newer tests are also more likely to fail, so this is * a fail fast technique as well. */ + suite.addTestSuite(MavenITmng7965PomDuplicateTagsTest.class); suite.addTestSuite(MavenITmng7939PluginsValidationExcludesTest.class); suite.addTestSuite(MavenITmng7837ProjectElementInPomTest.class); suite.addTestSuite(MavenITmng7804PluginExecutionOrderTest.class); diff --git a/its/core-it-suite/src/test/resources/mng-7965-pom-duplicate-tags/pom.xml b/its/core-it-suite/src/test/resources/mng-7965-pom-duplicate-tags/pom.xml new file mode 100644 index 0000000000..3b236d89d0 --- /dev/null +++ b/its/core-it-suite/src/test/resources/mng-7965-pom-duplicate-tags/pom.xml @@ -0,0 +1,43 @@ + + + + 4.0.0 + + org.apache.maven.its.mng7965 + test + 1.0.0-SNAPSHOT + + + + foo + Bar + https://really.does.not.matter/ + + + + + + foo-other + Bar The Other + https://really.does.not.matter.either/ + + + +