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 d1f4df8b0e9 Improve PostgreSQL TestDecodingPlugin encoding (#28781)
d1f4df8b0e9 is described below
commit d1f4df8b0e9e6a8aeebb9eefda6594fe312d7c3b
Author: Hongsheng Zhong <[email protected]>
AuthorDate: Tue Oct 17 11:16:30 2023 +0800
Improve PostgreSQL TestDecodingPlugin encoding (#28781)
* Improve SimpleMemoryPipelineChannelTest
* Use UTF-8 for PostgreSQL TestDecodingPlugin
---
.../memory/SimpleMemoryPipelineChannelTest.java | 8 ++++----
.../ingest/wal/decode/TestDecodingPlugin.java | 3 ++-
.../ingest/wal/decode/TestDecodingPluginTest.java | 21 ++++++++++++---------
3 files changed, 18 insertions(+), 14 deletions(-)
diff --git
a/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/ingest/channel/memory/SimpleMemoryPipelineChannelTest.java
b/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/ingest/channel/memory/SimpleMemoryPipelineChannelTest.java
index eebc8ef17df..ad7af129271 100644
---
a/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/ingest/channel/memory/SimpleMemoryPipelineChannelTest.java
+++
b/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/ingest/channel/memory/SimpleMemoryPipelineChannelTest.java
@@ -31,11 +31,11 @@ class SimpleMemoryPipelineChannelTest {
SimpleMemoryPipelineChannel simpleMemoryPipelineChannel = new
SimpleMemoryPipelineChannel(10, new EmptyAckCallback());
long startMills = System.currentTimeMillis();
simpleMemoryPipelineChannel.fetchRecords(1, 1, TimeUnit.MILLISECONDS);
- long endMills = System.currentTimeMillis();
- assertTrue(endMills - startMills >= 1 && endMills - startMills < 50);
+ long delta = System.currentTimeMillis() - startMills;
+ assertTrue(delta >= 1 && delta < 50, "Delta is not in [1,50) : " +
delta);
startMills = System.currentTimeMillis();
simpleMemoryPipelineChannel.fetchRecords(1, 500,
TimeUnit.MILLISECONDS);
- endMills = System.currentTimeMillis();
- assertTrue(endMills - startMills >= 500 && endMills - startMills <
600);
+ delta = System.currentTimeMillis() - startMills;
+ assertTrue(delta >= 500 && delta < 650, "Delta is not in [500,650) : "
+ delta);
}
}
diff --git
a/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/ingest/wal/decode/TestDecodingPlugin.java
b/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/ingest/wal/decode/TestDecodingPlugin.java
index a8c5499c658..17532f617dc 100644
---
a/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/ingest/wal/decode/TestDecodingPlugin.java
+++
b/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/ingest/wal/decode/TestDecodingPlugin.java
@@ -32,6 +32,7 @@ import
org.apache.shardingsphere.data.pipeline.postgresql.ingest.wal.event.Write
import java.math.BigDecimal;
import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
import java.sql.Date;
import java.sql.SQLException;
import java.util.LinkedList;
@@ -252,7 +253,7 @@ public final class TestDecodingPlugin implements
DecodingPlugin {
for (int i = 0; i < offset; i++) {
result[i] = data.get(startPosition + i);
}
- return new String(result);
+ return new String(result, StandardCharsets.UTF_8);
}
private String readNextString(final ByteBuffer data) {
diff --git
a/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/ingest/wal/decode/TestDecodingPluginTest.java
b/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/ingest/wal/decode/TestDecodingPluginTest.java
index 7689aa706f1..8ed9a27ed28 100644
---
a/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/ingest/wal/decode/TestDecodingPluginTest.java
+++
b/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/ingest/wal/decode/TestDecodingPluginTest.java
@@ -28,6 +28,7 @@ import org.postgresql.jdbc.TimestampUtils;
import org.postgresql.replication.LogSequenceNumber;
import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
import java.sql.SQLException;
import static org.hamcrest.CoreMatchers.instanceOf;
@@ -47,7 +48,7 @@ class TestDecodingPluginTest {
@Test
void assertDecodeWriteRowEvent() {
ByteBuffer data = ByteBuffer.wrap(("table public.test: INSERT:
data[character varying]:' 1 2 3'' 😊ä¸' t_json_empty[json]:'{}'
t_json[json]:'{\"test\":\"ä¸ä¸{ä¸ä¸}' ä¸\"}'"
- + " t_jsonb[jsonb]:'{\"test\":\"😊Emojiä¸\"}'").getBytes());
+ + "
t_jsonb[jsonb]:'{\"test\":\"😊Emojiä¸\"}'").getBytes(StandardCharsets.UTF_8));
WriteRowEvent actual = (WriteRowEvent) new
TestDecodingPlugin(null).decode(data, logSequenceNumber);
assertThat(actual.getLogSequenceNumber(), is(logSequenceNumber));
assertThat(actual.getTableName(), is("test"));
@@ -59,7 +60,8 @@ class TestDecodingPluginTest {
@Test
void assertDecodeUpdateRowEvent() {
- ByteBuffer data = ByteBuffer.wrap("table public.test: UPDATE:
unicode[character varying]:' 1 2 3'' ðŸ˜Šä¸ ' t_json_empty[json]:'{}'
t_json[json]:'{\"test\":\"ä¸ä¸{ä¸ä¸}' ä¸\"}'".getBytes());
+ ByteBuffer data = ByteBuffer.wrap("table public.test: UPDATE:
unicode[character varying]:' 1 2 3'' ðŸ˜Šä¸ ' t_json_empty[json]:'{}'
t_json[json]:'{\"test\":\"ä¸ä¸{ä¸ä¸}' ä¸\"}'"
+ .getBytes(StandardCharsets.UTF_8));
UpdateRowEvent actual = (UpdateRowEvent) new
TestDecodingPlugin(null).decode(data, logSequenceNumber);
assertThat(actual.getLogSequenceNumber(), is(logSequenceNumber));
assertThat(actual.getTableName(), is("test"));
@@ -70,7 +72,7 @@ class TestDecodingPluginTest {
@Test
void assertDecodeDeleteRowEvent() {
- ByteBuffer data = ByteBuffer.wrap("table public.test: DELETE:
data[integer]:1".getBytes());
+ ByteBuffer data = ByteBuffer.wrap("table public.test: DELETE:
data[integer]:1".getBytes(StandardCharsets.UTF_8));
DeleteRowEvent actual = (DeleteRowEvent) new
TestDecodingPlugin(null).decode(data, logSequenceNumber);
assertThat(actual.getLogSequenceNumber(), is(logSequenceNumber));
assertThat(actual.getTableName(), is("test"));
@@ -79,7 +81,7 @@ class TestDecodingPluginTest {
@Test
void assertDecodeWriteRowEventWithByteA() {
- ByteBuffer data = ByteBuffer.wrap("table public.test: INSERT:
data[bytea]:'\\xff00ab'".getBytes());
+ ByteBuffer data = ByteBuffer.wrap("table public.test: INSERT:
data[bytea]:'\\xff00ab'".getBytes(StandardCharsets.UTF_8));
WriteRowEvent actual = (WriteRowEvent) new
TestDecodingPlugin(null).decode(data, logSequenceNumber);
assertThat(actual.getLogSequenceNumber(), is(logSequenceNumber));
assertThat(actual.getTableName(), is("test"));
@@ -88,13 +90,13 @@ class TestDecodingPluginTest {
@Test
void assertDecodeUnknownTableType() {
- ByteBuffer data = ByteBuffer.wrap("unknown".getBytes());
+ ByteBuffer data =
ByteBuffer.wrap("unknown".getBytes(StandardCharsets.UTF_8));
assertThat(new TestDecodingPlugin(null).decode(data,
logSequenceNumber), instanceOf(PlaceholderEvent.class));
}
@Test
void assertDecodeUnknownRowEventType() {
- ByteBuffer data = ByteBuffer.wrap("table public.test: UNKNOWN:
data[character varying]:'1 2 3'''".getBytes());
+ ByteBuffer data = ByteBuffer.wrap("table public.test: UNKNOWN:
data[character varying]:'1 2 3'''".getBytes(StandardCharsets.UTF_8));
assertThrows(IngestException.class, () -> new
TestDecodingPlugin(null).decode(data, logSequenceNumber));
}
@@ -102,13 +104,14 @@ class TestDecodingPluginTest {
void assertDecodeTime() throws SQLException {
TimestampUtils timestampUtils = mock(TimestampUtils.class);
when(timestampUtils.toTime(null, "1 2 3'")).thenThrow(new
SQLException(""));
- ByteBuffer data = ByteBuffer.wrap("table public.test: INSERT:
data[time without time zone]:'1 2 3'''".getBytes());
+ ByteBuffer data = ByteBuffer.wrap("table public.test: INSERT:
data[time without time zone]:'1 2 3'''".getBytes(StandardCharsets.UTF_8));
assertThrows(DecodingException.class, () -> new TestDecodingPlugin(new
PostgreSQLTimestampUtils(timestampUtils)).decode(data, logSequenceNumber));
}
@Test
void assertDecodeInsertWithNullValue() {
- ByteBuffer data = ByteBuffer.wrap("table public.test: INSERT:
id[integer]:123 col0[integer]:null col1[character varying]:null col2[character
varying]:'nonnull'".getBytes());
+ ByteBuffer data = ByteBuffer.wrap("table public.test: INSERT:
id[integer]:123 col0[integer]:null col1[character varying]:null col2[character
varying]:'nonnull'"
+ .getBytes(StandardCharsets.UTF_8));
AbstractWALEvent actual = new TestDecodingPlugin(null).decode(data,
logSequenceNumber);
assertThat(actual, instanceOf(WriteRowEvent.class));
WriteRowEvent actualWriteRowEvent = (WriteRowEvent) actual;
@@ -120,7 +123,7 @@ class TestDecodingPluginTest {
@Test
void assertDecodeJsonValue() {
- ByteBuffer data = ByteBuffer.wrap("table public.test: INSERT:
id[integer]:123 ".getBytes());
+ ByteBuffer data = ByteBuffer.wrap("table public.test: INSERT:
id[integer]:123 ".getBytes(StandardCharsets.UTF_8));
AbstractWALEvent actual = new TestDecodingPlugin(null).decode(data,
logSequenceNumber);
assertThat(actual, instanceOf(WriteRowEvent.class));
}