From 7e46e5eb438d5ac1c64eef03a178908fca7c1104 Mon Sep 17 00:00:00 2001 From: Erik Schultink Date: Wed, 25 Feb 2026 06:04:28 -0800 Subject: [PATCH 1/4] bump version number; delete old pom --- ...pengine-pipeline-0.3+worklytics.12-pom.xml | 258 ------------------ java/pom.xml | 2 +- 2 files changed, 1 insertion(+), 259 deletions(-) delete mode 100644 java/appengine-pipeline-0.3+worklytics.12-pom.xml 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..009ef2ca 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 From c4a093339777be9eef159cabb595af27d5968721 Mon Sep 17 00:00:00 2001 From: Erik Schultink Date: Wed, 25 Feb 2026 06:13:17 -0800 Subject: [PATCH 2/4] bump to java21 --- .github/workflows/test-java.yml | 4 ++-- java/pom.xml | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-java.yml b/.github/workflows/test-java.yml index 87122948..3e43503f 100644 --- a/.github/workflows/test-java.yml +++ b/.github/workflows/test-java.yml @@ -17,7 +17,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 @@ -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/pom.xml b/java/pom.xml index 009ef2ca..5a8bc2bb 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -41,9 +41,8 @@ maven-compiler-plugin 3.13.0 - 17 - 17 - + 21 + 21 From 44771b083459a94506fc0f735d08c9578b6b52a2 Mon Sep 17 00:00:00 2001 From: Erik Schultink Date: Wed, 25 Feb 2026 06:25:16 -0800 Subject: [PATCH 3/4] cleanup workflow --- .github/workflows/test-java.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-java.yml b/.github/workflows/test-java.yml index 3e43503f..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: '21' # 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 From 8b2058040d0ed64df288a1080ce4b0d5c3634823 Mon Sep 17 00:00:00 2001 From: Erik Schultink Date: Wed, 25 Feb 2026 07:39:58 -0800 Subject: [PATCH 4/4] organize dependencies --- java/pom.xml | 30 ++++++++--- .../PipelineBackendTransactionImplTest.java | 50 ++++++++++++------- .../org.mockito.plugins.MockMaker | 1 + 3 files changed, 56 insertions(+), 25 deletions(-) create mode 100644 java/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/java/pom.xml b/java/pom.xml index 5a8bc2bb..7b7a643a 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -39,17 +39,31 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.15.0 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 @@ -60,7 +74,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.1 + 3.5.0 @@ -136,11 +150,6 @@ 3.1.0 provided - - com.googlecode.charts4j - charts4j - 1.3 - org.json json @@ -166,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