Skip to content

Commit

Permalink
feature: add TCC three-phase hooks (apache#6731)
Browse files Browse the repository at this point in the history
  • Loading branch information
chengliefeng committed Sep 1, 2024
1 parent 2280597 commit dfa0d27
Showing 1 changed file with 43 additions and 8 deletions.
51 changes: 43 additions & 8 deletions tcc/src/test/java/org/apache/seata/rm/tcc/TccHookTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,15 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

public class TccHookTest {
private TccHook tccHook;
private MyTccHook tccHook;
private String xid;
private Long branchId;
private String actionName;
Expand All @@ -49,7 +51,7 @@ public class TccHookTest {

@BeforeEach
public void setUp() throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException {
tccHook = mock(TccHook.class);
tccHook = Mockito.spy(new MyTccHook());
xid = "test-xid";
branchId = 12345L;
actionName = "testAction";
Expand Down Expand Up @@ -97,47 +99,47 @@ public void testBeforeTccPrepare() {
for (TccHook hook : TccHookManager.getHooks()) {
hook.beforeTccPrepare(xid, branchId, actionName, context);
}
verify(tccHook).beforeTccPrepare(xid, branchId, actionName, context);
verify(tccHook).beforeTccPrepare(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
}

@Test
public void testAfterTccPrepare() {
for (TccHook hook : TccHookManager.getHooks()) {
hook.afterTccPrepare(xid, branchId, actionName, context);
}
verify(tccHook).afterTccPrepare(xid, branchId, actionName, context);
verify(tccHook).afterTccPrepare(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
}

@Test
public void testBeforeTccCommit() {
for (TccHook hook : TccHookManager.getHooks()) {
hook.beforeTccCommit(xid, branchId, actionName, context);
}
verify(tccHook).beforeTccCommit(xid, branchId, actionName, context);
verify(tccHook).beforeTccCommit(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
}

@Test
public void testAfterTccCommit() {
for (TccHook hook : TccHookManager.getHooks()) {
hook.afterTccCommit(xid, branchId, actionName, context);
}
verify(tccHook).afterTccCommit(xid, branchId, actionName, context);
verify(tccHook).afterTccCommit(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
}

@Test
public void testBeforeTccRollback() {
for (TccHook hook : TccHookManager.getHooks()) {
hook.beforeTccRollback(xid, branchId, actionName, context);
}
verify(tccHook).beforeTccRollback(xid, branchId, actionName, context);
verify(tccHook).beforeTccRollback(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
}

@Test
public void testAfterTccRollback() {
for (TccHook hook : TccHookManager.getHooks()) {
hook.afterTccRollback(xid, branchId, actionName, context);
}
verify(tccHook).afterTccRollback(xid, branchId, actionName, context);
verify(tccHook).afterTccRollback(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
}

@Test
Expand Down Expand Up @@ -194,4 +196,37 @@ public void commit() {
public void rollback() {
}
}

public class MyTccHook implements TccHook {
private final Logger LOGGER = LoggerFactory.getLogger(MyTccHook.class);
@Override
public void beforeTccPrepare(String xid, Long branchId, String actionName, BusinessActionContext context) {
LOGGER.info("do some business operations before tcc prepare");
}

@Override
public void afterTccPrepare(String xid, Long branchId, String actionName, BusinessActionContext context) {
LOGGER.info("do some business operations after tcc prepare");
}

@Override
public void beforeTccCommit(String xid, Long branchId, String actionName, BusinessActionContext context) {
LOGGER.info("do some business operations before tcc commit");
}

@Override
public void afterTccCommit(String xid, Long branchId, String actionName, BusinessActionContext context) {
LOGGER.info("do some business operations after tcc commit");
}

@Override
public void beforeTccRollback(String xid, Long branchId, String actionName, BusinessActionContext context) {
LOGGER.info("do some business operations before tcc rollback");
}

@Override
public void afterTccRollback(String xid, Long branchId, String actionName, BusinessActionContext context) {
LOGGER.info("do some business operations after tcc rollback");
}
}
}

0 comments on commit dfa0d27

Please sign in to comment.