Skip to content

Commit c3e5f5a

Browse files
authored
add end2end test case for retry task (#156)
add end2end test for retry task
1 parent 34d0315 commit c3e5f5a

File tree

3 files changed

+67
-1
lines changed

3 files changed

+67
-1
lines changed

azurefunctions/src/main/java/com/microsoft/durabletask/azurefunctions/DurableClientContext.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ public HttpResponseMessage waitForCompletionOrCreateCheckStatusResponse(
100100
* @see <a href="https://learn.microsoft.com/java/api/com.microsoft.azure.functions.httpresponsemessage">HttpResponseMessage</a>
101101
* contains HTTP API URLs that can be used to query the status of the orchestration, raise events to the orchestration, or
102102
* terminate the orchestration.
103-
* </p>
104103
* @param request the HTTP request that triggered the current orchestration instance
105104
* @param instanceId the ID of the orchestration instance to check
106105
* @return an HTTP 202 response with a Location header and a payload containing instance control URLs
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.functions;
2+
3+
import com.microsoft.azure.functions.ExecutionContext;
4+
import com.microsoft.azure.functions.HttpMethod;
5+
import com.microsoft.azure.functions.HttpRequestMessage;
6+
import com.microsoft.azure.functions.HttpResponseMessage;
7+
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
8+
import com.microsoft.azure.functions.annotation.FunctionName;
9+
import com.microsoft.azure.functions.annotation.HttpTrigger;
10+
import com.microsoft.durabletask.DurableTaskClient;
11+
import com.microsoft.durabletask.RetryPolicy;
12+
import com.microsoft.durabletask.TaskOptions;
13+
import com.microsoft.durabletask.TaskOrchestrationContext;
14+
import com.microsoft.durabletask.azurefunctions.DurableActivityTrigger;
15+
import com.microsoft.durabletask.azurefunctions.DurableClientContext;
16+
import com.microsoft.durabletask.azurefunctions.DurableClientInput;
17+
import com.microsoft.durabletask.azurefunctions.DurableOrchestrationTrigger;
18+
19+
import java.time.Duration;
20+
import java.util.Optional;
21+
import java.util.concurrent.atomic.AtomicBoolean;
22+
23+
public class RetriableTask {
24+
private static final AtomicBoolean exceptionThrew = new AtomicBoolean(false);
25+
@FunctionName("RetriableOrchestration")
26+
public HttpResponseMessage retriableOrchestration(
27+
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
28+
@DurableClientInput(name = "durableContext") DurableClientContext durableContext,
29+
final ExecutionContext context) {
30+
context.getLogger().info("Java HTTP trigger processed a request.");
31+
32+
DurableTaskClient client = durableContext.getClient();
33+
String instanceId = client.scheduleNewOrchestrationInstance("RetriableTask");
34+
context.getLogger().info("Created new Java orchestration with instance ID = " + instanceId);
35+
return durableContext.createCheckStatusResponse(request, instanceId);
36+
}
37+
38+
@FunctionName("RetriableTask")
39+
public String retriableTask(
40+
@DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
41+
RetryPolicy retryPolicy = new RetryPolicy(2, Duration.ofSeconds(1));
42+
TaskOptions taskOptions = new TaskOptions(retryPolicy);
43+
return ctx.callActivity("Append", "Test-Input", taskOptions, String.class).await();
44+
}
45+
46+
@FunctionName("Append")
47+
public String append(
48+
@DurableActivityTrigger(name = "name") String name,
49+
final ExecutionContext context) {
50+
if (!exceptionThrew.get()) {
51+
exceptionThrew.compareAndSet(false, true);
52+
throw new RuntimeException("Test for retry");
53+
}
54+
context.getLogger().info("Append: " + name);
55+
return name + "-test";
56+
}
57+
}

samples-azure-functions/src/test/java/com/functions/EndToEndTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ public void basicChain() throws InterruptedException {
4242
assertTrue(pass);
4343
}
4444

45+
@Test
46+
public void retryTest() throws InterruptedException {
47+
String startOrchestrationPath = "/api/RetriableOrchestration";
48+
Response response = post(startOrchestrationPath);
49+
JsonPath jsonPath = response.jsonPath();
50+
String statusQueryGetUri = jsonPath.get("statusQueryGetUri");
51+
boolean pass = pollingCheck(statusQueryGetUri, "Completed", null, Duration.ofSeconds(10));
52+
assertTrue(pass);
53+
}
54+
4555
@Test
4656
public void continueAsNew() throws InterruptedException {
4757
String startOrchestrationPath = "api/ContinueAsNew";

0 commit comments

Comments
 (0)