diff --git a/CHANGELOG.md b/CHANGELOG.md index f3551d3e..c3c9b43f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ## Unreleased +* Add getSuspendPostUri and getResumePostUri getters to HttpManagementPayload ([#264](https://github.com/microsoft/durabletask-java/pull/264)) * Adding rewind client API ([#253](https://github.com/microsoft/durabletask-java/pull/253)). Note: orchestration processing for rewind is supported with Azure Functions but not with the standalone `GrpcDurableTaskWorker`. * Add distributed tracing (OpenTelemetry) support with W3C Trace Context propagation ([#266](https://github.com/microsoft/durabletask-java/pull/266)) diff --git a/azurefunctions/src/main/java/com/microsoft/durabletask/azurefunctions/HttpManagementPayload.java b/azurefunctions/src/main/java/com/microsoft/durabletask/azurefunctions/HttpManagementPayload.java index dace60b7..663e7eb7 100644 --- a/azurefunctions/src/main/java/com/microsoft/durabletask/azurefunctions/HttpManagementPayload.java +++ b/azurefunctions/src/main/java/com/microsoft/durabletask/azurefunctions/HttpManagementPayload.java @@ -96,6 +96,24 @@ public String getRestartPostUri() { return restartPostUri; } + /** + * Gets the HTTP POST instance suspend endpoint. + * + * @return The HTTP URL for posting instance suspend commands. + */ + public String getSuspendPostUri() { + return this.suspendPostUri; + } + + /** + * Gets the HTTP POST instance resume endpoint. + * + * @return The HTTP URL for posting instance resume commands. + */ + public String getResumePostUri() { + return this.resumePostUri; + } + /** * Gets the HTTP POST instance rewind endpoint. * diff --git a/endtoendtests/build.gradle b/endtoendtests/build.gradle index da369c06..83ac7a74 100644 --- a/endtoendtests/build.gradle +++ b/endtoendtests/build.gradle @@ -32,6 +32,12 @@ targetCompatibility = '1.8' compileJava.options.encoding = 'UTF-8' +test { + useJUnitPlatform { + excludeTags 'e2e' + } +} + task endToEndTest(type: Test) { useJUnitPlatform { includeTags 'e2e' diff --git a/endtoendtests/src/test/java/com/functions/HttpManagementPayloadTest.java b/endtoendtests/src/test/java/com/functions/HttpManagementPayloadTest.java new file mode 100644 index 00000000..29e72236 --- /dev/null +++ b/endtoendtests/src/test/java/com/functions/HttpManagementPayloadTest.java @@ -0,0 +1,77 @@ +package com.functions; + +import com.microsoft.durabletask.azurefunctions.HttpManagementPayload; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * Unit tests for {@link HttpManagementPayload}. + */ +public class HttpManagementPayloadTest { + + private static final String INSTANCE_ID = "test-instance-id"; + private static final String INSTANCE_STATUS_URL = "http://localhost:7071/runtime/webhooks/durabletask/instances/test-instance-id"; + private static final String QUERY_STRING = "code=abc123"; + + private HttpManagementPayload createPayload() { + return new HttpManagementPayload(INSTANCE_ID, INSTANCE_STATUS_URL, QUERY_STRING); + } + + @Test + @DisplayName("getId should return the instance ID") + public void getId_ReturnsInstanceId() { + HttpManagementPayload payload = createPayload(); + assertEquals(INSTANCE_ID, payload.getId()); + } + + @Test + @DisplayName("getStatusQueryGetUri should return correct URL") + public void getStatusQueryGetUri_ReturnsCorrectUrl() { + HttpManagementPayload payload = createPayload(); + assertEquals(INSTANCE_STATUS_URL + "?" + QUERY_STRING, payload.getStatusQueryGetUri()); + } + + @Test + @DisplayName("getSendEventPostUri should return correct URL") + public void getSendEventPostUri_ReturnsCorrectUrl() { + HttpManagementPayload payload = createPayload(); + assertEquals(INSTANCE_STATUS_URL + "/raiseEvent/{eventName}?" + QUERY_STRING, payload.getSendEventPostUri()); + } + + @Test + @DisplayName("getTerminatePostUri should return correct URL") + public void getTerminatePostUri_ReturnsCorrectUrl() { + HttpManagementPayload payload = createPayload(); + assertEquals(INSTANCE_STATUS_URL + "/terminate?reason={text}&" + QUERY_STRING, payload.getTerminatePostUri()); + } + + @Test + @DisplayName("getPurgeHistoryDeleteUri should return correct URL") + public void getPurgeHistoryDeleteUri_ReturnsCorrectUrl() { + HttpManagementPayload payload = createPayload(); + assertEquals(INSTANCE_STATUS_URL + "?" + QUERY_STRING, payload.getPurgeHistoryDeleteUri()); + } + + @Test + @DisplayName("getRestartPostUri should return correct URL") + public void getRestartPostUri_ReturnsCorrectUrl() { + HttpManagementPayload payload = createPayload(); + assertEquals(INSTANCE_STATUS_URL + "/restart?" + QUERY_STRING, payload.getRestartPostUri()); + } + + @Test + @DisplayName("getSuspendPostUri should return correct URL") + public void getSuspendPostUri_ReturnsCorrectUrl() { + HttpManagementPayload payload = createPayload(); + assertEquals(INSTANCE_STATUS_URL + "/suspend?reason={text}&" + QUERY_STRING, payload.getSuspendPostUri()); + } + + @Test + @DisplayName("getResumePostUri should return correct URL") + public void getResumePostUri_ReturnsCorrectUrl() { + HttpManagementPayload payload = createPayload(); + assertEquals(INSTANCE_STATUS_URL + "/resume?reason={text}&" + QUERY_STRING, payload.getResumePostUri()); + } +}