This is an automated email from the ASF dual-hosted git repository.

zhaojinchao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 200708a7a61 Add test cases for 
RepositoryTupleSwapperEngine.swapToRepositoryTuples() (#32460)
200708a7a61 is described below

commit 200708a7a613bcede192c29f21af495362c5463a
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Aug 10 23:22:44 2024 +0800

    Add test cases for RepositoryTupleSwapperEngine.swapToRepositoryTuples() 
(#32460)
    
    * Refactor RepositoryTupleSwapperEngine
    
    * Add RepositoryTupleSwapperEngineTest
    
    * Add test cases for RepositoryTupleSwapperEngine.swapToRepositoryTuples()
---
 .../mode/tuple/RepositoryTupleSwapperEngine.java   |  6 +-
 .../tuple/RepositoryTupleSwapperEngineTest.java    | 89 ++++++++++++++++++++++
 .../fixture/leaf/LeafYamlRuleConfiguration.java    | 41 ++++++++++
 .../fixture/node/NodeYamlRuleConfiguration.java    | 66 ++++++++++++++++
 .../node/NodeYamlRuleConfigurationEnum.java        | 23 ++++++
 .../fixture/node/RuleNodePathProviderFixture.java  | 38 +++++++++
 .../fixture/none/NoneYamlRuleConfiguration.java    | 29 +++++++
 ...he.shardingsphere.mode.spi.RuleNodePathProvider | 18 +++++
 8 files changed, 306 insertions(+), 4 deletions(-)

diff --git 
a/mode/api/src/main/java/org/apache/shardingsphere/mode/tuple/RepositoryTupleSwapperEngine.java
 
b/mode/api/src/main/java/org/apache/shardingsphere/mode/tuple/RepositoryTupleSwapperEngine.java
index ac4fc77c8c6..b7e064f9321 100644
--- 
a/mode/api/src/main/java/org/apache/shardingsphere/mode/tuple/RepositoryTupleSwapperEngine.java
+++ 
b/mode/api/src/main/java/org/apache/shardingsphere/mode/tuple/RepositoryTupleSwapperEngine.java
@@ -72,7 +72,6 @@ public final class RepositoryTupleSwapperEngine {
         Collection<RepositoryTuple> result = new LinkedList<>();
         RuleNodePath ruleNodePath = 
TypedSPILoader.getService(RuleNodePathProvider.class, 
yamlRuleConfig.getRuleConfigurationType()).getRuleNodePath();
         for (Field each : getFields(yamlRuleConfig.getClass())) {
-            @SuppressWarnings("deprecation")
             boolean isAccessible = each.isAccessible();
             each.setAccessible(true);
             result.addAll(swapToRepositoryTuples(yamlRuleConfig, ruleNodePath, 
each));
@@ -110,8 +109,8 @@ public final class RepositoryTupleSwapperEngine {
                     ? Collections.emptyList()
                     : Collections.singleton(new 
RepositoryTuple(ruleNodePath.getUniqueItem(tupleName).getPath(), 
YamlEngine.marshal(fieldValue)));
         }
-        if (fieldValue instanceof String && !((String) fieldValue).isEmpty()) {
-            return Collections.singleton(new 
RepositoryTuple(ruleNodePath.getUniqueItem(tupleName).getPath(), 
fieldValue.toString()));
+        if (fieldValue instanceof String) {
+            return ((String) fieldValue).isEmpty() ? Collections.emptyList() : 
Collections.singleton(new 
RepositoryTuple(ruleNodePath.getUniqueItem(tupleName).getPath(), 
fieldValue.toString()));
         }
         if (fieldValue instanceof Boolean || fieldValue instanceof Integer || 
fieldValue instanceof Long) {
             return Collections.singleton(new 
RepositoryTuple(ruleNodePath.getUniqueItem(tupleName).getPath(), 
fieldValue.toString()));
@@ -190,7 +189,6 @@ public final class RepositoryTupleSwapperEngine {
     @SneakyThrows(ReflectiveOperationException.class)
     private void setFieldValue(final YamlRuleConfiguration yamlRuleConfig, 
final Collection<Field> fields, final RuleNodePath ruleNodePath, final 
RepositoryTuple repositoryTuple) {
         for (Field each : fields) {
-            @SuppressWarnings("deprecation")
             boolean isAccessible = each.isAccessible();
             each.setAccessible(true);
             setFieldValue(yamlRuleConfig, each, ruleNodePath, repositoryTuple);
diff --git 
a/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/RepositoryTupleSwapperEngineTest.java
 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/RepositoryTupleSwapperEngineTest.java
new file mode 100644
index 00000000000..6264914a1de
--- /dev/null
+++ 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/RepositoryTupleSwapperEngineTest.java
@@ -0,0 +1,89 @@
+/*
+ * 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.shardingsphere.mode.tuple;
+
+import 
org.apache.shardingsphere.mode.tuple.fixture.leaf.LeafYamlRuleConfiguration;
+import 
org.apache.shardingsphere.mode.tuple.fixture.node.NodeYamlRuleConfiguration;
+import 
org.apache.shardingsphere.mode.tuple.fixture.node.NodeYamlRuleConfigurationEnum;
+import 
org.apache.shardingsphere.mode.tuple.fixture.none.NoneYamlRuleConfiguration;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class RepositoryTupleSwapperEngineTest {
+    
+    @Test
+    void assertSwapToRepositoryTuplesWithoutRepositoryTupleEntityAnnotation() {
+        assertTrue(new 
RepositoryTupleSwapperEngine().swapToRepositoryTuples(new 
NoneYamlRuleConfiguration()).isEmpty());
+    }
+    
+    @Test
+    void assertSwapToRepositoryTuplesWithLeafYamlRuleConfiguration() {
+        Collection<RepositoryTuple> actual = new 
RepositoryTupleSwapperEngine().swapToRepositoryTuples(new 
LeafYamlRuleConfiguration("foo"));
+        assertThat(actual.size(), is(1));
+        RepositoryTuple actualTuple = actual.iterator().next();
+        assertThat(actualTuple.getKey(), is("leaf"));
+        assertThat(actualTuple.getValue(), is("value: foo" + 
System.lineSeparator()));
+    }
+    
+    @Test
+    void assertSwapToRepositoryTuplesWithEmptyNodeYamlRuleConfiguration() {
+        Collection<RepositoryTuple> actual = new 
RepositoryTupleSwapperEngine().swapToRepositoryTuples(new 
NodeYamlRuleConfiguration());
+        assertTrue(actual.isEmpty());
+    }
+    
+    @Test
+    void assertSwapToRepositoryTuplesWithNodeYamlRuleConfiguration() {
+        NodeYamlRuleConfiguration yamlRuleConfig = new 
NodeYamlRuleConfiguration();
+        yamlRuleConfig.setMapValue(Collections.singletonMap("k", new 
LeafYamlRuleConfiguration("v")));
+        yamlRuleConfig.setCollectionValue(Collections.singletonList(new 
LeafYamlRuleConfiguration("foo")));
+        yamlRuleConfig.setStringValue("str");
+        yamlRuleConfig.setBooleanValue(true);
+        yamlRuleConfig.setIntegerValue(1);
+        yamlRuleConfig.setLongValue(10L);
+        yamlRuleConfig.setEnumValue(NodeYamlRuleConfigurationEnum.FOO);
+        LeafYamlRuleConfiguration leaf = new LeafYamlRuleConfiguration();
+        leaf.setValue("leaf");
+        yamlRuleConfig.setLeaf(leaf);
+        List<RepositoryTuple> actual = new ArrayList<>(new 
RepositoryTupleSwapperEngine().swapToRepositoryTuples(yamlRuleConfig));
+        assertThat(actual.size(), is(8));
+        assertThat(actual.get(0).getKey(), is("map_value/k"));
+        assertThat(actual.get(0).getValue(), is("value: v" + 
System.lineSeparator()));
+        assertThat(actual.get(1).getKey(), is("collection_value"));
+        assertThat(actual.get(1).getValue(), is("- 
!!org.apache.shardingsphere.mode.tuple.fixture.leaf.LeafYamlRuleConfiguration" 
+ System.lineSeparator() + "  value: foo" + System.lineSeparator()));
+        assertThat(actual.get(2).getKey(), is("string_value"));
+        assertThat(actual.get(2).getValue(), is("str"));
+        assertThat(actual.get(3).getKey(), is("boolean_value"));
+        assertThat(actual.get(3).getValue(), is("true"));
+        assertThat(actual.get(4).getKey(), is("integer_value"));
+        assertThat(actual.get(4).getValue(), is("1"));
+        assertThat(actual.get(5).getKey(), is("long_value"));
+        assertThat(actual.get(5).getValue(), is("10"));
+        assertThat(actual.get(6).getKey(), is("enum_value"));
+        assertThat(actual.get(6).getValue(), is("FOO"));
+        assertThat(actual.get(7).getKey(), is("leaf"));
+        assertThat(actual.get(7).getValue(), is("value: leaf" + 
System.lineSeparator()));
+    }
+}
diff --git 
a/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/leaf/LeafYamlRuleConfiguration.java
 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/leaf/LeafYamlRuleConfiguration.java
new file mode 100644
index 00000000000..c8c3bd87a6c
--- /dev/null
+++ 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/leaf/LeafYamlRuleConfiguration.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.shardingsphere.mode.tuple.fixture.leaf;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
+import org.apache.shardingsphere.mode.tuple.annotation.RepositoryTupleEntity;
+
+@RepositoryTupleEntity(value = "leaf", leaf = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@Getter
+@Setter
+public final class LeafYamlRuleConfiguration implements YamlRuleConfiguration {
+    
+    private String value;
+    
+    @Override
+    public Class<? extends RuleConfiguration> getRuleConfigurationType() {
+        return RuleConfiguration.class;
+    }
+}
diff --git 
a/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/node/NodeYamlRuleConfiguration.java
 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/node/NodeYamlRuleConfiguration.java
new file mode 100644
index 00000000000..70488f7fa67
--- /dev/null
+++ 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/node/NodeYamlRuleConfiguration.java
@@ -0,0 +1,66 @@
+/*
+ * 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.shardingsphere.mode.tuple.fixture.node;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
+import org.apache.shardingsphere.mode.tuple.annotation.RepositoryTupleEntity;
+import org.apache.shardingsphere.mode.tuple.annotation.RepositoryTupleField;
+import 
org.apache.shardingsphere.mode.tuple.annotation.RepositoryTupleField.Type;
+import 
org.apache.shardingsphere.mode.tuple.fixture.leaf.LeafYamlRuleConfiguration;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Map;
+
+@RepositoryTupleEntity(value = "node")
+@Getter
+@Setter
+public final class NodeYamlRuleConfiguration implements YamlRuleConfiguration {
+    
+    @RepositoryTupleField(type = Type.OTHER)
+    private Map<String, LeafYamlRuleConfiguration> mapValue;
+    
+    @RepositoryTupleField(type = Type.OTHER)
+    private Collection<LeafYamlRuleConfiguration> collectionValue = new 
LinkedList<>();
+    
+    @RepositoryTupleField(type = Type.OTHER)
+    private String stringValue = "";
+    
+    @RepositoryTupleField(type = Type.OTHER)
+    private Boolean booleanValue;
+    
+    @RepositoryTupleField(type = Type.OTHER)
+    private Integer integerValue;
+    
+    @RepositoryTupleField(type = Type.OTHER)
+    private Long longValue;
+    
+    @RepositoryTupleField(type = Type.OTHER)
+    private NodeYamlRuleConfigurationEnum enumValue;
+    
+    @RepositoryTupleField(type = Type.OTHER)
+    private LeafYamlRuleConfiguration leaf;
+    
+    @Override
+    public Class<? extends RuleConfiguration> getRuleConfigurationType() {
+        return RuleConfiguration.class;
+    }
+}
diff --git 
a/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/node/NodeYamlRuleConfigurationEnum.java
 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/node/NodeYamlRuleConfigurationEnum.java
new file mode 100644
index 00000000000..269bd9f4c80
--- /dev/null
+++ 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/node/NodeYamlRuleConfigurationEnum.java
@@ -0,0 +1,23 @@
+/*
+ * 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.shardingsphere.mode.tuple.fixture.node;
+
+public enum NodeYamlRuleConfigurationEnum {
+    
+    FOO
+}
diff --git 
a/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/node/RuleNodePathProviderFixture.java
 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/node/RuleNodePathProviderFixture.java
new file mode 100644
index 00000000000..91b9db178c9
--- /dev/null
+++ 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/node/RuleNodePathProviderFixture.java
@@ -0,0 +1,38 @@
+/*
+ * 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.shardingsphere.mode.tuple.fixture.node;
+
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.mode.path.rule.RuleNodePath;
+import org.apache.shardingsphere.mode.spi.RuleNodePathProvider;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+public final class RuleNodePathProviderFixture implements RuleNodePathProvider 
{
+    
+    @Override
+    public RuleNodePath getRuleNodePath() {
+        return new RuleNodePath("node", Collections.singleton("map_value"), 
Arrays.asList("collection_value", "string_value", "boolean_value", 
"integer_value", "long_value", "enum_value", "leaf"));
+    }
+    
+    @Override
+    public Class<? extends RuleConfiguration> getType() {
+        return RuleConfiguration.class;
+    }
+}
diff --git 
a/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/none/NoneYamlRuleConfiguration.java
 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/none/NoneYamlRuleConfiguration.java
new file mode 100644
index 00000000000..ce34dff1ebd
--- /dev/null
+++ 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/tuple/fixture/none/NoneYamlRuleConfiguration.java
@@ -0,0 +1,29 @@
+/*
+ * 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.shardingsphere.mode.tuple.fixture.none;
+
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
+
+public final class NoneYamlRuleConfiguration implements YamlRuleConfiguration {
+    
+    @Override
+    public Class<? extends RuleConfiguration> getRuleConfigurationType() {
+        return RuleConfiguration.class;
+    }
+}
diff --git 
a/mode/api/src/test/resources/META-INF/services/org.apache.shardingsphere.mode.spi.RuleNodePathProvider
 
b/mode/api/src/test/resources/META-INF/services/org.apache.shardingsphere.mode.spi.RuleNodePathProvider
new file mode 100644
index 00000000000..de07f25a258
--- /dev/null
+++ 
b/mode/api/src/test/resources/META-INF/services/org.apache.shardingsphere.mode.spi.RuleNodePathProvider
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.mode.tuple.fixture.node.RuleNodePathProviderFixture

Reply via email to