-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Java support in TransactionEvent (#74)
- Loading branch information
Showing
9 changed files
with
204 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -39,3 +39,6 @@ testContainerVersion=1.19.3 | |
|
||
### Jackson ### | ||
jacksonVersion=2.16.1 | ||
|
||
### Awaitility ### | ||
awaitilityVersion=3.0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package org.rooftop.netx.javasupports; | ||
|
||
public record Event( | ||
Long event | ||
) { | ||
|
||
} |
75 changes: 75 additions & 0 deletions
75
src/test/java/org/rooftop/netx/javasupports/NetxJavaSupportsTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
package org.rooftop.netx.javasupports; | ||
|
||
import java.util.concurrent.TimeUnit; | ||
import org.awaitility.Awaitility; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Test; | ||
import org.junit.jupiter.api.extension.ExtendWith; | ||
import org.rooftop.netx.api.TransactionManager; | ||
import org.rooftop.netx.idl.TransactionState; | ||
import org.rooftop.netx.meta.EnableDistributedTransaction; | ||
import org.rooftop.netx.redis.RedisContainer; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.test.context.ContextConfiguration; | ||
import org.springframework.test.context.TestPropertySource; | ||
import org.springframework.test.context.junit.jupiter.SpringExtension; | ||
|
||
@EnableDistributedTransaction | ||
@ExtendWith(SpringExtension.class) | ||
@ContextConfiguration(classes = { | ||
RedisContainer.class, | ||
NetxJavaSupportsTest.class, | ||
TransactionEventListeners.class, | ||
}) | ||
@DisplayName("NetxJavaSupportsTest") | ||
@TestPropertySource("classpath:application.properties") | ||
class NetxJavaSupportsTest { | ||
|
||
private static final Undo NEGATIVE_UNDO = new Undo(-1L); | ||
private static final Undo POSITIVE_UNDO = new Undo(1L); | ||
private static final Event NEGATIVE_EVENT = new Event(-1L); | ||
private static final Event POSITIVE_EVENT = new Event(1L); | ||
|
||
@Autowired | ||
private TransactionManager transactionManager; | ||
|
||
@Autowired | ||
private TransactionEventListeners transactionEventListeners; | ||
|
||
@BeforeEach | ||
void clear() { | ||
transactionEventListeners.clear(); | ||
} | ||
|
||
@Test | ||
@DisplayName("Scenario-1. Start -> Join -> Commit") | ||
void Scenario1_Start_Join_Commit() { | ||
String transactionId = transactionManager.syncStart(NEGATIVE_UNDO, NEGATIVE_EVENT); | ||
transactionManager.syncJoin(transactionId, NEGATIVE_UNDO, NEGATIVE_EVENT); | ||
transactionManager.syncCommit(transactionId); | ||
|
||
Awaitility.waitAtMost(5, TimeUnit.SECONDS) | ||
.untilAsserted(() -> { | ||
transactionEventListeners.assertTransactionCount(TransactionState.TRANSACTION_STATE_START, 1); | ||
transactionEventListeners.assertTransactionCount(TransactionState.TRANSACTION_STATE_JOIN, 1); | ||
transactionEventListeners.assertTransactionCount(TransactionState.TRANSACTION_STATE_COMMIT, 1); | ||
}); | ||
} | ||
|
||
@Test | ||
@DisplayName("Scenario-2. Start -> Join -> Rollback") | ||
void Transaction_Start_Join_Rollback() { | ||
String transactionId = transactionManager.syncStart(POSITIVE_UNDO, POSITIVE_EVENT); | ||
transactionManager.syncJoin(transactionId, POSITIVE_UNDO, POSITIVE_EVENT); | ||
transactionManager.syncRollback(transactionId, "Scenario-2. Start -> Join -> Rollback"); | ||
|
||
Awaitility.waitAtMost(5, TimeUnit.SECONDS) | ||
.untilAsserted(() -> { | ||
transactionEventListeners.assertTransactionCount(TransactionState.TRANSACTION_STATE_START, 1); | ||
transactionEventListeners.assertTransactionCount(TransactionState.TRANSACTION_STATE_JOIN, 1); | ||
transactionEventListeners.assertTransactionCount(TransactionState.TRANSACTION_STATE_ROLLBACK, 1); | ||
}); | ||
} | ||
|
||
} |
30 changes: 30 additions & 0 deletions
30
src/test/java/org/rooftop/netx/javasupports/TransactionClient.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package org.rooftop.netx.javasupports; | ||
|
||
import org.rooftop.netx.api.TransactionManager; | ||
import org.springframework.boot.test.context.TestComponent; | ||
|
||
@TestComponent | ||
public class TransactionClient { | ||
|
||
private final TransactionManager transactionManager; | ||
|
||
public TransactionClient(TransactionManager transactionManager) { | ||
this.transactionManager = transactionManager; | ||
} | ||
|
||
public String startTransaction(Undo undo, Event event) { | ||
return transactionManager.syncStart(undo, event); | ||
} | ||
|
||
public void joinTransaction(String transactionId, Undo undo, Event event) { | ||
transactionManager.syncJoin(transactionId, undo, event); | ||
} | ||
|
||
public void commitTransaction(String transactionId) { | ||
transactionManager.syncCommit(transactionId); | ||
} | ||
|
||
public void rollbackTransaction(String transactionId, String cause) { | ||
transactionManager.syncRollback(transactionId, cause); | ||
} | ||
} |
74 changes: 74 additions & 0 deletions
74
src/test/java/org/rooftop/netx/javasupports/TransactionEventListeners.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
package org.rooftop.netx.javasupports; | ||
|
||
import java.util.Map; | ||
import java.util.concurrent.ConcurrentHashMap; | ||
import org.assertj.core.api.Assertions; | ||
import org.rooftop.netx.api.DecodeException; | ||
import org.rooftop.netx.api.TransactionCommitEvent; | ||
import org.rooftop.netx.api.TransactionCommitListener; | ||
import org.rooftop.netx.api.TransactionJoinEvent; | ||
import org.rooftop.netx.api.TransactionJoinListener; | ||
import org.rooftop.netx.api.TransactionRollbackEvent; | ||
import org.rooftop.netx.api.TransactionRollbackListener; | ||
import org.rooftop.netx.api.TransactionStartEvent; | ||
import org.rooftop.netx.api.TransactionStartListener; | ||
import org.rooftop.netx.idl.TransactionState; | ||
import org.rooftop.netx.meta.TransactionHandler; | ||
import reactor.core.publisher.Mono; | ||
|
||
@TransactionHandler | ||
public class TransactionEventListeners { | ||
|
||
private final Map<TransactionState, Integer> receivedTransactions = new ConcurrentHashMap<>(); | ||
|
||
public void clear() { | ||
receivedTransactions.clear(); | ||
} | ||
|
||
public void assertTransactionCount(TransactionState transactionState, int count) { | ||
Assertions.assertThat(receivedTransactions.getOrDefault(transactionState, 0)) | ||
.isEqualTo(count); | ||
} | ||
|
||
@TransactionStartListener( | ||
event = Event.class, | ||
noRetryFor = IllegalArgumentException.class | ||
) | ||
public void listenTransactionStartEvent(TransactionStartEvent transactionStartEvent) { | ||
incrementTransaction(TransactionState.TRANSACTION_STATE_START); | ||
Event event = transactionStartEvent.decodeEvent(Event.class); | ||
if (event.event() < 0) { | ||
throw new IllegalArgumentException(); | ||
} | ||
} | ||
|
||
@TransactionJoinListener( | ||
event = Event.class, | ||
noRetryFor = IllegalArgumentException.class | ||
) | ||
public void listenTransactionJoinEvent(TransactionJoinEvent transactionJoinEvent) { | ||
incrementTransaction(TransactionState.TRANSACTION_STATE_JOIN); | ||
Event event = transactionJoinEvent.decodeEvent(Event.class); | ||
if (event.event() < 0) { | ||
throw new IllegalArgumentException(); | ||
} | ||
} | ||
|
||
@TransactionCommitListener | ||
public Mono<Long> listenTransactionCommitEvent(TransactionCommitEvent transactionCommitEvent) { | ||
incrementTransaction(TransactionState.TRANSACTION_STATE_COMMIT); | ||
return Mono.just(1L); | ||
} | ||
|
||
@TransactionRollbackListener(noRetryFor = DecodeException.class) | ||
public String listenTransactionRollbackEvent(TransactionRollbackEvent transactionRollbackEvent) { | ||
incrementTransaction(TransactionState.TRANSACTION_STATE_ROLLBACK); | ||
transactionRollbackEvent.decodeUndo(Undo.class); | ||
return "listenTransactionRollbackEvent"; | ||
} | ||
|
||
private void incrementTransaction(TransactionState transactionState) { | ||
receivedTransactions.put(transactionState, | ||
receivedTransactions.getOrDefault(transactionState, 0) + 1); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package org.rooftop.netx.javasupports; | ||
|
||
public record Undo( | ||
Long undo | ||
) { | ||
|
||
} |