Skip to content

Commit

Permalink
SCB-1707 Update test cases for forward retry failure scenario
Browse files Browse the repository at this point in the history
  • Loading branch information
coolbeevip committed Jan 8, 2020
1 parent 07d9ecd commit 82dc9c8
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 43 deletions.
Expand Up @@ -259,23 +259,22 @@ public void retrySubTransactionSuccess() {
assertThat(entity.getStatusCode(), is(OK));
assertThat(entity.getBody(), is("Greetings, eric; Welcome to visit the zoo, eric"));

await().atMost(10, SECONDS).until(() -> eventRepo.count() == 8);
await().atMost(10, SECONDS).until(() -> eventRepo.count() == 7);

List<String> distinctGlobalTxIds = eventRepo.findDistinctGlobalTxId();
assertThat(distinctGlobalTxIds.size(), greaterThanOrEqualTo(1));

String globalTxId = distinctGlobalTxIds.get(0);
List<TxEvent> events = eventRepo.findByGlobalTxIdOrderByCreationTime(globalTxId);
assertThat(events.size(), is(8));
assertThat(events.size(), is(7));

assertThat(events.get(0).type(), is("SagaStartedEvent"));
assertThat(events.get(1).type(), is("TxStartedEvent"));
assertThat(events.get(2).type(), is("TxEndedEvent"));
assertThat(events.get(3).type(), is("TxStartedEvent"));
assertThat(events.get(4).type(), is("TxAbortedEvent"));
assertThat(events.get(5).type(), is("TxStartedEvent"));
assertThat(events.get(6).type(), is("TxEndedEvent"));
assertThat(events.get(7).type(), is("SagaEndedEvent"));
assertThat(events.get(4).type(), is("TxStartedEvent"));
assertThat(events.get(5).type(), is("TxEndedEvent"));
assertThat(events.get(6).type(), is("SagaEndedEvent"));

assertThat(compensatedMessages.isEmpty(), is(true));
}
Expand All @@ -290,27 +289,24 @@ public void compensateWhenRetryReachesMaximum() throws InterruptedException {

assertThat(entity.getStatusCode(), is(INTERNAL_SERVER_ERROR));

await().atMost(10, SECONDS).until(() -> eventRepo.count() == 12);
await().atMost(10, SECONDS).until(() -> eventRepo.count() == 10);

List<String> distinctGlobalTxIds = eventRepo.findDistinctGlobalTxId();
assertThat(distinctGlobalTxIds.size(), greaterThanOrEqualTo(1));

String globalTxId = distinctGlobalTxIds.get(0);
List<TxEvent> events = eventRepo.findByGlobalTxIdOrderByCreationTime(globalTxId);
assertThat(events.size(), is(12));
assertThat(events.size(), is(10));

assertThat(events.get(0).type(), is("SagaStartedEvent"));
assertThat(events.get(1).type(), is("TxStartedEvent"));
assertThat(events.get(2).type(), is("TxEndedEvent"));
assertThat(events.get(3).type(), is("TxStartedEvent"));
assertThat(events.get(4).type(), is("TxAbortedEvent"));
assertThat(events.get(4).type(), is("TxStartedEvent"));
assertThat(events.get(5).type(), is("TxStartedEvent"));
assertThat(events.get(6).type(), is("TxAbortedEvent"));
assertThat(events.get(7).type(), is("TxStartedEvent"));
assertThat(events.get(8).type(), is("TxAbortedEvent"));
// This event is for the whole saga event
assertThat(events.get(9).type(), is("TxAbortedEvent"));
assertThat(events.get(10).type(), is("TxCompensatedEvent"));
assertThat(events.get(7).type(), is("TxAbortedEvent"));
assertThat(events.get(8).type(), is("TxCompensatedEvent"));
assertThat(events.get(9).type(), is("SagaEndedEvent"));

assertThat(compensatedMessages, Matchers.contains("Goodbye, " + GreetingController.TRESPASSER));
}
Expand Down
Expand Up @@ -155,11 +155,10 @@ public void throwExceptionWhenRetryReachesMaximum() throws Throwable {
containsString("Failed to handle tx because it is interrupted")));
}

assertThat(messages.size(), is(4));
assertThat(messages.size(), is(3));
assertThat(messages.get(0).type(), is(EventType.TxStartedEvent));
assertThat(messages.get(1).type(), is(EventType.TxAbortedEvent));
assertThat(messages.get(2).type(), is(EventType.TxStartedEvent));
assertThat(messages.get(3).type(), is(EventType.TxAbortedEvent));
assertThat(messages.get(1).type(), is(EventType.TxStartedEvent));
assertThat(messages.get(2).type(), is(EventType.TxAbortedEvent));
}

@Test
Expand Down
Expand Up @@ -129,7 +129,7 @@ public void setNewLocalTxIdCompensableWithTransactionContext() throws Throwable
assertThat(startedEvent.localTxId(), is(newLocalTxId));
assertThat(startedEvent.parentTxId(), is(transactionLocalTxId));
assertThat(startedEvent.type(), is(EventType.TxStartedEvent));
assertThat(startedEvent.retries(), is(0));
assertThat(startedEvent.forwardRetries(), is(0));
assertThat(startedEvent.retryMethod().isEmpty(), is(true));

