This is an automated email from the ASF dual-hosted git repository.
ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git
The following commit(s) were added to refs/heads/master by this push:
new 9c178a0 SCB-152 sent tx compensated event on compensation completed
9c178a0 is described below
commit 9c178a05889d66fd290eebee82c51eab2051257f
Author: seanyinx <[email protected]>
AuthorDate: Tue Jan 2 15:13:56 2018 +0800
SCB-152 sent tx compensated event on compensation completed
Signed-off-by: seanyinx <[email protected]>
---
.../saga/omega/context/OmegaContext.java | 2 +-
.../spring/TransactionAspectConfig.java | 7 ++
.../spring/TransactionInterceptionTest.java | 102 ++++++++-------------
.../saga/omega/transaction/spring/User.java | 8 ++
...ceptor.java => CompensationMessageHandler.java} | 21 ++---
.../transaction/FailedTransactionInterceptor.java | 11 +--
.../saga/omega/transaction/MessageHandler.java | 2 +-
.../saga/omega/transaction/TxAbortedEvent.java | 15 ++-
.../{TxEndedEvent.java => TxCompensatedEvent.java} | 4 +-
.../saga/omega/transaction/TxEndedEvent.java | 4 +-
.../saga/omega/transaction/TxEvent.java | 13 +++
.../saga/omega/transaction/TxStartedEvent.java | 4 +-
...st.java => CompensationMessageHandlerTest.java} | 38 +++++---
.../PostTransactionInterceptorTest.java | 1 +
.../transaction/PreTransactionInterceptorTest.java | 1 +
15 files changed, 122 insertions(+), 111 deletions(-)
diff --git
a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
b/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
index ccc3738..705e74e 100644
---
a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
+++
b/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
@@ -82,7 +82,7 @@ public class OmegaContext {
compensationContexts.put(compensationMethod.toString(), new
CompensationContext(target, compensationMethod));
}
- public void compensate(String globalTxId, String localTxId, String
compensationMethod, Object[] payloads) {
+ public void compensate(String globalTxId, String localTxId, String
compensationMethod, Object... payloads) {
CompensationContext compensationContext =
compensationContexts.get(compensationMethod);
try {
diff --git
a/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java
b/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java
index 5982109..da9f3f8 100644
---
a/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java
+++
b/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java
@@ -22,6 +22,8 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import io.servicecomb.saga.omega.context.OmegaContext;
+import io.servicecomb.saga.omega.transaction.CompensationMessageHandler;
+import io.servicecomb.saga.omega.transaction.MessageHandler;
import io.servicecomb.saga.omega.transaction.MessageSender;
import io.servicecomb.saga.omega.transaction.TransactionAspect;
@@ -30,6 +32,11 @@ import
io.servicecomb.saga.omega.transaction.TransactionAspect;
public class TransactionAspectConfig {
@Bean
+ MessageHandler messageHandler(MessageSender sender, OmegaContext context) {
+ return new CompensationMessageHandler(sender, context);
+ }
+
+ @Bean
TransactionAspect transactionAspect(MessageSender sender, OmegaContext
context) {
return new TransactionAspect(sender, context);
}
diff --git
a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
b/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
index 4ffd546..7efa304 100644
---
a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
+++
b/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
@@ -20,16 +20,14 @@ package io.servicecomb.saga.omega.transaction.spring;
import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
import static
io.servicecomb.saga.omega.transaction.spring.TransactionalUserService.ILLEGAL_USER;
-import static java.util.Arrays.asList;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertThat;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
-import java.util.stream.Collectors;
import org.junit.After;
import org.junit.Before;
@@ -46,7 +44,10 @@ import io.servicecomb.saga.omega.context.OmegaContext;
import io.servicecomb.saga.omega.context.UniqueIdGenerator;
import io.servicecomb.saga.omega.transaction.MessageHandler;
import io.servicecomb.saga.omega.transaction.MessageSender;
-import io.servicecomb.saga.omega.transaction.TxEvent;
+import io.servicecomb.saga.omega.transaction.TxAbortedEvent;
+import io.servicecomb.saga.omega.transaction.TxCompensatedEvent;
+import io.servicecomb.saga.omega.transaction.TxEndedEvent;
+import io.servicecomb.saga.omega.transaction.TxStartedEvent;
import
io.servicecomb.saga.omega.transaction.spring.TransactionInterceptionTest.MessageConfig;
@RunWith(SpringRunner.class)
@@ -62,7 +63,7 @@ public class TransactionInterceptionTest {
private final String email = uniquify("email");
@Autowired
- private List<byte[]> messages;
+ private List<String> messages;
@Autowired
private TransactionalUserService userService;
@@ -94,11 +95,11 @@ public class TransactionInterceptionTest {
String compensationMethod =
TransactionalUserService.class.getDeclaredMethod("delete",
User.class).toString();
- assertEquals(
- asList(
- txStartedEvent(globalTxId, localTxId, parentTxId,
compensationMethod, username, email),
- txEndedEvent(globalTxId, localTxId, parentTxId,
compensationMethod)),
- toString(messages)
+ assertArrayEquals(
+ new String[]{
+ new TxStartedEvent(globalTxId, localTxId, parentTxId,
compensationMethod, user).toString(),
+ new TxEndedEvent(globalTxId, localTxId, parentTxId,
compensationMethod).toString()},
+ toArray(messages)
);
User actual = userRepository.findOne(user.id());
@@ -107,19 +108,22 @@ public class TransactionInterceptionTest {
@Test
public void sendsAbortEvent_OnSubTransactionFailure() throws Exception {
+ Throwable throwable = null;
+ User user = new User(ILLEGAL_USER, email);
try {
- userService.add(new User(ILLEGAL_USER, email));
+ userService.add(user);
expectFailing(IllegalArgumentException.class);
} catch (IllegalArgumentException ignored) {
+ throwable = ignored;
}
String compensationMethod =
TransactionalUserService.class.getDeclaredMethod("delete",
User.class).toString();
- assertEquals(
- asList(
- txStartedEvent(globalTxId, localTxId, parentTxId,
compensationMethod, ILLEGAL_USER, email),
- txAbortedEvent(globalTxId, localTxId, parentTxId,
compensationMethod)),
- toString(messages)
+ assertArrayEquals(
+ new String[]{
+ new TxStartedEvent(globalTxId, localTxId, parentTxId,
compensationMethod, user).toString(),
+ new TxAbortedEvent(globalTxId, localTxId, parentTxId,
compensationMethod, throwable).toString()},
+ toArray(messages)
);
}
@@ -133,22 +137,32 @@ public class TransactionInterceptionTest {
String compensationMethod =
TransactionalUserService.class.getDeclaredMethod("delete",
User.class).toString();
- messageHandler.onReceive(globalTxId, this.localTxId, compensationMethod,
user);
- messageHandler.onReceive(globalTxId, localTxId, compensationMethod,
anotherUser);
+ messageHandler.onReceive(globalTxId, this.localTxId, parentTxId,
compensationMethod, user);
+ messageHandler.onReceive(globalTxId, localTxId, parentTxId,
compensationMethod, anotherUser);
assertThat(userRepository.findOne(user.id()), is(nullValue()));
assertThat(userRepository.findOne(anotherUser.id()), is(nullValue()));
+
+ assertArrayEquals(
+ new String[]{
+ new TxStartedEvent(globalTxId, this.localTxId, parentTxId,
compensationMethod, user).toString(),
+ new TxEndedEvent(globalTxId, this.localTxId, parentTxId,
compensationMethod).toString(),
+ new TxStartedEvent(globalTxId, localTxId, parentTxId,
compensationMethod, anotherUser).toString(),
+ new TxEndedEvent(globalTxId, localTxId, parentTxId,
compensationMethod).toString(),
+ new TxCompensatedEvent(globalTxId, this.localTxId, parentTxId,
compensationMethod).toString(),
+ new TxCompensatedEvent(globalTxId, localTxId, parentTxId,
compensationMethod).toString()
+ },
+ toArray(messages)
+ );
}
- private List<String> toString(List<byte[]> messages) {
- return messages.stream()
- .map(String::new)
- .collect(Collectors.toList());
+ private String[] toArray(List<String> messages) {
+ return messages.toArray(new String[messages.size()]);
}
@Configuration
static class MessageConfig {
- private final List<byte[]> messages = new ArrayList<>();
+ private final List<String> messages = new ArrayList<>();
@Bean
OmegaContext omegaContext() {
@@ -156,51 +170,13 @@ public class TransactionInterceptionTest {
}
@Bean
- List<byte[]> messages() {
+ List<String> messages() {
return messages;
}
@Bean
MessageSender sender() {
- return (event) -> messages.add(serialize(event));
- }
-
- private byte[] serialize(TxEvent event) {
- if (TX_STARTED_EVENT.equals(event.type())) {
- User user = ((User) event.payloads()[0]);
- return txStartedEvent(event.globalTxId(),
- event.localTxId(),
- event.parentTxId(),
- event.compensationMethod(),
- user.username(),
- user.email()).getBytes();
- }
- return txEndedEvent(event.globalTxId(),
- event.localTxId(),
- event.parentTxId(),
- event.compensationMethod()).getBytes();
- }
-
- @Bean
- MessageHandler handler(OmegaContext omegaContext) {
- return omegaContext::compensate;
+ return (event) -> messages.add(event.toString());
}
}
-
- private static String txStartedEvent(String globalTxId,
- String localTxId,
- String parentTxId,
- String compensationMethod,
- String username,
- String email) {
- return globalTxId + ":" + localTxId + ":" + parentTxId + ":" +
compensationMethod + ":" + TX_STARTED_EVENT + ":" + username + ":" + email;
- }
-
- private static String txEndedEvent(String globalTxId, String localTxId,
String parentTxId, String compensationMethod) {
- return globalTxId + ":" + localTxId + ":" + parentTxId + ":" +
compensationMethod + ":" + TX_ENDED_EVENT;
- }
-
- private static String txAbortedEvent(String globalTxId, String localTxId,
String parentTxId, String compensationMethod) {
- return globalTxId + ":" + localTxId + ":" + parentTxId + ":" +
compensationMethod + ":" + TX_ENDED_EVENT;
- }
}
diff --git
a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/User.java
b/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/User.java
index 6b2e55f..5af25e4 100644
---
a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/User.java
+++
b/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/User.java
@@ -70,4 +70,12 @@ public class User {
public int hashCode() {
return Objects.hash(id, username, email);
}
+
+ @Override
+ public String toString() {
+ return "User{" +
+ "username='" + username + '\'' +
+ ", email='" + email + '\'' +
+ '}';
+ }
}
diff --git
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/CompensationMessageHandler.java
similarity index 60%
copy from
omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
copy to
omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/CompensationMessageHandler.java
index 6cbd8af..edc3243 100644
---
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
+++
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/CompensationMessageHandler.java
@@ -17,23 +17,20 @@
package io.servicecomb.saga.omega.transaction;
-import java.io.PrintWriter;
-import java.io.StringWriter;
+import io.servicecomb.saga.omega.context.OmegaContext;
-class FailedTransactionInterceptor {
+public class CompensationMessageHandler implements MessageHandler {
private final MessageSender sender;
+ private final OmegaContext omegaContext;
- FailedTransactionInterceptor(MessageSender sender) {
+ public CompensationMessageHandler(MessageSender sender, OmegaContext
omegaContext) {
this.sender = sender;
+ this.omegaContext = omegaContext;
}
- void intercept(String globalTxId, String localTxId, String parentTxId,
String compensationMethod, Throwable throwable) {
- sender.send(new TxAbortedEvent(globalTxId, localTxId, parentTxId,
compensationMethod, stackTrace(throwable)));
- }
-
- private String stackTrace(Throwable e) {
- StringWriter writer = new StringWriter();
- e.printStackTrace(new PrintWriter(writer));
- return writer.toString();
+ @Override
+ public void onReceive(String globalTxId, String localTxId, String
parentTxId, String compensationMethod, Object... payloads) {
+ omegaContext.compensate(globalTxId, localTxId, compensationMethod,
payloads);
+ sender.send(new TxCompensatedEvent(globalTxId, localTxId, parentTxId,
compensationMethod));
}
}
diff --git
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
index 6cbd8af..9c164dd 100644
---
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
+++
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
@@ -17,9 +17,6 @@
package io.servicecomb.saga.omega.transaction;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
class FailedTransactionInterceptor {
private final MessageSender sender;
@@ -28,12 +25,6 @@ class FailedTransactionInterceptor {
}
void intercept(String globalTxId, String localTxId, String parentTxId,
String compensationMethod, Throwable throwable) {
- sender.send(new TxAbortedEvent(globalTxId, localTxId, parentTxId,
compensationMethod, stackTrace(throwable)));
- }
-
- private String stackTrace(Throwable e) {
- StringWriter writer = new StringWriter();
- e.printStackTrace(new PrintWriter(writer));
- return writer.toString();
+ sender.send(new TxAbortedEvent(globalTxId, localTxId, parentTxId,
compensationMethod, throwable));
}
}
diff --git
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageHandler.java
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageHandler.java
index caf2da8..d867085 100644
---
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageHandler.java
+++
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageHandler.java
@@ -18,5 +18,5 @@
package io.servicecomb.saga.omega.transaction;
public interface MessageHandler {
- void onReceive(String globalTxId, String localTxId, String
compensationMethod, Object... payloads);
+ void onReceive(String globalTxId, String localTxId, String parentTxId,
String compensationMethod, Object... payloads);
}
diff --git
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxAbortedEvent.java
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxAbortedEvent.java
index 2d04a7d..0d7e5ba 100644
---
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxAbortedEvent.java
+++
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxAbortedEvent.java
@@ -17,8 +17,17 @@
package io.servicecomb.saga.omega.transaction;
-class TxAbortedEvent extends TxEvent {
- TxAbortedEvent(String globalTxId, String localTxId, String parentTxId,
String compensationMethod, String stackTrace) {
- super(globalTxId, localTxId, parentTxId, compensationMethod, stackTrace);
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+public class TxAbortedEvent extends TxEvent {
+ public TxAbortedEvent(String globalTxId, String localTxId, String
parentTxId, String compensationMethod, Throwable throwable) {
+ super(globalTxId, localTxId, parentTxId, compensationMethod,
stackTrace(throwable));
+ }
+
+ private static String stackTrace(Throwable e) {
+ StringWriter writer = new StringWriter();
+ e.printStackTrace(new PrintWriter(writer));
+ return writer.toString();
}
}
diff --git
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxCompensatedEvent.java
similarity index 85%
copy from
omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
copy to
omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxCompensatedEvent.java
index 2836948..8d518d6 100644
---
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
+++
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxCompensatedEvent.java
@@ -17,8 +17,8 @@
package io.servicecomb.saga.omega.transaction;
-class TxEndedEvent extends TxEvent {
- TxEndedEvent(String globalTxId, String localTxId, String parentTxId, String
compensationMethod) {
+public class TxCompensatedEvent extends TxEvent {
+ public TxCompensatedEvent(String globalTxId, String localTxId, String
parentTxId, String compensationMethod) {
super(globalTxId, localTxId, parentTxId, compensationMethod);
}
}
diff --git
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
index 2836948..6922f29 100644
---
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
+++
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
@@ -17,8 +17,8 @@
package io.servicecomb.saga.omega.transaction;
-class TxEndedEvent extends TxEvent {
- TxEndedEvent(String globalTxId, String localTxId, String parentTxId, String
compensationMethod) {
+public class TxEndedEvent extends TxEvent {
+ public TxEndedEvent(String globalTxId, String localTxId, String parentTxId,
String compensationMethod) {
super(globalTxId, localTxId, parentTxId, compensationMethod);
}
}
diff --git
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEvent.java
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEvent.java
index 1616f69..a11a9ad 100644
---
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEvent.java
+++
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEvent.java
@@ -17,6 +17,8 @@
package io.servicecomb.saga.omega.transaction;
+import java.util.Arrays;
+
public class TxEvent {
private final long timestamp;
private final String globalTxId;
@@ -61,4 +63,15 @@ public class TxEvent {
public String compensationMethod() {
return compensationMethod;
}
+
+ @Override
+ public String toString() {
+ return "TxEvent{" +
+ "globalTxId='" + globalTxId + '\'' +
+ ", localTxId='" + localTxId + '\'' +
+ ", parentTxId='" + parentTxId + '\'' +
+ ", compensationMethod='" + compensationMethod + '\'' +
+ ", payloads=" + Arrays.toString(payloads) +
+ '}';
+ }
}
diff --git
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
index 7ef3089..13534ac 100644
---
a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
+++
b/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
@@ -17,9 +17,9 @@
package io.servicecomb.saga.omega.transaction;
-class TxStartedEvent extends TxEvent {
+public class TxStartedEvent extends TxEvent {
- TxStartedEvent(String globalTxId, String localTxId, String parentTxId,
String compensationMethod, Object[] payloads) {
+ public TxStartedEvent(String globalTxId, String localTxId, String
parentTxId, String compensationMethod, Object... payloads) {
super(globalTxId, localTxId, parentTxId, compensationMethod, payloads);
}
}
diff --git
a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
b/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/CompensationMessageHandlerTest.java
similarity index 52%
copy from
omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
copy to
omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/CompensationMessageHandlerTest.java
index b7b2ec0..1070e59 100644
---
a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
+++
b/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/CompensationMessageHandlerTest.java
@@ -18,38 +18,46 @@
package io.servicecomb.saga.omega.transaction;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static java.util.Arrays.asList;
-import static org.hamcrest.Matchers.contains;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
import java.util.ArrayList;
import java.util.List;
-import java.util.UUID;
import org.junit.Test;
-public class PreTransactionInterceptorTest {
- private final List<TxEvent> messages = new ArrayList<>();
- private final String globalTxId = UUID.randomUUID().toString();
- private final String localTxId = UUID.randomUUID().toString();
- private final String parentTxId = UUID.randomUUID().toString();
+import io.servicecomb.saga.omega.context.OmegaContext;
- private final MessageSender sender = messages::add;
+public class CompensationMessageHandlerTest {
- private final String message = uniquify("message");
- private final PreTransactionInterceptor interceptor = new
PreTransactionInterceptor(sender);
+ private final List<TxEvent> events = new ArrayList<>();
+ private final MessageSender sender = events::add;
+
+ private final String globalTxId = uniquify("globalTxId");
+ private final String localTxId = uniquify("localTxId");
+ private final String parentTxId = uniquify("parentTxId");
+ private final String compensationMethod = getClass().getCanonicalName();
+ private final String payload = uniquify("blah");
+
+ private final OmegaContext omegaContext = mock(OmegaContext.class);
+ private final CompensationMessageHandler handler = new
CompensationMessageHandler(sender, omegaContext);
@Test
- public void sendsTxStartedEvent() throws Exception {
- interceptor.intercept(globalTxId, localTxId, parentTxId,
getClass().getCanonicalName(), message);
+ public void sendsEventOnCompensationCompleted() throws Exception {
+ handler.onReceive(globalTxId, localTxId, parentTxId, compensationMethod,
payload);
- TxEvent event = messages.get(0);
+ assertThat(events.size(), is(1));
+ TxEvent event = events.get(0);
assertThat(event.globalTxId(), is(globalTxId));
assertThat(event.localTxId(), is(localTxId));
assertThat(event.parentTxId(), is(parentTxId));
+ assertThat(event.type(), is("TxCompensatedEvent"));
assertThat(event.compensationMethod(), is(getClass().getCanonicalName()));
- assertThat(asList(event.payloads()), contains(message));
+ assertThat(event.payloads().length, is(0));
+
+ verify(omegaContext).compensate(globalTxId, localTxId, compensationMethod,
payload);
}
}
diff --git
a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
b/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
index 86a671f..b2e18ab 100644
---
a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
+++
b/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
@@ -46,6 +46,7 @@ public class PostTransactionInterceptorTest {
assertThat(event.globalTxId(), is(globalTxId));
assertThat(event.localTxId(), is(localTxId));
assertThat(event.parentTxId(), is(parentTxId));
+ assertThat(event.type(), is("TxEndedEvent"));
assertThat(event.compensationMethod(), is(getClass().getCanonicalName()));
assertThat(event.payloads().length, is(0));
}
diff --git
a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
b/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
index b7b2ec0..5d5d832 100644
---
a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
+++
b/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
@@ -49,6 +49,7 @@ public class PreTransactionInterceptorTest {
assertThat(event.globalTxId(), is(globalTxId));
assertThat(event.localTxId(), is(localTxId));
assertThat(event.parentTxId(), is(parentTxId));
+ assertThat(event.type(), is("TxStartedEvent"));
assertThat(event.compensationMethod(), is(getClass().getCanonicalName()));
assertThat(asList(event.payloads()), contains(message));
}
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].