You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/01/05 01:15:53 UTC
[incubator-servicecomb-saga] 03/08: SCB-100 ensured context passing
through akka actors
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
commit 13bbe7bd6b991aef6de701d988d65e06760710ca
Author: seanyinx <se...@huawei.com>
AuthorDate: Wed Jan 3 11:54:58 2018 +0800
SCB-100 ensured context passing through akka actors
Signed-off-by: seanyinx <se...@huawei.com>
---
omega/omega-spring-tx/pom.xml | 20 +++++++++
.../spring/TransactionInterceptionTest.java | 48 ++++++++++++++++++++++
2 files changed, 68 insertions(+)
diff --git a/omega/omega-spring-tx/pom.xml b/omega/omega-spring-tx/pom.xml
index 815e080..022f0ba 100644
--- a/omega/omega-spring-tx/pom.xml
+++ b/omega/omega-spring-tx/pom.xml
@@ -82,6 +82,26 @@
<version>2.1.8</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>com.typesafe.akka</groupId>
+ <artifactId>akka-actor_2.12</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.typesafe.akka</groupId>
+ <artifactId>akka-slf4j_2.12</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.typesafe.akka</groupId>
+ <artifactId>akka-testkit_2.12</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.scalatest</groupId>
+ <artifactId>scalatest_2.12</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
diff --git a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
index 6dee1d8..253e636 100644
--- a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
@@ -17,9 +17,11 @@
package org.apache.servicecomb.saga.omega.transaction.spring;
+import static akka.actor.ActorRef.noSender;
import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.SECONDS;
import static org.apache.servicecomb.saga.omega.transaction.spring.TransactionalUserService.ILLEGAL_USER;
import static org.awaitility.Awaitility.await;
import static org.hamcrest.CoreMatchers.nullValue;
@@ -56,6 +58,10 @@ import org.springframework.test.context.junit4.SpringRunner;
import io.reactivex.Flowable;
import io.reactivex.schedulers.Schedulers;
+import akka.actor.AbstractLoggingActor;
+import akka.actor.ActorRef;
+import akka.actor.ActorSystem;
+import akka.actor.Props;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {TransactionTestMain.class, MessageConfig.class})
@@ -96,6 +102,7 @@ public class TransactionInterceptionTest {
@After
public void tearDown() throws Exception {
messages.clear();
+ userRepository.deleteAll();
}
@AfterClass
@@ -215,6 +222,47 @@ public class TransactionInterceptionTest {
);
}
+ @Test
+ public void passesOmegaContextAmongActors() throws Exception {
+ // TODO: 2018/1/3 if actor system starts before omega context initialized, this test will fail
+ ActorSystem actorSystem = ActorSystem.create();
+
+ User user = new User(username, email);
+
+ ActorRef actorRef = actorSystem.actorOf(UserServiceActor.props(userService));
+ actorRef.tell(user, noSender());
+
+ await().atMost(1, SECONDS).until(() -> userRepository.findByUsername(username) != null);
+
+ assertArrayEquals(
+ new String[] {
+ new TxStartedEvent(globalTxId, localTxId, parentTxId, compensationMethod, user).toString(),
+ new TxEndedEvent(globalTxId, localTxId, parentTxId, compensationMethod).toString()},
+ toArray(messages)
+ );
+
+ actorSystem.terminate();
+ }
+
+ private static class UserServiceActor extends AbstractLoggingActor {
+ private final TransactionalUserService userService;
+
+ private UserServiceActor(TransactionalUserService userService) {
+ this.userService = userService;
+ }
+
+ static Props props(TransactionalUserService userService) {
+ return Props.create(UserServiceActor.class, () -> new UserServiceActor(userService));
+ }
+
+ @Override
+ public Receive createReceive() {
+ return receiveBuilder()
+ .match(User.class, userService::add)
+ .build();
+ }
+ }
+
private String[] toArray(List<String> messages) {
return messages.toArray(new String[messages.size()]);
}
--
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.