This is an automated email from the ASF dual-hosted git repository.
jimin pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/incubator-seata.git
The following commit(s) were added to refs/heads/2.x by this push:
new 77bfc08bc8 optimize: increase seata-core module unit test coverage
(#6250)
77bfc08bc8 is described below
commit 77bfc08bc8f2636cc4bf0e0f16503bc6b3076cd1
Author: 云清 <[email protected]>
AuthorDate: Thu Jan 11 17:11:50 2024 +0800
optimize: increase seata-core module unit test coverage (#6250)
---
changes/en-us/2.x.md | 2 +-
changes/zh-cn/2.x.md | 2 +-
.../io/seata/core/auth/DefaultAuthSignerTest.java | 54 ++++++++
.../io/seata/core/auth/RamSignAdapterTest.java | 88 ++++++++++++
.../seata/core/compressor/CompressorTypeTest.java | 42 ++++++
.../io/seata/core/context/ContextCoreTest.java | 18 +++
.../io/seata/core/context/RootContextTest.java | 66 +++++++++
.../core/context/ThreadLocalContextCoreTest.java | 68 ++++++++++
.../io/seata/core/event/ExceptionEventTest.java | 35 +++++
.../core/event/GlobalTransactionEventTest.java | 96 ++++++++++++++
.../io/seata/core/lock/AbstractLockerTest.java | 147 +++++++++++++++++++++
.../java/io/seata/core/lock/LocalDBLockerTest.java | 73 ++++++++++
.../io/seata/core/model/GlobalLockConfigTest.java | 49 +++++++
.../java/io/seata/core/model/GlobalStatusTest.java | 23 ++++
.../test/java/io/seata/core/model/ResultTest.java | 97 ++++++++++++++
15 files changed, 858 insertions(+), 2 deletions(-)
diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index 87220092a3..c6a1cd2f55 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -65,6 +65,7 @@ Add changes here for all PR submitted to the 2.x branch.
- [[#6081](https://github.com/apache/incubator-seata/pull/6081)] add
`test-os.yml` for testing the OS
- [[#6125](https://github.com/apache/incubator-seata/pull/6125)] unbind xid in
TransactionTemplateTest
- [[#6157](https://github.com/apache/incubator-seata/pull/6157)] increase
common module unit test coverage
+- [[#6250](https://github.com/apache/incubator-seata/pull/6250)] increase
seata-core module unit test coverage
Thanks to these contributors for their code commits. Please report an
unintended omission.
@@ -91,5 +92,4 @@ Thanks to these contributors for their code commits. Please
report an unintended
- [jsbxyyx](https://github.com/jsbxyyx)
- [liuqiufeng](https://github.com/liuqiufeng)
-
Also, we receive many valuable issues, questions and advices from our
community. Thanks for you all.
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index fd35672905..0730187615 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -65,6 +65,7 @@
- [[#6081](https://github.com/apache/incubator-seata/pull/6081)] 添加
`test-os.yml` 用于测试seata在各种操作系统下的运行情况
- [[#6125](https://github.com/apache/incubator-seata/pull/6125)]
TransactionTemplateTest单测unbind xid
- [[#6157](https://github.com/apache/incubator-seata/pull/6157)]
增加common模块单测覆盖率
+- [[#6250](https://github.com/apache/incubator-seata/pull/6250)]
增加seata-core模块单测覆盖率
非常感谢以下 contributors 的代码贡献。若有无意遗漏,请报告。
@@ -91,5 +92,4 @@
- [jsbxyyx](https://github.com/jsbxyyx)
- [liuqiufeng](https://github.com/liuqiufeng)
-
同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。
diff --git a/core/src/test/java/io/seata/core/auth/DefaultAuthSignerTest.java
b/core/src/test/java/io/seata/core/auth/DefaultAuthSignerTest.java
new file mode 100644
index 0000000000..88f814da63
--- /dev/null
+++ b/core/src/test/java/io/seata/core/auth/DefaultAuthSignerTest.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.auth;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+/**
+ * The DefaultAuthSigner Test
+ */
+public class DefaultAuthSignerTest {
+ @Test
+ public void testGetRamSignNotNull() {
+ String data = "testGroup,127.0.0.1,1702564471650";
+ String key = "exampleEncryptKey";
+ String expectedSign = "6g9nMk6BRLFxl7bf5ZfWaEZvGdho3JBmwvx5rqgSUCE=";
+ DefaultAuthSigner signer = new DefaultAuthSigner();
+ String sign = signer.sign(data, key);
+ Assertions.assertEquals(expectedSign, sign);
+ }
+
+ @Test
+ public void testGetRamSignNull() {
+ String data = null;
+ String key = "exampleEncryptKey";
+ DefaultAuthSigner signer = new DefaultAuthSigner();
+ String sign = signer.sign(data, key);
+ Assertions.assertNull(sign);
+ }
+
+ @Test
+ public void testGetSignVersion() {
+ DefaultAuthSigner signer = new DefaultAuthSigner();
+ String expectedVersion = "V4";
+ String actualVersion = signer.getSignVersion();
+
+ // Assert the returned version matches the expected version
+ Assertions.assertEquals(expectedVersion, actualVersion);
+ }
+}
diff --git a/core/src/test/java/io/seata/core/auth/RamSignAdapterTest.java
b/core/src/test/java/io/seata/core/auth/RamSignAdapterTest.java
new file mode 100644
index 0000000000..b859453f39
--- /dev/null
+++ b/core/src/test/java/io/seata/core/auth/RamSignAdapterTest.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.auth;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * The RamSignAdapter Test
+ */
+public class RamSignAdapterTest {
+ @Test
+ public void testGetDateSigningKey() throws NoSuchMethodException,
InvocationTargetException, IllegalAccessException {
+ String secret = "mySecret";
+ String date = "20220101";
+ String signMethod = "HmacSHA256";
+ byte[] expectArray = new byte[]{-96, 108, 42, 75, -59, 121, -63, 108,
-3, -126, 67, 3, 118, 2, 39, 59, -68, -37, -98, 122, -25, -120, 77, 56, -70,
24, -115, 33, 125, -128, -10, -26};
+
+ RamSignAdapter adapter = new RamSignAdapter();
+ // Use reflection to access the private method
+ Method getDateSigningKeyMethod =
RamSignAdapter.class.getDeclaredMethod("getDateSigningKey", String.class,
String.class, String.class);
+ getDateSigningKeyMethod.setAccessible(true);
+ byte[] signingKey = (byte[]) getDateSigningKeyMethod.invoke(adapter,
secret, date, signMethod);
+ Assertions.assertEquals(32, signingKey.length);
+ Assertions.assertArrayEquals(expectArray, signingKey);
+ }
+
+ @Test
+ public void testGetRegionSigningKey() throws InvocationTargetException,
IllegalAccessException, NoSuchMethodException {
+ String secret = "mySecret";
+ String date = "20220101";
+ String region = "cn-beijing";
+ String signMethod = "HmacSHA256";
+ byte[] expectArray = new byte[]{-40, 5, 2, 41, -48, 82, 10, -102, 125,
-24, -44, -83, 127, 6, -85, 93, -26, 88, -88, 65, 56, 79, -5, -66, 65, -106,
19, -64, -85, 103, -32, 110};
+
+ RamSignAdapter adapter = new RamSignAdapter();
+ // Use reflection to access the private method
+ Method getRegionSigningKeyMethod =
RamSignAdapter.class.getDeclaredMethod("getRegionSigningKey", String.class,
String.class, String.class, String.class);
+ getRegionSigningKeyMethod.setAccessible(true);
+ byte[] signingKey = (byte[]) getRegionSigningKeyMethod.invoke(adapter,
secret, date, region, signMethod);
+ Assertions.assertEquals(32, signingKey.length);
+ Assertions.assertArrayEquals(expectArray, signingKey);
+ }
+
+ @Test
+ public void testGetProductSigningKey() throws NoSuchMethodException,
InvocationTargetException, IllegalAccessException {
+ String secret = "mySecret";
+ String date = "20220101";
+ String region = "cn-beijing";
+ String productCode = "seata";
+ String signMethod = "HmacSHA256";
+ byte[] expectArray = new byte[]{62, 98, -65, 30, -8, -3, 66, -111, 0,
123, 126, 78, -30, -74, 55, -79, 101, -18, -97, -5, 78, -19, -17, 0, 88, 30,
-92, 108, 103, 87, 49, -22};
+
+ RamSignAdapter adapter = new RamSignAdapter();
+ Method getProductSigningKeyMethod =
RamSignAdapter.class.getDeclaredMethod("getProductSigningKey", String.class,
String.class, String.class, String.class, String.class);
+ getProductSigningKeyMethod.setAccessible(true);
+ byte[] signingKey = (byte[])
getProductSigningKeyMethod.invoke(adapter, secret, date, region, productCode,
signMethod);
+ Assertions.assertEquals(32, signingKey.length);
+ Assertions.assertArrayEquals(expectArray, signingKey);
+ }
+
+ @Test
+ public void testGetRamSign() {
+ String encryptText = "testGroup,127.0.0.1,1702564471650";
+ String encryptKey = "exampleEncryptKey";
+ String expectedSign = "6g9nMk6BRLFxl7bf5ZfWaEZvGdho3JBmwvx5rqgSUCE=";
+ String actualSign = RamSignAdapter.getRamSign(encryptText, encryptKey);
+ // Assert the generated sign matches the expected sign
+ Assertions.assertEquals(expectedSign, actualSign);
+ }
+}
diff --git
a/core/src/test/java/io/seata/core/compressor/CompressorTypeTest.java
b/core/src/test/java/io/seata/core/compressor/CompressorTypeTest.java
new file mode 100644
index 0000000000..c99bb97c1e
--- /dev/null
+++ b/core/src/test/java/io/seata/core/compressor/CompressorTypeTest.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.compressor;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+/**
+ * The CompressorType Test
+ */
+public class CompressorTypeTest {
+ @Test
+ public void testGetByCode() {
+ int code = 1;
+ CompressorType expectedType = CompressorType.GZIP;
+ CompressorType actualType = CompressorType.getByCode(code);
+ // Assert the returned type matches the expected type
+ Assertions.assertEquals(expectedType, actualType);
+ }
+ @Test
+ public void testGetByName() {
+ String name = "gzip";
+ CompressorType expectedType = CompressorType.GZIP;
+ CompressorType actualType = CompressorType.getByName(name);
+ // Assert the returned type matches the expected type
+ Assertions.assertEquals(expectedType, actualType);
+ }
+}
diff --git a/core/src/test/java/io/seata/core/context/ContextCoreTest.java
b/core/src/test/java/io/seata/core/context/ContextCoreTest.java
index 6e85f2c8e3..29ccbe48ef 100644
--- a/core/src/test/java/io/seata/core/context/ContextCoreTest.java
+++ b/core/src/test/java/io/seata/core/context/ContextCoreTest.java
@@ -18,6 +18,8 @@ package io.seata.core.context;
import org.junit.jupiter.api.Test;
+import java.util.Map;
+
import static org.assertj.core.api.Assertions.assertThat;
/**
@@ -68,6 +70,22 @@ public class ContextCoreTest {
load.remove(NOT_EXIST_KEY);
}
+ /**
+ * Test entries.
+ */
+ @Test
+ public void testEntries() {
+ ContextCore load = ContextCoreLoader.load();
+ load.put(FIRST_KEY, FIRST_VALUE);
+ load.put(SECOND_KEY, FIRST_VALUE);
+ Map<String, Object> entries = load.entries();
+ assertThat(entries.get(FIRST_KEY)).isEqualTo(FIRST_VALUE);
+ assertThat(entries.get(SECOND_KEY)).isEqualTo(FIRST_VALUE);
+ load.remove(FIRST_KEY);
+ load.remove(SECOND_KEY);
+ load.remove(NOT_EXIST_KEY);
+ }
+
/**
* Test remove.
*/
diff --git a/core/src/test/java/io/seata/core/context/RootContextTest.java
b/core/src/test/java/io/seata/core/context/RootContextTest.java
index 1edcfe5328..0fadf94e9f 100644
--- a/core/src/test/java/io/seata/core/context/RootContextTest.java
+++ b/core/src/test/java/io/seata/core/context/RootContextTest.java
@@ -21,6 +21,8 @@ import io.seata.core.model.BranchType;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import java.util.Map;
+
import static org.assertj.core.api.Assertions.assertThat;
/**
@@ -57,6 +59,70 @@ public class RootContextTest {
assertThat(RootContext.getXID()).isNull();
}
+ /**
+ * Test set timeout.
+ */
+ @Test
+ public void testSetTimeout() {
+ RootContext.setTimeout(100);
+ assertThat(RootContext.getTimeout()).isEqualTo(100);
+ RootContext.setTimeout(null);
+ assertThat(RootContext.getTimeout()).isEqualTo(null);
+ }
+
+ /**
+ * Test get timeout.
+ */
+ @Test
+ public void testGetTimeout() {
+ RootContext.setTimeout(100);
+ assertThat(RootContext.getTimeout()).isEqualTo(100);
+ RootContext.setTimeout(null);
+ assertThat(RootContext.getTimeout()).isEqualTo(null);
+ }
+
+ /**
+ * Test bind global lock flag.
+ */
+ @Test
+ public void testBindGlobalLockFlag() {
+ RootContext.bindGlobalLockFlag();
+ assertThat(RootContext.requireGlobalLock()).isEqualTo(true);
+ }
+
+ /**
+ * Test unbind global lock flag.
+ */
+ @Test
+ public void testUnBindGlobalLockFlag() {
+ RootContext.bindGlobalLockFlag();
+ assertThat(RootContext.requireGlobalLock()).isEqualTo(true);
+ RootContext.unbindGlobalLockFlag();
+ assertThat(RootContext.requireGlobalLock()).isEqualTo(false);
+ }
+
+ /**
+ * Test require global lock.
+ */
+ @Test
+ public void testRequireGlobalLock() {
+ RootContext.bindGlobalLockFlag();
+ assertThat(RootContext.requireGlobalLock()).isEqualTo(true);
+ RootContext.unbindGlobalLockFlag();
+ assertThat(RootContext.requireGlobalLock()).isEqualTo(false);
+ }
+
+ /**
+ * Test entries.
+ */
+ @Test
+ public void testEntries() {
+ RootContext.bind(DEFAULT_XID);
+ Map<String, Object> entries = RootContext.entries();
+ assertThat(entries.get(RootContext.KEY_XID)).isEqualTo(DEFAULT_XID);
+ RootContext.unbind();
+ }
+
/**
* Test bind and unbind branchType.
*/
diff --git
a/core/src/test/java/io/seata/core/context/ThreadLocalContextCoreTest.java
b/core/src/test/java/io/seata/core/context/ThreadLocalContextCoreTest.java
new file mode 100644
index 0000000000..337bb9efe6
--- /dev/null
+++ b/core/src/test/java/io/seata/core/context/ThreadLocalContextCoreTest.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.context;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * The type Thread local context core test.
+ */
+public class ThreadLocalContextCoreTest {
+ private static ThreadLocalContextCore contextCore ;
+
+
+ @BeforeAll
+ public static void setUp() {
+ contextCore = new ThreadLocalContextCore();
+ }
+ @Test
+ public void testPutAndGet() {
+ // Test putting and getting a value
+ contextCore.put("key", "value");
+ assertEquals("value", contextCore.get("key"));
+ contextCore.remove("key");
+ }
+
+ @Test
+ public void testRemove() {
+ // Test putting and removing a value
+ contextCore.put("key", "value");
+ assertEquals("value", contextCore.remove("key"));
+ assertNull(contextCore.get("key"));
+ }
+
+ @Test
+ public void testEntries() {
+ // Test getting all entries
+ contextCore.put("key1", "value1");
+ contextCore.put("key2", "value2");
+ contextCore.put("key3", "value3");
+ assertEquals(3, contextCore.entries().size());
+ assertTrue(contextCore.entries().containsKey("key1"));
+ assertTrue(contextCore.entries().containsKey("key2"));
+ assertTrue(contextCore.entries().containsKey("key3"));
+ contextCore.remove("key1");
+ contextCore.remove("key2");
+ contextCore.remove("key3");
+ assertNull(contextCore.get("key1"));
+ assertNull(contextCore.get("key2"));
+ assertNull(contextCore.get("key3"));
+ }
+}
diff --git a/core/src/test/java/io/seata/core/event/ExceptionEventTest.java
b/core/src/test/java/io/seata/core/event/ExceptionEventTest.java
new file mode 100644
index 0000000000..8f286dfa59
--- /dev/null
+++ b/core/src/test/java/io/seata/core/event/ExceptionEventTest.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.event;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * The ExceptionEvent Test
+ */
+public class ExceptionEventTest {
+ @Test
+ public void testGetName() {
+ // Create an ExceptionEvent with a code
+ ExceptionEvent exceptionEvent = new ExceptionEvent("CODE123");
+
+ // Test the getName method
+ assertEquals("CODE123", exceptionEvent.getName());
+ }
+}
diff --git
a/core/src/test/java/io/seata/core/event/GlobalTransactionEventTest.java
b/core/src/test/java/io/seata/core/event/GlobalTransactionEventTest.java
new file mode 100644
index 0000000000..aa93a54c51
--- /dev/null
+++ b/core/src/test/java/io/seata/core/event/GlobalTransactionEventTest.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.event;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * The GlobalTransactionEvent Test
+ */
+public class GlobalTransactionEventTest {
+
+ private static GlobalTransactionEvent event ;
+
+ @BeforeAll
+ public static void setUp() {
+ event = new GlobalTransactionEvent(123456789L, "tc", "EventName",
"AppID", "Group1", 123456789L, 1234567890L, "committed", true,false);
+ }
+ @Test
+ public void testGetId() {
+ // Test the getId method
+ assertEquals(123456789L, event.getId());
+ }
+
+ @Test
+ public void testGetRole() {
+ // Test the getRole method
+ assertEquals("tc", event.getRole());
+ }
+
+ @Test
+ public void testGetName() {
+ // Test the getName method
+ assertEquals("EventName", event.getName());
+ }
+
+ @Test
+ public void testGetApplicationId() {
+ // Test the getApplicationId method
+ assertEquals("AppID", event.getApplicationId());
+ }
+
+ @Test
+ public void testGetGroup() {
+ // Test the getGroup method
+ assertEquals("Group1", event.getGroup());
+ }
+
+ @Test
+ public void testGetBeginTime() {
+ // Test the getBeginTime method
+ assertEquals(123456789L, event.getBeginTime().longValue());
+ }
+
+ @Test
+ public void testGetEndTime() {
+ // Test the getEndTime method
+ assertEquals(1234567890L, event.getEndTime().longValue());
+ }
+
+ @Test
+ public void testGetStatus() {
+ // Test the getStatus method
+ assertEquals("committed", event.getStatus());
+ }
+
+ @Test
+ public void testIsRetryGlobal() {
+ // Test the isSuccess method
+ assertTrue(event.isRetryGlobal());
+ }
+
+
+ @Test
+ public void testIsRetryBranch() {
+ // Test the isSuccess method
+ assertFalse(event.isRetryBranch());
+ }
+
+}
diff --git a/core/src/test/java/io/seata/core/lock/AbstractLockerTest.java
b/core/src/test/java/io/seata/core/lock/AbstractLockerTest.java
new file mode 100644
index 0000000000..79a8950d01
--- /dev/null
+++ b/core/src/test/java/io/seata/core/lock/AbstractLockerTest.java
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.lock;
+
+import io.seata.core.model.LockStatus;
+import io.seata.core.store.LockDO;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The AbstractLocker Test
+ */
+public class AbstractLockerTest {
+
+ @Test
+ public void testConvertToLockDO() {
+ List<LockDO> lockDOs = getLockDOS();
+
+ // Assert that the converted LockDO objects have the correct values
+ Assertions.assertEquals(2, lockDOs.size());
+
+ LockDO lockDO1 = lockDOs.get(0);
+ Assertions.assertEquals(1, lockDO1.getBranchId());
+ Assertions.assertEquals("123", lockDO1.getPk());
+ Assertions.assertEquals("resource1", lockDO1.getResourceId());
+ Assertions.assertEquals("xid1", lockDO1.getXid());
+ Assertions.assertEquals(1122L, lockDO1.getTransactionId());
+ Assertions.assertEquals("table1", lockDO1.getTableName());
+
+ LockDO lockDO2 = lockDOs.get(1);
+ Assertions.assertEquals(2, lockDO2.getBranchId());
+ Assertions.assertEquals("456", lockDO2.getPk());
+ Assertions.assertEquals("resource2", lockDO2.getResourceId());
+ Assertions.assertEquals("xid2", lockDO2.getXid());
+ Assertions.assertEquals(3344L, lockDO2.getTransactionId());
+ Assertions.assertEquals("table2", lockDO2.getTableName());
+ }
+
+ private static List<LockDO> getLockDOS() {
+ AbstractLocker locker = new AbstractLocker() {
+ @Override
+ public boolean acquireLock(List<RowLock> rowLock) {
+ return false;
+ }
+
+ @Override
+ public boolean acquireLock(List<RowLock> rowLock, boolean
autoCommit, boolean skipCheckLock) {
+ return false;
+ }
+
+ @Override
+ public boolean releaseLock(List<RowLock> rowLock) {
+ return false;
+ }
+
+ @Override
+ public boolean isLockable(List<RowLock> rowLock) {
+ return false;
+ }
+
+ @Override
+ public void updateLockStatus(String xid, LockStatus lockStatus) {
+
+ }
+ };
+ List<RowLock> locks = getRowLocks();
+
+ // Call the convertToLockDO method
+ return locker.convertToLockDO(locks);
+ }
+
+
+ @Test
+ public void testGetRowKey() {
+ AbstractLocker locker = new AbstractLocker() {
+ @Override
+ public boolean acquireLock(List<RowLock> rowLock) {
+ return false;
+ }
+
+ @Override
+ public boolean acquireLock(List<RowLock> rowLock, boolean
autoCommit, boolean skipCheckLock) {
+ return false;
+ }
+
+ @Override
+ public boolean releaseLock(List<RowLock> rowLock) {
+ return false;
+ }
+
+ @Override
+ public boolean isLockable(List<RowLock> rowLock) {
+ return false;
+ }
+
+ @Override
+ public void updateLockStatus(String xid, LockStatus lockStatus) {
+
+ }
+ };
+
+ // Call the getRowKey method
+ String rowKey = locker.getRowKey("resource1", "table1", "123");
+
+ // Assert that the row key is constructed correctly
+ Assertions.assertEquals("resource1^^^table1^^^123", rowKey);
+ }
+
+ private static List<RowLock> getRowLocks() {
+ List<RowLock> locks = new ArrayList<>();
+ RowLock rowLock1 = new RowLock();
+ rowLock1.setBranchId(1L);
+ rowLock1.setPk("123");
+ rowLock1.setResourceId("resource1");
+ rowLock1.setXid("xid1");
+ rowLock1.setTransactionId(1122L);
+ rowLock1.setTableName("table1");
+ locks.add(rowLock1);
+
+ RowLock rowLock2 = new RowLock();
+ rowLock2.setBranchId(2L);
+ rowLock2.setPk("456");
+ rowLock2.setResourceId("resource2");
+ rowLock2.setXid("xid2");
+ rowLock2.setTransactionId(3344L);
+ rowLock2.setTableName("table2");
+ locks.add(rowLock2);
+ return locks;
+ }
+}
diff --git a/core/src/test/java/io/seata/core/lock/LocalDBLockerTest.java
b/core/src/test/java/io/seata/core/lock/LocalDBLockerTest.java
new file mode 100644
index 0000000000..a3a990bc53
--- /dev/null
+++ b/core/src/test/java/io/seata/core/lock/LocalDBLockerTest.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.lock;
+
+import io.seata.core.model.LockStatus;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The LocalDBLocker Test
+ */
+public class LocalDBLockerTest {
+ @Test
+ public void testAcquireLock() {
+ LocalDBLocker locker = new LocalDBLocker();
+ List<RowLock> rowLocks = new ArrayList<>();
+ boolean result = locker.acquireLock(rowLocks);
+ // Assert the result of the acquireLock method
+ Assertions.assertFalse(result);
+ }
+
+ @Test
+ public void testAcquireLockWithAutoCommitAndSkipCheckLock() {
+ LocalDBLocker locker = new LocalDBLocker();
+ List<RowLock> rowLocks = new ArrayList<>();
+ boolean result = locker.acquireLock(rowLocks, true, true);
+ // Assert the result of the acquireLock method with autoCommit and
skipCheckLock parameters
+ Assertions.assertFalse(result);
+ }
+
+ @Test
+ public void testReleaseLock() {
+ LocalDBLocker locker = new LocalDBLocker();
+ List<RowLock> rowLocks = new ArrayList<>();
+ boolean result = locker.releaseLock(rowLocks);
+ // Assert the result of the releaseLock method
+ Assertions.assertFalse(result);
+ }
+
+ @Test
+ public void testIsLockable() {
+ LocalDBLocker locker = new LocalDBLocker();
+ List<RowLock> rowLocks = new ArrayList<>();
+ boolean result = locker.isLockable(rowLocks);
+ // Assert the result of the isLockable method
+ Assertions.assertFalse(result);
+ }
+
+ @Test
+ public void testUpdateLockStatus() {
+ LocalDBLocker locker = new LocalDBLocker();
+ String xid = "xid";
+ LockStatus lockStatus = LockStatus.Locked;
+ locker.updateLockStatus(xid, lockStatus);
+ }
+}
diff --git a/core/src/test/java/io/seata/core/model/GlobalLockConfigTest.java
b/core/src/test/java/io/seata/core/model/GlobalLockConfigTest.java
new file mode 100644
index 0000000000..1ea5905a5e
--- /dev/null
+++ b/core/src/test/java/io/seata/core/model/GlobalLockConfigTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.model;
+
+import io.seata.common.LockStrategyMode;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * The GlobalLockConfig Test
+ */
+public class GlobalLockConfigTest {
+
+ @Test
+ public void testGetLockTimeout() {
+ GlobalLockConfig config = new GlobalLockConfig();
+ config.setLockRetryTimes(5000);
+ assertEquals(5000, config.getLockRetryTimes());
+ }
+
+ @Test
+ public void testGetLockRetryInterval() {
+ GlobalLockConfig config = new GlobalLockConfig();
+ config.setLockRetryInterval(1000);
+ assertEquals(1000, config.getLockRetryInterval());
+ }
+
+ @Test
+ public void testIsLockEnabled() {
+ GlobalLockConfig config = new GlobalLockConfig();
+ config.setLockStrategyMode(LockStrategyMode.OPTIMISTIC);
+ assertEquals(LockStrategyMode.OPTIMISTIC,
config.getLockStrategyMode());
+ }
+}
diff --git a/core/src/test/java/io/seata/core/model/GlobalStatusTest.java
b/core/src/test/java/io/seata/core/model/GlobalStatusTest.java
index 92999abae3..69f4c0bc23 100644
--- a/core/src/test/java/io/seata/core/model/GlobalStatusTest.java
+++ b/core/src/test/java/io/seata/core/model/GlobalStatusTest.java
@@ -63,4 +63,27 @@ public class GlobalStatusTest {
Assertions.assertThrows(IllegalArgumentException.class, () ->
GlobalStatus.get(NONE));
}
+ @Test
+ public void testIsOnePhaseTimeout() {
+
Assertions.assertFalse(GlobalStatus.isOnePhaseTimeout(GlobalStatus.Begin));
+
Assertions.assertFalse(GlobalStatus.isOnePhaseTimeout(GlobalStatus.Rollbacking));
+
Assertions.assertTrue(GlobalStatus.isOnePhaseTimeout(GlobalStatus.TimeoutRollbacking));
+
Assertions.assertTrue(GlobalStatus.isOnePhaseTimeout(GlobalStatus.TimeoutRollbackRetrying));
+
Assertions.assertTrue(GlobalStatus.isOnePhaseTimeout(GlobalStatus.TimeoutRollbacked));
+
Assertions.assertTrue(GlobalStatus.isOnePhaseTimeout(GlobalStatus.TimeoutRollbackFailed));
+ }
+
+ @Test
+ public void testIsTwoPhaseSuccess() {
+
Assertions.assertTrue(GlobalStatus.isTwoPhaseSuccess(GlobalStatus.Committed));
+
Assertions.assertTrue(GlobalStatus.isTwoPhaseSuccess(GlobalStatus.Rollbacked));
+
Assertions.assertTrue(GlobalStatus.isTwoPhaseSuccess(GlobalStatus.TimeoutRollbacked));
+
Assertions.assertFalse(GlobalStatus.isTwoPhaseSuccess(GlobalStatus.Begin));
+ }
+
+ @Test
+ public void testIsTwoPhaseHeuristic() {
+
Assertions.assertTrue(GlobalStatus.isTwoPhaseHeuristic(GlobalStatus.Finished));
+
Assertions.assertFalse(GlobalStatus.isTwoPhaseHeuristic(GlobalStatus.Begin));
+ }
}
diff --git a/core/src/test/java/io/seata/core/model/ResultTest.java
b/core/src/test/java/io/seata/core/model/ResultTest.java
new file mode 100644
index 0000000000..bd5dca20eb
--- /dev/null
+++ b/core/src/test/java/io/seata/core/model/ResultTest.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * The Result Test
+ */
+public class ResultTest {
+ @Test
+ public void testGetResult() {
+ // Create a Result with a result value
+ Result<String> result = new Result<>("Success", null, null);
+
+ // Test the getResult method
+ assertEquals("Success", result.getResult());
+ }
+
+ @Test
+ public void testGetErrMsg() {
+ // Create a Result with an error message
+ Result<String> result = new Result<>(null, "Error", null);
+
+ // Test the getErrMsg method
+ assertEquals("Error", result.getErrMsg());
+ }
+
+ @Test
+ public void testGetErrMsgParams() {
+ // Create a Result with error message parameters
+ Result<String> result = new Result<>(null, null, new
Object[]{"param1", "param2"});
+
+ // Test the getErrMsgParams method
+ assertArrayEquals(new Object[]{"param1", "param2"},
result.getErrMsgParams());
+ }
+
+ @Test
+ public void testOk() {
+ // Test the ok method
+ Result<Boolean> result = Result.ok();
+
+ // Verify that the result is true
+ assertTrue(result.getResult());
+ assertNull(result.getErrMsg());
+ assertNull(result.getErrMsgParams());
+ }
+
+ @Test
+ public void testBuild() {
+ // Create a Result with a result value
+ Result<Integer> result = Result.build(100);
+
+ // Test the getResult method
+ assertEquals(100, result.getResult().intValue());
+ assertNull(result.getErrMsg());
+ assertNull(result.getErrMsgParams());
+ }
+
+ @Test
+ public void testBuildWithErrMsg() {
+ // Create a Result with a result value and an error message
+ Result<Double> result = Result.build(3.14, "Invalid value");
+
+ // Test the getResult and getErrMsg methods
+ assertEquals(3.14, result.getResult(), 0.001);
+ assertEquals("Invalid value", result.getErrMsg());
+ assertNull(result.getErrMsgParams());
+ }
+
+ @Test
+ public void testBuildWithParams() {
+ // Create a Result with a result value, an error message, and error
message parameters
+ Result<String> result = Result.buildWithParams("Hello", "Invalid {0}
value: {1}", "parameter", 42);
+
+ // Test the getResult, getErrMsg, and getErrMsgParams methods
+ assertEquals("Hello", result.getResult());
+ assertEquals("Invalid {0} value: {1}", result.getErrMsg());
+ assertArrayEquals(new Object[]{"parameter", 42},
result.getErrMsgParams());
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]