This is an automated email from the ASF dual-hosted git repository.

stariy95 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/master by this push:
     new e2b101e17 CAY-2990 Gradle plugin tests are failing on Windows
e2b101e17 is described below

commit e2b101e17c10a5df8b61d0daad7850cff68569d6
Author: ntimofeev <[email protected]>
AuthorDate: Tue Aug 18 12:57:57 2026 +0300

    CAY-2990 Gradle plugin tests are failing on Windows
---
 RELEASE-NOTES.txt                                  |  1 +
 cayenne-gradle-plugin/build.gradle                 |  2 +
 cayenne-gradle-plugin/pom.xml                      |  2 +-
 .../java/org/apache/cayenne/tools/BaseTaskIT.java  | 63 ++++++++++++++++------
 .../org/apache/cayenne/tools/DbGenerateTaskIT.java |  5 +-
 .../java/org/apache/cayenne/tools/DbImportIT.java  |  8 +--
 .../org/apache/cayenne/tools/cdbgen_custom.gradle  |  2 +-
 .../tools/dbimport-with-project-dependency.gradle  |  2 +-
 .../apache/cayenne/tools/dbimport_empty_db.gradle  |  2 +-
 9 files changed, 63 insertions(+), 24 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 1460353da..166cf3c13 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -53,6 +53,7 @@ CAY-2973 Exception trying to copy/paste a callback
 CAY-2976 Exception creating a relationship for an Incomplete ObjEntity
 CAY-2977 DbImport confused by multi-key relationships
 CAY-2988 Iterated queries commit transactions they don't own
+CAY-2990 Gradle plugin tests are failing on Windows
 
 ----------------------------------
 Release: 5.0-M2
diff --git a/cayenne-gradle-plugin/build.gradle 
b/cayenne-gradle-plugin/build.gradle
index 74097ff5d..9c6deb7f8 100644
--- a/cayenne-gradle-plugin/build.gradle
+++ b/cayenne-gradle-plugin/build.gradle
@@ -49,6 +49,8 @@ dependencies {
 
 test {
     useJUnitPlatform()
+    systemProperty 'cayenne.testProjectsDir', 
layout.buildDirectory.dir('test-projects').get().asFile.absolutePath
+    systemProperty 'derby.stream.error.file', 
layout.buildDirectory.file('derby.log').get().asFile.absolutePath
 }
 
 def projectVersion = getProjectVersion()
diff --git a/cayenne-gradle-plugin/pom.xml b/cayenne-gradle-plugin/pom.xml
index 9c7bf168c..c0c900c90 100644
--- a/cayenne-gradle-plugin/pom.xml
+++ b/cayenne-gradle-plugin/pom.xml
@@ -46,7 +46,7 @@
                 </os>
             </activation>
             <properties>
-                <gradle.executable>gradlew.bat</gradle.executable>
+                <gradle.executable>.\gradlew.bat</gradle.executable>
             </properties>
         </profile>
         <profile>
diff --git 
a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/BaseTaskIT.java 
b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/BaseTaskIT.java
index 3691e40d3..02778eec0 100644
--- 
a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/BaseTaskIT.java
+++ 
b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/BaseTaskIT.java
@@ -21,38 +21,72 @@ package org.apache.cayenne.tools;
 
 import java.io.File;
 import java.io.IOException;
-import java.net.URISyntaxException;
-import java.nio.file.FileSystems;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Comparator;
 import java.util.List;
+import java.util.stream.Stream;
 
 import org.gradle.testkit.runner.GradleRunner;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.io.TempDir;
 
 public class BaseTaskIT {
 
-    @TempDir
-    protected File tempFolder;
+    /**
+     * Tear-down Derby logic, appended to every build script under test.
+     */
+    private static final String DERBY_SHUTDOWN = """
+
+            tasks.configureEach { t ->
+                t.doLast {
+                    try {
+                        new org.apache.derby.jdbc.EmbeddedDriver()
+                                .connect('jdbc:derby:;shutdown=true', new 
Properties())
+                    } catch (java.sql.SQLException expected) {
+                        // Derby reports a successful shutdown by throwing 
(XJ015 / 08006)
+                    }
+                }
+            }
+            """;
 
     protected File projectDir;
 
     @BeforeEach
     public void createProjectDir() throws IOException {
-        projectDir = tempFolder;
+        String root = System.getProperty("cayenne.testProjectsDir", 
System.getProperty("java.io.tmpdir"));
+        projectDir = 
Files.createTempDirectory(Files.createDirectories(Path.of(root)), "p").toFile();
+
+        // Gradle still searches parent directories for a settings file. 
Without one of our own the
+        // nested build would find and evaluate the settings script of the 
plugin module itself.
+        Files.writeString(projectDir.toPath().resolve("settings.gradle"),
+                "rootProject.name = '" + projectDir.getName() + "'\n");
+    }
+
+    @AfterEach
+    public void deleteProjectDir() {
+        try (Stream<Path> paths = Files.walk(projectDir.toPath())) {
+            paths.sorted(Comparator.reverseOrder()).forEach(path -> {
+                try {
+                    Files.deleteIfExists(path);
+                } catch (IOException ignored) {
+                }
+            });
+        } catch (IOException ignored) {
+        }
     }
 
     protected GradleRunner createRunner(String projectName, String... args) 
throws Exception {
         prepareBuildScript(projectName);
         prepareDataMap(args);
 
-        List<String> gradleArguments = new ArrayList<>();
-        gradleArguments.addAll(Arrays.asList(args));
+        List<String> gradleArguments = new ArrayList<>(Arrays.asList(args));
         gradleArguments.add("--stacktrace");
+        // move the Derby log out of the module root
+        gradleArguments.add("-Dderby.stream.error.file=" + new 
File(projectDir, "derby.log").getAbsolutePath());
 
         return GradleRunner.create()
                 .withProjectDir(projectDir)
@@ -61,9 +95,9 @@ public class BaseTaskIT {
     }
 
     private void prepareBuildScript(String name) throws Exception {
-        Path src = new File(getClass().getResource(name + 
".gradle").toURI()).toPath();
-        Path dst = 
FileSystems.getDefault().getPath(projectDir.getAbsolutePath(), "build.gradle");
-        Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);
+        Path src = Path.of(getClass().getResource(name + ".gradle").toURI());
+        Path dst = projectDir.toPath().resolve("build.gradle");
+        Files.writeString(dst, Files.readString(src) + DERBY_SHUTDOWN);
     }
 
     private void prepareDataMap(String... args) throws Exception {
@@ -71,11 +105,10 @@ public class BaseTaskIT {
         for(String arg : args) {
             if(arg.startsWith(pattern)) {
                 String path = arg.substring(pattern.length());
-                Path src = new 
File(getClass().getResource(path).toURI()).toPath();
-                Path dst = 
FileSystems.getDefault().getPath(projectDir.getAbsolutePath(), path);
+                Path src = Path.of(getClass().getResource(path).toURI());
+                Path dst = projectDir.toPath().resolve(path);
                 Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);
             }
         }
-
     }
-}
\ No newline at end of file
+}
diff --git 
a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbGenerateTaskIT.java
 
