This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 41bc836852f Move EncryptRuleConfiguration check logic from EncryptRule
to EncryptRuleConfigurationChecker (#19476)
41bc836852f is described below
commit 41bc836852f6cbc7641773290878c4f4d9c508d6
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Sat Jul 23 07:19:26 2022 +0800
Move EncryptRuleConfiguration check logic from EncryptRule to
EncryptRuleConfigurationChecker (#19476)
* Move EncryptRuleConfiguration check logic from EncryptRule to
EncryptRuleConfigurationChecker
* fix unit test
---
.../AbstractEncryptRuleConfigurationChecker.java | 41 +++++++++++++-
...thmProvidedEncryptRuleConfigurationChecker.java | 12 +++-
.../checker/EncryptRuleConfigurationChecker.java | 12 +++-
.../shardingsphere/encrypt/rule/EncryptRule.java | 64 ----------------------
...rovidedEncryptRuleConfigurationCheckerTest.java | 38 +++++++++++--
.../EncryptRuleConfigurationCheckerTest.java | 36 ++++++++++--
.../encrypt/rule/EncryptRuleTest.java | 18 ------
...ReadwriteSplittingRuleConfigurationChecker.java | 9 +--
.../AbstractShardingRuleConfigurationChecker.java | 34 ++++++------
9 files changed, 144 insertions(+), 120 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/AbstractEncryptRuleConfigurationChecker.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/AbstractEncryptRuleConfigurationChecker.java
index 0241dc95542..076914023f3 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/AbstractEncryptRuleConfigurationChecker.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/AbstractEncryptRuleConfigurationChecker.java
@@ -18,9 +18,14 @@
package org.apache.shardingsphere.encrypt.checker;
import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
+import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
+import java.util.Collection;
+
/**
* Abstract encrypt rule configuration checker.
*
@@ -30,8 +35,40 @@ public abstract class
AbstractEncryptRuleConfigurationChecker<T extends RuleConf
@Override
public final void check(final String databaseName, final T config) {
- Preconditions.checkState(!isEmptyEncryptors(config), "No available
encrypt rule configuration in database `%s`.", databaseName);
+ checkTableConfiguration(databaseName, getTables(config),
getEncryptors(config));
+ }
+
+ 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);
+ checkAssistColumnConfiguration(databaseName, encryptors,
column);
+ }
+ }
+ }
+
+ private void checkCipherColumnConfiguration(final String databaseName,
final Collection<String> encryptors, final EncryptColumnRuleConfiguration
column) {
+
Preconditions.checkState(!Strings.isNullOrEmpty(column.getCipherColumn()),
+ "Cipher column of `%s` can not be null in database `%s`.",
column.getLogicColumn(), databaseName);
+
Preconditions.checkState(!Strings.isNullOrEmpty(column.getEncryptorName()),
+ "Encryptor name of `%s` can not be null in database `%s`.",
column.getLogicColumn(), databaseName);
+
Preconditions.checkState(encryptors.contains(column.getEncryptorName()),
+ "Can not find encryptor `%s` in database `%s`.",
column.getEncryptorName(), databaseName);
+ }
+
+ private void checkAssistColumnConfiguration(final String databaseName,
final Collection<String> encryptors, final EncryptColumnRuleConfiguration
column) {
+ if (Strings.isNullOrEmpty(column.getAssistedQueryColumn()) &&
Strings.isNullOrEmpty(column.getAssistedQueryEncryptorName())) {
+ return;
+ }
+
Preconditions.checkState(!Strings.isNullOrEmpty(column.getAssistedQueryColumn()),
+ "Assisted query column of `%s` can not be null in database
`%s`.", column.getLogicColumn(), databaseName);
+
Preconditions.checkState(!Strings.isNullOrEmpty(column.getAssistedQueryEncryptorName()),
+ "Assisted query encryptor name of `%s` can not be null in
database `%s`.", column.getLogicColumn(), databaseName);
+
Preconditions.checkState(encryptors.contains(column.getAssistedQueryEncryptorName()),
+ "Can not find assisted query encryptor `%s` in database
`%s`.", column.getEncryptorName(), databaseName);
}
- protected abstract boolean isEmptyEncryptors(T config);
+ protected abstract Collection<String> getEncryptors(T config);
+
+ protected abstract Collection<EncryptTableRuleConfiguration> getTables(T
config);
}
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationChecker.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationChecker.java
index c4f38e8438d..bffb8c22861 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationChecker.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationChecker.java
@@ -18,16 +18,24 @@
package org.apache.shardingsphere.encrypt.checker;
import
org.apache.shardingsphere.encrypt.algorithm.config.AlgorithmProvidedEncryptRuleConfiguration;
+import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import org.apache.shardingsphere.encrypt.constant.EncryptOrder;
+import java.util.Collection;
+
/**
* Algorithm provided encrypt rule configuration checker.
*/
public final class AlgorithmProvidedEncryptRuleConfigurationChecker extends
AbstractEncryptRuleConfigurationChecker<AlgorithmProvidedEncryptRuleConfiguration>
{
@Override
- protected boolean isEmptyEncryptors(final
AlgorithmProvidedEncryptRuleConfiguration config) {
- return config.getEncryptors().isEmpty();
+ protected Collection<String> getEncryptors(final
AlgorithmProvidedEncryptRuleConfiguration config) {
+ return config.getEncryptors().keySet();
+ }
+
+ @Override
+ protected Collection<EncryptTableRuleConfiguration> getTables(final
AlgorithmProvidedEncryptRuleConfiguration config) {
+ return config.getTables();
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationChecker.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationChecker.java
index 8e0a0ca108a..c95c263855e 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationChecker.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationChecker.java
@@ -18,16 +18,24 @@
package org.apache.shardingsphere.encrypt.checker;
import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
+import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import org.apache.shardingsphere.encrypt.constant.EncryptOrder;
+import java.util.Collection;
+
/**
* Encrypt rule configuration checker.
*/
public final class EncryptRuleConfigurationChecker extends
AbstractEncryptRuleConfigurationChecker<EncryptRuleConfiguration> {
@Override
- protected boolean isEmptyEncryptors(final EncryptRuleConfiguration config)
{
- return config.getEncryptors().isEmpty();
+ protected Collection<String> getEncryptors(final EncryptRuleConfiguration
config) {
+ return config.getEncryptors().keySet();
+ }
+
+ @Override
+ protected Collection<EncryptTableRuleConfiguration> getTables(final
EncryptRuleConfiguration config) {
+ return config.getTables();
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
index 5ba03d72e8b..aff04eea771 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
@@ -18,12 +18,9 @@
package org.apache.shardingsphere.encrypt.rule;
import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
import lombok.Getter;
import
org.apache.shardingsphere.encrypt.algorithm.config.AlgorithmProvidedEncryptRuleConfiguration;
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.context.EncryptContextBuilder;
import org.apache.shardingsphere.encrypt.factory.EncryptAlgorithmFactory;
import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
@@ -60,7 +57,6 @@ public final class EncryptRule implements DatabaseRule,
TableContainedRule {
public EncryptRule(final EncryptRuleConfiguration ruleConfig) {
configuration = ruleConfig;
- Preconditions.checkArgument(isValidRuleConfiguration(ruleConfig),
"Invalid encrypt column configurations in EncryptTableRuleConfigurations.");
ruleConfig.getEncryptors().forEach((key, value) -> encryptors.put(key,
EncryptAlgorithmFactory.newInstance(value)));
ruleConfig.getTables().forEach(each ->
tables.put(each.getName().toLowerCase(), new EncryptTable(each)));
queryWithCipherColumn = ruleConfig.isQueryWithCipherColumn();
@@ -68,71 +64,11 @@ public final class EncryptRule implements DatabaseRule,
TableContainedRule {
public EncryptRule(final AlgorithmProvidedEncryptRuleConfiguration
ruleConfig) {
configuration = ruleConfig;
-
Preconditions.checkArgument(isValidRuleConfigurationWithAlgorithmProvided(ruleConfig),
"Invalid encrypt column configurations in EncryptTableRuleConfigurations.");
encryptors.putAll(ruleConfig.getEncryptors());
ruleConfig.getTables().forEach(each ->
tables.put(each.getName().toLowerCase(), new EncryptTable(each)));
queryWithCipherColumn = ruleConfig.isQueryWithCipherColumn();
}
- private boolean isValidRuleConfiguration(final EncryptRuleConfiguration
config) {
- return (config.getTables().isEmpty() &&
config.getEncryptors().isEmpty()) || isValidTableConfiguration(config);
- }
-
- private boolean isValidTableConfiguration(final EncryptRuleConfiguration
config) {
- for (EncryptTableRuleConfiguration table : config.getTables()) {
- for (EncryptColumnRuleConfiguration column : table.getColumns()) {
- if (!isValidCipherColumnConfiguration(config, column) ||
!isValidAssistColumnConfiguration(config, column)) {
- return false;
- }
- }
- }
- return true;
- }
-
- private boolean isValidCipherColumnConfiguration(final
EncryptRuleConfiguration encryptRuleConfig, final
EncryptColumnRuleConfiguration column) {
- return !Strings.isNullOrEmpty(column.getCipherColumn()) &&
!Strings.isNullOrEmpty(column.getEncryptorName()) &&
containsEncryptors(encryptRuleConfig, column.getEncryptorName());
- }
-
- private boolean isValidAssistColumnConfiguration(final
EncryptRuleConfiguration encryptRuleConfig, final
EncryptColumnRuleConfiguration column) {
- if (Strings.isNullOrEmpty(column.getAssistedQueryColumn()) &&
Strings.isNullOrEmpty(column.getAssistedQueryEncryptorName())) {
- return true;
- }
- return !Strings.isNullOrEmpty(column.getAssistedQueryColumn()) &&
!Strings.isNullOrEmpty(column.getAssistedQueryEncryptorName())
- && containsEncryptors(encryptRuleConfig,
column.getAssistedQueryEncryptorName());
- }
-
- private boolean containsEncryptors(final EncryptRuleConfiguration
encryptRuleConfig, final String encryptorName) {
- return
encryptRuleConfig.getEncryptors().keySet().stream().anyMatch(each ->
each.equals(encryptorName));
- }
-
- private boolean isValidRuleConfigurationWithAlgorithmProvided(final
AlgorithmProvidedEncryptRuleConfiguration config) {
- return (config.getTables().isEmpty() &&
config.getEncryptors().isEmpty()) ||
isValidTableConfigurationWithAlgorithmProvided(config);
- }
-
- private boolean isValidTableConfigurationWithAlgorithmProvided(final
AlgorithmProvidedEncryptRuleConfiguration config) {
- for (EncryptTableRuleConfiguration table : config.getTables()) {
- for (EncryptColumnRuleConfiguration column : table.getColumns()) {
- if
(!isValidCipherColumnConfigurationWithAlgorithmProvided(config, column) ||
!isValidAssistColumnConfigurationWithAlgorithmProvided(config, column)) {
- return false;
- }
- }
- }
- return true;
- }
-
- private boolean
isValidCipherColumnConfigurationWithAlgorithmProvided(final
AlgorithmProvidedEncryptRuleConfiguration encryptRuleConfig, final
EncryptColumnRuleConfiguration column) {
- return !Strings.isNullOrEmpty(column.getCipherColumn()) &&
!Strings.isNullOrEmpty(column.getEncryptorName())
- &&
encryptRuleConfig.getEncryptors().containsKey(column.getEncryptorName());
- }
-
- private boolean
isValidAssistColumnConfigurationWithAlgorithmProvided(final
AlgorithmProvidedEncryptRuleConfiguration encryptRuleConfig, final
EncryptColumnRuleConfiguration column) {
- if (Strings.isNullOrEmpty(column.getAssistedQueryColumn()) &&
Strings.isNullOrEmpty(column.getAssistedQueryEncryptorName())) {
- return true;
- }
- return !Strings.isNullOrEmpty(column.getAssistedQueryColumn()) &&
!Strings.isNullOrEmpty(column.getAssistedQueryEncryptorName())
- &&
encryptRuleConfig.getEncryptors().containsKey(column.getAssistedQueryEncryptorName());
- }
-
/**
* Find encrypt table.
*
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationCheckerTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationCheckerTest.java
index 8ec69cf26f7..3440d21c59e 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationCheckerTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationCheckerTest.java
@@ -18,11 +18,14 @@
package org.apache.shardingsphere.encrypt.checker;
import
org.apache.shardingsphere.encrypt.algorithm.config.AlgorithmProvidedEncryptRuleConfiguration;
+import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
+import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
import
org.apache.shardingsphere.infra.config.checker.RuleConfigurationCheckerFactory;
import org.junit.Test;
+import java.util.Collection;
import java.util.Collections;
import java.util.Optional;
@@ -36,7 +39,7 @@ public final class
AlgorithmProvidedEncryptRuleConfigurationCheckerTest {
@SuppressWarnings({"rawtypes", "unchecked"})
@Test
- public void assertValidCheck() {
+ public void assertCheckWhenConfigValidConfiguration() {
AlgorithmProvidedEncryptRuleConfiguration config =
createValidConfiguration();
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
@@ -44,26 +47,49 @@ public final class
AlgorithmProvidedEncryptRuleConfigurationCheckerTest {
checker.get().check("test", config);
}
+ @SuppressWarnings("unchecked")
private AlgorithmProvidedEncryptRuleConfiguration
createValidConfiguration() {
AlgorithmProvidedEncryptRuleConfiguration result =
mock(AlgorithmProvidedEncryptRuleConfiguration.class);
- EncryptAlgorithm<?, ?> encryptAlgorithm = mock(EncryptAlgorithm.class);
-
when(result.getEncryptors()).thenReturn(Collections.singletonMap("type1",
encryptAlgorithm));
+
when(result.getEncryptors()).thenReturn(Collections.singletonMap("aes_encryptor",
mock(EncryptAlgorithm.class)));
+ Collection<EncryptColumnRuleConfiguration> columns =
Collections.singletonList(new EncryptColumnRuleConfiguration("user_id",
"user_cipher", null, "user_plain", "aes_encryptor", false));
+ when(result.getTables()).thenReturn(Collections.singletonList(new
EncryptTableRuleConfiguration("t_encrypt", columns, false)));
return result;
}
@SuppressWarnings({"rawtypes", "unchecked"})
@Test(expected = IllegalStateException.class)
- public void assertInvalidCheck() {
- AlgorithmProvidedEncryptRuleConfiguration config =
createInvalidConfiguration();
+ public void assertCheckWhenConfigInvalidCipherColumn() {
+ AlgorithmProvidedEncryptRuleConfiguration config =
createInvalidCipherColumnConfig();
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(AlgorithmProvidedEncryptRuleConfigurationChecker.class));
checker.get().check("test", config);
}
- private AlgorithmProvidedEncryptRuleConfiguration
createInvalidConfiguration() {
+ private AlgorithmProvidedEncryptRuleConfiguration
createInvalidCipherColumnConfig() {
AlgorithmProvidedEncryptRuleConfiguration result =
mock(AlgorithmProvidedEncryptRuleConfiguration.class);
when(result.getEncryptors()).thenReturn(Collections.emptyMap());
+ Collection<EncryptColumnRuleConfiguration> columns =
Collections.singletonList(new EncryptColumnRuleConfiguration("user_id",
"user_cipher", null, "user_plain", "aes_encryptor", false));
+ when(result.getTables()).thenReturn(Collections.singletonList(new
EncryptTableRuleConfiguration("t_encrypt", columns, false)));
+ return result;
+ }
+
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ @Test(expected = IllegalStateException.class)
+ public void assertCheckWhenConfigInvalidAssistColumn() {
+ AlgorithmProvidedEncryptRuleConfiguration config =
createInvalidAssistColumnConfig();
+ Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
+ assertTrue(checker.isPresent());
+ assertThat(checker.get(),
instanceOf(AlgorithmProvidedEncryptRuleConfigurationChecker.class));
+ checker.get().check("test", config);
+ }
+
+ private AlgorithmProvidedEncryptRuleConfiguration
createInvalidAssistColumnConfig() {
+ AlgorithmProvidedEncryptRuleConfiguration result =
mock(AlgorithmProvidedEncryptRuleConfiguration.class);
+ when(result.getEncryptors()).thenReturn(Collections.emptyMap());
+ Collection<EncryptColumnRuleConfiguration> columns =
+ Collections.singletonList(new
EncryptColumnRuleConfiguration("user_id", "user_cipher", "user_assisted",
"user_plain", "aes_encryptor", "aes_assisted_encryptor", false));
+ when(result.getTables()).thenReturn(Collections.singletonList(new
EncryptTableRuleConfiguration("t_encrypt", columns, false)));
return result;
}
}
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationCheckerTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationCheckerTest.java
index 30fb1f66ce3..306b652542d 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationCheckerTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationCheckerTest.java
@@ -18,11 +18,14 @@
package org.apache.shardingsphere.encrypt.checker;
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.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
import
org.apache.shardingsphere.infra.config.checker.RuleConfigurationCheckerFactory;
import org.junit.Test;
+import java.util.Collection;
import java.util.Collections;
import java.util.Optional;
@@ -36,7 +39,7 @@ public final class EncryptRuleConfigurationCheckerTest {
@SuppressWarnings({"rawtypes", "unchecked"})
@Test
- public void assertValidCheck() {
+ public void assertCheckWhenConfigValidConfiguration() {
EncryptRuleConfiguration config = createValidConfiguration();
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
@@ -46,23 +49,46 @@ public final class EncryptRuleConfigurationCheckerTest {
private EncryptRuleConfiguration createValidConfiguration() {
EncryptRuleConfiguration result = mock(EncryptRuleConfiguration.class);
-
when(result.getEncryptors()).thenReturn(Collections.singletonMap("type1",
mock(ShardingSphereAlgorithmConfiguration.class)));
+
when(result.getEncryptors()).thenReturn(Collections.singletonMap("aes_encryptor",
mock(ShardingSphereAlgorithmConfiguration.class)));
+ Collection<EncryptColumnRuleConfiguration> columns =
Collections.singletonList(new EncryptColumnRuleConfiguration("user_id",
"user_cipher", null, "user_plain", "aes_encryptor", false));
+ when(result.getTables()).thenReturn(Collections.singletonList(new
EncryptTableRuleConfiguration("t_encrypt", columns, false)));
return result;
}
@SuppressWarnings({"rawtypes", "unchecked"})
@Test(expected = IllegalStateException.class)
- public void assertInvalidCheck() {
- EncryptRuleConfiguration config = createInvalidConfiguration();
+ public void assertCheckWhenConfigInvalidCipherColumn() {
+ EncryptRuleConfiguration config = createInvalidCipherColumnConfig();
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(EncryptRuleConfigurationChecker.class));
checker.get().check("test", config);
}
- private EncryptRuleConfiguration createInvalidConfiguration() {
+ private EncryptRuleConfiguration createInvalidCipherColumnConfig() {
EncryptRuleConfiguration result = mock(EncryptRuleConfiguration.class);
when(result.getEncryptors()).thenReturn(Collections.emptyMap());
+ Collection<EncryptColumnRuleConfiguration> columns =
Collections.singletonList(new EncryptColumnRuleConfiguration("user_id",
"user_cipher", null, "user_plain", "aes_encryptor", false));
+ when(result.getTables()).thenReturn(Collections.singletonList(new
EncryptTableRuleConfiguration("t_encrypt", columns, false)));
+ return result;
+ }
+
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ @Test(expected = IllegalStateException.class)
+ public void assertCheckWhenConfigInvalidAssistColumn() {
+ EncryptRuleConfiguration config = createInvalidAssistColumnConfig();
+ Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
+ assertTrue(checker.isPresent());
+ assertThat(checker.get(),
instanceOf(EncryptRuleConfigurationChecker.class));
+ checker.get().check("test", config);
+ }
+
+ private EncryptRuleConfiguration createInvalidAssistColumnConfig() {
+ EncryptRuleConfiguration result = mock(EncryptRuleConfiguration.class);
+ when(result.getEncryptors()).thenReturn(Collections.emptyMap());
+ Collection<EncryptColumnRuleConfiguration> columns =
+ Collections.singletonList(new
EncryptColumnRuleConfiguration("user_id", "user_cipher", "user_assisted",
"user_plain", "aes_encryptor", "aes_assisted_encryptor", false));
+ when(result.getTables()).thenReturn(Collections.singletonList(new
EncryptTableRuleConfiguration("t_encrypt", columns, false)));
return result;
}
}
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
index 25408e351ee..89143e6a4c0 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
@@ -58,24 +58,6 @@ public final class EncryptRuleTest {
assertTrue(actual.findEncryptTable("t_encrypt").isPresent());
}
- @Test(expected = IllegalArgumentException.class)
- public void assertNewInstanceWithInvalidConfiguration() {
- ShardingSphereAlgorithmConfiguration encryptAlgorithmConfig = new
ShardingSphereAlgorithmConfiguration("CORE.FIXTURE", new Properties());
- EncryptColumnRuleConfiguration encryptColumnConfig = new
EncryptColumnRuleConfiguration("encrypt_column", "encrypt_cipher", "", "",
"test_encryptor", null);
- EncryptTableRuleConfiguration tableConfig = new
EncryptTableRuleConfiguration("t_encrypt",
Collections.singletonList(encryptColumnConfig), null);
- EncryptRuleConfiguration ruleConfig = new
EncryptRuleConfiguration(Collections.singleton(tableConfig),
Collections.singletonMap("invalid_encryptor", encryptAlgorithmConfig));
- new EncryptRule(ruleConfig);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void
assertNewInstanceWithInvalidAlgorithmProvidedEncryptRuleConfiguration() {
- EncryptColumnRuleConfiguration encryptColumnConfig = new
EncryptColumnRuleConfiguration("encrypt_column", "encrypt_cipher", "", "",
"test_encryptor", null);
- EncryptTableRuleConfiguration tableConfig = new
EncryptTableRuleConfiguration("t_encrypt",
Collections.singletonList(encryptColumnConfig), null);
- AlgorithmProvidedEncryptRuleConfiguration ruleConfig = new
AlgorithmProvidedEncryptRuleConfiguration(
- Collections.singleton(tableConfig),
Collections.singletonMap("invalid_encryptor", new
CoreEncryptAlgorithmFixture()), true);
- new EncryptRule(ruleConfig);
- }
-
@Test
public void assertFindEncryptTable() {
assertTrue(new
EncryptRule(createEncryptRuleConfiguration()).findEncryptTable("t_encrypt").isPresent());
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AbstractReadwriteSplittingRuleConfigurationChecker.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AbstractReadwriteSplittingRuleConfigurationChecker.java
index 9d12d5546e9..32a77180269 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AbstractReadwriteSplittingRuleConfigurationChecker.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AbstractReadwriteSplittingRuleConfigurationChecker.java
@@ -45,15 +45,16 @@ public abstract class
AbstractReadwriteSplittingRuleConfigurationChecker<T exten
for (ReadwriteSplittingDataSourceRuleConfiguration each : dataSources)
{
Preconditions.checkState(null != each.getStaticStrategy() || null
!= each.getDynamicStrategy(),
"No available readwrite-splitting rule configuration in
database `%s`.", databaseName);
- Optional.ofNullable(each.getStaticStrategy()).ifPresent(optional
-> checkStaticStrategy(writeDataSourceNames, readDataSourceNames, optional));
+ Optional.ofNullable(each.getStaticStrategy()).ifPresent(optional
-> checkStaticStrategy(databaseName, writeDataSourceNames, readDataSourceNames,
optional));
}
}
- private void checkStaticStrategy(final Collection<String>
writeDataSourceNames, final Collection<String> readDataSourceNames, final
StaticReadwriteSplittingStrategyConfiguration strategyConfig) {
+ private void checkStaticStrategy(final String databaseName, final
Collection<String> writeDataSourceNames,
+ final Collection<String>
readDataSourceNames, final StaticReadwriteSplittingStrategyConfiguration
strategyConfig) {
Preconditions.checkState(writeDataSourceNames.add(strategyConfig.getWriteDataSourceName()),
- "Can not config duplicate write dataSource `%s` in multi
readwrite-splitting rule configurations.",
strategyConfig.getWriteDataSourceName());
+ "Can not config duplicate write dataSource `%s` in database
`%s`.", strategyConfig.getWriteDataSourceName(), databaseName);
Preconditions.checkState(readDataSourceNames.addAll(strategyConfig.getReadDataSourceNames()),
- "Can not config duplicate read dataSources `%s` in multi
readwrite-splitting rule configurations.",
strategyConfig.getReadDataSourceNames());
+ "Can not config duplicate read dataSources `%s` in database
`%s`.", strategyConfig.getReadDataSourceNames(), databaseName);
}
protected abstract
Collection<ReadwriteSplittingDataSourceRuleConfiguration> getDataSources(T
config);
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/checker/AbstractShardingRuleConfigurationChecker.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/checker/AbstractShardingRuleConfigurationChecker.java
index 88d978f53d7..a1fb1d7c7ce 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/checker/AbstractShardingRuleConfigurationChecker.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/checker/AbstractShardingRuleConfigurationChecker.java
@@ -41,31 +41,31 @@ public abstract class
AbstractShardingRuleConfigurationChecker<T extends RuleCon
Collection<String> keyGenerators = getKeyGenerators(config);
Collection<String> auditors = getAuditors(config);
Collection<String> shardingAlgorithms = getShardingAlgorithms(config);
- checkTableConfiguration(getTables(config), getAutoTables(config),
keyGenerators, auditors, shardingAlgorithms, databaseName);
- checkKeyGenerateStrategy(getDefaultKeyGenerateStrategy(config),
keyGenerators, databaseName);
- checkAuditStrategy(getDefaultAuditStrategy(config), auditors,
databaseName);
- checkShardingStrategy(getDefaultDatabaseShardingStrategy(config),
shardingAlgorithms, databaseName);
- checkShardingStrategy(getDefaultTableShardingStrategy(config),
shardingAlgorithms, databaseName);
+ checkTableConfiguration(databaseName, getTables(config),
getAutoTables(config), keyGenerators, auditors, shardingAlgorithms);
+ checkKeyGenerateStrategy(databaseName,
getDefaultKeyGenerateStrategy(config), keyGenerators);
+ checkAuditStrategy(databaseName, getDefaultAuditStrategy(config),
auditors);
+ checkShardingStrategy(databaseName,
getDefaultDatabaseShardingStrategy(config), shardingAlgorithms);
+ checkShardingStrategy(databaseName,
getDefaultTableShardingStrategy(config), shardingAlgorithms);
}
- private void checkTableConfiguration(final
Collection<ShardingTableRuleConfiguration> tables, final
Collection<ShardingAutoTableRuleConfiguration> autoTables,
- final Collection<String>
keyGenerators, final Collection<String> auditors, final Collection<String>
shardingAlgorithms, final String databaseName) {
+ private void checkTableConfiguration(final String databaseName, final
Collection<ShardingTableRuleConfiguration> tables, final
Collection<ShardingAutoTableRuleConfiguration> autoTables,
+ final Collection<String>
keyGenerators, final Collection<String> auditors, final Collection<String>
shardingAlgorithms) {
Preconditions.checkState(!tables.isEmpty() || !autoTables.isEmpty(),
"No available sharding table or autoTable configurations in
database `%s`.", databaseName);
for (ShardingTableRuleConfiguration each : tables) {
- checkKeyGenerateStrategy(each.getKeyGenerateStrategy(),
keyGenerators, databaseName);
- checkAuditStrategy(each.getAuditStrategy(), auditors,
databaseName);
- checkShardingStrategy(each.getDatabaseShardingStrategy(),
shardingAlgorithms, databaseName);
- checkShardingStrategy(each.getTableShardingStrategy(),
shardingAlgorithms, databaseName);
+ checkKeyGenerateStrategy(databaseName,
each.getKeyGenerateStrategy(), keyGenerators);
+ checkAuditStrategy(databaseName, each.getAuditStrategy(),
auditors);
+ checkShardingStrategy(databaseName,
each.getDatabaseShardingStrategy(), shardingAlgorithms);
+ checkShardingStrategy(databaseName,
each.getTableShardingStrategy(), shardingAlgorithms);
}
for (ShardingAutoTableRuleConfiguration each : autoTables) {
- checkKeyGenerateStrategy(each.getKeyGenerateStrategy(),
keyGenerators, databaseName);
- checkAuditStrategy(each.getAuditStrategy(), auditors,
databaseName);
- checkShardingStrategy(each.getShardingStrategy(),
shardingAlgorithms, databaseName);
+ checkKeyGenerateStrategy(databaseName,
each.getKeyGenerateStrategy(), keyGenerators);
+ checkAuditStrategy(databaseName, each.getAuditStrategy(),
auditors);
+ checkShardingStrategy(databaseName, each.getShardingStrategy(),
shardingAlgorithms);
}
}
- private void checkKeyGenerateStrategy(final
KeyGenerateStrategyConfiguration keyGenerateStrategy, final Collection<String>
keyGenerators, final String databaseName) {
+ private void checkKeyGenerateStrategy(final String databaseName, final
KeyGenerateStrategyConfiguration keyGenerateStrategy, final Collection<String>
keyGenerators) {
if (null == keyGenerateStrategy) {
return;
}
@@ -73,7 +73,7 @@ public abstract class
AbstractShardingRuleConfigurationChecker<T extends RuleCon
"Can not find keyGenerator `%s` in database `%s`.",
keyGenerateStrategy.getKeyGeneratorName(), databaseName);
}
- private void checkAuditStrategy(final ShardingAuditStrategyConfiguration
auditStrategy, final Collection<String> auditors, final String databaseName) {
+ private void checkAuditStrategy(final String databaseName, final
ShardingAuditStrategyConfiguration auditStrategy, final Collection<String>
auditors) {
if (null == auditStrategy) {
return;
}
@@ -81,7 +81,7 @@ public abstract class
AbstractShardingRuleConfigurationChecker<T extends RuleCon
"Can not find all auditors `%s` in database `%s`.",
auditStrategy.getAuditorNames(), databaseName);
}
- private void checkShardingStrategy(final ShardingStrategyConfiguration
shardingStrategy, final Collection<String> shardingAlgorithms, final String
databaseName) {
+ private void checkShardingStrategy(final String databaseName, final
ShardingStrategyConfiguration shardingStrategy, final Collection<String>
shardingAlgorithms) {
if (null == shardingStrategy || shardingStrategy instanceof
NoneShardingStrategyConfiguration) {
return;
}