This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 ed58e31494c Refactor AlterTrafficRuleExecutorTest Test Case (#31210)
ed58e31494c is described below
commit ed58e31494c0e756f0e47b34ecfd2eca6795efdd
Author: ilyas ahsan <[email protected]>
AuthorDate: Sun May 12 11:01:40 2024 +0700
Refactor AlterTrafficRuleExecutorTest Test Case (#31210)
* Refactor AlterTrafficRuleExecutorTest Test Case
* Fix Code Style Issue
---
.../DistSQLLoadBalanceAlgorithmFixture.java | 35 +++++++++++++
.../update/AlterTrafficRuleExecutorTest.java | 59 ++++++++++------------
...lgorithm.loadbalancer.core.LoadBalanceAlgorithm | 18 +++++++
3 files changed, 80 insertions(+), 32 deletions(-)
diff --git
a/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/fixture/DistSQLLoadBalanceAlgorithmFixture.java
b/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/fixture/DistSQLLoadBalanceAlgorithmFixture.java
new file mode 100644
index 00000000000..9c2b4e8305e
--- /dev/null
+++
b/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/fixture/DistSQLLoadBalanceAlgorithmFixture.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 org.apache.shardingsphere.traffic.distsql.handler.fixture;
+
+import
org.apache.shardingsphere.infra.algorithm.loadbalancer.core.LoadBalanceAlgorithm;
+
+import java.util.List;
+
+public class DistSQLLoadBalanceAlgorithmFixture implements
LoadBalanceAlgorithm {
+
+ @Override
+ public String getType() {
+ return "DISTSQL.FIXTURE";
+ }
+
+ @Override
+ public String getTargetName(final String groupName, final List<String>
availableTargetNames) {
+ return "Load Balance Algorithm Fixture";
+ }
+}
diff --git
a/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutorTest.java
b/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutorTest.java
index a54a1b28b1d..56c17f17897 100644
---
a/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutorTest.java
+++
b/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutorTest.java
@@ -17,10 +17,13 @@
package org.apache.shardingsphere.traffic.distsql.handler.update;
-import
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.MissingRequiredRuleException;
+import
org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine;
+import
org.apache.shardingsphere.distsql.handler.engine.update.rdl.rule.spi.global.GlobalRuleDefinitionExecutor;
import org.apache.shardingsphere.distsql.segment.AlgorithmSegment;
import
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
+import
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.MissingRequiredRuleException;
import
org.apache.shardingsphere.infra.spi.exception.ServiceProviderNotFoundException;
+import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.test.util.PropertiesBuilder;
import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
import org.apache.shardingsphere.traffic.api.config.TrafficRuleConfiguration;
@@ -34,10 +37,9 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Properties;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -47,36 +49,27 @@ class AlterTrafficRuleExecutorTest {
void assertExecuteWithNotExistRuleName() {
TrafficRuleSegment trafficRuleSegment = new TrafficRuleSegment(
"rule_name_3", Arrays.asList("olap", "order_by"), new
AlgorithmSegment("DISTSQL.FIXTURE", new Properties()), new
AlgorithmSegment("DISTSQL.FIXTURE", new Properties()));
- AlterTrafficRuleExecutor executor = new AlterTrafficRuleExecutor();
- TrafficRule rule = mock(TrafficRule.class);
-
when(rule.getConfiguration()).thenReturn(createTrafficRuleConfiguration());
- executor.setRule(rule);
- assertThrows(MissingRequiredRuleException.class, () ->
executor.checkBeforeUpdate(new
AlterTrafficRuleStatement(Collections.singleton(trafficRuleSegment))));
+ AlterTrafficRuleStatement sqlStatement = new
AlterTrafficRuleStatement(Collections.singleton(trafficRuleSegment));
+ DistSQLUpdateExecuteEngine engine = new
DistSQLUpdateExecuteEngine(sqlStatement, null, mockContextManager());
+ assertThrows(MissingRequiredRuleException.class,
engine::executeUpdate);
}
@Test
void assertExecuteWithInvalidAlgorithmType() {
TrafficRuleSegment trafficRuleSegment = new TrafficRuleSegment(
"rule_name_1", Arrays.asList("olap", "order_by"), new
AlgorithmSegment("invalid", new Properties()), new AlgorithmSegment("invalid",
new Properties()));
- AlterTrafficRuleExecutor executor = new AlterTrafficRuleExecutor();
- TrafficRule rule = mock(TrafficRule.class);
-
when(rule.getConfiguration()).thenReturn(createTrafficRuleConfiguration());
- executor.setRule(rule);
- assertThrows(ServiceProviderNotFoundException.class, () ->
executor.checkBeforeUpdate(new
AlterTrafficRuleStatement(Collections.singleton(trafficRuleSegment))));
+ AlterTrafficRuleStatement sqlStatement = new
AlterTrafficRuleStatement(Collections.singleton(trafficRuleSegment));
+ DistSQLUpdateExecuteEngine engine = new
DistSQLUpdateExecuteEngine(sqlStatement, null, mockContextManager());
+ assertThrows(ServiceProviderNotFoundException.class,
engine::executeUpdate);
}
@Test
void assertExecuteWithLoadBalancerCannotBeNull() {
TrafficRuleSegment trafficRuleSegment = new
TrafficRuleSegment("rule_name_1", Arrays.asList("olap", "order_by"),
new AlgorithmSegment("DISTSQL.FIXTURE", new Properties()),
null);
- AlterTrafficRuleExecutor executor = new AlterTrafficRuleExecutor();
- TrafficRule rule = mock(TrafficRule.class);
-
when(rule.getConfiguration()).thenReturn(createTrafficRuleConfiguration());
- executor.setRule(rule);
- TrafficRuleConfiguration actual =
executor.buildToBeAlteredRuleConfiguration(new
AlterTrafficRuleStatement(Collections.singleton(trafficRuleSegment)));
- assertThat(actual.getTrafficStrategies().size(), is(2));
- assertThat(actual.getTrafficAlgorithms().size(), is(2));
- assertThat(actual.getLoadBalancers().size(), is(1));
+ AlterTrafficRuleStatement sqlStatement = new
AlterTrafficRuleStatement(Collections.singleton(trafficRuleSegment));
+ DistSQLUpdateExecuteEngine engine = new
DistSQLUpdateExecuteEngine(sqlStatement, null, mockContextManager());
+ assertDoesNotThrow(engine::executeUpdate);
}
@Test
@@ -85,18 +78,20 @@ class AlterTrafficRuleExecutorTest {
"rule_name_1", Arrays.asList("olap", "order_by"), new
AlgorithmSegment("DISTSQL.FIXTURE", new Properties()), new
AlgorithmSegment("DISTSQL.FIXTURE", new Properties()));
TrafficRuleSegment trafficRuleSegment2 = new TrafficRuleSegment(
"rule_name_2", Collections.emptyList(), new
AlgorithmSegment("DISTSQL.FIXTURE", new Properties()), new
AlgorithmSegment("DISTSQL.FIXTURE", new Properties()));
- AlterTrafficRuleExecutor executor = new AlterTrafficRuleExecutor();
+ AlterTrafficRuleStatement sqlStatement = new
AlterTrafficRuleStatement(Arrays.asList(trafficRuleSegment1,
trafficRuleSegment2));
+ DistSQLUpdateExecuteEngine engine = new
DistSQLUpdateExecuteEngine(sqlStatement, null, mockContextManager());
+ assertDoesNotThrow(engine::executeUpdate);
+ }
+
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ private ContextManager mockContextManager() {
+ ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
TrafficRule rule = mock(TrafficRule.class);
+ GlobalRuleDefinitionExecutor executor =
mock(GlobalRuleDefinitionExecutor.class);
+ when(executor.getRuleClass()).thenReturn(TrafficRule.class);
when(rule.getConfiguration()).thenReturn(createTrafficRuleConfiguration());
- executor.setRule(rule);
- TrafficRuleConfiguration actual =
- executor.buildToBeAlteredRuleConfiguration(new
AlterTrafficRuleStatement(Arrays.asList(trafficRuleSegment1,
trafficRuleSegment2)));
- assertThat(actual.getTrafficStrategies().size(), is(2));
- assertThat(actual.getTrafficAlgorithms().size(), is(2));
- assertThat(actual.getLoadBalancers().size(), is(2));
- assertThat(actual.getTrafficStrategies().iterator().next().getName(),
is("rule_name_1"));
-
assertNotNull(actual.getTrafficAlgorithms().get("rule_name_1_distsql.fixture"));
-
assertNotNull(actual.getLoadBalancers().get("rule_name_2_distsql.fixture"));
+
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(executor.getRuleClass())).thenReturn(rule);
+ return result;
}
private TrafficRuleConfiguration createTrafficRuleConfiguration() {
diff --git
a/kernel/traffic/distsql/handler/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.algorithm.loadbalancer.core.LoadBalanceAlgorithm
b/kernel/traffic/distsql/handler/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.algorithm.loadbalancer.core.LoadBalanceAlgorithm
new file mode 100644
index 00000000000..55ed72b0811
--- /dev/null
+++
b/kernel/traffic/distsql/handler/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.algorithm.loadbalancer.core.LoadBalanceAlgorithm
@@ -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.traffic.distsql.handler.fixture.DistSQLLoadBalanceAlgorithmFixture
\ No newline at end of file