This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 1079a19cdbe Refactor
AssistQueryAndPlainInsertColumnsTokenGeneratorTest (#18969)
1079a19cdbe is described below
commit 1079a19cdbec266f85ef036645de20e99a450852
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jul 9 11:12:51 2022 +0800
Refactor AssistQueryAndPlainInsertColumnsTokenGeneratorTest (#18969)
---
...stQueryAndPlainInsertColumnsTokenGenerator.java | 5 +-
...eryAndPlainInsertColumnsTokenGeneratorTest.java | 79 ++++++++++++++--------
2 files changed, 55 insertions(+), 29 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
index 125a6253c51..961125f5a8a 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
@@ -42,9 +42,10 @@ public final class
AssistQueryAndPlainInsertColumnsTokenGenerator implements Col
private EncryptRule encryptRule;
@Override
- public boolean isGenerateSQLToken(final SQLStatementContext
sqlStatementContext) {
+ public boolean isGenerateSQLToken(final SQLStatementContext<?>
sqlStatementContext) {
if (sqlStatementContext instanceof InsertStatementContext) {
- return (((InsertStatementContext)
sqlStatementContext).getSqlStatement()).getInsertColumns().isPresent() &&
!(((InsertStatementContext) sqlStatementContext)).useDefaultColumns();
+ InsertStatementContext insertStatementContext =
(InsertStatementContext) sqlStatementContext;
+ return
insertStatementContext.getSqlStatement().getInsertColumns().isPresent() &&
!insertStatementContext.useDefaultColumns();
}
return false;
}
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
index 6e5660fc71e..5260a2a43ce 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
@@ -17,59 +17,84 @@
package org.apache.shardingsphere.encrypt.rewrite.token;
-import java.util.Collections;
-import java.util.Optional;
-
import
org.apache.shardingsphere.encrypt.rewrite.token.generator.AssistQueryAndPlainInsertColumnsTokenGenerator;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
+import
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.InsertColumnsToken;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.InsertColumnsSegment;
-import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+@RunWith(MockitoJUnitRunner.class)
public class AssistQueryAndPlainInsertColumnsTokenGeneratorTest {
- private final AssistQueryAndPlainInsertColumnsTokenGenerator
tokenGenerator = new AssistQueryAndPlainInsertColumnsTokenGenerator();
+ @Test
+ public void assertIsNotGenerateSQLTokenWithNotInsertStatementContext() {
+ assertFalse(new
AssistQueryAndPlainInsertColumnsTokenGenerator().isGenerateSQLToken(mock(SQLStatementContext.class)));
+ }
- private InsertStatementContext insertStatementContext;
+ @Test
+ public void assertIsNotGenerateSQLTokenWithoutInsertColumns() {
+ InsertStatementContext insertStatementContext =
mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+
when(insertStatementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.empty());
+ assertFalse(new
AssistQueryAndPlainInsertColumnsTokenGenerator().isGenerateSQLToken(insertStatementContext));
+ }
- @Before
- public void setup() {
- final String tableName = "foo_tbl";
- final String columnName = "foo_col";
- insertStatementContext = mock(InsertStatementContext.class,
RETURNS_DEEP_STUBS);
- EncryptRule encryptRule = mock(EncryptRule.class, RETURNS_DEEP_STUBS);
- tokenGenerator.setEncryptRule(encryptRule);
- when(insertStatementContext.getSqlStatement()
-
.getInsertColumns()).thenReturn(Optional.of(mock(InsertColumnsSegment.class)));
-
when(insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier()
- .getValue()).thenReturn(tableName);
- ColumnSegment columnSegment = mock(ColumnSegment.class,
RETURNS_DEEP_STUBS);
- when(insertStatementContext.getSqlStatement()
-
.getColumns()).thenReturn(Collections.singletonList(columnSegment));
- when(columnSegment.getIdentifier().getValue()).thenReturn(columnName);
- EncryptTable encryptTable = mock(EncryptTable.class,
RETURNS_DEEP_STUBS);
-
when(encryptRule.findEncryptTable(tableName)).thenReturn(Optional.of(encryptTable));
-
when(encryptTable.findAssistedQueryColumn(columnName)).thenReturn(Optional.of("assisted_query_col"));
-
when(encryptTable.findPlainColumn(columnName)).thenReturn(Optional.of("plain_col"));
+ @Test
+ public void assertIsNotGenerateSQLTokenWithDefaultColumns() {
+ InsertStatementContext insertStatementContext =
mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+
when(insertStatementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.of(mock(InsertColumnsSegment.class)));
+ when(insertStatementContext.useDefaultColumns()).thenReturn(true);
+ assertFalse(new
AssistQueryAndPlainInsertColumnsTokenGenerator().isGenerateSQLToken(insertStatementContext));
}
@Test
public void assertIsGenerateSQLToken() {
- assertTrue(tokenGenerator.isGenerateSQLToken(insertStatementContext));
+ InsertStatementContext insertStatementContext =
mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+
when(insertStatementContext.getSqlStatement().getInsertColumns()).thenReturn(Optional.of(mock(InsertColumnsSegment.class)));
+ assertTrue(new
AssistQueryAndPlainInsertColumnsTokenGenerator().isGenerateSQLToken(insertStatementContext));
}
@Test
public void assertGenerateSQLTokens() {
-
assertThat(tokenGenerator.generateSQLTokens(insertStatementContext).size(),
is(1));
+ AssistQueryAndPlainInsertColumnsTokenGenerator tokenGenerator = new
AssistQueryAndPlainInsertColumnsTokenGenerator();
+ tokenGenerator.setEncryptRule(mockEncryptRule());
+ Collection<InsertColumnsToken> actual =
tokenGenerator.generateSQLTokens(mockInsertStatementContext());
+ assertThat(actual.size(), is(1));
+ // TODO add more assertions for actual value
+ }
+
+ private EncryptRule mockEncryptRule() {
+ EncryptRule result = mock(EncryptRule.class);
+ EncryptTable encryptTable = mock(EncryptTable.class);
+
when(encryptTable.findAssistedQueryColumn("foo_col")).thenReturn(Optional.of("assisted_query_col"));
+
when(encryptTable.findPlainColumn("foo_col")).thenReturn(Optional.of("plain_col"));
+
when(result.findEncryptTable("foo_tbl")).thenReturn(Optional.of(encryptTable));
+ return result;
+ }
+
+ private InsertStatementContext mockInsertStatementContext() {
+ InsertStatementContext result = mock(InsertStatementContext.class,
RETURNS_DEEP_STUBS);
+
when(result.getSqlStatement().getTable().getTableName().getIdentifier().getValue()).thenReturn("foo_tbl");
+ ColumnSegment columnSegment = mock(ColumnSegment.class,
RETURNS_DEEP_STUBS);
+ when(columnSegment.getIdentifier().getValue()).thenReturn("foo_col");
+
when(result.getSqlStatement().getColumns()).thenReturn(Collections.singleton(columnSegment));
+ return result;
}
}