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

chengzhang 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 e46bc796623 Add checkEncryptAlgorithmType to avoid wrong config of 
encrypt algorithm (#25600)
e46bc796623 is described below

commit e46bc79662349503ff2eda53d5dd8b0937ede9f4
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Fri May 12 13:36:18 2023 +0800

    Add checkEncryptAlgorithmType to avoid wrong config of encrypt algorithm 
(#25600)
---
 .../user-manual/error-code/sql-error-code.cn.md    |  1 +
 .../user-manual/error-code/sql-error-code.en.md    |  1 +
 .../checker/EncryptRuleConfigurationChecker.java   | 43 +++++++++++-----------
 .../MismatchedEncryptAlgorithmTypeException.java   | 21 ++++++-----
 .../shardingsphere/encrypt/rule/EncryptRule.java   | 22 ++++++++++-
 .../encrypt/rule/EncryptRuleTest.java              | 41 ++++++++++++++++++++-
 .../it/mysql/external/ExternalMySQLParserIT.java   |  3 +-
 7 files changed, 95 insertions(+), 37 deletions(-)

diff --git a/docs/document/content/user-manual/error-code/sql-error-code.cn.md 
b/docs/document/content/user-manual/error-code/sql-error-code.cn.md
index f8877a3fedd..2a7281f403c 100644
--- a/docs/document/content/user-manual/error-code/sql-error-code.cn.md
+++ b/docs/document/content/user-manual/error-code/sql-error-code.cn.md
@@ -252,6 +252,7 @@ SQL 错误码以标准的 SQL State,Vendor Code 和详细错误信息提供,
 | 42000     | 20740       | Insert value of index \`%s\` can not support for 
encrypt.                                          |
 | 0A000     | 20741       | The SQL clause \`%s\` is unsupported in encrypt 
rule.                                              |
 | HY004     | 20780       | Encrypt algorithm \`%s\` initialization failed, 
reason is: %s.                                     |
+| HY004     | 20781       | \`%s\` column's encryptor name \`%s\` does not 
match encrypt algorithm type \`%s\`.                |
 | 44000     | 20703       | Cipher column of \`%s\` can not be null in 
database \`%s\`.                                        |
 | 44000     | 20704       | Encrypt column encryptor not found, reason is: %s. 
                                                |
 | 44000     | 20705       | Assisted query column of \`%s\` can not be null in 
database \`%s\`.                                |
diff --git a/docs/document/content/user-manual/error-code/sql-error-code.en.md 
b/docs/document/content/user-manual/error-code/sql-error-code.en.md
index 4707f1ab1ae..89f3b990383 100644
--- a/docs/document/content/user-manual/error-code/sql-error-code.en.md
+++ b/docs/document/content/user-manual/error-code/sql-error-code.en.md
@@ -267,6 +267,7 @@ SQL error codes provide by standard `SQL State`, `Vendor 
Code` and `Reason`, whi
 | 42000     | 20740       | Insert value of index \`%s\` can not support for 
encrypt.                                          |
 | 0A000     | 20741       | The SQL clause \`%s\` is unsupported in encrypt 
rule.                                              |
 | HY004     | 20780       | Encrypt algorithm \`%s\` initialization failed, 
reason is: %s.                                     |
+| HY004     | 20781       | \`%s\` column's encryptor name \`%s\` does not 
match encrypt algorithm type \`%s\`.                |
 | 44000     | 20703       | Cipher column of \`%s\` can not be null in 
database \`%s\`.                                        |
 | 44000     | 20704       | Encrypt column encryptor not found, reason is: %s. 
                                                |
 | 44000     | 20705       | Assisted query column of \`%s\` can not be null in 
database \`%s\`.                                |
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationChecker.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationChecker.java
index 9269c4074a4..cb9d666c9e0 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationChecker.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationChecker.java
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptCipherColumnN
 import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptEncryptorNotFoundException;
 import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptLikeQueryColumnNotFoundException;
 import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptLikeQueryEncryptorNotFoundException;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.config.rule.checker.RuleConfigurationChecker;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
@@ -44,47 +45,47 @@ public final class EncryptRuleConfigurationChecker 
implements RuleConfigurationC
     
     @Override
     public void check(final String databaseName, final 
EncryptRuleConfiguration config, final Map<String, DataSource> dataSourceMap, 
final Collection<ShardingSphereRule> rules) {
-        checkTableConfiguration(databaseName, config.getTables(), 
config.getEncryptors().keySet());
+        checkTableConfiguration(databaseName, config.getTables(), 
config.getEncryptors());
     }
     
-    private void checkTableConfiguration(final String databaseName, final 
Collection<EncryptTableRuleConfiguration> tables, final Collection<String> 
encryptors) {
-        for (EncryptTableRuleConfiguration each : tables) {
-            for (EncryptColumnRuleConfiguration column : each.getColumns()) {
-                checkCipherColumnConfiguration(databaseName, encryptors, 
column.getCipher(), column.getName());
-                column.getAssistedQuery().ifPresent(optional -> 
checkAssistColumnConfiguration(databaseName, encryptors, optional, 
column.getName()));
-                column.getLikeQuery().ifPresent(optional -> 
checkLikeColumnConfiguration(databaseName, encryptors, optional, 
column.getName()));
-            }
+    private void checkTableConfiguration(final String databaseName, final 
Collection<EncryptTableRuleConfiguration> tableRuleConfigs, final Map<String, 
AlgorithmConfiguration> encryptors) {
+        for (EncryptTableRuleConfiguration each : tableRuleConfigs) {
+            checkColumnConfiguration(databaseName, each, encryptors);
         }
     }
     
-    private void checkCipherColumnConfiguration(final String databaseName, 
final Collection<String> encryptors, final EncryptColumnItemRuleConfiguration 
cipherColumn, final String logicColumn) {
+    private void checkColumnConfiguration(final String databaseName, final 
EncryptTableRuleConfiguration tableRuleConfig, final Map<String, 
AlgorithmConfiguration> encryptors) {
+        for (EncryptColumnRuleConfiguration each : 
tableRuleConfig.getColumns()) {
+            checkCipherColumnConfiguration(databaseName, each.getCipher(), 
each.getName(), encryptors);
+            each.getAssistedQuery().ifPresent(optional -> 
checkAssistColumnConfiguration(databaseName, optional, each.getName(), 
encryptors));
+            each.getLikeQuery().ifPresent(optional -> 
checkLikeColumnConfiguration(databaseName, optional, each.getName(), 
encryptors));
+        }
+    }
+    
+    private void checkCipherColumnConfiguration(final String databaseName, 
final EncryptColumnItemRuleConfiguration cipherColumn, final String logicColumn,
+                                                final Map<String, 
AlgorithmConfiguration> encryptors) {
         
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(cipherColumn.getName()),
 () -> new EncryptCipherColumnNotFoundException(logicColumn, databaseName));
         
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(cipherColumn.getEncryptorName()),
                 () -> new 
EncryptEncryptorNotFoundException(String.format("Encryptor name of `%s` can not 
be null in database `%s`.", logicColumn, databaseName)));
-        
ShardingSpherePreconditions.checkState(encryptors.contains(cipherColumn.getEncryptorName()),
+        
ShardingSpherePreconditions.checkState(encryptors.containsKey(cipherColumn.getEncryptorName()),
                 () -> new EncryptEncryptorNotFoundException(String.format("Can 
not find encryptor `%s` in database `%s`.", cipherColumn.getEncryptorName(), 
databaseName)));
     }
     
-    private void checkAssistColumnConfiguration(final String databaseName, 
final Collection<String> encryptors, final EncryptColumnItemRuleConfiguration 
assistedQueryColumn,
-                                                final String logicColumn) {
-        if (Strings.isNullOrEmpty(assistedQueryColumn.getName()) && 
Strings.isNullOrEmpty(assistedQueryColumn.getEncryptorName())) {
-            return;
-        }
+    private void checkAssistColumnConfiguration(final String databaseName, 
final EncryptColumnItemRuleConfiguration assistedQueryColumn, final String 
logicColumn,
+                                                final Map<String, 
AlgorithmConfiguration> encryptors) {
         
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(assistedQueryColumn.getName()),
 () -> new EncryptAssistedQueryColumnNotFoundException(logicColumn, 
databaseName));
         
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(assistedQueryColumn.getEncryptorName()),
 () -> new EncryptAssistedQueryEncryptorNotFoundException(
                 String.format("Assisted query encryptor name of `%s` can not 
be null in database `%s`.", logicColumn, databaseName)));
-        
ShardingSpherePreconditions.checkState(encryptors.contains(assistedQueryColumn.getEncryptorName()),
 () -> new EncryptAssistedQueryEncryptorNotFoundException(
+        
ShardingSpherePreconditions.checkState(encryptors.containsKey(assistedQueryColumn.getEncryptorName()),
 () -> new EncryptAssistedQueryEncryptorNotFoundException(
                 String.format("Can not find assisted query encryptor `%s` in 
database `%s`.", assistedQueryColumn.getEncryptorName(), databaseName)));
     }
     
-    private void checkLikeColumnConfiguration(final String databaseName, final 
Collection<String> encryptors, final EncryptColumnItemRuleConfiguration 
likeQueryColumn, final String logicColumn) {
-        if (Strings.isNullOrEmpty(likeQueryColumn.getName()) && 
Strings.isNullOrEmpty(likeQueryColumn.getEncryptorName())) {
-            return;
-        }
+    private void checkLikeColumnConfiguration(final String databaseName, final 
EncryptColumnItemRuleConfiguration likeQueryColumn, final String logicColumn,
+                                              final Map<String, 
AlgorithmConfiguration> encryptors) {
         
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(likeQueryColumn.getName()),
 () -> new EncryptLikeQueryColumnNotFoundException(logicColumn, databaseName));
         
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(likeQueryColumn.getEncryptorName()),
                 () -> new 
EncryptLikeQueryEncryptorNotFoundException(String.format("Like query encryptor 
name of `%s` can not be null in database `%s`.", logicColumn, databaseName)));
-        
ShardingSpherePreconditions.checkState(encryptors.contains(likeQueryColumn.getEncryptorName()),
+        
ShardingSpherePreconditions.checkState(encryptors.containsKey(likeQueryColumn.getEncryptorName()),
                 () -> new 
EncryptLikeQueryEncryptorNotFoundException(String.format("Can not find like 
query encryptor `%s` in database `%s`.", likeQueryColumn.getEncryptorName(), 
databaseName)));
     }
     
diff --git 
a/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/exception/algorithm/MismatchedEncryptAlgorithmTypeException.java
similarity index 51%
copy from 
parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
copy to 
features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/exception/algorithm/MismatchedEncryptAlgorithmTypeException.java
index 98d1181f899..ef218583bf1 100644
--- 
a/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/exception/algorithm/MismatchedEncryptAlgorithmTypeException.java
@@ -15,18 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.it.sql.parser.it.mysql.external;
+package org.apache.shardingsphere.encrypt.exception.algorithm;
 
-import 
org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserIT;
-import 
org.apache.shardingsphere.test.it.sql.parser.external.loader.ExternalMySQLTestParameterLoader;
-import org.apache.shardingsphere.test.loader.ExternalCaseSettings;
+import org.apache.shardingsphere.encrypt.exception.EncryptSQLException;
+import 
org.apache.shardingsphere.infra.util.exception.external.sql.sqlstate.XOpenSQLState;
 
-@ExternalCaseSettings(value = "MySQL", caseURL = 
ExternalMySQLParserIT.CASE_URL, resultURL = ExternalMySQLParserIT.RESULT_URL,
-        testParameterLoader = ExternalMySQLTestParameterLoader.class)
-class ExternalMySQLParserIT extends ExternalSQLParserIT {
-    
-    static final String CASE_URL = 
"https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t";;
+/**
+ * Mismatched encrypt algorithm type exception.
+ */
+public final class MismatchedEncryptAlgorithmTypeException extends 
EncryptSQLException {
     
-    static final String RESULT_URL = 
"https://github.com/mysql/mysql-server/tree/8.0/mysql-test/r";;
+    private static final long serialVersionUID = -3133058284863085899L;
     
+    public MismatchedEncryptAlgorithmTypeException(final String columnType, 
final String encryptorName, final String encryptAlgorithmType) {
+        super(XOpenSQLState.GENERAL_ERROR, 81, "`%s` column's encryptor name 
`%s` does not match encrypt algorithm type `%s`.", columnType, encryptorName, 
encryptAlgorithmType);
+    }
 }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
index f4fc882569b..8e436c8e828 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
@@ -20,11 +20,14 @@ package org.apache.shardingsphere.encrypt.rule;
 import lombok.Getter;
 import 
org.apache.shardingsphere.encrypt.api.config.CompatibleEncryptRuleConfiguration;
 import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
+import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
+import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
 import org.apache.shardingsphere.encrypt.api.context.EncryptContext;
 import 
org.apache.shardingsphere.encrypt.api.encrypt.assisted.AssistedEncryptAlgorithm;
 import org.apache.shardingsphere.encrypt.api.encrypt.like.LikeEncryptAlgorithm;
 import 
org.apache.shardingsphere.encrypt.api.encrypt.standard.StandardEncryptAlgorithm;
 import org.apache.shardingsphere.encrypt.context.EncryptContextBuilder;
+import 
org.apache.shardingsphere.encrypt.exception.algorithm.MismatchedEncryptAlgorithmTypeException;
 import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptAssistedQueryEncryptorNotFoundException;
 import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptEncryptorNotFoundException;
 import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptLikeQueryEncryptorNotFoundException;
@@ -66,7 +69,10 @@ public final class EncryptRule implements DatabaseRule, 
TableContainedRule, Colu
     public EncryptRule(final EncryptRuleConfiguration ruleConfig) {
         configuration = ruleConfig;
         ruleConfig.getEncryptors().forEach((key, value) -> 
putAllEncryptors(key, TypedSPILoader.getService(EncryptAlgorithm.class, 
value.getType(), value.getProps())));
-        ruleConfig.getTables().forEach(each -> 
tables.put(each.getName().toLowerCase(), new EncryptTable(each)));
+        for (EncryptTableRuleConfiguration each : ruleConfig.getTables()) {
+            each.getColumns().forEach(this::checkEncryptAlgorithmType);
+            tables.put(each.getName().toLowerCase(), new EncryptTable(each));
+        }
     }
     
     /**
@@ -78,7 +84,10 @@ public final class EncryptRule implements DatabaseRule, 
TableContainedRule, Colu
     public EncryptRule(final CompatibleEncryptRuleConfiguration ruleConfig) {
         configuration = ruleConfig;
         ruleConfig.getEncryptors().forEach((key, value) -> 
putAllEncryptors(key, TypedSPILoader.getService(EncryptAlgorithm.class, 
value.getType(), value.getProps())));
-        ruleConfig.getTables().forEach(each -> 
tables.put(each.getName().toLowerCase(), new EncryptTable(each)));
+        for (EncryptTableRuleConfiguration each : ruleConfig.getTables()) {
+            each.getColumns().forEach(this::checkEncryptAlgorithmType);
+            tables.put(each.getName().toLowerCase(), new EncryptTable(each));
+        }
     }
     
     @SuppressWarnings("rawtypes")
@@ -94,6 +103,15 @@ public final class EncryptRule implements DatabaseRule, 
TableContainedRule, Colu
         }
     }
     
+    private void checkEncryptAlgorithmType(final 
EncryptColumnRuleConfiguration columnRuleConfig) {
+        
ShardingSpherePreconditions.checkState(standardEncryptors.containsKey(columnRuleConfig.getCipher().getEncryptorName()),
+                () -> new MismatchedEncryptAlgorithmTypeException("Cipher", 
columnRuleConfig.getCipher().getEncryptorName(), 
StandardEncryptAlgorithm.class.getSimpleName()));
+        columnRuleConfig.getLikeQuery().ifPresent(optional -> 
ShardingSpherePreconditions.checkState(likeEncryptors.containsKey(optional.getEncryptorName()),
+                () -> new MismatchedEncryptAlgorithmTypeException("Like 
query", optional.getEncryptorName(), 
LikeEncryptAlgorithm.class.getSimpleName())));
+        columnRuleConfig.getAssistedQuery().ifPresent(optional -> 
ShardingSpherePreconditions.checkState(assistedEncryptors.containsKey(optional.getEncryptorName()),
+                () -> new MismatchedEncryptAlgorithmTypeException("Assisted 
query", optional.getEncryptorName(), 
AssistedEncryptAlgorithm.class.getSimpleName())));
+    }
+    
     /**
      * Find encrypt table.
      * 
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
index 7b645562942..c80a312378b 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnItemRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
+import 
org.apache.shardingsphere.encrypt.exception.algorithm.MismatchedEncryptAlgorithmTypeException;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
 import org.junit.jupiter.api.Test;
@@ -164,8 +165,8 @@ class EncryptRuleTest {
         AlgorithmConfiguration standardEncryptConfig = new 
AlgorithmConfiguration("CORE.FIXTURE", new Properties());
         AlgorithmConfiguration queryAssistedEncryptConfig = new 
AlgorithmConfiguration("CORE.QUERY_ASSISTED.FIXTURE", new Properties());
         AlgorithmConfiguration queryLikeEncryptConfig = new 
AlgorithmConfiguration("CORE.QUERY_LIKE.FIXTURE", new Properties());
-        EncryptColumnRuleConfiguration pwdColumnConfig = new 
EncryptColumnRuleConfiguration("pwd", new 
EncryptColumnItemRuleConfiguration("pwd_cipher", "test_encryptor"));
-        EncryptColumnRuleConfiguration creditCardColumnConfig = new 
EncryptColumnRuleConfiguration("credit_card", new 
EncryptColumnItemRuleConfiguration("credit_card_cipher", "test_encryptor"));
+        EncryptColumnRuleConfiguration pwdColumnConfig = new 
EncryptColumnRuleConfiguration("pwd", new 
EncryptColumnItemRuleConfiguration("pwd_cipher", "standard_encryptor"));
+        EncryptColumnRuleConfiguration creditCardColumnConfig = new 
EncryptColumnRuleConfiguration("credit_card", new 
EncryptColumnItemRuleConfiguration("credit_card_cipher", "standard_encryptor"));
         EncryptTableRuleConfiguration tableConfig = new 
EncryptTableRuleConfiguration("T_ENCRYPT", Arrays.asList(pwdColumnConfig, 
creditCardColumnConfig));
         return new 
EncryptRuleConfiguration(Collections.singleton(tableConfig), 
getEncryptors(standardEncryptConfig, queryAssistedEncryptConfig, 
queryLikeEncryptConfig));
     }
@@ -178,4 +179,40 @@ class EncryptRuleTest {
         result.put("like_encryptor", queryLikeEncryptConfig);
         return result;
     }
+    
+    @Test
+    void assertNewEncryptRuleWhenConfigWrongCipherEncryptorType() {
+        EncryptColumnRuleConfiguration pwdColumnConfig = new 
EncryptColumnRuleConfiguration("pwd", new 
EncryptColumnItemRuleConfiguration("pwd_cipher", "assisted_encryptor"));
+        pwdColumnConfig.setAssistedQuery(new 
EncryptColumnItemRuleConfiguration("pwd_assist", "assisted_encryptor"));
+        pwdColumnConfig.setLikeQuery(new 
EncryptColumnItemRuleConfiguration("pwd_like", "like_encryptor"));
+        EncryptColumnRuleConfiguration creditCardColumnConfig = new 
EncryptColumnRuleConfiguration("credit_card", new 
EncryptColumnItemRuleConfiguration("credit_card_cipher", "standard_encryptor"));
+        EncryptTableRuleConfiguration tableConfig = new 
EncryptTableRuleConfiguration("t_encrypt", Arrays.asList(pwdColumnConfig, 
creditCardColumnConfig));
+        EncryptRuleConfiguration ruleConfig = new 
EncryptRuleConfiguration(Collections.singleton(tableConfig), getEncryptors(new 
AlgorithmConfiguration("CORE.FIXTURE", new Properties()),
+                new AlgorithmConfiguration("CORE.QUERY_ASSISTED.FIXTURE", new 
Properties()), new AlgorithmConfiguration("CORE.QUERY_LIKE.FIXTURE", new 
Properties())));
+        assertThrows(MismatchedEncryptAlgorithmTypeException.class, () -> new 
EncryptRule(ruleConfig));
+    }
+    
+    @Test
+    void assertNewEncryptRuleWhenConfigWrongAssistedQueryEncryptorType() {
+        EncryptColumnRuleConfiguration pwdColumnConfig = new 
EncryptColumnRuleConfiguration("pwd", new 
EncryptColumnItemRuleConfiguration("pwd_cipher", "standard_encryptor"));
+        pwdColumnConfig.setAssistedQuery(new 
EncryptColumnItemRuleConfiguration("pwd_assist", "like_encryptor"));
+        pwdColumnConfig.setLikeQuery(new 
EncryptColumnItemRuleConfiguration("pwd_like", "like_encryptor"));
+        EncryptColumnRuleConfiguration creditCardColumnConfig = new 
EncryptColumnRuleConfiguration("credit_card", new 
EncryptColumnItemRuleConfiguration("credit_card_cipher", "standard_encryptor"));
+        EncryptTableRuleConfiguration tableConfig = new 
EncryptTableRuleConfiguration("t_encrypt", Arrays.asList(pwdColumnConfig, 
creditCardColumnConfig));
+        EncryptRuleConfiguration ruleConfig = new 
EncryptRuleConfiguration(Collections.singleton(tableConfig), getEncryptors(new 
AlgorithmConfiguration("CORE.FIXTURE", new Properties()),
+                new AlgorithmConfiguration("CORE.QUERY_ASSISTED.FIXTURE", new 
Properties()), new AlgorithmConfiguration("CORE.QUERY_LIKE.FIXTURE", new 
Properties())));
+        assertThrows(MismatchedEncryptAlgorithmTypeException.class, () -> new 
EncryptRule(ruleConfig));
+    }
+    
+    @Test
+    void assertNewEncryptRuleWhenConfigWrongLikeQueryEncryptorType() {
+        EncryptColumnRuleConfiguration pwdColumnConfig = new 
EncryptColumnRuleConfiguration("pwd", new 
EncryptColumnItemRuleConfiguration("pwd_cipher", "standard_encryptor"));
+        pwdColumnConfig.setAssistedQuery(new 
EncryptColumnItemRuleConfiguration("pwd_assist", "assisted_encryptor"));
+        pwdColumnConfig.setLikeQuery(new 
EncryptColumnItemRuleConfiguration("pwd_like", "standard_encryptor"));
+        EncryptColumnRuleConfiguration creditCardColumnConfig = new 
EncryptColumnRuleConfiguration("credit_card", new 
EncryptColumnItemRuleConfiguration("credit_card_cipher", "standard_encryptor"));
+        EncryptTableRuleConfiguration tableConfig = new 
EncryptTableRuleConfiguration("t_encrypt", Arrays.asList(pwdColumnConfig, 
creditCardColumnConfig));
+        EncryptRuleConfiguration ruleConfig = new 
EncryptRuleConfiguration(Collections.singleton(tableConfig), getEncryptors(new 
AlgorithmConfiguration("CORE.FIXTURE", new Properties()),
+                new AlgorithmConfiguration("CORE.QUERY_ASSISTED.FIXTURE", new 
Properties()), new AlgorithmConfiguration("CORE.QUERY_LIKE.FIXTURE", new 
Properties())));
+        assertThrows(MismatchedEncryptAlgorithmTypeException.class, () -> new 
EncryptRule(ruleConfig));
+    }
 }
diff --git 
a/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
 
b/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
index 98d1181f899..706f025090b 100644
--- 
a/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
+++ 
b/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
@@ -21,8 +21,7 @@ import 
org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserIT
 import 
org.apache.shardingsphere.test.it.sql.parser.external.loader.ExternalMySQLTestParameterLoader;
 import org.apache.shardingsphere.test.loader.ExternalCaseSettings;
 
-@ExternalCaseSettings(value = "MySQL", caseURL = 
ExternalMySQLParserIT.CASE_URL, resultURL = ExternalMySQLParserIT.RESULT_URL,
-        testParameterLoader = ExternalMySQLTestParameterLoader.class)
+@ExternalCaseSettings(value = "MySQL", caseURL = 
ExternalMySQLParserIT.CASE_URL, resultURL = ExternalMySQLParserIT.RESULT_URL, 
testParameterLoader = ExternalMySQLTestParameterLoader.class)
 class ExternalMySQLParserIT extends ExternalSQLParserIT {
     
     static final String CASE_URL = 
"https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t";;

Reply via email to