TxEvent endedEvent = messages.get(1);
Expand Down Expand Up @@ -164,7 +164,7 @@ public void newLocalTxIdInCompensable() throws Throwable {
assertThat(startedEvent.localTxId(), is(newLocalTxId));
assertThat(startedEvent.parentTxId(), is(localTxId));
assertThat(startedEvent.type(), is(EventType.TxStartedEvent));
assertThat(startedEvent.retries(), is(0));
assertThat(startedEvent.forwardRetries(), is(0));
assertThat(startedEvent.retryMethod().isEmpty(), is(true));

TxEvent endedEvent = messages.get(1);
Expand Down Expand Up @@ -305,6 +305,13 @@ public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
}
}

/**
* Send TxAbortedEvent after three failed retries
* TxStartedEvent retry 1
* TxStartedEvent retry 2
* TxStartedEvent retry 3
* TxAbortedEvent
* */
@Test
public void retryReachesMaximumAndForwardException() throws Throwable {
RuntimeException oops = new RuntimeException("oops");
Expand All @@ -318,32 +325,32 @@ public void retryReachesMaximumAndForwardException() throws Throwable {
assertThat(e.getMessage(), is("oops"));
}

assertThat(messages.size(), is(6));
assertThat(messages.size(), is(4));

// TxStartedEvent retry 1
TxEvent startedEvent1 = messages.get(0);
assertThat(startedEvent1.globalTxId(), is(globalTxId));
assertThat(startedEvent1.localTxId(), is(newLocalTxId));
assertThat(startedEvent1.parentTxId(), is(localTxId));
assertThat(startedEvent1.type(), is(EventType.TxStartedEvent));
assertThat(startedEvent1.retries(), is(3));
assertThat(startedEvent1.forwardRetries(), is(3));
assertThat(startedEvent1.retryMethod(),
is(this.getClass().getDeclaredMethod("doNothing").toString()));

assertThat(messages.get(1).type(), is(EventType.TxAbortedEvent));

TxEvent startedEvent2 = messages.get(2);
// TxStartedEvent retry 2
TxEvent startedEvent2 = messages.get(1);
assertThat(startedEvent2.localTxId(), is(newLocalTxId));
assertThat(startedEvent2.type(), is(EventType.TxStartedEvent));
assertThat(startedEvent2.retries(), is(2));

assertThat(messages.get(3).type(), is(EventType.TxAbortedEvent));
assertThat(startedEvent2.forwardRetries(), is(2));

TxEvent startedEvent3 = messages.get(4);
// TxStartedEvent retry 3
TxEvent startedEvent3 = messages.get(2);
assertThat(startedEvent3.localTxId(), is(newLocalTxId));
assertThat(startedEvent3.type(), is(EventType.TxStartedEvent));
assertThat(startedEvent3.retries(), is(1));
assertThat(startedEvent3.forwardRetries(), is(1));

assertThat(messages.get(5).type(), is(EventType.TxAbortedEvent));
// TxAbortedEvent
assertThat(messages.get(3).type(), is(EventType.TxAbortedEvent));

assertThat(omegaContext.globalTxId(), is(globalTxId));
assertThat(omegaContext.localTxId(), is(localTxId));
Expand All @@ -357,32 +364,28 @@ public void keepRetryingTillSuccess() throws Throwable {

aspect.advise(joinPoint, compensable);

assertThat(messages.size(), is(6));
assertThat(messages.size(), is(4));

TxEvent startedEvent1 = messages.get(0);
assertThat(startedEvent1.globalTxId(), is(globalTxId));
assertThat(startedEvent1.localTxId(), is(newLocalTxId));
assertThat(startedEvent1.parentTxId(), is(localTxId));
assertThat(startedEvent1.type(), is(EventType.TxStartedEvent));
assertThat(startedEvent1.retries(), is(-1));
assertThat(startedEvent1.forwardRetries(), is(-1));
assertThat(startedEvent1.retryMethod(),
is(this.getClass().getDeclaredMethod("doNothing").toString()));

assertThat(messages.get(1).type(), is(EventType.TxAbortedEvent));

TxEvent startedEvent2 = messages.get(2);
TxEvent startedEvent2 = messages.get(1);
assertThat(startedEvent2.localTxId(), is(newLocalTxId));
assertThat(startedEvent2.type(), is(EventType.TxStartedEvent));
assertThat(startedEvent2.retries(), is(-1));

assertThat(messages.get(3).type(), is(EventType.TxAbortedEvent));
assertThat(startedEvent2.forwardRetries(), is(-1));

TxEvent startedEvent3 = messages.get(4);
TxEvent startedEvent3 = messages.get(2);
assertThat(startedEvent3.localTxId(), is(newLocalTxId));
assertThat(startedEvent3.type(), is(EventType.TxStartedEvent));
assertThat(startedEvent3.retries(), is(-1));
assertThat(startedEvent3.forwardRetries(), is(-1));

assertThat(messages.get(5).type(), is(EventType.TxEndedEvent));
assertThat(messages.get(3).type(), is(EventType.TxEndedEvent));

assertThat(omegaContext.globalTxId(), is(globalTxId));
assertThat(omegaContext.localTxId(), is(localTxId));
Expand Down

0 comments on commit 82dc9c8

Please sign in to comment.