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