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";