2727import io .serverlessworkflow .impl .jackson .JsonUtils ;
2828import io .serverlessworkflow .impl .lifecycle .TaskCompletedEvent ;
2929import io .serverlessworkflow .impl .lifecycle .TaskRetriedEvent ;
30- import io .serverlessworkflow .impl .lifecycle .TraceExecutionListener ;
3130import io .serverlessworkflow .impl .lifecycle .WorkflowExecutionListener ;
3231import java .io .IOException ;
3332import java .time .Duration ;
3433import java .util .Map ;
35- import java .util .Set ;
3634import java .util .concurrent .CompletableFuture ;
3735import java .util .concurrent .ConcurrentHashMap ;
3836import okhttp3 .mockwebserver .MockResponse ;
@@ -55,11 +53,7 @@ void setUp() throws IOException {
5553 apiServer = new MockWebServer ();
5654 apiServer .start (9797 );
5755 retryListener = new RetryListener ();
58- app =
59- WorkflowApplication .builder ()
60- .withListener (retryListener )
61- .withListener (new TraceExecutionListener ())
62- .build ();
56+ app = WorkflowApplication .builder ().withListener (retryListener ).build ();
6357 }
6458
6559 @ AfterEach
@@ -71,15 +65,16 @@ void tearDown() throws IOException {
7165 private class RetryListener implements WorkflowExecutionListener {
7266
7367 private Map <String , Short > taskRetried = new ConcurrentHashMap <>();
74- private Set < Short > contexts = ConcurrentHashMap . newKeySet ();
68+ private Map < String , Short > tryTaskCompleted = new ConcurrentHashMap <> ();
7569
7670 public void onTaskRetried (TaskRetriedEvent ev ) {
7771 taskRetried .put (ev .taskContext ().position ().jsonPointer (), ev .taskContext ().retryAttempt ());
7872 }
7973
8074 public void onTaskCompleted (TaskCompletedEvent ev ) {
8175 if (ev .taskContext ().task () instanceof TryTask ) {
82- contexts .add (ev .taskContext ().retryAttempt ());
76+ tryTaskCompleted .put (
77+ ev .taskContext ().position ().jsonPointer (), ev .taskContext ().retryAttempt ());
8378 }
8479 }
8580 }
@@ -107,8 +102,8 @@ void testRetry(String path) throws IOException {
107102 .atMost (Duration .ofSeconds (1 ))
108103 .until (() -> future .join ().as (JsonNode .class ).orElseThrow ().equals (result ));
109104 assertThat (retryListener .taskRetried ).hasSize (1 );
110- assertThat (retryListener .taskRetried .get ("do/0/tryGetPet/do /0/getPet" )).isEqualTo ((short ) 2 );
111- assertThat (retryListener .contexts ).containsOnly ((short ) 0 );
105+ assertThat (retryListener .taskRetried .get ("do/0/tryGetPet/try /0/getPet" )).isEqualTo ((short ) 2 );
106+ assertThat (retryListener .tryTaskCompleted . values () ).containsOnly ((short ) 0 );
112107 }
113108
114109 @ Test
@@ -135,8 +130,35 @@ void testNestedRetry() throws IOException {
135130 .atMost (Duration .ofSeconds (1 ))
136131 .until (() -> future .join ().as (JsonNode .class ).orElseThrow ().equals (result ));
137132 assertThat (retryListener .taskRetried ).hasSize (2 );
138- assertThat (retryListener .taskRetried .values ()).containsExactlyInAnyOrder ((short ) 5 , (short ) 2 );
139- assertThat (retryListener .contexts ).containsExactlyInAnyOrder ((short ) 0 , (short ) 2 );
133+ assertThat (retryListener .taskRetried .get ("do/0/tryServerError/try/0/tryCommunication/try" ))
134+ .isEqualTo ((short ) 2 );
135+ assertThat (
136+ retryListener .taskRetried .get (
137+ "do/0/tryServerError/try/0/tryCommunication/try/0/getPet" ))
138+ .isEqualTo ((short ) 5 );
139+ assertThat (retryListener .tryTaskCompleted .get ("do/0/tryServerError/try/0/tryCommunication/try" ))
140+ .isEqualTo ((short ) 2 );
141+ assertThat (retryListener .tryTaskCompleted .get ("do/0/tryServerError/try" )).isEqualTo ((short ) 0 );
142+ }
143+
144+ @ Test
145+ void testRetryDo () throws IOException {
146+ CompletableFuture <WorkflowModel > future =
147+ app .workflowDefinition (
148+ readWorkflowFromClasspath ("workflows-samples/try-catch-with-do.yaml" ))
149+ .instance (Map .of ("delay" , 0.01 ))
150+ .start ();
151+ Awaitility .await ()
152+ .atMost (Duration .ofSeconds (1 ))
153+ .until (
154+ () ->
155+ future
156+ .join ()
157+ .asMap ()
158+ .orElseThrow ()
159+ .equals (Map .of ("setAfterFailingTask" , "No problem" )));
160+
161+ assertThat (retryListener .tryTaskCompleted .get ("do/0/attemptTask/try" )).isEqualTo ((short ) 0 );
140162 }
141163
142164 @ Test
0 commit comments