This is an automated email from the ASF dual-hosted git repository.
jianbin 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 7d3cf99cae test: Increase [integration-tx-api] module test case
coverage (#6533)
7d3cf99cae is described below
commit 7d3cf99caea7ce46e77d9248827d0fde5537551e
Author: azatyamanaev <[email protected]>
AuthorDate: Mon Jul 29 12:40:25 2024 +0300
test: Increase [integration-tx-api] module test case coverage (#6533)
---
changes/en-us/2.x.md | 4 +-
changes/zh-cn/2.x.md | 5 +
.../tx/api/remoting/TwoPhaseResult.java | 2 +-
.../TwoPhaseBusinessActionParamTest.java | 75 ++++++++++++
.../interceptor/parser/IfNeedEnhanceBeanTest.java | 46 +++++++
.../integration/tx/api/json/JsonParserImpl.java | 41 +++++++
.../tx/api/json/JsonParserWrapTest.java | 77 ++++++++++++
.../tx/api/remoting/TwoPhaseResultTest.java | 56 +++++++++
.../remoting/parser/DefaultRemotingParserTest.java | 136 +++++++++++++++++++++
.../tx/api/remoting/parser/RemoteBean.java | 31 +++++
.../tx/api/remoting/parser/SimpleBean.java | 20 +++
.../tx/api/remoting/parser/SimpleRemoteBean.java | 21 ++++
.../api/remoting/parser/SimpleRemotingParser.java | 69 +++++++++++
.../integration/tx/api/util/ClassUtilsTest.java | 87 +++++++++++++
.../integration/tx/api/util/DubboUtilTest.java | 55 +++++++++
.../integration/tx/api/util/SimpleDubboProxy.java | 21 ++++
.../seata/rm/tcc/json/JsonParserFactoryTest.java | 37 ++++++
17 files changed, 781 insertions(+), 2 deletions(-)
diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index 8deec047e5..d10b32ef63 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -39,10 +39,10 @@ Add changes here for all PR submitted to the 2.x branch.
- [[#6702](https://github.com/apache/incubator-seata/pull/6702)] fix REC
security vulnerability during Raft deserialization
### test:
+- [[#6533](https://github.com/apache/incubator-seata/pull/6533)] increase
integration-tx-api module unit test coverage
- [[#6608](https://github.com/apache/incubator-seata/pull/6608)] add unit test
for sql-parser-core
- [[#6647](https://github.com/apache/incubator-seata/pull/6647)] improve the
test case coverage of saga module to 70%
-
Thanks to these contributors for their code commits. Please report an
unintended omission.
<!-- Please make sure your Github ID is in the list below -->
@@ -57,6 +57,7 @@ Thanks to these contributors for their code commits. Please
report an unintended
- [traitsisgiorgos](https://github.com/traitsisgiorgos)
- [wanghongzhou](https://github.com/wanghongzhou)
- [ggbocoder](https://github.com/ggbocoder)
+- [azatyamanaev](https://github.com/azatyamanaev)
- [xjlgod](https://github.com/xjlgod)
- [xingfudeshi](https://github.com/xingfudeshi)
- [wuwen5](https://github.com/wuwen5)
@@ -64,4 +65,5 @@ Thanks to these contributors for their code commits. Please
report an unintended
- [GoodBoyCoder](https://github.com/GoodBoyCoder)
- [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 d1118bb3d4..bbdaa44f15 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -41,6 +41,7 @@
- [[#6702](https://github.com/apache/incubator-seata/pull/6702)]
修复Raft反序列化时存在RCE安全漏洞
### test:
+- [[#6533](https://github.com/apache/incubator-seata/pull/6533)] 增加
Integration-TX-API 模块单元测试覆盖范围
- [[#6608](https://github.com/apache/incubator-seata/pull/6608)]
添加sql-parser-core模块测试用例
- [[#6647](https://github.com/apache/incubator-seata/pull/6647)]
增加saga模块的测试用例覆盖率
@@ -60,6 +61,7 @@
- [traitsisgiorgos](https://github.com/traitsisgiorgos)
- [wanghongzhou](https://github.com/wanghongzhou)
- [ggbocoder](https://github.com/ggbocoder)
+- [azatyamanaev](https://github.com/azatyamanaev)
- [xjlgod](https://github.com/xjlgod)
- [xingfudeshi](https://github.com/xingfudeshi)
- [wuwen5](https://github.com/wuwen5)
@@ -67,4 +69,7 @@
- [GoodBoyCoder](https://github.com/GoodBoyCoder)
- [liuqiufeng](https://github.com/liuqiufeng)
+
+
同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。
+
diff --git
a/integration-tx-api/src/main/java/org/apache/seata/integration/tx/api/remoting/TwoPhaseResult.java
b/integration-tx-api/src/main/java/org/apache/seata/integration/tx/api/remoting/TwoPhaseResult.java
index 55a8433c4e..e21680e7be 100644
---
a/integration-tx-api/src/main/java/org/apache/seata/integration/tx/api/remoting/TwoPhaseResult.java
+++
b/integration-tx-api/src/main/java/org/apache/seata/integration/tx/api/remoting/TwoPhaseResult.java
@@ -87,7 +87,7 @@ public class TwoPhaseResult {
sb.append("[");
sb.append("isSuccess:").append(isSuccess);
if (StringUtils.isNotBlank(message)) {
- sb.append(", msg").append(message);
+ sb.append(", msg:").append(message);
}
sb.append("]");
return sb.toString();
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/interceptor/TwoPhaseBusinessActionParamTest.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/interceptor/TwoPhaseBusinessActionParamTest.java
new file mode 100644
index 0000000000..ae136a60b6
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/interceptor/TwoPhaseBusinessActionParamTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.interceptor;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.seata.common.Constants;
+import org.apache.seata.core.model.BranchType;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class TwoPhaseBusinessActionParamTest {
+
+ private TwoPhaseBusinessActionParam actionParam;
+
+ @BeforeEach
+ public void setUp() {
+ actionParam = new TwoPhaseBusinessActionParam();
+ }
+
+ @Test
+ public void testGetActionName() {
+ actionParam.setActionName("business_action");
+ assertEquals("business_action", actionParam.getActionName());
+ }
+
+ @Test
+ public void testIsReportDelayed() {
+ actionParam.setDelayReport(true);
+ assertTrue(actionParam.getDelayReport());
+ }
+
+ @Test
+ public void testIsCommonFenceUsed() {
+ actionParam.setUseCommonFence(true);
+ assertTrue(actionParam.getUseCommonFence());
+ }
+
+ @Test
+ public void testFillBusinessActionContext() {
+ Map<String, Object> businessActionContextMap = new HashMap<>(2);
+ businessActionContextMap.put(Constants.COMMIT_METHOD, "commit");
+ businessActionContextMap.put(Constants.USE_COMMON_FENCE, false);
+
+ actionParam.setBusinessActionContext(businessActionContextMap);
+
+ assertEquals("commit",
actionParam.getBusinessActionContext().get(Constants.COMMIT_METHOD));
+ assertFalse((Boolean)
actionParam.getBusinessActionContext().get(Constants.USE_COMMON_FENCE));
+ }
+
+ @Test
+ public void testGetBranchType() {
+ actionParam.setBranchType(BranchType.TCC);
+ assertEquals(BranchType.TCC, actionParam.getBranchType());
+ }
+}
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/interceptor/parser/IfNeedEnhanceBeanTest.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/interceptor/parser/IfNeedEnhanceBeanTest.java
new file mode 100644
index 0000000000..cc8843301d
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/interceptor/parser/IfNeedEnhanceBeanTest.java
@@ -0,0 +1,46 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.interceptor.parser;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class IfNeedEnhanceBeanTest {
+
+ private IfNeedEnhanceBean enhanceBean;
+
+
+ @BeforeEach
+ public void setUp() {
+ enhanceBean = new IfNeedEnhanceBean();
+ }
+
+ @Test
+ public void testIsEnhanceNeeded() {
+ enhanceBean.setIfNeed(true);
+ assertTrue(enhanceBean.isIfNeed());
+ }
+
+ @Test
+ public void testGetNeedEnhanceEnum() {
+ enhanceBean.setNeedEnhanceEnum(NeedEnhanceEnum.SERVICE_BEAN);
+ assertEquals(NeedEnhanceEnum.SERVICE_BEAN,
enhanceBean.getNeedEnhanceEnum());
+ }
+}
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/json/JsonParserImpl.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/json/JsonParserImpl.java
new file mode 100644
index 0000000000..64ee066af6
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/json/JsonParserImpl.java
@@ -0,0 +1,41 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.json;
+
+import java.io.IOException;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class JsonParserImpl implements JsonParser {
+
+ private final ObjectMapper mapper = new ObjectMapper();
+
+ @Override
+ public String toJSONString(Object object) throws IOException {
+ return mapper.writeValueAsString(object);
+ }
+
+ @Override
+ public <T> T parseObject(String text, Class<T> clazz) throws IOException {
+ return mapper.readValue(text, clazz);
+ }
+
+ @Override
+ public String getName() {
+ return "customParser";
+ }
+}
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/json/JsonParserWrapTest.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/json/JsonParserWrapTest.java
new file mode 100644
index 0000000000..50073bdc32
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/json/JsonParserWrapTest.java
@@ -0,0 +1,77 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.json;
+
+import org.apache.seata.common.exception.JsonParseException;
+import org.apache.seata.core.model.BranchType;
+import
org.apache.seata.integration.tx.api.interceptor.TwoPhaseBusinessActionParam;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class JsonParserWrapTest {
+
+ private JsonParserWrap parserWrap;
+ private final String jsonString =
"{\"actionName\":\"business_action\",\"useCommonFence\":null,\"businessActionContext\":null,"
+
+ "\"branchType\":\"TCC\",\"delayReport\":null}";
+
+
+ @BeforeEach
+ public void setUp() {
+ parserWrap = new JsonParserWrap(new JsonParserImpl());
+ }
+
+ @Test
+ public void testToJSONString() {
+ TwoPhaseBusinessActionParam actionParam = new
TwoPhaseBusinessActionParam();
+ actionParam.setActionName("business_action");
+ actionParam.setBranchType(BranchType.TCC);
+
+ String resultString = parserWrap.toJSONString(actionParam);
+
+ assertEquals(jsonString, resultString);
+ }
+
+ @Test
+ public void testToJSONStringThrowsException() {
+ Object mockItem = mock(Object.class);
+ when(mockItem.toString()).thenReturn(mockItem.getClass().getName());
+ assertThrows(JsonParseException.class, () ->
parserWrap.toJSONString(mockItem));
+ }
+
+ @Test
+ public void testParseObject() {
+ TwoPhaseBusinessActionParam actionParam =
parserWrap.parseObject(jsonString, TwoPhaseBusinessActionParam.class);
+
+ assertEquals("business_action", actionParam.getActionName());
+ assertEquals(BranchType.TCC, actionParam.getBranchType());
+ }
+
+ @Test
+ public void testParseObjectThrowsException() {
+ assertThrows(JsonParseException.class, () ->
parserWrap.parseObject(jsonString, Integer.class));
+ }
+
+ @Test
+ public void testGetName() {
+ assertEquals("customParser", parserWrap.getName());
+ }
+}
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/TwoPhaseResultTest.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/TwoPhaseResultTest.java
new file mode 100644
index 0000000000..c5d67afd5b
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/TwoPhaseResultTest.java
@@ -0,0 +1,56 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.remoting;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class TwoPhaseResultTest {
+
+ private TwoPhaseResult result;
+
+ @BeforeEach
+ public void setUp() {
+ result = new TwoPhaseResult(false, "");
+ }
+
+ @Test
+ public void testGetMessage() {
+ result.setMessage("message");
+ assertEquals("message", result.getMessage());
+ }
+
+ @Test
+ public void testIsSuccess() {
+ result.setSuccess(true);
+ assertTrue(result.isSuccess());
+ }
+
+ @Test
+ public void testToStringEmptyMessage() {
+ assertEquals("[isSuccess:false]", result.toString());
+ }
+
+ @Test
+ public void testToStringNotEmptyMessage() {
+ result.setMessage("test");
+ assertEquals("[isSuccess:false, msg:test]", result.toString());
+ }
+}
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/DefaultRemotingParserTest.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/DefaultRemotingParserTest.java
new file mode 100644
index 0000000000..7cdc2456ee
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/DefaultRemotingParserTest.java
@@ -0,0 +1,136 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.remoting.parser;
+
+import org.apache.seata.integration.tx.api.remoting.Protocols;
+import org.apache.seata.integration.tx.api.remoting.RemotingDesc;
+import org.apache.seata.integration.tx.api.remoting.RemotingParser;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class DefaultRemotingParserTest {
+
+ private static final DefaultRemotingParser remotingParser =
DefaultRemotingParser.get();
+
+ @BeforeAll
+ public static void setUp() {
+ remotingParser.registerRemotingParser(new SimpleRemotingParser());
+ }
+
+ @Test
+ public void testIsRemoting() {
+ SimpleRemoteBean remoteBean = new SimpleRemoteBean();
+ RemotingParser parser = remotingParser.isRemoting(remoteBean,
remoteBean.getClass().getName());
+ assertInstanceOf(SimpleRemotingParser.class, parser);
+ }
+
+ @Test
+ public void testIsRemotingFail() {
+ SimpleBean remoteBean = new SimpleBean();
+ assertNull(remotingParser.isRemoting(remoteBean,
remoteBean.getClass().getName()));
+ }
+
+ @Test
+ public void testIsReference() {
+ SimpleRemoteBean remoteBean = new SimpleRemoteBean();
+ assertTrue(remotingParser.isReference(remoteBean,
remoteBean.getClass().getName()));
+ }
+
+ @Test
+ public void testIsReferenceFail() {
+ SimpleBean remoteBean = new SimpleBean();
+ assertFalse(remotingParser.isReference(remoteBean,
remoteBean.getClass().getName()));
+ }
+
+ @Test
+ public void testIsServiceFromObject() {
+ SimpleRemoteBean remoteBean = new SimpleRemoteBean();
+ assertTrue(remotingParser.isService(remoteBean,
remoteBean.getClass().getName()));
+ }
+
+ @Test
+ public void testIsServiceFromObjectFail() {
+ SimpleBean remoteBean = new SimpleBean();
+ assertFalse(remotingParser.isService(remoteBean,
remoteBean.getClass().getName()));
+ }
+
+ @Test
+ public void testIsServiceFromClass() {
+ assertTrue(remotingParser.isService(SimpleRemoteBean.class));
+ }
+
+ @Test
+ public void testIsServiceFromClassFail() {
+ assertFalse(remotingParser.isService(SimpleBean.class));
+ }
+
+ @Test
+ public void testGetServiceDesc() {
+ SimpleRemoteBean remoteBean = new SimpleRemoteBean();
+ RemotingDesc desc = remotingParser.getServiceDesc(remoteBean,
remoteBean.getClass().getName());
+ assertEquals(Protocols.IN_JVM, desc.getProtocol());
+ assertEquals(SimpleRemoteBean.class, desc.getServiceClass());
+ }
+
+ @Test
+ public void testGetServiceDescFail() {
+ SimpleBean simpleBean = new SimpleBean();
+ assertNull(remotingParser.getServiceDesc(simpleBean,
simpleBean.getClass().getName()));
+ }
+
+ @Test
+ public void testParserRemotingServiceInfo() {
+ SimpleRemoteBean remoteBean = new SimpleRemoteBean();
+ SimpleRemotingParser parser = new SimpleRemotingParser();
+ RemotingDesc desc =
remotingParser.parserRemotingServiceInfo(remoteBean,
remoteBean.getClass().getName(),
+ parser);
+
+ assertEquals(desc,
remotingParser.parserRemotingServiceInfo(remoteBean,
remoteBean.getClass().getName(),
+ parser));
+ assertEquals(Protocols.IN_JVM, desc.getProtocol());
+ assertEquals(SimpleRemoteBean.class, desc.getServiceClass());
+ }
+
+ @Test
+ public void testParserRemotingServiceInfoFail() {
+ SimpleBean simpleBean = new SimpleBean();
+ assertNull(remotingParser.parserRemotingServiceInfo(simpleBean,
simpleBean.getClass().getName(),
+ new SimpleRemotingParser()));
+ }
+
+ @Test
+ public void testGetRemotingBeanDesc() {
+ SimpleRemoteBean remoteBean = new SimpleRemoteBean();
+ remotingParser.parserRemotingServiceInfo(remoteBean,
remoteBean.getClass().getName(),
+ new SimpleRemotingParser());
+
+ assertNotNull(remotingParser.getRemotingBeanDesc(remoteBean));
+ }
+
+ @Test
+ public void testGetRemotingDeanDescFail() {
+ SimpleBean simpleBean = new SimpleBean();
+ assertNull(remotingParser.getRemotingBeanDesc(simpleBean));
+ }
+}
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/RemoteBean.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/RemoteBean.java
new file mode 100644
index 0000000000..df0edd3770
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/RemoteBean.java
@@ -0,0 +1,31 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.remoting.parser;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * annotation for DefaultRemotingParser test
+ *
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface RemoteBean {
+}
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/SimpleBean.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/SimpleBean.java
new file mode 100644
index 0000000000..7d672afc7f
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/SimpleBean.java
@@ -0,0 +1,20 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.remoting.parser;
+
+public class SimpleBean {
+}
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/SimpleRemoteBean.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/SimpleRemoteBean.java
new file mode 100644
index 0000000000..164457aad7
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/SimpleRemoteBean.java
@@ -0,0 +1,21 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.remoting.parser;
+
+@RemoteBean
+public class SimpleRemoteBean {
+}
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/SimpleRemotingParser.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/SimpleRemotingParser.java
new file mode 100644
index 0000000000..8a8454eb48
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/remoting/parser/SimpleRemotingParser.java
@@ -0,0 +1,69 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.remoting.parser;
+
+import org.apache.seata.common.exception.FrameworkException;
+import org.apache.seata.integration.tx.api.remoting.Protocols;
+import org.apache.seata.integration.tx.api.remoting.RemotingDesc;
+
+public class SimpleRemotingParser extends AbstractedRemotingParser {
+
+ @Override
+ public boolean isReference(Object bean, String beanName) throws
FrameworkException {
+ return isRemoteBean(bean);
+ }
+
+ @Override
+ public boolean isService(Object bean, String beanName) throws
FrameworkException {
+ return isRemoteBean(bean);
+ }
+
+ @Override
+ public boolean isService(Class<?> beanClass) throws FrameworkException {
+ return isRemoteBean(beanClass);
+ }
+
+ @Override
+ public RemotingDesc getServiceDesc(Object bean, String beanName) throws
FrameworkException {
+ if (!this.isRemoting(bean, beanName)) {
+ return null;
+ }
+
+ RemotingDesc remotingDesc = new RemotingDesc();
+ remotingDesc.setReference(this.isReference(bean, beanName));
+ remotingDesc.setService(this.isService(bean, beanName));
+ remotingDesc.setProtocol(Protocols.IN_JVM);
+ remotingDesc.setServiceClass(bean.getClass());
+
remotingDesc.setServiceClassName(remotingDesc.getServiceClass().getName());
+ remotingDesc.setTargetBean(bean);
+
+ return remotingDesc;
+ }
+
+ @Override
+ public short getProtocol() {
+ return Protocols.IN_JVM;
+ }
+
+ private boolean isRemoteBean(Object bean) {
+ return isRemoteBean(bean.getClass());
+ }
+
+ private boolean isRemoteBean(Class<?> clazz) {
+ return clazz.isAnnotationPresent(RemoteBean.class);
+ }
+}
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/util/ClassUtilsTest.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/util/ClassUtilsTest.java
new file mode 100644
index 0000000000..583bc397f3
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/util/ClassUtilsTest.java
@@ -0,0 +1,87 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.util;
+
+import java.lang.reflect.Method;
+import java.util.AbstractList;
+import java.util.AbstractMap;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+public class ClassUtilsTest {
+
+ @Test
+ public void testGetPackageName() {
+ String packageName = ClassUtils.getPackageName(AbstractMap.class);
+ assertEquals("java.util", packageName);
+ }
+
+ @Test
+ public void testGetPackageNameForSimpleName() {
+ String packageName =
ClassUtils.getPackageName(AbstractMap.class.getSimpleName());
+ assertEquals("", packageName);
+ }
+
+ @Test
+ public void testGetMostSpecificMethodWhenClassIsNull() throws
NoSuchMethodException {
+ Method method = AbstractMap.class.getDeclaredMethod("clone");
+ Method specificMethod = ClassUtils.getMostSpecificMethod(method, null);
+ assertEquals(AbstractMap.class, specificMethod.getDeclaringClass());
+ }
+
+ @Test
+ public void testGetMostSpecificMethodFromSameClass() throws
NoSuchMethodException {
+ Method method = AbstractMap.class.getDeclaredMethod("clone");
+ Method specificMethod = ClassUtils.getMostSpecificMethod(method,
AbstractMap.class);
+ assertEquals(AbstractMap.class, specificMethod.getDeclaringClass());
+ }
+
+ @Test
+ public void testGetMostSpecificNotPublicMethod() throws
NoSuchMethodException {
+ Method method = AbstractMap.class.getDeclaredMethod("clone");
+ Method specificMethod = ClassUtils.getMostSpecificMethod(method,
HashMap.class);
+ assertNotEquals(HashMap.class.getDeclaredMethod("clone"),
specificMethod);
+ }
+
+ @Test
+ public void testGetMostSpecificPublicMethod() throws NoSuchMethodException
{
+ Method method = Map.class.getDeclaredMethod("remove", Object.class,
Object.class);
+ Method specificMethod = ClassUtils.getMostSpecificMethod(method,
HashMap.class);
+ assertEquals(HashMap.class.getDeclaredMethod("remove", Object.class,
Object.class), specificMethod);
+ }
+
+ @Test
+ public void testGetMostSpecificPrivateMethod() throws
NoSuchMethodException {
+ Method method =
AbstractList.class.getDeclaredMethod("rangeCheckForAdd", int.class);
+ Method specificMethod = ClassUtils.getMostSpecificMethod(method,
ArrayList.class);
+ assertNotEquals(ArrayList.class.getDeclaredMethod("rangeCheckForAdd",
int.class), specificMethod);
+ }
+
+ @Test
+ public void testGetMostSpecificMethodWhichNotExistsInTargetClass() throws
NoSuchMethodException {
+ Method method = ArrayList.class.getDeclaredMethod("sort",
Comparator.class);
+ Method specificMethod = ClassUtils.getMostSpecificMethod(method,
Map.class);
+ assertEquals(ArrayList.class.getDeclaredMethod("sort",
Comparator.class), specificMethod);
+ }
+}
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/util/DubboUtilTest.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/util/DubboUtilTest.java
new file mode 100644
index 0000000000..1b093ce111
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/util/DubboUtilTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.util;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class DubboUtilTest {
+
+ @Test
+ public void testIsDubbo3XPartialProxyName() {
+
assertTrue(DubboUtil.isDubboProxyName(SimpleDubboProxy.class.getName()));
+ }
+
+ @Test
+ public void testIsNotDubboProxyName() {
+ assertFalse(DubboUtil.isDubboProxyName(ArrayList.class.getName()));
+ }
+
+ @Test
+ public void testGetAssistInterfaceForNull() throws NoSuchFieldException,
InvocationTargetException, IllegalAccessException, NoSuchMethodException {
+ assertNull(DubboUtil.getAssistInterface(null));
+ }
+
+ @Test
+ public void testGetAssistInterfaceForNotDubboProxy() throws
NoSuchFieldException, InvocationTargetException, IllegalAccessException,
NoSuchMethodException {
+ assertNull(DubboUtil.getAssistInterface(new ArrayList<>()));
+ }
+
+ @Test
+ public void testGetAssistInterfaceThrowsException() {
+ assertThrows(NoSuchFieldException.class, () ->
DubboUtil.getAssistInterface(new SimpleDubboProxy()));
+ }
+}
diff --git
a/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/util/SimpleDubboProxy.java
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/util/SimpleDubboProxy.java
new file mode 100644
index 0000000000..867f91699d
--- /dev/null
+++
b/integration-tx-api/src/test/java/org/apache/seata/integration/tx/api/util/SimpleDubboProxy.java
@@ -0,0 +1,21 @@
+/*
+ * 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 org.apache.seata.integration.tx.api.util;
+
+public class SimpleDubboProxy {
+
+}
diff --git
a/tcc/src/test/java/org/apache/seata/rm/tcc/json/JsonParserFactoryTest.java
b/tcc/src/test/java/org/apache/seata/rm/tcc/json/JsonParserFactoryTest.java
new file mode 100644
index 0000000000..baaabc4112
--- /dev/null
+++ b/tcc/src/test/java/org/apache/seata/rm/tcc/json/JsonParserFactoryTest.java
@@ -0,0 +1,37 @@
+/*
+ * 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 org.apache.seata.rm.tcc.json;
+
+import org.apache.seata.common.loader.EnhancedServiceNotFoundException;
+import org.apache.seata.integration.tx.api.json.JsonParserFactory;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+public class JsonParserFactoryTest {
+
+ @Test
+ public void testGetInstance() {
+ assertNotNull(JsonParserFactory.getInstance("jackson"));
+ }
+
+ @Test
+ public void testGetInstanceThrowsException() {
+ assertThrows(EnhancedServiceNotFoundException.class, () ->
JsonParserFactory.getInstance("jsonParser"));
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]