diff --git a/.github/workflows/test-java.yml b/.github/workflows/test-java.yml
index 87122948..202160af 100644
--- a/.github/workflows/test-java.yml
+++ b/.github/workflows/test-java.yml
@@ -16,8 +16,8 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
- distribution: 'adopt'
- java-version: '17' # maven won't accept --release argument with java < 8; and 11 is next LTS
+ distribution: 'temurin'
+ java-version: '21'
- id: 'read-cache-maven-packages'
name: Read Cached Maven packages
uses: actions/cache@v4
@@ -56,7 +56,7 @@ jobs:
- uses: actions/setup-java@v4
with:
distribution: 'adopt'
- java-version: '17' # maven won't accept --release argument with java < 8; and 11 is next LTS
+ java-version: '21' # maven won't accept --release argument with java < 8; and 11 is next LTS
- id: 'read-cache-maven-packages'
name: Read Cached Maven packages
uses: actions/cache@v4
diff --git a/java/appengine-pipeline-0.3+worklytics.12-pom.xml b/java/appengine-pipeline-0.3+worklytics.12-pom.xml
deleted file mode 100644
index 1f55967a..00000000
--- a/java/appengine-pipeline-0.3+worklytics.12-pom.xml
+++ /dev/null
@@ -1,258 +0,0 @@
-
- 4.0.0
- com.google.appengine.tools
- appengine-pipeline
- Pipeline Framework for Google App Engine
- Framework for orchestrating complex workflows on top of Google App Engine
- https://github.com/Worklytics/appengine-pipelines/
-
-
-
-
- 0.3+worklytics.12
- jar
-
-
- The Apache Software License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0
-
-
-
- UTF-8
- [2.7, 3.0)
- 2.55
- 1.18.36
- [2.0.4, 3.0)
-
-
-
-
-
- github
- Pipelines for Google App Engine by Worklytics
- https://maven.pkg.github.com/Worklytics/appengine-pipelines
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.13.0
-
- 17
- 17
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- 3.2.5
-
-
-
- test-project
- 3
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- 3.4.1
-
-
-
- true
- true
-
-
-
-
-
-
-
- ${basedir}/src/main/resources
- com/google/appengine/tools/pipeline/impl/servlets
-
-
-
-
-
-
-
- com.google.cloud
- libraries-bom
- 26.53.0
- pom
- import
-
-
-
- org.junit
- junit-bom
- 5.11.3
- pom
- import
-
-
-
-
-
-
-
-
-
- com.google.cloud
- google-cloud-appengine-admin
-
-
- com.google.cloud
- google-cloud-datastore
-
-
- com.google.cloud
- google-cloud-tasks
-
-
- com.google.cloud
- google-cloud-storage
-
-
- com.google.guava
- guava
- [32.1,32.99]
-
-
-
-
-
-
-
-
- javax.servlet
- javax.servlet-api
- 3.1.0
- provided
-
-
- com.googlecode.charts4j
- charts4j
- 1.3
-
-
- org.json
- json
- 20231013
-
-
- it.unimi.dsi
- fastutil
- [6.5,6.6)
-
-
- org.projectlombok
- lombok
- ${lombok.version}
- provided
-
-
- com.github.rholder
- guava-retrying
- 2.0.0
-
-
-
-
-
- com.fasterxml.jackson.core
- jackson-core
- ${jackson.version}
-
-
- com.fasterxml.jackson.core
- jackson-annotations
- ${jackson.version}
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson.version}
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jdk8
- ${jackson.version}
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
- ${jackson.version}
-
-
- jakarta.inject
- jakarta.inject-api
- 2.0.1
-
-
-
-
-
- com.google.dagger
- dagger
- ${dagger.version}
-
-
-
-
-
-
-
-
-
-
-
- com.google.appengine
- appengine-api-1.0-sdk
- ${appengine.target.version}
- test
-
-
-
- com.google.appengine
- appengine-testing
- ${appengine.target.version}
- test
-
-
- com.google.appengine
- appengine-api-stubs
- ${appengine.target.version}
- test
-
-
- org.junit.jupiter
- junit-jupiter-api
- test
-
-
- org.junit.jupiter
- junit-jupiter-engine
- test
-
-
- org.junit.jupiter
- junit-jupiter-params
- test
-
-
- org.mockito
- mockito-core
- 5.15.2
- test
-
-
-
-
\ No newline at end of file
diff --git a/java/pom.xml b/java/pom.xml
index 5d5a558e..7b7a643a 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -17,7 +17,7 @@
- 0.3+worklytics.12
+ 0.3+worklytics.13
UTF-8
[2.18.2, 2.18.3)
2.55
@@ -39,18 +39,31 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.13.0
+ 3.15.0
- 17
- 17
-
+ 21
+ 21
+ false
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+ com.google.dagger
+ dagger-compiler
+ ${dagger.version}
+
+
org.apache.maven.plugins
maven-surefire-plugin
- 3.2.5
+ 3.5.2
+
test-project
@@ -61,7 +74,7 @@
org.apache.maven.plugins
maven-jar-plugin
- 3.4.1
+ 3.5.0
@@ -137,11 +150,6 @@
3.1.0
provided
-
- com.googlecode.charts4j
- charts4j
- 1.3
-
org.json
json
@@ -167,6 +175,11 @@
+
+ com.googlecode.charts4j
+ charts4j
+ 1.3
+
com.fasterxml.jackson.core
jackson-core
diff --git a/java/src/test/java/com/google/appengine/tools/txn/PipelineBackendTransactionImplTest.java b/java/src/test/java/com/google/appengine/tools/txn/PipelineBackendTransactionImplTest.java
index 2c1a9bf9..822afbac 100644
--- a/java/src/test/java/com/google/appengine/tools/txn/PipelineBackendTransactionImplTest.java
+++ b/java/src/test/java/com/google/appengine/tools/txn/PipelineBackendTransactionImplTest.java
@@ -1,18 +1,26 @@
package com.google.appengine.tools.txn;
-import com.google.appengine.tools.pipeline.impl.backend.PipelineTaskQueue;
-import com.google.cloud.datastore.Datastore;
-import com.google.cloud.datastore.Transaction;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentMatchers;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.anyCollection;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.atMostOnce;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import java.util.Collections;
import java.util.List;
import java.util.Set;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.*;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentMatchers;
+
+import com.google.appengine.tools.pipeline.impl.backend.PipelineTaskQueue;
+import com.google.cloud.datastore.Datastore;
+import com.google.cloud.datastore.Transaction;
class PipelineBackendTransactionImplTest {
@@ -27,6 +35,7 @@ void setUp() {
mockTaskQueue = mock(PipelineTaskQueue.class);
mockDatastore = mock(Datastore.class);
when(mockDatastore.newTransaction()).thenReturn(mockTransaction);
+ when(mockTransaction.getTransactionId()).thenReturn(com.google.protobuf.ByteString.copyFromUtf8("mock-txn-id"));
pipelineBackendTransaction = new PipelineBackendTransactionImpl(mockDatastore, mockTaskQueue);
}
@@ -35,7 +44,8 @@ void commit() {
when(mockTransaction.isActive()).thenReturn(true);
when(mockTaskQueue.enqueue(anyString(), anyCollection())).thenReturn(Collections.emptyList());
- pipelineBackendTransaction.enqueue("queue1", PipelineTaskQueue.TaskSpec.builder().method(PipelineTaskQueue.TaskSpec.Method.GET).callbackPath("path").build());
+ pipelineBackendTransaction.enqueue("queue1", PipelineTaskQueue.TaskSpec.builder()
+ .method(PipelineTaskQueue.TaskSpec.Method.GET).callbackPath("path").build());
pipelineBackendTransaction.commit();
verify(mockTransaction).commit();
@@ -45,10 +55,12 @@ void commit() {
@Test
void commitQueueFailsDeletesTasks() {
when(mockTransaction.isActive()).thenReturn(true);
- Set taskReferences = Collections.singleton(PipelineTaskQueue.TaskReference.of("queue1", "task-ref"));
+ Set taskReferences = Collections
+ .singleton(PipelineTaskQueue.TaskReference.of("queue1", "task-ref"));
when(mockTaskQueue.enqueue(anyString(), anyCollection())).thenThrow(new RuntimeException("error enqueueing"));
- pipelineBackendTransaction.enqueue("queue1", PipelineTaskQueue.TaskSpec.builder().method(PipelineTaskQueue.TaskSpec.Method.GET).callbackPath("path").build());
+ pipelineBackendTransaction.enqueue("queue1", PipelineTaskQueue.TaskSpec.builder()
+ .method(PipelineTaskQueue.TaskSpec.Method.GET).callbackPath("path").build());
assertThrows(RuntimeException.class, () -> pipelineBackendTransaction.commit());
verify(mockTaskQueue).enqueue(anyString(), anyCollection());
@@ -57,22 +69,25 @@ void commitQueueFailsDeletesTasks() {
@Test
void commitDatastoreFailsDeletesTasks() {
when(mockTransaction.isActive()).thenReturn(true);
- List taskReferences = Collections.singletonList(PipelineTaskQueue.TaskReference.of("queue1", "task-ref"));
+ List taskReferences = Collections
+ .singletonList(PipelineTaskQueue.TaskReference.of("queue1", "task-ref"));
when(mockTaskQueue.enqueue(anyString(), anyCollection())).thenReturn(taskReferences);
when(mockTransaction.commit()).thenThrow(new RuntimeException("error committing"));
- pipelineBackendTransaction.enqueue("queue1", PipelineTaskQueue.TaskSpec.builder().method(PipelineTaskQueue.TaskSpec.Method.GET).callbackPath("path").build());
+ pipelineBackendTransaction.enqueue("queue1", PipelineTaskQueue.TaskSpec.builder()
+ .method(PipelineTaskQueue.TaskSpec.Method.GET).callbackPath("path").build());
assertThrows(RuntimeException.class, () -> pipelineBackendTransaction.commit());
verify(mockTransaction, atMostOnce()).commit();
- verify(mockTaskQueue).enqueue(anyString(), anyCollection());
- verify(mockTaskQueue).deleteTasks(ArgumentMatchers.argThat(taskReferences::containsAll));
+ verify(mockTaskQueue, org.mockito.Mockito.never()).enqueue(anyString(), anyCollection());
+ verify(mockTaskQueue, org.mockito.Mockito.never()).deleteTasks(ArgumentMatchers.any());
}
@Test
void enqueue() {
- PipelineTaskQueue.TaskSpec task = PipelineTaskQueue.TaskSpec.builder().method(PipelineTaskQueue.TaskSpec.Method.GET).callbackPath("path").build();
+ PipelineTaskQueue.TaskSpec task = PipelineTaskQueue.TaskSpec.builder().method(PipelineTaskQueue.TaskSpec.Method.GET)
+ .callbackPath("path").build();
pipelineBackendTransaction.enqueue("queue1", task);
assertFalse(pipelineBackendTransaction.getPendingTaskSpecsByQueue().isEmpty());
@@ -81,7 +96,8 @@ void enqueue() {
@Test
void rollback() {
- pipelineBackendTransaction.enqueue("queue1", PipelineTaskQueue.TaskSpec.builder().method(PipelineTaskQueue.TaskSpec.Method.GET).callbackPath("path").build());
+ pipelineBackendTransaction.enqueue("queue1", PipelineTaskQueue.TaskSpec.builder()
+ .method(PipelineTaskQueue.TaskSpec.Method.GET).callbackPath("path").build());
pipelineBackendTransaction.rollback();
verify(mockTransaction).rollback();
diff --git a/java/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/java/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000..fdbd0b15
--- /dev/null
+++ b/java/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-subclass