b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbGenerateTaskIT.java
index adb6a457b..3d14d73b5 100644
--- 
a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbGenerateTaskIT.java
+++ 
b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbGenerateTaskIT.java
@@ -46,7 +46,7 @@ public class DbGenerateTaskIT extends BaseTaskIT {
 
     @Test
     public void defaultConfigTaskSuccess() throws Exception {
-        String dbUrl = "jdbc:derby:build/testdb";
+        String dbUrl = "jdbc:derby:" + projectDir.getAbsolutePath() + 
"/build/testdb";
 
         GradleRunner runner = createRunner(
                 "cdbgen_simple",
@@ -75,9 +75,12 @@ public class DbGenerateTaskIT extends BaseTaskIT {
 
     @Test
     public void customConfigTaskSuccess() throws Exception {
+        String dbUrl = "jdbc:derby:" + projectDir.getAbsolutePath() + 
"/build/testdb;create=true";
+
         GradleRunner runner = createRunner(
                 "cdbgen_custom",
                 "customCdbgen",
+                "-PdbUrl=" + dbUrl,
                 "-PdataMap=test_datamap.map.xml",
                 "--info"
         );
diff --git 
a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbImportIT.java 
b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbImportIT.java
index b95c46b7a..3671d93f2 100644
--- 
a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbImportIT.java
+++ 
b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbImportIT.java
@@ -55,8 +55,8 @@ public class DbImportIT extends BaseTaskIT {
 
     @Test
     public void emptyDbTaskSuccess() throws Exception {
-        prepareDerbyDatabase("empty_db"); // create empty db to avoid problems 
on Java 11
-        GradleRunner runner = createRunner("dbimport_empty_db", "cdbimport", 
"--info");
+        String dbUrl = prepareDerbyDatabase("empty_db");
+        GradleRunner runner = createRunner("dbimport_empty_db", "cdbimport", 
"--info", "-PdbUrl=" + dbUrl);
 
         BuildResult result = runner.build();
 
@@ -70,8 +70,8 @@ public class DbImportIT extends BaseTaskIT {
 
     @Test
     public void emptyDbTaskWithDependency() throws Exception {
-        prepareDerbyDatabase("empty_db"); // create empty db to avoid problems 
on Java 11
-        GradleRunner runner = createRunner("dbimport-with-project-dependency", 
"cdbimport", "--info");
+        String dbUrl = prepareDerbyDatabase("empty_db");
+        GradleRunner runner = createRunner("dbimport-with-project-dependency", 
"cdbimport", "--info", "-PdbUrl=" + dbUrl);
 
         BuildResult result = runner.build();
 
diff --git 
a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cdbgen_custom.gradle
 
b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cdbgen_custom.gradle
index 179aa2bc4..aadd8011e 100644
--- 
a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cdbgen_custom.gradle
+++ 
b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cdbgen_custom.gradle
@@ -29,7 +29,7 @@ task customCdbgen(type: cayenne.cdbgen) {
     dataSource {
         username 'sa'
         password ''
-        url 'jdbc:derby:build/testdb;create=true'
+        url dbUrl
         driver 'org.apache.derby.jdbc.EmbeddedDriver'
     }
 
diff --git 
a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/dbimport-with-project-dependency.gradle
 
b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/dbimport-with-project-dependency.gradle
index 1d7d0603e..4cdff6eb7 100644
--- 
a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/dbimport-with-project-dependency.gradle
+++ 
b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/dbimport-with-project-dependency.gradle
@@ -29,7 +29,7 @@ cdbimport {
     dataSource {
         username 'sa'
         password ''
-        url 'jdbc:derby:build/testdb;create=true'
+        url dbUrl
         driver 'org.apache.derby.jdbc.EmbeddedDriver'
     }
 }
diff --git 
a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/dbimport_empty_db.gradle
 
b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/dbimport_empty_db.gradle
index d17337045..20f362e01 100644
--- 
a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/dbimport_empty_db.gradle
+++ 
b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/dbimport_empty_db.gradle
@@ -29,7 +29,7 @@ cdbimport {
     dataSource {
         username 'sa'
         password ''
-        url 'jdbc:derby:build/testdb;create=true'
+        url dbUrl
         driver 'org.apache.derby.jdbc.EmbeddedDriver'
     }
 }
\ No newline at end of file

Reply via email to