This is an automated email from the ASF dual-hosted git repository. olamy pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-build-cache-extension.git
The following commit(s) were added to refs/heads/master by this push: new 0359fb0 Upgrade parent POM to version 44 and fix the checkstyle violations (#213) 0359fb0 is described below commit 0359fb04ea4b5904fef4a4f13683dc0f2216229d Author: Tayebwa Noah <ndacyayin...@gmail.com> AuthorDate: Fri May 30 06:51:58 2025 +0300 Upgrade parent POM to version 44 and fix the checkstyle violations (#213) * Upgrade parent POM to version 44 --- pom.xml | 2 +- .../buildcache/checksum/InputExclusionTest.java | 30 +-- .../org/apache/maven/buildcache/hash/PerfTest.java | 12 +- .../maven/buildcache/its/CoreExtensionTest.java | 2 +- .../buildcache/its/IncrementalRestoreTest.java | 203 +++++++++----------- .../apache/maven/buildcache/its/Issue74Test.java | 4 +- .../apache/maven/buildcache/its/Issue76Test.java | 2 +- .../org/apache/maven/buildcache/its/PathEntry.java | 206 +++++++++++++++++++++ .../maven/buildcache/its/RemoteCacheDavTest.java | 195 ------------------- .../maven/buildcache/xml/XmlServiceTest.java | 32 ---- 10 files changed, 318 insertions(+), 370 deletions(-) diff --git a/pom.xml b/pom.xml index 87eb4a6..812addf 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ under the License. <parent> <groupId>org.apache.maven.extensions</groupId> <artifactId>maven-extensions</artifactId> - <version>41</version> + <version>44</version> <relativePath /> </parent> diff --git a/src/test/java/org/apache/maven/buildcache/checksum/InputExclusionTest.java b/src/test/java/org/apache/maven/buildcache/checksum/InputExclusionTest.java index ec3f283..9689dda 100644 --- a/src/test/java/org/apache/maven/buildcache/checksum/InputExclusionTest.java +++ b/src/test/java/org/apache/maven/buildcache/checksum/InputExclusionTest.java @@ -400,20 +400,20 @@ private ExclusionResolver createExclusionResolver( * - other-file.json */ private class FsTree { - public Path txtFileRootFolder; - public Path javaFileRootFolder; - public Path jsonFileRootFolder; - public Path folder1; - public Path txtFileFolder1; - public Path javaFileFolder1; - public Path jsonFileFolder1; - public Path subFolder1; - public Path txtFileSubFolder1; - public Path javaFileSubFolder1; - public Path jsonFileSubFolder1; - public Path folder2; - public Path txtFileFolder2; - public Path javaFileFolder2; - public Path jsonFileFolder2; + private Path txtFileRootFolder; + private Path javaFileRootFolder; + private Path jsonFileRootFolder; + private Path folder1; + private Path txtFileFolder1; + private Path javaFileFolder1; + private Path jsonFileFolder1; + private Path subFolder1; + private Path txtFileSubFolder1; + private Path javaFileSubFolder1; + private Path jsonFileSubFolder1; + private Path folder2; + private Path txtFileFolder2; + private Path javaFileFolder2; + private Path jsonFileFolder2; } } diff --git a/src/test/java/org/apache/maven/buildcache/hash/PerfTest.java b/src/test/java/org/apache/maven/buildcache/hash/PerfTest.java index 3c10f66..aafa824 100644 --- a/src/test/java/org/apache/maven/buildcache/hash/PerfTest.java +++ b/src/test/java/org/apache/maven/buildcache/hash/PerfTest.java @@ -73,32 +73,32 @@ String doTest(HashFactory hashFactory, HashState state) throws IOException { } @Benchmark - public String SHA1(HashState state) throws IOException { + public String sha1(HashState state) throws IOException { return doTest(HashFactory.SHA1, state); } @Benchmark - public String SHA256(HashState state) throws IOException { + public String sha256(HashState state) throws IOException { return doTest(HashFactory.SHA256, state); } @Benchmark - public String XX(HashState state) throws IOException { + public String xx(HashState state) throws IOException { return doTest(HashFactory.XX, state); } @Benchmark - public String XXMM(HashState state) throws IOException { + public String xxmm(HashState state) throws IOException { return doTest(HashFactory.XXMM, state); } @Benchmark - public String METRO(HashState state) throws IOException { + public String metro(HashState state) throws IOException { return doTest(HashFactory.METRO, state); } @Benchmark - public String METRO_MM(HashState state) throws IOException { + public String metroMm(HashState state) throws IOException { return doTest(HashFactory.METRO_MM, state); } diff --git a/src/test/java/org/apache/maven/buildcache/its/CoreExtensionTest.java b/src/test/java/org/apache/maven/buildcache/its/CoreExtensionTest.java index 3214266..4d14222 100644 --- a/src/test/java/org/apache/maven/buildcache/its/CoreExtensionTest.java +++ b/src/test/java/org/apache/maven/buildcache/its/CoreExtensionTest.java @@ -43,7 +43,7 @@ void simple(Verifier verifier) throws VerificationException { } @Test - void simple_build_change_version_reuse_build_cache(Verifier verifier) throws VerificationException { + void simpleBuildChangeVersionReuseBuildCache(Verifier verifier) throws VerificationException { verifier.setAutoclean(false); verifier.setLogFileName("../log-1.txt"); diff --git a/src/test/java/org/apache/maven/buildcache/its/IncrementalRestoreTest.java b/src/test/java/org/apache/maven/buildcache/its/IncrementalRestoreTest.java index 5656fc0..47f7972 100644 --- a/src/test/java/org/apache/maven/buildcache/its/IncrementalRestoreTest.java +++ b/src/test/java/org/apache/maven/buildcache/its/IncrementalRestoreTest.java @@ -96,11 +96,24 @@ public class IncrementalRestoreTest { public static final String SKIPPING_PLUGIN_EXECUTION_CACHED_FAILSAFE_VERIFY = "Skipping plugin execution (cached): failsafe:verify"; + private Path jarCacheFile; + private Path jarSourcesCacheFile; + private Path jarJavadocCacheFile; + @Test void simple(Verifier verifier) throws VerificationException, IOException { verifier.setAutoclean(false); verifier.setMavenDebug(true); + initialBuild(verifier); + verifyPackageWithCache(verifier); + verifyWithCache(verifier); + installWithCache(verifier); + deployWithCache(verifier); + replayInstallWithCache(verifier); + } + + private void initialBuild(Verifier verifier) throws VerificationException, IOException { // First build, nothing in cache verifier.setLogFileName("../log-package.txt"); verifier.executeGoal("package"); @@ -116,28 +129,22 @@ void simple(Verifier verifier) throws VerificationException, IOException { verifier.verifyFilePresent(GENERATED_JAR); // First build : all resources are present in the target folder - verifier.verifyFilePresent(EXTRA_OUTPUT_1); - verifier.verifyFilePresent(EXTRA_OUTPUT_2); - verifier.verifyFilePresent(EXTRA_OUTPUT_3); - verifier.verifyFilePresent(EXTRA_OUTPUT_4); - verifier.verifyFilePresent(EXTRA_OUTPUT_5); - verifier.verifyFilePresent(EXTRA_OUTPUT_6); + verifyAllExtraOutputsPresent(verifier); Path buildInfoPath = getSavedBuildInfoPath(verifier); - Path jarCacheFile = buildInfoPath.getParent().resolve(MBUILDCACHE_INCREMENTAL_JAR); - Path jarSourcesCacheFile = buildInfoPath.getParent().resolve(MBUILDCACHE_INCREMENTAL_SOURCES_JAR); - Path jarJavadocCacheFile = buildInfoPath.getParent().resolve(MBUILDCACHE_INCREMENTAL_JAVADOC_JAR); + jarCacheFile = buildInfoPath.getParent().resolve(MBUILDCACHE_INCREMENTAL_JAR); + jarSourcesCacheFile = buildInfoPath.getParent().resolve(MBUILDCACHE_INCREMENTAL_SOURCES_JAR); + jarJavadocCacheFile = buildInfoPath.getParent().resolve(MBUILDCACHE_INCREMENTAL_JAVADOC_JAR); Assertions.assertTrue(Files.exists(jarCacheFile), "Expected artifact saved in build cache."); Assertions.assertFalse( Files.exists(jarSourcesCacheFile), "Not expected sources artifact saved in build cache."); Assertions.assertFalse( Files.exists(jarJavadocCacheFile), "Not expected javadoc artifact saved in build cache."); + } + private void verifyPackageWithCache(Verifier verifier) throws VerificationException { // Verify clean build, with the same goal should be fully restored - verifier.setMavenDebug(false); - verifier.setLogFileName("../log-clean.txt"); - verifier.executeGoal("clean"); - verifier.verifyFileNotPresent(GENERATED_JAR); + cleanBuild(verifier); verifier.setLogFileName("../log-package-2.txt"); verifier.executeGoal("package"); @@ -146,28 +153,15 @@ void simple(Verifier verifier) throws VerificationException, IOException { verifier.verifyTextInLog( "Found cached build, restoring org.apache.maven.caching.test:mbuildcache-incremental from cache by checksum"); verifier.verifyErrorFreeLog(); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_RESOURCES); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_COMPILER_COMPILE); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_TEST_RESOURCES); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_COMPILER_TEST_COMPILE); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_SUREFIRE_TEST); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_JAR_JAR); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_COPY); + verifySkippedPluginExecutions(verifier); verifier.verifyFilePresent(GENERATED_JAR); - // 2nd build with cache : only cached extra resources are present in the target folder - verifier.verifyFilePresent(EXTRA_OUTPUT_1); - verifier.verifyFilePresent(EXTRA_OUTPUT_2); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_3); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_4); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_5); - verifier.verifyFilePresent(EXTRA_OUTPUT_6); + verifyCachedExtraOutputs(verifier); Assertions.assertTrue(Files.exists(jarCacheFile), "Expected artifact saved in build cache."); + } + private void verifyWithCache(Verifier verifier) throws VerificationException { // Next step : verify - verifier.setMavenDebug(false); - verifier.setLogFileName("../log-clean.txt"); - verifier.executeGoal("clean"); - verifier.verifyFileNotPresent(GENERATED_JAR); + cleanBuild(verifier); verifier.setLogFileName("../log-verify.txt"); verifier.executeGoal("verify"); @@ -176,98 +170,52 @@ void simple(Verifier verifier) throws VerificationException, IOException { verifier.verifyTextInLog( "Project org.apache.maven.caching.test:mbuildcache-incremental restored partially. Highest cached goal: package, requested: verify"); verifier.verifyErrorFreeLog(); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_RESOURCES); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_COMPILER_COMPILE); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_TEST_RESOURCES); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_COMPILER_TEST_COMPILE); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_SUREFIRE_TEST); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_JAR_JAR); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_COPY); + verifySkippedPluginExecutions(verifier); verifier.verifyTextInLog(INTEGRATION_TEST_DEFAULT_MBUILDCACHE_INCREMENTAL); verifier.verifyTextInLog(VERIFY_DEFAULT_MBUILDCACHE_INCREMENTAL); verifier.verifyTextInLog(SAVED_BUILD_TO_LOCAL_FILE); verifier.verifyFilePresent(GENERATED_JAR); - // only cached extra resources are present in the target folder - verifier.verifyFilePresent(EXTRA_OUTPUT_1); - verifier.verifyFilePresent(EXTRA_OUTPUT_2); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_3); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_4); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_5); - verifier.verifyFilePresent(EXTRA_OUTPUT_6); + verifyCachedExtraOutputs(verifier); Assertions.assertTrue(Files.exists(jarCacheFile), "Expected artifact saved in build cache."); + } + private void installWithCache(Verifier verifier) throws VerificationException { // Install with clean build, with a higher goal should restore cached mojo executions and apply increments - verifier.setMavenDebug(false); - verifier.setLogFileName("../log-clean.txt"); - verifier.executeGoal("clean"); - verifier.verifyFileNotPresent(GENERATED_JAR); + cleanBuild(verifier); verifier.setLogFileName("../log-install.txt"); verifier.executeGoal("install"); verifier.verifyErrorFreeLog(); verifier.verifyTextInLog( "Project org.apache.maven.caching.test:mbuildcache-incremental restored partially. Highest cached goal: verify, requested: install"); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_RESOURCES); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_COMPILER_COMPILE); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_TEST_RESOURCES); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_COMPILER_TEST_COMPILE); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_SUREFIRE_TEST); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_JAR_JAR); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_COPY); + verifySkippedPluginExecutions(verifier); verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_FAILSAFE_INTEGRATION_TEST); verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_FAILSAFE_VERIFY); - verifyNoTextInLog(verifier, RESOURCES_DEFAULT_RESOURCES_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, COMPILE_DEFAULT_COMPILE_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, TEST_RESOURCES_DEFAULT_TEST_RESOURCES_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, TEST_COMPILE_DEFAULT_TEST_COMPILE_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, TEST_DEFAULT_TEST_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, JAR_DEFAULT_JAR_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, INTEGRATION_TEST_DEFAULT_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, VERIFY_DEFAULT_MBUILDCACHE_INCREMENTAL); + verifyNoCachedPluginExecutions(verifier); verifier.verifyTextInLog(INSTALL_DEFAULT_INSTALL_MBUILDCACHE_INCREMENTAL); final String installToLocalRepoString = "Installing " + verifier.getBasedir() + File.separatorChar + EXTRA_OUTPUT_1 + " to "; verifier.verifyTextInLog(installToLocalRepoString); verifier.verifyTextInLog(SAVED_BUILD_TO_LOCAL_FILE); verifier.verifyFilePresent(GENERATED_JAR); - // only cached extra resources are present in the target folder - verifier.verifyFilePresent(EXTRA_OUTPUT_1); - verifier.verifyFilePresent(EXTRA_OUTPUT_2); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_3); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_4); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_5); - verifier.verifyFilePresent(EXTRA_OUTPUT_6); + verifyCachedExtraOutputs(verifier); Assertions.assertTrue(Files.exists(jarCacheFile), "Expected artifact saved in build cache."); + } + private void deployWithCache(Verifier verifier) throws VerificationException { // Deploy with clean build, with a higher goal should restore cached mojo executions and apply increments - verifier.setMavenDebug(false); - verifier.setLogFileName("../log-clean.txt"); - verifier.executeGoal("clean"); - verifier.verifyFileNotPresent(GENERATED_JAR); + cleanBuild(verifier); verifier.setLogFileName("../log-deploy.txt"); verifier.executeGoal("deploy"); verifier.verifyErrorFreeLog(); verifier.verifyTextInLog( "Project org.apache.maven.caching.test:mbuildcache-incremental restored partially. Highest cached goal: install, requested: deploy"); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_RESOURCES); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_COMPILER_COMPILE); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_TEST_RESOURCES); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_COMPILER_TEST_COMPILE); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_SUREFIRE_TEST); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_JAR_JAR); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_COPY); + verifySkippedPluginExecutions(verifier); verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_FAILSAFE_INTEGRATION_TEST); verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_FAILSAFE_VERIFY); verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_INSTALL_INSTALL); - verifyNoTextInLog(verifier, RESOURCES_DEFAULT_RESOURCES_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, COMPILE_DEFAULT_COMPILE_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, TEST_RESOURCES_DEFAULT_TEST_RESOURCES_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, TEST_COMPILE_DEFAULT_TEST_COMPILE_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, TEST_DEFAULT_TEST_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, JAR_DEFAULT_JAR_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, INTEGRATION_TEST_DEFAULT_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, VERIFY_DEFAULT_MBUILDCACHE_INCREMENTAL); + verifyNoCachedPluginExecutions(verifier); verifyNoTextInLog(verifier, INSTALL_DEFAULT_INSTALL_MBUILDCACHE_INCREMENTAL); verifier.verifyTextInLog(DEPLOY_DEFAULT_DEPLOY_MBUILDCACHE_INCREMENTAL); verifier.verifyTextInLog("Using alternate deployment repository local::file:./target/staging"); @@ -275,23 +223,61 @@ void simple(Verifier verifier) throws VerificationException, IOException { verifier.verifyFilePresent(GENERATED_JAR); verifier.verifyFilePresent(GENERATED_SOURCES_JAR); verifier.verifyFilePresent(GENERATED_JAVADOC_JAR); - // only cached extra resources are present in the target folder - verifier.verifyFilePresent(EXTRA_OUTPUT_1); - verifier.verifyFilePresent(EXTRA_OUTPUT_2); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_3); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_4); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_5); - verifier.verifyFilePresent(EXTRA_OUTPUT_6); + verifyCachedExtraOutputs(verifier); Assertions.assertTrue(Files.exists(jarCacheFile), "Expected artifact saved in build cache."); Assertions.assertTrue(Files.exists(jarSourcesCacheFile), "Expected sources artifact saved in build cache."); Assertions.assertTrue(Files.exists(jarJavadocCacheFile), "Expected javadoc artifact saved in build cache."); + } + private void replayInstallWithCache(Verifier verifier) throws VerificationException { // Replay install with clean build, with a lower goal should only restore cached mojo executions verifier.setLogFileName("../log-install-replay.txt"); verifier.executeGoal("install"); verifier.verifyErrorFreeLog(); verifier.verifyTextInLog( FOUND_CACHED_BUILD_RESTORING_ORG_APACHE_MAVEN_CACHING_TEST_MBUILDCACHE_INCREMENTAL_FROM_CACHE_BY_CHECKSUM); + verifySkippedPluginExecutions(verifier); + verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_FAILSAFE_INTEGRATION_TEST); + verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_FAILSAFE_VERIFY); + verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_INSTALL_INSTALL); + verifyNoTextInLog(verifier, DEPLOY_DEFAULT_DEPLOY_MBUILDCACHE_INCREMENTAL); + verifyNoCachedPluginExecutions(verifier); + verifyNoTextInLog(verifier, SAVED_BUILD_TO_LOCAL_FILE, "Expected successful build cache restore."); + verifier.verifyFilePresent(GENERATED_JAR); + verifier.verifyFilePresent(GENERATED_SOURCES_JAR); + verifier.verifyFilePresent(GENERATED_JAVADOC_JAR); + verifyCachedExtraOutputs(verifier); + Assertions.assertTrue(Files.exists(jarCacheFile), "Expected artifact saved in build cache."); + Assertions.assertTrue(Files.exists(jarSourcesCacheFile), "Expected sources artifact saved in build cache."); + Assertions.assertTrue(Files.exists(jarJavadocCacheFile), "Expected javadoc artifact saved in build cache."); + } + + private void cleanBuild(Verifier verifier) throws VerificationException { + verifier.setMavenDebug(false); + verifier.setLogFileName("../log-clean.txt"); + verifier.executeGoal("clean"); + verifier.verifyFileNotPresent(GENERATED_JAR); + } + + private void verifyAllExtraOutputsPresent(Verifier verifier) throws VerificationException { + verifier.verifyFilePresent(EXTRA_OUTPUT_1); + verifier.verifyFilePresent(EXTRA_OUTPUT_2); + verifier.verifyFilePresent(EXTRA_OUTPUT_3); + verifier.verifyFilePresent(EXTRA_OUTPUT_4); + verifier.verifyFilePresent(EXTRA_OUTPUT_5); + verifier.verifyFilePresent(EXTRA_OUTPUT_6); + } + + private void verifyCachedExtraOutputs(Verifier verifier) throws VerificationException { + verifier.verifyFilePresent(EXTRA_OUTPUT_1); + verifier.verifyFilePresent(EXTRA_OUTPUT_2); + verifier.verifyFileNotPresent(EXTRA_OUTPUT_3); + verifier.verifyFileNotPresent(EXTRA_OUTPUT_4); + verifier.verifyFileNotPresent(EXTRA_OUTPUT_5); + verifier.verifyFilePresent(EXTRA_OUTPUT_6); + } + + private void verifySkippedPluginExecutions(Verifier verifier) throws VerificationException { verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_RESOURCES); verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_COMPILER_COMPILE); verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_TEST_RESOURCES); @@ -299,10 +285,9 @@ void simple(Verifier verifier) throws VerificationException, IOException { verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_SUREFIRE_TEST); verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_JAR_JAR); verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_RESOURCES_COPY); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_FAILSAFE_INTEGRATION_TEST); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_FAILSAFE_VERIFY); - verifier.verifyTextInLog(SKIPPING_PLUGIN_EXECUTION_CACHED_INSTALL_INSTALL); - verifyNoTextInLog(verifier, DEPLOY_DEFAULT_DEPLOY_MBUILDCACHE_INCREMENTAL); + } + + private void verifyNoCachedPluginExecutions(Verifier verifier) throws VerificationException { verifyNoTextInLog(verifier, RESOURCES_DEFAULT_RESOURCES_MBUILDCACHE_INCREMENTAL); verifyNoTextInLog(verifier, COMPILE_DEFAULT_COMPILE_MBUILDCACHE_INCREMENTAL); verifyNoTextInLog(verifier, TEST_RESOURCES_DEFAULT_TEST_RESOURCES_MBUILDCACHE_INCREMENTAL); @@ -311,22 +296,6 @@ void simple(Verifier verifier) throws VerificationException, IOException { verifyNoTextInLog(verifier, JAR_DEFAULT_JAR_MBUILDCACHE_INCREMENTAL); verifyNoTextInLog(verifier, INTEGRATION_TEST_DEFAULT_MBUILDCACHE_INCREMENTAL); verifyNoTextInLog(verifier, VERIFY_DEFAULT_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, INSTALL_DEFAULT_INSTALL_MBUILDCACHE_INCREMENTAL); - verifyNoTextInLog(verifier, installToLocalRepoString); - verifyNoTextInLog(verifier, SAVED_BUILD_TO_LOCAL_FILE, "Expected successful build cache restore."); - verifier.verifyFilePresent(GENERATED_JAR); - verifier.verifyFilePresent(GENERATED_SOURCES_JAR); - verifier.verifyFilePresent(GENERATED_JAVADOC_JAR); - // only cached extra resources are present in the target folder - verifier.verifyFilePresent(EXTRA_OUTPUT_1); - verifier.verifyFilePresent(EXTRA_OUTPUT_2); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_3); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_4); - verifier.verifyFileNotPresent(EXTRA_OUTPUT_5); - verifier.verifyFilePresent(EXTRA_OUTPUT_6); - Assertions.assertTrue(Files.exists(jarCacheFile), "Expected artifact saved in build cache."); - Assertions.assertTrue(Files.exists(jarSourcesCacheFile), "Expected sources artifact saved in build cache."); - Assertions.assertTrue(Files.exists(jarJavadocCacheFile), "Expected javadoc artifact saved in build cache."); } private static void verifyNoTextInLog(Verifier verifier, String text, String message) throws VerificationException { diff --git a/src/test/java/org/apache/maven/buildcache/its/Issue74Test.java b/src/test/java/org/apache/maven/buildcache/its/Issue74Test.java index d2a45d6..8a4eb78 100644 --- a/src/test/java/org/apache/maven/buildcache/its/Issue74Test.java +++ b/src/test/java/org/apache/maven/buildcache/its/Issue74Test.java @@ -41,7 +41,7 @@ @IntegrationTest("src/test/projects/mbuildcache-74-clean-cache-any-artifact") public class Issue74Test { - private static final Logger logger = LoggerFactory.getLogger(Issue74Test.class); + private static final Logger LOGGER = LoggerFactory.getLogger(Issue74Test.class); @Test void simple(Verifier verifier) throws VerificationException, IOException { @@ -79,7 +79,7 @@ private static void verifyBuildCacheEntries(final Verifier verifier, long expect // buildinfo.xml -> local -> hash -> project Path projectPathInCache = buildInfoXmlPath.getParent().getParent().getParent(); - logger.info("Checking '{}' for cached builds ...", projectPathInCache); + LOGGER.info("Checking '{}' for cached builds ...", projectPathInCache); if (!Files.exists(projectPathInCache)) { throw new VerificationException( diff --git a/src/test/java/org/apache/maven/buildcache/its/Issue76Test.java b/src/test/java/org/apache/maven/buildcache/its/Issue76Test.java index b6b6b30..1049dda 100644 --- a/src/test/java/org/apache/maven/buildcache/its/Issue76Test.java +++ b/src/test/java/org/apache/maven/buildcache/its/Issue76Test.java @@ -29,7 +29,7 @@ public class Issue76Test { private static final String PROJECT_NAME = "org.apache.maven.caching.test:mbuildcache-76"; @Test - void simple_build_change_version_build_install_again(Verifier verifier) throws VerificationException { + void simpleBuildChangeVersionBuildInstallAgain(Verifier verifier) throws VerificationException { verifier.setAutoclean(false); verifier.setLogFileName("../log-1.txt"); diff --git a/src/test/java/org/apache/maven/buildcache/its/PathEntry.java b/src/test/java/org/apache/maven/buildcache/its/PathEntry.java new file mode 100644 index 0000000..3ecb506 --- /dev/null +++ b/src/test/java/org/apache/maven/buildcache/its/PathEntry.java @@ -0,0 +1,206 @@ +/* + * 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.buildcache.its; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.LinkOption; +import java.nio.file.Path; +import java.nio.file.attribute.FileTime; +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.PosixFilePermissions; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.EnumSet; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.TreeMap; + +public class PathEntry implements Comparable<PathEntry> { + + private final Path abs; + private final Path path; + private final Map<String, Object> attributes; + + public PathEntry(Path abs, Path root) { + this.abs = abs; + this.path = abs.startsWith(root) ? root.relativize(abs) : abs; + this.attributes = readAttributes(abs); + } + + @Override + public int compareTo(PathEntry o) { + return path.toString().compareTo(o.path.toString()); + } + + boolean isNotDirectory() { + return is("isRegularFile") || is("isSymbolicLink") || is("isOther"); + } + + boolean isDirectory() { + return is("isDirectory"); + } + + private boolean is(String attr) { + Object d = attributes.get(attr); + return d instanceof Boolean && (Boolean) d; + } + + String display() { + String suffix; + String link = ""; + if (is("isSymbolicLink")) { + suffix = "@"; + try { + Path l = Files.readSymbolicLink(abs); + link = " -> " + l.toString(); + } catch (IOException e) { + // ignore + } + } else if (is("isDirectory")) { + suffix = "/"; + } else if (is("isExecutable")) { + suffix = "*"; + } else if (is("isOther")) { + suffix = ""; + } else { + suffix = ""; + } + return path.toString() + suffix + link; + } + + String longDisplay() { + String username = getUsername(); + String group = getGroup(); + Number length = (Number) attributes.get("size"); + if (length == null) { + length = 0L; + } + String lengthString = formatLength(length); + @SuppressWarnings("unchecked") + Set<PosixFilePermission> perms = (Set<PosixFilePermission>) attributes.get("permissions"); + if (perms == null) { + perms = EnumSet.noneOf(PosixFilePermission.class); + } + return (is("isDirectory") ? "d" : (is("isSymbolicLink") ? "l" : (is("isOther") ? "o" : "-"))) + + PosixFilePermissions.toString(perms) + " " + + String.format( + "%3s", + (attributes.containsKey("nlink") + ? attributes.get("nlink").toString() + : "1")) + + " " + username + " " + group + " " + lengthString + " " + + toString((FileTime) attributes.get("lastModifiedTime")) + + " " + display(); + } + + private String getUsername() { + String username = attributes.containsKey("owner") ? Objects.toString(attributes.get("owner"), null) : "owner"; + if (username.length() > 8) { + username = username.substring(0, 8); + } else { + username = String.format("%-8s", username); + } + return username; + } + + private String getGroup() { + String group = attributes.containsKey("group") ? Objects.toString(attributes.get("group"), null) : "group"; + if (group.length() > 8) { + group = group.substring(0, 8); + } else { + group = String.format("%-8s", group); + } + return group; + } + + private String formatLength(Number length) { + double l = length.longValue(); + String unit = "B"; + if (l >= 1000) { + l /= 1024; + unit = "K"; + if (l >= 1000) { + l /= 1024; + unit = "M"; + if (l >= 1000) { + l /= 1024; + unit = "T"; + } + } + } + if (l < 10 && length.longValue() > 1000) { + return String.format("%.1f%s", l, unit); + } else { + return String.format("%3.0f%s", l, unit); + } + } + + protected String toString(FileTime time) { + long millis = (time != null) ? time.toMillis() : -1L; + if (millis < 0L) { + return "------------"; + } + ZonedDateTime dt = Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()); + if (System.currentTimeMillis() - millis < 183L * 24L * 60L * 60L * 1000L) { + return DateTimeFormatter.ofPattern("MMM ppd HH:mm").format(dt); + } else { + return DateTimeFormatter.ofPattern("MMM ppd yyyy").format(dt); + } + } + + protected Map<String, Object> readAttributes(Path path) { + Map<String, Object> attrs = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + for (String view : path.getFileSystem().supportedFileAttributeViews()) { + try { + Map<String, Object> ta = Files.readAttributes(path, view + ":*", LinkOption.NOFOLLOW_LINKS); + ta.forEach(attrs::putIfAbsent); + } catch (IOException e) { + // Ignore + } + } + attrs.computeIfAbsent("isExecutable", s -> Files.isExecutable(path)); + attrs.computeIfAbsent("permissions", s -> getPermissionsFromFile(path.toFile())); + return attrs; + } + + static Set<PosixFilePermission> getPermissionsFromFile(File f) { + Set<PosixFilePermission> perms = EnumSet.noneOf(PosixFilePermission.class); + if (f.canRead()) { + perms.add(PosixFilePermission.OWNER_READ); + perms.add(PosixFilePermission.GROUP_READ); + perms.add(PosixFilePermission.OTHERS_READ); + } + if (f.canWrite()) { + perms.add(PosixFilePermission.OWNER_WRITE); + perms.add(PosixFilePermission.GROUP_WRITE); + perms.add(PosixFilePermission.OTHERS_WRITE); + } + if (f.canExecute()) { + perms.add(PosixFilePermission.OWNER_EXECUTE); + perms.add(PosixFilePermission.GROUP_EXECUTE); + perms.add(PosixFilePermission.OTHERS_EXECUTE); + } + return perms; + } +} diff --git a/src/test/java/org/apache/maven/buildcache/its/RemoteCacheDavTest.java b/src/test/java/org/apache/maven/buildcache/its/RemoteCacheDavTest.java index dcdac3a..534af22 100644 --- a/src/test/java/org/apache/maven/buildcache/its/RemoteCacheDavTest.java +++ b/src/test/java/org/apache/maven/buildcache/its/RemoteCacheDavTest.java @@ -18,26 +18,12 @@ */ package org.apache.maven.buildcache.its; -import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; -import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.Paths; -import java.nio.file.attribute.FileTime; -import java.nio.file.attribute.PosixFilePermission; -import java.nio.file.attribute.PosixFilePermissions; -import java.time.Instant; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; import java.util.Arrays; -import java.util.EnumSet; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.TreeMap; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.regex.Pattern; @@ -285,191 +271,10 @@ private String error(Path directory, String cache, boolean shouldHave) { } private static void ls(Path currentDir, Consumer<String> out) throws IOException { - class PathEntry implements Comparable<PathEntry> { - - final Path abs; - final Path path; - final Map<String, Object> attributes; - - public PathEntry(Path abs, Path root) { - this.abs = abs; - this.path = abs.startsWith(root) ? root.relativize(abs) : abs; - this.attributes = readAttributes(abs); - } - - @Override - public int compareTo(PathEntry o) { - return path.toString().compareTo(o.path.toString()); - } - - boolean isNotDirectory() { - return is("isRegularFile") || is("isSymbolicLink") || is("isOther"); - } - - boolean isDirectory() { - return is("isDirectory"); - } - - private boolean is(String attr) { - Object d = attributes.get(attr); - return d instanceof Boolean && (Boolean) d; - } - - String display() { - String suffix; - String link = ""; - if (is("isSymbolicLink")) { - suffix = "@"; - try { - Path l = Files.readSymbolicLink(abs); - link = " -> " + l.toString(); - } catch (IOException e) { - // ignore - } - } else if (is("isDirectory")) { - suffix = "/"; - } else if (is("isExecutable")) { - suffix = "*"; - } else if (is("isOther")) { - suffix = ""; - } else { - suffix = ""; - } - return path.toString() + suffix + link; - } - - String longDisplay() { - String username; - if (attributes.containsKey("owner")) { - username = Objects.toString(attributes.get("owner"), null); - } else { - username = "owner"; - } - if (username.length() > 8) { - username = username.substring(0, 8); - } else { - for (int i = username.length(); i < 8; i++) { - username = username + " "; - } - } - String group; - if (attributes.containsKey("group")) { - group = Objects.toString(attributes.get("group"), null); - } else { - group = "group"; - } - if (group.length() > 8) { - group = group.substring(0, 8); - } else { - for (int i = group.length(); i < 8; i++) { - group = group + " "; - } - } - Number length = (Number) attributes.get("size"); - if (length == null) { - length = 0L; - } - String lengthString; - if (true /*opt.isSet("h")*/) { - double l = length.longValue(); - String unit = "B"; - if (l >= 1000) { - l /= 1024; - unit = "K"; - if (l >= 1000) { - l /= 1024; - unit = "M"; - if (l >= 1000) { - l /= 1024; - unit = "T"; - } - } - } - if (l < 10 && length.longValue() > 1000) { - lengthString = String.format("%.1f", l) + unit; - } else { - lengthString = String.format("%3.0f", l) + unit; - } - } else { - lengthString = String.format("%1$8s", length); - } - @SuppressWarnings("unchecked") - Set<PosixFilePermission> perms = (Set<PosixFilePermission>) attributes.get("permissions"); - if (perms == null) { - perms = EnumSet.noneOf(PosixFilePermission.class); - } - // TODO: all fields should be padded to align - return (is("isDirectory") ? "d" : (is("isSymbolicLink") ? "l" : (is("isOther") ? "o" : "-"))) - + PosixFilePermissions.toString(perms) + " " - + String.format( - "%3s", - (attributes.containsKey("nlink") - ? attributes.get("nlink").toString() - : "1")) - + " " + username + " " + group + " " + lengthString + " " - + toString((FileTime) attributes.get("lastModifiedTime")) - + " " + display(); - } - - protected String toString(FileTime time) { - long millis = (time != null) ? time.toMillis() : -1L; - if (millis < 0L) { - return "------------"; - } - ZonedDateTime dt = Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()); - // Less than six months - if (System.currentTimeMillis() - millis < 183L * 24L * 60L * 60L * 1000L) { - return DateTimeFormatter.ofPattern("MMM ppd HH:mm").format(dt); - } - // Older than six months - else { - return DateTimeFormatter.ofPattern("MMM ppd yyyy").format(dt); - } - } - - protected Map<String, Object> readAttributes(Path path) { - Map<String, Object> attrs = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - for (String view : path.getFileSystem().supportedFileAttributeViews()) { - try { - Map<String, Object> ta = Files.readAttributes(path, view + ":*", LinkOption.NOFOLLOW_LINKS); - ta.forEach(attrs::putIfAbsent); - } catch (IOException e) { - // Ignore - } - } - attrs.computeIfAbsent("isExecutable", s -> Files.isExecutable(path)); - attrs.computeIfAbsent("permissions", s -> getPermissionsFromFile(path.toFile())); - return attrs; - } - } - Files.walk(currentDir) .map(p -> new PathEntry(p, currentDir)) .sorted() .map(PathEntry::longDisplay) .forEach(out); } - - private static Set<PosixFilePermission> getPermissionsFromFile(File f) { - Set<PosixFilePermission> perms = EnumSet.noneOf(PosixFilePermission.class); - if (f.canRead()) { - perms.add(PosixFilePermission.OWNER_READ); - perms.add(PosixFilePermission.GROUP_READ); - perms.add(PosixFilePermission.OTHERS_READ); - } - - if (f.canWrite()) { - perms.add(PosixFilePermission.OWNER_WRITE); - perms.add(PosixFilePermission.GROUP_WRITE); - perms.add(PosixFilePermission.OTHERS_WRITE); - } - - if (f.canExecute() /*|| (OSUtils.IS_WINDOWS && isWindowsExecutable(f.getName()))*/) { - perms.add(PosixFilePermission.OWNER_EXECUTE); - perms.add(PosixFilePermission.GROUP_EXECUTE); - perms.add(PosixFilePermission.OTHERS_EXECUTE); - } - - return perms; - } } diff --git a/src/test/java/org/apache/maven/buildcache/xml/XmlServiceTest.java b/src/test/java/org/apache/maven/buildcache/xml/XmlServiceTest.java index e9a9172..c434a9b 100644 --- a/src/test/java/org/apache/maven/buildcache/xml/XmlServiceTest.java +++ b/src/test/java/org/apache/maven/buildcache/xml/XmlServiceTest.java @@ -19,20 +19,12 @@ package org.apache.maven.buildcache.xml; import javax.xml.XMLConstants; -import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; -import java.io.InputStream; - -import org.apache.maven.buildcache.xml.build.Build; -import org.apache.maven.buildcache.xml.config.CacheConfig; -import org.apache.maven.buildcache.xml.diff.Diff; -import org.apache.maven.buildcache.xml.report.CacheReport; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; public class XmlServiceTest { @@ -44,12 +36,6 @@ public void testConfig() throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setSchema(schema); - DocumentBuilder db = dbf.newDocumentBuilder(); - Document doc = db.parse( - getClass().getResource("build-cache-config-instance.xml").toString()); - - InputStream is = getClass().getResourceAsStream("build-cache-config-instance.xml"); - final CacheConfig cache = new XmlService().loadCacheConfig(is); } @Test @@ -60,12 +46,6 @@ public void testReport() throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setSchema(schema); - DocumentBuilder db = dbf.newDocumentBuilder(); - Document doc = db.parse( - getClass().getResource("build-cache-report-instance.xml").toString()); - - InputStream is = getClass().getResourceAsStream("build-cache-report-instance.xml"); - final CacheReport cacheReport = new XmlService().loadCacheReport(is); } @Test @@ -76,12 +56,6 @@ public void testBuild() throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setSchema(schema); - DocumentBuilder db = dbf.newDocumentBuilder(); - Document doc = db.parse( - getClass().getResource("build-cache-build-instance.xml").toString()); - - InputStream is = getClass().getResourceAsStream("build-cache-build-instance.xml"); - final Build build = new XmlService().loadBuild(is); } @Test @@ -92,11 +66,5 @@ public void testDiff() throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setSchema(schema); - DocumentBuilder db = dbf.newDocumentBuilder(); - Document doc = - db.parse(getClass().getResource("build-cache-diff-instance.xml").toString()); - - InputStream is = getClass().getResourceAsStream("build-cache-diff-instance.xml"); - final Diff buildDiff = new XmlService().loadDiff(is); } }