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

jianglongtao 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 fbf9305a80b Add test cases of RuleConfigurationEventBuilder (#32466)
fbf9305a80b is described below

commit fbf9305a80bf5405e9f6e86eee170ef8261ae706
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Aug 11 22:57:19 2024 +0800

    Add test cases of RuleConfigurationEventBuilder (#32466)
---
 .../builder/RuleConfigurationEventBuilderTest.java | 126 +++++++++++++++++++++
 1 file changed, 126 insertions(+)

diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilderTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilderTest.java
new file mode 100644
index 00000000000..25a425b7e16
--- /dev/null
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilderTest.java
@@ -0,0 +1,126 @@
+/*
+ * 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.event.builder;
+
+import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
+import org.apache.shardingsphere.mode.event.dispatch.DispatchEvent;
+import 
org.apache.shardingsphere.mode.event.dispatch.rule.alter.AlterNamedRuleItemEvent;
+import 
org.apache.shardingsphere.mode.event.dispatch.rule.alter.AlterUniqueRuleItemEvent;
+import 
org.apache.shardingsphere.mode.event.dispatch.rule.drop.DropNamedRuleItemEvent;
+import 
org.apache.shardingsphere.mode.event.dispatch.rule.drop.DropUniqueRuleItemEvent;
+import org.apache.shardingsphere.mode.path.rule.RuleNodePath;
+import org.apache.shardingsphere.mode.spi.RuleNodePathProvider;
+import org.apache.shardingsphere.test.mock.AutoMockExtension;
+import org.apache.shardingsphere.test.mock.StaticMockSettings;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+
+import java.util.Collections;
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(AutoMockExtension.class)
+@StaticMockSettings(ShardingSphereServiceLoader.class)
+class RuleConfigurationEventBuilderTest {
+    
+    @Test
+    void assertBuildWithoutRuleNodePathProvider() {
+        
when(ShardingSphereServiceLoader.getServiceInstances(RuleNodePathProvider.class)).thenReturn(Collections.emptyList());
+        assertFalse(new RuleConfigurationEventBuilder().build("foo_db", new 
DataChangedEvent("k", "v", Type.IGNORED)).isPresent());
+    }
+    
+    @ParameterizedTest(name = "{0}")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    void assertBuild(final String name, final String eventKey, final String 
eventValue, final DataChangedEvent.Type type,
+                     final boolean isEventPresent, final Class<? extends 
DispatchEvent> dispatchEventClass) {
+        RuleNodePathProvider ruleNodePathProvider = 
mock(RuleNodePathProvider.class, RETURNS_DEEP_STUBS);
+        when(ruleNodePathProvider.getRuleNodePath()).thenReturn(new 
RuleNodePath("fixture", Collections.singleton("named"), 
Collections.singleton("unique")));
+        
when(ShardingSphereServiceLoader.getServiceInstances(RuleNodePathProvider.class)).thenReturn(Collections.singleton(ruleNodePathProvider));
+        Optional<DispatchEvent> actual = new 
RuleConfigurationEventBuilder().build("foo_db", new DataChangedEvent(eventKey, 
eventValue, type));
+        assertThat(actual.isPresent(), is(isEventPresent));
+        if (actual.isPresent()) {
+            if (dispatchEventClass == AlterNamedRuleItemEvent.class) {
+                assertDispatchEvent((AlterNamedRuleItemEvent) actual.get());
+            } else if (dispatchEventClass == DropNamedRuleItemEvent.class) {
+                assertDispatchEvent((DropNamedRuleItemEvent) actual.get());
+            } else if (dispatchEventClass == AlterUniqueRuleItemEvent.class) {
+                assertDispatchEvent((AlterUniqueRuleItemEvent) actual.get());
+            } else if (dispatchEventClass == DropUniqueRuleItemEvent.class) {
+                assertDispatchEvent((DropUniqueRuleItemEvent) actual.get());
+            } else {
+                fail("No such event type.");
+            }
+        }
+    }
+    
+    private void assertDispatchEvent(final AlterNamedRuleItemEvent actual) {
+        assertThat(actual.getDatabaseName(), is("foo_db"));
+        assertThat(actual.getItemName(), is("xxx"));
+        assertThat(actual.getType(), is("fixture.named"));
+    }
+    
+    private void assertDispatchEvent(final DropNamedRuleItemEvent actual) {
+        assertThat(actual.getDatabaseName(), is("foo_db"));
+        assertThat(actual.getItemName(), is("xxx"));
+        assertThat(actual.getType(), is("fixture.named"));
+    }
+    
+    private void assertDispatchEvent(final AlterUniqueRuleItemEvent actual) {
+        assertThat(actual.getDatabaseName(), is("foo_db"));
+        assertThat(actual.getActiveVersionKey(), 
is("/metadata/fixture/rules/fixture/unique/active_version"));
+        assertThat(actual.getActiveVersion(), is("foo"));
+        assertThat(actual.getType(), is("fixture.unique"));
+    }
+    
+    private void assertDispatchEvent(final DropUniqueRuleItemEvent actual) {
+        assertThat(actual.getDatabaseName(), is("foo_db"));
+        assertThat(actual.getType(), is("fixture.unique"));
+    }
+    
+    private static class TestCaseArgumentsProvider implements 
ArgumentsProvider {
+        
+        @Override
+        public Stream<? extends Arguments> provideArguments(final 
ExtensionContext extensionContext) {
+            return Stream.of(
+                    Arguments.of("InvalidPath", 
"/metadata/invalid/rules/fixture", "foo", Type.ADDED, false, null),
+                    Arguments.of("AddEventWithEmptyValue", 
"/metadata/fixture/rules/fixture/versions/0", "", Type.ADDED, false, null),
+                    Arguments.of("PathNotFound", 
"/metadata/fixture/rules/fixture/versions/0", "foo", Type.ADDED, false, null),
+                    Arguments.of("AddEventWithNamedRuleItemNodePath", 
"/metadata/fixture/rules/fixture/named/xxx/active_version", "foo", Type.ADDED, 
true, AlterNamedRuleItemEvent.class),
+                    Arguments.of("UpdateEventWithNamedRuleItemNodePath", 
"/metadata/fixture/rules/fixture/named/xxx/active_version", "foo", 
Type.UPDATED, true, AlterNamedRuleItemEvent.class),
+                    Arguments.of("DeleteEventWithNamedRuleItemNodePath", 
"/metadata/fixture/rules/fixture/named/xxx/active_version", "foo", 
Type.DELETED, true, DropNamedRuleItemEvent.class),
+                    Arguments.of("AddEventWithUniqueRuleItemNodePath", 
"/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.ADDED, 
true, AlterUniqueRuleItemEvent.class),
+                    Arguments.of("UpdateEventWithUniqueRuleItemNodePath", 
"/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.UPDATED, 
true, AlterUniqueRuleItemEvent.class),
+                    Arguments.of("DeleteEventWithUniqueRuleItemNodePath", 
"/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.DELETED, 
true, DropUniqueRuleItemEvent.class));
+        }
+    }
+}

Reply via email to