You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2022/12/22 16:36:46 UTC
[shardingsphere] branch master updated: Use Plugins.getMemberAccessor() instead of method reflect on test cases (#23045)
This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 e3170a52b46 Use Plugins.getMemberAccessor() instead of method reflect on test cases (#23045)
e3170a52b46 is described below
commit e3170a52b467e66e2061666dbceb1006baf74729
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Dec 23 00:36:39 2022 +0800
Use Plugins.getMemberAccessor() instead of method reflect on test cases (#23045)
* Refactor InsertValueContextTest
* Refactor OpenGaussAuthenticationAlgorithm
* Refactor OpenGaussAuthenticationAlgorithm
* Refactor MySQLBinlogRowsEventPacketTest
* Refactor OnDuplicateUpdateContextTest
* Refactor OnDuplicateUpdateContextTest
* Refactor MySQLIncrementalDumperTest
* Refactor PostgreSQLAuthenticationEngineTest
* Refactor PostgreSQLAuthenticationHandlerTest
* Refactor PostgreSQLMD5PasswordAuthenticatorTest
* Refactor ConsistencyCheckJobTest
* Use Plugins.getMemberAccessor() instead of method reflect on test cases
---
.../binlog/row/MySQLBinlogRowsEventPacketTest.java | 15 +---
.../insert/values/InsertValueContextTest.java | 31 +++-----
.../values/OnDuplicateUpdateContextTest.java | 29 +++----
.../mysql/ingest/MySQLIncrementalDumperTest.java | 93 +++++++++-------------
.../fixture/OpenGaussAuthenticationAlgorithm.java | 33 +++-----
.../PostgreSQLAuthenticationEngineTest.java | 26 +++---
.../PostgreSQLAuthenticationHandlerTest.java | 11 ++-
.../PostgreSQLMD5PasswordAuthenticatorTest.java | 14 ++--
.../consistencycheck/ConsistencyCheckJobTest.java | 40 +++++-----
9 files changed, 113 insertions(+), 179 deletions(-)
diff --git a/db-protocol/mysql/src/test/java/org/apache/shardingsphere/db/protocol/mysql/packet/binlog/row/MySQLBinlogRowsEventPacketTest.java b/db-protocol/mysql/src/test/java/org/apache/shardingsphere/db/protocol/mysql/packet/binlog/row/MySQLBinlogRowsEventPacketTest.java
index 9257d09ce9e..6252745ef48 100644
--- a/db-protocol/mysql/src/test/java/org/apache/shardingsphere/db/protocol/mysql/packet/binlog/row/MySQLBinlogRowsEventPacketTest.java
+++ b/db-protocol/mysql/src/test/java/org/apache/shardingsphere/db/protocol/mysql/packet/binlog/row/MySQLBinlogRowsEventPacketTest.java
@@ -26,19 +26,19 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.internal.configuration.plugins.Plugins;
import org.mockito.junit.MockitoJUnitRunner;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
-import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -77,8 +77,8 @@ public final class MySQLBinlogRowsEventPacketTest {
assertFalse(actual.getColumnsPresentBitmap().isNullParameter(0));
assertNull(actual.getColumnsPresentBitmap2());
MySQLPacketPayload packetPayload = new MySQLPacketPayload(byteBuf, StandardCharsets.UTF_8);
- Serializable[] result = (Serializable[]) invokeMethod(actual, "readRow", new Class[]{List.class, MySQLPacketPayload.class}, new Object[]{columnDefs, packetPayload});
- assertThat(result[0], is(0L));
+ assertThat(((Serializable[]) Plugins.getMemberAccessor()
+ .invoke(MySQLBinlogRowsEventPacket.class.getDeclaredMethod("readRow", List.class, MySQLPacketPayload.class), actual, columnDefs, packetPayload))[0], is(0L));
}
private void assertBinlogRowsEventV1BeforeRows(final MySQLBinlogRowsEventPacket actual) {
@@ -87,11 +87,4 @@ public final class MySQLBinlogRowsEventPacketTest {
verify(payload, never()).skipReserved(2);
assertThat(actual.getColumnNumber(), is(1));
}
-
- private static Object invokeMethod(final Object target, final String methodName, final Class<?>[] parameterTypes,
- final Object[] parameterValues) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
- Method method = target.getClass().getDeclaredMethod(methodName, parameterTypes);
- method.setAccessible(true);
- return method.invoke(target, parameterValues);
- }
}
diff --git a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/insert/values/InsertValueContextTest.java b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/insert/values/InsertValueContextTest.java
index 8683b175caa..1862a7bb614 100644
--- a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/insert/values/InsertValueContextTest.java
+++ b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/insert/values/InsertValueContextTest.java
@@ -25,9 +25,9 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.P
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import org.junit.Test;
+import org.mockito.internal.configuration.plugins.Plugins;
import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -36,24 +36,17 @@ import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertTrue;
public final class InsertValueContextTest {
- @SuppressWarnings("unchecked")
@Test
public void assertInstanceConstructedOk() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
- Collection<ExpressionSegment> assignments = Collections.emptyList();
- List<Object> params = Collections.emptyList();
- int parametersOffset = 0;
- InsertValueContext insertValueContext = new InsertValueContext(assignments, params, parametersOffset);
- Method getValueExpressionsMethod = InsertValueContext.class.getDeclaredMethod("getValueExpressions", Collection.class);
- getValueExpressionsMethod.setAccessible(true);
- List<ExpressionSegment> getValueExpressionsResult = (List<ExpressionSegment>) getValueExpressionsMethod.invoke(insertValueContext, new Object[]{assignments});
- assertThat(insertValueContext.getValueExpressions(), is(getValueExpressionsResult));
- Method getParametersMethod = InsertValueContext.class.getDeclaredMethod("getParameters", List.class, int.class);
- getParametersMethod.setAccessible(true);
- List<Object> getParametersResult = (List<Object>) getParametersMethod.invoke(insertValueContext, new Object[]{params, parametersOffset});
- assertThat(insertValueContext.getParameters(), is(getParametersResult));
+ InsertValueContext insertValueContext = new InsertValueContext(Collections.emptyList(), Collections.emptyList(), 0);
+ assertThat(insertValueContext.getValueExpressions(), is(
+ Plugins.getMemberAccessor().invoke(InsertValueContext.class.getDeclaredMethod("getValueExpressions", Collection.class), insertValueContext, Collections.emptyList())));
+ assertThat(insertValueContext.getParameters(), is(
+ Plugins.getMemberAccessor().invoke(InsertValueContext.class.getDeclaredMethod("getParameters", List.class, int.class), insertValueContext, Collections.emptyList(), 0)));
}
@Test
@@ -61,8 +54,9 @@ public final class InsertValueContextTest {
Collection<ExpressionSegment> assignments = makeParameterMarkerExpressionSegment();
String parameterValue = "test";
InsertValueContext insertValueContext = new InsertValueContext(assignments, Collections.singletonList(parameterValue), 0);
- Object valueFromInsertValueContext = insertValueContext.getLiteralValue(0).get();
- assertThat(valueFromInsertValueContext, is(parameterValue));
+ Optional<Object> valueFromInsertValueContext = insertValueContext.getLiteralValue(0);
+ assertTrue(valueFromInsertValueContext.isPresent());
+ assertThat(valueFromInsertValueContext.get(), is(parameterValue));
}
@Test
@@ -83,8 +77,9 @@ public final class InsertValueContextTest {
Object literalObject = new Object();
Collection<ExpressionSegment> assignments = makeLiteralExpressionSegment(literalObject);
InsertValueContext insertValueContext = new InsertValueContext(assignments, Collections.emptyList(), 0);
- Object valueFromInsertValueContext = insertValueContext.getLiteralValue(0).get();
- assertThat(valueFromInsertValueContext, is(literalObject));
+ Optional<Object> valueFromInsertValueContext = insertValueContext.getLiteralValue(0);
+ assertTrue(valueFromInsertValueContext.isPresent());
+ assertThat(valueFromInsertValueContext.get(), is(literalObject));
}
private Collection<ExpressionSegment> makeLiteralExpressionSegment(final Object literalObject) {
diff --git a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/insert/values/OnDuplicateUpdateContextTest.java b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/insert/values/OnDuplicateUpdateContextTest.java
index 521c224bfe1..09d42797e9c 100644
--- a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/insert/values/OnDuplicateUpdateContextTest.java
+++ b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/insert/values/OnDuplicateUpdateContextTest.java
@@ -27,9 +27,9 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.P
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.SimpleExpressionSegment;
import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import org.junit.Test;
+import org.mockito.internal.configuration.plugins.Plugins;
import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -40,21 +40,13 @@ import static org.hamcrest.MatcherAssert.assertThat;
public final class OnDuplicateUpdateContextTest {
- @SuppressWarnings("unchecked")
@Test
public void assertInstanceConstructedOk() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
- Collection<AssignmentSegment> assignments = Collections.emptyList();
- List<Object> params = Collections.emptyList();
- int parametersOffset = 0;
- OnDuplicateUpdateContext onDuplicateUpdateContext = new OnDuplicateUpdateContext(assignments, params, parametersOffset);
- Method getValueExpressionsMethod = OnDuplicateUpdateContext.class.getDeclaredMethod("getValueExpressions", Collection.class);
- getValueExpressionsMethod.setAccessible(true);
- List<ExpressionSegment> getValueExpressionsResult = (List<ExpressionSegment>) getValueExpressionsMethod.invoke(onDuplicateUpdateContext, new Object[]{assignments});
- assertThat(onDuplicateUpdateContext.getValueExpressions(), is(getValueExpressionsResult));
- Method getParametersMethod = OnDuplicateUpdateContext.class.getDeclaredMethod("getParameters", List.class, int.class);
- getParametersMethod.setAccessible(true);
- List<Object> getParametersResult = (List<Object>) getParametersMethod.invoke(onDuplicateUpdateContext, new Object[]{params, parametersOffset});
- assertThat(onDuplicateUpdateContext.getParameters(), is(getParametersResult));
+ OnDuplicateUpdateContext onDuplicateUpdateContext = new OnDuplicateUpdateContext(Collections.emptyList(), Collections.emptyList(), 0);
+ assertThat(onDuplicateUpdateContext.getValueExpressions(), is(Plugins.getMemberAccessor()
+ .invoke(OnDuplicateUpdateContext.class.getDeclaredMethod("getValueExpressions", Collection.class), onDuplicateUpdateContext, Collections.emptyList())));
+ assertThat(onDuplicateUpdateContext.getParameters(), is(Plugins.getMemberAccessor()
+ .invoke(OnDuplicateUpdateContext.class.getDeclaredMethod("getParameters", List.class, int.class), onDuplicateUpdateContext, Collections.emptyList(), 0)));
}
@Test
@@ -63,8 +55,7 @@ public final class OnDuplicateUpdateContextTest {
String parameterValue1 = "test1";
String parameterValue2 = "test2";
List<Object> params = Arrays.asList(parameterValue1, parameterValue2);
- int parametersOffset = 0;
- OnDuplicateUpdateContext onDuplicateUpdateContext = new OnDuplicateUpdateContext(assignments, params, parametersOffset);
+ OnDuplicateUpdateContext onDuplicateUpdateContext = new OnDuplicateUpdateContext(assignments, params, 0);
Object valueFromInsertValueContext1 = onDuplicateUpdateContext.getValue(0);
assertThat(valueFromInsertValueContext1, is(parameterValue1));
Object valueFromInsertValueContext2 = onDuplicateUpdateContext.getValue(1);
@@ -83,8 +74,7 @@ public final class OnDuplicateUpdateContextTest {
public void assertGetValueWhenLiteralExpressionSegment() {
Object literalObject = new Object();
Collection<AssignmentSegment> assignments = createLiteralExpressionSegment(literalObject);
- List<Object> params = Collections.emptyList();
- OnDuplicateUpdateContext onDuplicateUpdateContext = new OnDuplicateUpdateContext(assignments, params, 0);
+ OnDuplicateUpdateContext onDuplicateUpdateContext = new OnDuplicateUpdateContext(assignments, Collections.emptyList(), 0);
Object valueFromInsertValueContext = onDuplicateUpdateContext.getValue(0);
assertThat(valueFromInsertValueContext, is(literalObject));
}
@@ -115,8 +105,7 @@ public final class OnDuplicateUpdateContextTest {
public void assertGetColumn() {
Object literalObject = new Object();
Collection<AssignmentSegment> assignments = createLiteralExpressionSegment(literalObject);
- List<Object> params = Collections.emptyList();
- OnDuplicateUpdateContext onDuplicateUpdateContext = new OnDuplicateUpdateContext(assignments, params, 0);
+ OnDuplicateUpdateContext onDuplicateUpdateContext = new OnDuplicateUpdateContext(assignments, Collections.emptyList(), 0);
ColumnSegment column = onDuplicateUpdateContext.getColumn(0);
assertThat(column, is(assignments.iterator().next().getColumns().get(0)));
}
diff --git a/kernel/data-pipeline/dialect/mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/MySQLIncrementalDumperTest.java b/kernel/data-pipeline/dialect/mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/MySQLIncrementalDumperTest.java
index 1e97aeaca6c..0f5397b9e4d 100644
--- a/kernel/data-pipeline/dialect/mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/MySQLIncrementalDumperTest.java
+++ b/kernel/data-pipeline/dialect/mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/MySQLIncrementalDumperTest.java
@@ -45,16 +45,14 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.internal.configuration.plugins.Plugins;
import org.mockito.junit.MockitoJUnitRunner;
import javax.sql.DataSource;
-import java.io.Serializable;
-import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -84,8 +82,7 @@ public final class MySQLIncrementalDumperTest {
channel = new MultiplexMemoryPipelineChannel();
PipelineTableMetaDataLoader metaDataLoader = new StandardPipelineTableMetaDataLoader(dataSourceManager.getDataSource(dumperConfig.getDataSourceConfig()));
incrementalDumper = new MySQLIncrementalDumper(dumperConfig, new BinlogPosition("binlog-000001", 4L), channel, metaDataLoader);
- PipelineColumnMetaData column = new PipelineColumnMetaData(1, "test", Types.INTEGER, "INTEGER", true, true, true);
- when(pipelineTableMetaData.getColumnMetaData(anyInt())).thenReturn(column);
+ when(pipelineTableMetaData.getColumnMetaData(anyInt())).thenReturn(new PipelineColumnMetaData(1, "test", Types.INTEGER, "INTEGER", true, true, true));
}
private DumperConfiguration mockDumperConfiguration() {
@@ -114,79 +111,63 @@ public final class MySQLIncrementalDumperTest {
}
@Test
- public void assertWriteRowsEvent() {
+ public void assertWriteRowsEvent() throws ReflectiveOperationException {
WriteRowsEvent rowsEvent = new WriteRowsEvent();
rowsEvent.setDatabaseName("");
rowsEvent.setTableName("t_order");
- List<Serializable[]> rows = new ArrayList<>(1);
- rows.add(new String[]{"1", "order"});
- rowsEvent.setAfterRows(rows);
- invokeMethod(incrementalDumper, "handleWriteRowsEvent", new Class[]{WriteRowsEvent.class, PipelineTableMetaData.class}, new Object[]{rowsEvent, pipelineTableMetaData});
- List<Record> records = channel.fetchRecords(1, 0);
- assertThat(records.size(), is(1));
- assertThat(records.get(0), instanceOf(DataRecord.class));
- assertThat(((DataRecord) records.get(0)).getType(), is(IngestDataChangeType.INSERT));
+ rowsEvent.setAfterRows(Collections.singletonList(new String[]{"1", "order"}));
+ Plugins.getMemberAccessor().invoke(
+ MySQLIncrementalDumper.class.getDeclaredMethod("handleWriteRowsEvent", WriteRowsEvent.class, PipelineTableMetaData.class), incrementalDumper, rowsEvent, pipelineTableMetaData);
+ List<Record> actual = channel.fetchRecords(1, 0);
+ assertThat(actual.size(), is(1));
+ assertThat(actual.get(0), instanceOf(DataRecord.class));
+ assertThat(((DataRecord) actual.get(0)).getType(), is(IngestDataChangeType.INSERT));
}
@Test
- public void assertUpdateRowsEvent() {
+ public void assertUpdateRowsEvent() throws ReflectiveOperationException {
UpdateRowsEvent rowsEvent = new UpdateRowsEvent();
rowsEvent.setDatabaseName("");
rowsEvent.setTableName("t_order");
- List<Serializable[]> beforeRows = new ArrayList<>(1);
- beforeRows.add(new String[]{"1", "order_old"});
- List<Serializable[]> afterRows = new ArrayList<>(1);
- afterRows.add(new String[]{"1", "order_new"});
- rowsEvent.setBeforeRows(beforeRows);
- rowsEvent.setAfterRows(afterRows);
- invokeMethod(incrementalDumper, "handleUpdateRowsEvent", new Class[]{UpdateRowsEvent.class, PipelineTableMetaData.class}, new Object[]{rowsEvent, pipelineTableMetaData});
- List<Record> records = channel.fetchRecords(1, 0);
- assertThat(records.size(), is(1));
- assertThat(records.get(0), instanceOf(DataRecord.class));
- assertThat(((DataRecord) records.get(0)).getType(), is(IngestDataChangeType.UPDATE));
+ rowsEvent.setBeforeRows(Collections.singletonList(new String[]{"1", "order_old"}));
+ rowsEvent.setAfterRows(Collections.singletonList(new String[]{"1", "order_new"}));
+ Plugins.getMemberAccessor().invoke(
+ MySQLIncrementalDumper.class.getDeclaredMethod("handleUpdateRowsEvent", UpdateRowsEvent.class, PipelineTableMetaData.class), incrementalDumper, rowsEvent, pipelineTableMetaData);
+ List<Record> actual = channel.fetchRecords(1, 0);
+ assertThat(actual.size(), is(1));
+ assertThat(actual.get(0), instanceOf(DataRecord.class));
+ assertThat(((DataRecord) actual.get(0)).getType(), is(IngestDataChangeType.UPDATE));
}
@Test
- public void assertDeleteRowsEvent() {
+ public void assertDeleteRowsEvent() throws ReflectiveOperationException {
DeleteRowsEvent rowsEvent = new DeleteRowsEvent();
rowsEvent.setDatabaseName("");
rowsEvent.setTableName("t_order");
- List<Serializable[]> rows = new ArrayList<>(1);
- rows.add(new String[]{"1", "order"});
- rowsEvent.setBeforeRows(rows);
- invokeMethod(incrementalDumper, "handleDeleteRowsEvent", new Class[]{DeleteRowsEvent.class, PipelineTableMetaData.class}, new Object[]{rowsEvent, pipelineTableMetaData});
- List<Record> records = channel.fetchRecords(1, 0);
- assertThat(records.size(), is(1));
- assertThat(records.get(0), instanceOf(DataRecord.class));
- assertThat(((DataRecord) records.get(0)).getType(), is(IngestDataChangeType.DELETE));
+ rowsEvent.setBeforeRows(Collections.singletonList(new String[]{"1", "order"}));
+ Plugins.getMemberAccessor().invoke(
+ MySQLIncrementalDumper.class.getDeclaredMethod("handleDeleteRowsEvent", DeleteRowsEvent.class, PipelineTableMetaData.class), incrementalDumper, rowsEvent, pipelineTableMetaData);
+ List<Record> actual = channel.fetchRecords(1, 0);
+ assertThat(actual.size(), is(1));
+ assertThat(actual.get(0), instanceOf(DataRecord.class));
+ assertThat(((DataRecord) actual.get(0)).getType(), is(IngestDataChangeType.DELETE));
}
@Test
- public void assertPlaceholderEvent() {
- invokeHandleEvent(new PlaceholderEvent());
- List<Record> records = channel.fetchRecords(1, 0);
- assertThat(records.size(), is(1));
- assertThat(records.get(0), instanceOf(PlaceholderRecord.class));
+ public void assertPlaceholderEvent() throws ReflectiveOperationException {
+ Plugins.getMemberAccessor().invoke(MySQLIncrementalDumper.class.getDeclaredMethod("handleEvent", AbstractBinlogEvent.class), incrementalDumper, new PlaceholderEvent());
+ List<Record> actual = channel.fetchRecords(1, 0);
+ assertThat(actual.size(), is(1));
+ assertThat(actual.get(0), instanceOf(PlaceholderRecord.class));
}
@Test
- public void assertRowsEventFiltered() {
+ public void assertRowsEventFiltered() throws ReflectiveOperationException {
WriteRowsEvent rowsEvent = new WriteRowsEvent();
rowsEvent.setDatabaseName("unknown_database");
- invokeHandleEvent(rowsEvent);
- List<Record> records = channel.fetchRecords(1, 0);
- assertThat(records.size(), is(1));
- assertThat(records.get(0), instanceOf(PlaceholderRecord.class));
- }
-
- private void invokeHandleEvent(final AbstractBinlogEvent event) {
- invokeMethod(incrementalDumper, "handleEvent", new Class[]{AbstractBinlogEvent.class}, new Object[]{event});
- }
-
- @SneakyThrows(ReflectiveOperationException.class)
- private Object invokeMethod(final Object target, final String methodName, final Class<?>[] parameterTypes, final Object[] parameterValues) {
- Method method = target.getClass().getDeclaredMethod(methodName, parameterTypes);
- method.setAccessible(true);
- return method.invoke(target, parameterValues);
+ Plugins.getMemberAccessor().invoke(MySQLIncrementalDumper.class.getDeclaredMethod("handleEvent", AbstractBinlogEvent.class), incrementalDumper, rowsEvent);
+ List<Record> actual = channel.fetchRecords(1, 0);
+ assertThat(actual.size(), is(1));
+ assertThat(actual.get(0), instanceOf(PlaceholderRecord.class));
}
}
diff --git a/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/fixture/OpenGaussAuthenticationAlgorithm.java b/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/fixture/OpenGaussAuthenticationAlgorithm.java
index 52df5558210..241208c2c11 100644
--- a/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/fixture/OpenGaussAuthenticationAlgorithm.java
+++ b/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/fixture/OpenGaussAuthenticationAlgorithm.java
@@ -21,8 +21,8 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
import org.apache.shardingsphere.proxy.frontend.opengauss.authentication.OpenGaussAuthenticationHandler;
+import org.mockito.internal.configuration.plugins.Plugins;
-import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@@ -51,44 +51,31 @@ public final class OpenGaussAuthenticationAlgorithm {
@SneakyThrows(ReflectiveOperationException.class)
private static byte[] generateKFromPBKDF2(final String password, final String saltString, final int serverIteration) {
- Method generateKFromPBKDF2Method = OpenGaussAuthenticationHandler.class.getDeclaredMethod("generateKFromPBKDF2", String.class, String.class, int.class);
- generateKFromPBKDF2Method.setAccessible(true);
- return (byte[]) generateKFromPBKDF2Method.invoke(null, password, saltString, serverIteration);
+ return (byte[]) Plugins.getMemberAccessor().invoke(OpenGaussAuthenticationHandler.class.getDeclaredMethod("generateKFromPBKDF2", String.class, String.class, int.class),
+ OpenGaussAuthenticationHandler.class, password, saltString, serverIteration);
}
@SneakyThrows(ReflectiveOperationException.class)
private static byte[] getKeyFromHmac(final byte[] key, final byte[] data) {
- Method getKeyFromHmacMethod = OpenGaussAuthenticationHandler.class.getDeclaredMethod("getKeyFromHmac", byte[].class, byte[].class);
- getKeyFromHmacMethod.setAccessible(true);
- return (byte[]) getKeyFromHmacMethod.invoke(null, key, data);
+ return (byte[]) Plugins.getMemberAccessor().invoke(
+ OpenGaussAuthenticationHandler.class.getDeclaredMethod("getKeyFromHmac", byte[].class, byte[].class), OpenGaussAuthenticationHandler.class, key, data);
}
@SneakyThrows(ReflectiveOperationException.class)
private static byte[] sha256(final byte[] str) {
- Method sha256Method = OpenGaussAuthenticationHandler.class.getDeclaredMethod("sha256", byte[].class);
- sha256Method.setAccessible(true);
- return (byte[]) sha256Method.invoke(null, str);
+ return (byte[]) Plugins.getMemberAccessor().invoke(OpenGaussAuthenticationHandler.class.getDeclaredMethod("sha256", byte[].class), OpenGaussAuthenticationHandler.class, new Object[]{str});
}
@SneakyThrows(ReflectiveOperationException.class)
private static byte[] hexStringToBytes(final String rawHexString) {
- Method hexStringToBytesMethod = OpenGaussAuthenticationHandler.class.getDeclaredMethod("hexStringToBytes", String.class);
- hexStringToBytesMethod.setAccessible(true);
- return (byte[]) hexStringToBytesMethod.invoke(null, rawHexString);
- }
-
- @SneakyThrows(ReflectiveOperationException.class)
- private static byte[] calculateH2(final String password, final String random64code, final String token, final int serverIteration) {
- Method calculateH2Method = OpenGaussAuthenticationHandler.class.getDeclaredMethod("calculateH2", String.class, String.class, String.class, int.class);
- calculateH2Method.setAccessible(true);
- return (byte[]) calculateH2Method.invoke(null, password, random64code, token, serverIteration);
+ return (byte[]) Plugins.getMemberAccessor().invoke(
+ OpenGaussAuthenticationHandler.class.getDeclaredMethod("hexStringToBytes", String.class), OpenGaussAuthenticationHandler.class, rawHexString);
}
@SneakyThrows(ReflectiveOperationException.class)
private static byte[] xor(final byte[] value1, final byte[] value2) {
- Method xorMethod = OpenGaussAuthenticationHandler.class.getDeclaredMethod("xor", byte[].class, byte[].class);
- xorMethod.setAccessible(true);
- return (byte[]) xorMethod.invoke(null, value1, value2);
+ return (byte[]) Plugins.getMemberAccessor().invoke(
+ OpenGaussAuthenticationHandler.class.getDeclaredMethod("xor", byte[].class, byte[].class), OpenGaussAuthenticationHandler.class, value1, value2);
}
private static void bytesToHex(final byte[] bytes, final byte[] hex, final int offset, final int length) {
diff --git a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
index 0c9f6c405bd..6e2f7727200 100644
--- a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
+++ b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
@@ -29,7 +29,6 @@ import org.apache.shardingsphere.authority.rule.builder.AuthorityRuleBuilder;
import org.apache.shardingsphere.db.protocol.CommonConstants;
import org.apache.shardingsphere.db.protocol.payload.PacketPayload;
import org.apache.shardingsphere.db.protocol.postgresql.packet.handshake.authentication.PostgreSQLMD5PasswordAuthenticationPacket;
-import org.apache.shardingsphere.db.protocol.postgresql.packet.identifier.PostgreSQLIdentifierPacket;
import org.apache.shardingsphere.db.protocol.postgresql.payload.PostgreSQLPacketPayload;
import org.apache.shardingsphere.dialect.postgresql.exception.authority.EmptyUsernameException;
import org.apache.shardingsphere.dialect.postgresql.exception.authority.InvalidPasswordException;
@@ -53,11 +52,11 @@ import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
+import org.mockito.internal.configuration.plugins.Plugins;
import org.mockito.internal.util.reflection.FieldReader;
import org.mockito.internal.util.reflection.InstanceField;
import org.mockito.junit.MockitoJUnitRunner;
-import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -135,12 +134,11 @@ public final class PostgreSQLAuthenticationEngineTest extends ProxyContextRestor
@Test
public void assertGetIdentifierPacket() throws ReflectiveOperationException {
- Method method = PostgreSQLAuthenticationEngine.class.getDeclaredMethod("getIdentifierPacket", String.class);
- method.setAccessible(true);
- PostgreSQLIdentifierPacket packet = (PostgreSQLIdentifierPacket) method.invoke(new PostgreSQLAuthenticationEngine(), username);
- assertThat(packet, instanceOf(PostgreSQLMD5PasswordAuthenticationPacket.class));
+ assertThat(Plugins.getMemberAccessor().invoke(PostgreSQLAuthenticationEngine.class.getDeclaredMethod("getIdentifierPacket", String.class), new PostgreSQLAuthenticationEngine(), username),
+ instanceOf(PostgreSQLMD5PasswordAuthenticationPacket.class));
}
+ @SneakyThrows(ReflectiveOperationException.class)
private void assertLogin(final String inputPassword) {
PostgreSQLPacketPayload payload = new PostgreSQLPacketPayload(createByteBuf(16, 128), StandardCharsets.UTF_8);
payload.writeInt4(64);
@@ -158,7 +156,8 @@ public final class PostgreSQLAuthenticationEngineTest extends ProxyContextRestor
PostgreSQLMD5PasswordAuthenticationPacket md5PasswordPacket = argumentCaptor.getValue();
byte[] md5Salt = getMd5Salt(md5PasswordPacket);
payload = new PostgreSQLPacketPayload(createByteBuf(16, 128), StandardCharsets.UTF_8);
- String md5Digest = md5Encode(username, inputPassword, md5Salt);
+ String md5Digest = (String) Plugins.getMemberAccessor().invoke(PostgreSQLMD5PasswordAuthenticator.class.getDeclaredMethod("md5Encode", String.class, String.class, byte[].class),
+ new PostgreSQLMD5PasswordAuthenticator(), username, inputPassword, md5Salt);
payload.writeInt1('p');
payload.writeInt4(4 + md5Digest.length() + 1);
payload.writeStringNul(md5Digest);
@@ -175,25 +174,18 @@ public final class PostgreSQLAuthenticationEngineTest extends ProxyContextRestor
}
private MetaDataContexts getMetaDataContexts(final ShardingSphereUser user) {
- return new MetaDataContexts(mock(MetaDataPersistService.class),
- new ShardingSphereMetaData(new LinkedHashMap<>(), buildGlobalRuleMetaData(user), new ConfigurationProperties(new Properties())));
+ return new MetaDataContexts(
+ mock(MetaDataPersistService.class), new ShardingSphereMetaData(new LinkedHashMap<>(), buildGlobalRuleMetaData(user), new ConfigurationProperties(new Properties())));
}
private ShardingSphereRuleMetaData buildGlobalRuleMetaData(final ShardingSphereUser user) {
AuthorityRuleConfiguration ruleConfig = new AuthorityRuleConfiguration(Collections.singletonList(user), new AlgorithmConfiguration("ALL_PERMITTED", new Properties()));
AuthorityRule rule = new AuthorityRuleBuilder().build(ruleConfig, Collections.emptyMap(), mock(InstanceContext.class), mock(ConfigurationProperties.class));
- return new ShardingSphereRuleMetaData(Collections.singletonList(rule));
+ return new ShardingSphereRuleMetaData(Collections.singleton(rule));
}
@SneakyThrows(NoSuchFieldException.class)
private byte[] getMd5Salt(final PostgreSQLMD5PasswordAuthenticationPacket md5PasswordPacket) {
return (byte[]) new FieldReader(md5PasswordPacket, PostgreSQLMD5PasswordAuthenticationPacket.class.getDeclaredField("md5Salt")).read();
}
-
- @SneakyThrows(ReflectiveOperationException.class)
- private String md5Encode(final String username, final String password, final byte[] md5Salt) {
- Method method = PostgreSQLMD5PasswordAuthenticator.class.getDeclaredMethod("md5Encode", String.class, String.class, byte[].class);
- method.setAccessible(true);
- return (String) method.invoke(new PostgreSQLMD5PasswordAuthenticator(), username, password, md5Salt);
- }
}
diff --git a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationHandlerTest.java b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationHandlerTest.java
index c8239ea6abd..b63bbaaf5f0 100644
--- a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationHandlerTest.java
+++ b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationHandlerTest.java
@@ -48,8 +48,8 @@ import org.apache.shardingsphere.proxy.frontend.postgresql.authentication.authen
import org.apache.shardingsphere.proxy.frontend.postgresql.authentication.authenticator.PostgreSQLMD5PasswordAuthenticator;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.internal.configuration.plugins.Plugins;
-import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.HashMap;
@@ -80,7 +80,7 @@ public final class PostgreSQLAuthenticationHandlerTest extends ProxyContextResto
@Before
public void init() {
PostgreSQLPacketPayload payload = new PostgreSQLPacketPayload(createByteBuf(16, 128), StandardCharsets.UTF_8);
- String md5Digest = md5Encode(username, password, md5Salt.getBytes(StandardCharsets.UTF_8));
+ String md5Digest = md5Encode(md5Salt.getBytes(StandardCharsets.UTF_8));
payload.writeInt4(4 + md5Digest.length() + 1);
payload.writeStringNul(md5Digest);
passwordMessagePacket = new PostgreSQLPasswordMessagePacket(payload);
@@ -154,9 +154,8 @@ public final class PostgreSQLAuthenticationHandlerTest extends ProxyContextResto
}
@SneakyThrows(ReflectiveOperationException.class)
- private String md5Encode(final String username, final String password, final byte[] md5Salt) {
- Method method = PostgreSQLMD5PasswordAuthenticator.class.getDeclaredMethod("md5Encode", String.class, String.class, byte[].class);
- method.setAccessible(true);
- return (String) method.invoke(new PostgreSQLMD5PasswordAuthenticator(), username, password, md5Salt);
+ private String md5Encode(final byte[] md5Salt) {
+ return (String) Plugins.getMemberAccessor().invoke(PostgreSQLMD5PasswordAuthenticator.class.getDeclaredMethod("md5Encode", String.class, String.class, byte[].class),
+ new PostgreSQLMD5PasswordAuthenticator(), username, password, md5Salt);
}
}
diff --git a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/authenticator/PostgreSQLMD5PasswordAuthenticatorTest.java b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/authenticator/PostgreSQLMD5PasswordAuthenticatorTest.java
index f5b4890afdc..591cf63888e 100644
--- a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/authenticator/PostgreSQLMD5PasswordAuthenticatorTest.java
+++ b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/authenticator/PostgreSQLMD5PasswordAuthenticatorTest.java
@@ -22,12 +22,11 @@ import org.apache.shardingsphere.db.protocol.postgresql.constant.PostgreSQLAuthe
import org.apache.shardingsphere.db.protocol.postgresql.packet.handshake.PostgreSQLRandomGenerator;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import org.junit.Test;
-
-import java.lang.reflect.Method;
+import org.mockito.internal.configuration.plugins.Plugins;
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public final class PostgreSQLMD5PasswordAuthenticatorTest {
@@ -47,15 +46,14 @@ public final class PostgreSQLMD5PasswordAuthenticatorTest {
public void assertAuthenticate() {
ShardingSphereUser user = new ShardingSphereUser(username, password, "");
byte[] md5Salt = PostgreSQLRandomGenerator.getInstance().generateRandomBytes(4);
- String md5Digest = md5Encode(username, password, md5Salt);
+ String md5Digest = md5Encode(md5Salt);
assertTrue(authenticator.authenticate(user, new Object[]{md5Digest, md5Salt}));
assertFalse(authenticator.authenticate(user, new Object[]{"wrong", md5Salt}));
}
@SneakyThrows(ReflectiveOperationException.class)
- private String md5Encode(final String username, final String password, final byte[] md5Salt) {
- Method method = PostgreSQLMD5PasswordAuthenticator.class.getDeclaredMethod("md5Encode", String.class, String.class, byte[].class);
- method.setAccessible(true);
- return (String) method.invoke(new PostgreSQLMD5PasswordAuthenticator(), username, password, md5Salt);
+ private String md5Encode(final byte[] md5Salt) {
+ return (String) Plugins.getMemberAccessor().invoke(PostgreSQLMD5PasswordAuthenticator.class.getDeclaredMethod("md5Encode", String.class, String.class, byte[].class),
+ new PostgreSQLMD5PasswordAuthenticator(), username, password, md5Salt);
}
}
diff --git a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/scenario/consistencycheck/ConsistencyCheckJobTest.java b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/scenario/consistencycheck/ConsistencyCheckJobTest.java
index 3eb9a5bc50d..d2e71f1edf2 100644
--- a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/scenario/consistencycheck/ConsistencyCheckJobTest.java
+++ b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/scenario/consistencycheck/ConsistencyCheckJobTest.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.test.it.data.pipeline.scenario.consistencycheck;
-import org.apache.shardingsphere.data.pipeline.api.config.job.ConsistencyCheckJobConfiguration;
import org.apache.shardingsphere.data.pipeline.api.job.JobStatus;
import org.apache.shardingsphere.data.pipeline.core.api.PipelineAPIFactory;
import org.apache.shardingsphere.data.pipeline.core.job.AbstractPipelineJob;
@@ -25,15 +24,14 @@ import org.apache.shardingsphere.data.pipeline.core.job.progress.yaml.YamlConsis
import org.apache.shardingsphere.data.pipeline.scenario.consistencycheck.ConsistencyCheckJob;
import org.apache.shardingsphere.data.pipeline.scenario.consistencycheck.context.ConsistencyCheckJobItemContext;
import org.apache.shardingsphere.data.pipeline.yaml.job.YamlConsistencyCheckJobConfiguration;
-import org.apache.shardingsphere.data.pipeline.yaml.job.YamlConsistencyCheckJobConfigurationSwapper;
import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import org.apache.shardingsphere.test.it.data.pipeline.core.util.PipelineContextUtil;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.mockito.internal.configuration.plugins.Plugins;
-import java.lang.reflect.Method;
-import java.util.HashMap;
+import java.util.Collections;
import java.util.Map;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -48,25 +46,27 @@ public final class ConsistencyCheckJobTest {
@Test
public void assertBuildPipelineJobItemContext() throws ReflectiveOperationException {
- YamlConsistencyCheckJobItemProgress jobItemProgress = new YamlConsistencyCheckJobItemProgress();
- jobItemProgress.setStatus(JobStatus.RUNNING.name());
- Map<String, Object> expectTableCheckPosition = new HashMap<>();
- expectTableCheckPosition.put("t_order", 100);
- jobItemProgress.setTableCheckPositions(expectTableCheckPosition);
String checkJobId = "j0201001";
- PipelineAPIFactory.getGovernanceRepositoryAPI().persistJobItemProgress(checkJobId, 0, YamlEngine.marshal(jobItemProgress));
- ConsistencyCheckJobConfiguration jobConfig = new ConsistencyCheckJobConfiguration(checkJobId, "", null, null);
- YamlConsistencyCheckJobConfiguration yamlJobConfig = new YamlConsistencyCheckJobConfigurationSwapper().swapToYamlConfiguration(jobConfig);
- ShardingContext shardingContext = new ShardingContext(checkJobId, "", 1, YamlEngine.marshal(yamlJobConfig), 0, "");
+ Map<String, Object> expectTableCheckPosition = Collections.singletonMap("t_order", 100);
+ PipelineAPIFactory.getGovernanceRepositoryAPI().persistJobItemProgress(checkJobId, 0, YamlEngine.marshal(createYamlConsistencyCheckJobItemProgress(expectTableCheckPosition)));
ConsistencyCheckJob consistencyCheckJob = new ConsistencyCheckJob();
- invokeSetJobId(checkJobId, consistencyCheckJob);
- ConsistencyCheckJobItemContext actualItemContext = consistencyCheckJob.buildPipelineJobItemContext(shardingContext);
- assertThat(actualItemContext.getProgressContext().getTableCheckPositions(), is(expectTableCheckPosition));
+ Plugins.getMemberAccessor().invoke(AbstractPipelineJob.class.getDeclaredMethod("setJobId", String.class), consistencyCheckJob, checkJobId);
+ ConsistencyCheckJobItemContext actual = consistencyCheckJob.buildPipelineJobItemContext(
+ new ShardingContext(checkJobId, "", 1, YamlEngine.marshal(createYamlConsistencyCheckJobConfiguration(checkJobId)), 0, ""));
+ assertThat(actual.getProgressContext().getTableCheckPositions(), is(expectTableCheckPosition));
}
- private void invokeSetJobId(final String checkJobId, final ConsistencyCheckJob consistencyCheckJob) throws ReflectiveOperationException {
- Method method = AbstractPipelineJob.class.getDeclaredMethod("setJobId", String.class);
- method.setAccessible(true);
- method.invoke(consistencyCheckJob, checkJobId);
+ private YamlConsistencyCheckJobItemProgress createYamlConsistencyCheckJobItemProgress(final Map<String, Object> expectTableCheckPosition) {
+ YamlConsistencyCheckJobItemProgress result = new YamlConsistencyCheckJobItemProgress();
+ result.setStatus(JobStatus.RUNNING.name());
+ result.setTableCheckPositions(expectTableCheckPosition);
+ return result;
+ }
+
+ private YamlConsistencyCheckJobConfiguration createYamlConsistencyCheckJobConfiguration(final String checkJobId) {
+ YamlConsistencyCheckJobConfiguration result = new YamlConsistencyCheckJobConfiguration();
+ result.setJobId(checkJobId);
+ result.setParentJobId("");
+ return result;
}
}