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 e09f80151b5 Refactor test cases on CreateEncryptRuleExecutorTest 
(#33111)
e09f80151b5 is described below

commit e09f80151b549c270eb83c2ff6b9430e82dc9a23
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Fri Oct 4 00:10:02 2024 +0800

    Refactor test cases on CreateEncryptRuleExecutorTest (#33111)
---
 .../update/CreateEncryptRuleExecutorTest.java      | 94 ++++++++++++----------
 1 file changed, 52 insertions(+), 42 deletions(-)

diff --git 
a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleExecutorTest.java
 
b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleExecutorTest.java
index 7f3faf8a04c..417f66a712f 100644
--- 
a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleExecutorTest.java
+++ 
b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleExecutorTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.encrypt.distsql.handler.update;
 
+import 
org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine;
 import org.apache.shardingsphere.distsql.segment.AlgorithmSegment;
 import org.apache.shardingsphere.encrypt.config.EncryptRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.config.rule.EncryptTableRuleConfiguration;
@@ -29,12 +30,16 @@ import 
org.apache.shardingsphere.infra.algorithm.core.exception.AlgorithmInitial
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.DuplicateRuleException;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.InvalidRuleConfigurationException;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.spi.exception.ServiceProviderNotFoundException;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentMatchers;
 
+import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -43,47 +48,63 @@ import java.util.Properties;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 class CreateEncryptRuleExecutorTest {
     
-    private final CreateEncryptRuleExecutor executor = new 
CreateEncryptRuleExecutor();
-    
-    @BeforeEach
-    void setUp() {
-        executor.setDatabase(mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS));
+    @Test
+    void assertExecuteUpdateWithDuplicateEncryptRule() {
+        EncryptRule rule = mock(EncryptRule.class);
+        when(rule.getAllTableNames()).thenReturn(Arrays.asList("t_user", 
"t_order"));
+        assertThrows(DuplicateRuleException.class, () -> new 
DistSQLUpdateExecuteEngine(createSQLStatement(false, "MD5"), "foo_db", 
mockContextManager(rule)).executeUpdate());
     }
     
     @Test
-    void assertCheckSQLStatementWithDuplicateEncryptRule() {
+    void assertExecuteUpdateWithoutToBeCreatedEncryptors() {
         EncryptRule rule = mock(EncryptRule.class);
-        when(rule.getAllTableNames()).thenReturn(Arrays.asList("t_user", 
"t_order"));
-        executor.setRule(rule);
-        assertThrows(DuplicateRuleException.class, () -> 
executor.checkBeforeUpdate(createSQLStatement(false, "MD5")));
+        assertThrows(ServiceProviderNotFoundException.class, () -> new 
DistSQLUpdateExecuteEngine(createSQLStatement(false, "INVALID_TYPE"), "foo_db", 
mockContextManager(rule)).executeUpdate());
     }
     
     @Test
-    void assertCheckSQLStatementWithoutToBeCreatedEncryptors() {
-        assertThrows(ServiceProviderNotFoundException.class, () -> 
executor.checkBeforeUpdate(createSQLStatement(false, "INVALID_TYPE")));
+    void assertExecuteUpdateWithConflictedColumnNames() {
+        EncryptRule rule = mock(EncryptRule.class);
+        
when(rule.getConfiguration()).thenReturn(getCurrentRuleConfiguration());
+        assertThrows(InvalidRuleConfigurationException.class, () -> new 
DistSQLUpdateExecuteEngine(createConflictColumnNameSQLStatement(), "foo_db", 
mockContextManager(rule)).executeUpdate());
     }
     
     @Test
-    void assertCheckSQLStatementWithConflictColumnNames() {
+    void assertExecuteUpdateAESEncryptRuleWithPropertiesNotExists() {
+        CreateEncryptRuleStatement sqlStatement = 
createWrongAESEncryptorSQLStatement();
         EncryptRule rule = mock(EncryptRule.class);
         
when(rule.getConfiguration()).thenReturn(getCurrentRuleConfiguration());
-        executor.setRule(rule);
-        assertThrows(InvalidRuleConfigurationException.class, () -> 
executor.checkBeforeUpdate(createConflictColumnNameSQLStatement()));
+        assertThrows(AlgorithmInitializationException.class, () -> new 
DistSQLUpdateExecuteEngine(sqlStatement, "foo_db", 
mockContextManager(rule)).executeUpdate());
+    }
+    
+    private CreateEncryptRuleStatement createWrongAESEncryptorSQLStatement() {
+        EncryptColumnSegment tUserColumnSegment = new 
EncryptColumnSegment("user_id",
+                new EncryptColumnItemSegment("user_cipher", new 
AlgorithmSegment("AES", new Properties())),
+                new EncryptColumnItemSegment("assisted_column", new 
AlgorithmSegment("AES", new Properties())),
+                new EncryptColumnItemSegment("like_column", new 
AlgorithmSegment("CHAR_DIGEST_LIKE", new Properties())));
+        EncryptColumnSegment tOrderColumnSegment = new 
EncryptColumnSegment("order_id",
+                new EncryptColumnItemSegment("order_cipher", new 
AlgorithmSegment("AES", new Properties())),
+                new EncryptColumnItemSegment("assisted_column", new 
AlgorithmSegment("AES", new Properties())),
+                new EncryptColumnItemSegment("like_column", new 
AlgorithmSegment("CHAR_DIGEST_LIKE", new Properties())));
+        EncryptRuleSegment userRuleSegment = new EncryptRuleSegment("t_user", 
Collections.singleton(tUserColumnSegment));
+        EncryptRuleSegment orderRuleSegment = new 
EncryptRuleSegment("t_order", Collections.singleton(tOrderColumnSegment));
+        return new CreateEncryptRuleStatement(true, 
Arrays.asList(userRuleSegment, orderRuleSegment));
     }
     
     @Test
-    void assertCreateEncryptRuleWithIfNotExists() {
+    void assertExecuteUpdateWithIfNotExists() throws SQLException {
+        EncryptRule rule = mock(EncryptRule.class);
         CreateEncryptRuleStatement sqlStatement = 
createAESEncryptRuleSQLStatement(true);
-        executor.checkBeforeUpdate(sqlStatement);
-        EncryptRuleConfiguration toBeCreatedRuleConfig = 
executor.buildToBeCreatedRuleConfiguration(sqlStatement);
-        assertFalse(toBeCreatedRuleConfig.getTables().isEmpty());
-        assertFalse(toBeCreatedRuleConfig.getEncryptors().isEmpty());
+        ContextManager contextManager = mockContextManager(rule);
+        new DistSQLUpdateExecuteEngine(sqlStatement, "foo_db", 
contextManager).executeUpdate();
+        MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
+        metaDataManagerPersistService.alterRuleConfiguration(eq("foo_db"), 
ArgumentMatchers.argThat(this::assertIfNotExistsRuleConfiguration));
     }
     
     private CreateEncryptRuleStatement createAESEncryptRuleSQLStatement(final 
boolean ifNotExists) {
@@ -129,29 +150,18 @@ class CreateEncryptRuleExecutorTest {
         return new EncryptRuleConfiguration(rules, Collections.emptyMap());
     }
     
-    @Test
-    void assertCreateAESEncryptRuleWithPropertiesNotExists() {
-        CreateEncryptRuleStatement sqlStatement = 
createWrongAESEncryptorSQLStatement();
-        EncryptRule rule = mock(EncryptRule.class);
-        
when(rule.getConfiguration()).thenReturn(getCurrentRuleConfiguration());
-        executor.setRule(rule);
-        assertThrows(AlgorithmInitializationException.class, () -> 
executor.checkBeforeUpdate(sqlStatement));
+    private boolean assertIfNotExistsRuleConfiguration(final 
EncryptRuleConfiguration actual) {
+        assertFalse(actual.getTables().isEmpty());
+        assertFalse(actual.getEncryptors().isEmpty());
+        return true;
     }
     
-    private CreateEncryptRuleStatement createWrongAESEncryptorSQLStatement() {
-        EncryptColumnSegment tUserColumnSegment = new 
EncryptColumnSegment("user_id",
-                new EncryptColumnItemSegment("user_cipher", new 
AlgorithmSegment("AES", new Properties())),
-                new EncryptColumnItemSegment("assisted_column", new 
AlgorithmSegment("AES", new Properties())),
-                new EncryptColumnItemSegment("like_column", new 
AlgorithmSegment("CHAR_DIGEST_LIKE", new Properties())));
-        EncryptColumnSegment tOrderColumnSegment = new 
EncryptColumnSegment("order_id",
-                new EncryptColumnItemSegment("order_cipher", new 
AlgorithmSegment("AES", new Properties())),
-                new EncryptColumnItemSegment("assisted_column", new 
AlgorithmSegment("AES", new Properties())),
-                new EncryptColumnItemSegment("like_column", new 
AlgorithmSegment("CHAR_DIGEST_LIKE", new Properties())));
-        EncryptRuleSegment tUserRuleSegment = new EncryptRuleSegment("t_user", 
Collections.singleton(tUserColumnSegment));
-        EncryptRuleSegment tOrderRuleSegment = new 
EncryptRuleSegment("t_order", Collections.singleton(tOrderColumnSegment));
-        Collection<EncryptRuleSegment> rules = new LinkedList<>();
-        rules.add(tUserRuleSegment);
-        rules.add(tOrderRuleSegment);
-        return new CreateEncryptRuleStatement(true, rules);
+    private ContextManager mockContextManager(final EncryptRule rule) {
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(database.getName()).thenReturn("foo_db");
+        when(database.getRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singleton(rule)));
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
+        return result;
     }
 }

Reply via email to