This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 ec41f38b409 Add more test cases on MySQLColumnDefinition41PacketTest
(#38190)
ec41f38b409 is described below
commit ec41f38b4091d3f1f7234bebbb538fefdd5d918c
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Feb 25 12:39:44 2026 +0800
Add more test cases on MySQLColumnDefinition41PacketTest (#38190)
---
.../query/MySQLColumnDefinition41PacketTest.java | 86 +++++++++++++++++-----
1 file changed, 68 insertions(+), 18 deletions(-)
diff --git
a/database/protocol/dialect/mysql/src/test/java/org/apache/shardingsphere/database/protocol/mysql/packet/command/query/MySQLColumnDefinition41PacketTest.java
b/database/protocol/dialect/mysql/src/test/java/org/apache/shardingsphere/database/protocol/mysql/packet/command/query/MySQLColumnDefinition41PacketTest.java
index 8dd45cc4882..1497ab55a11 100644
---
a/database/protocol/dialect/mysql/src/test/java/org/apache/shardingsphere/database/protocol/mysql/packet/command/query/MySQLColumnDefinition41PacketTest.java
+++
b/database/protocol/dialect/mysql/src/test/java/org/apache/shardingsphere/database/protocol/mysql/packet/command/query/MySQLColumnDefinition41PacketTest.java
@@ -20,12 +20,20 @@ package
org.apache.shardingsphere.database.protocol.mysql.packet.command.query;
import
org.apache.shardingsphere.database.protocol.mysql.constant.MySQLBinaryColumnType;
import
org.apache.shardingsphere.database.protocol.mysql.constant.MySQLConstants;
import
org.apache.shardingsphere.database.protocol.mysql.payload.MySQLPacketPayload;
+import org.apache.shardingsphere.database.protocol.payload.PacketPayload;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import static org.mockito.Mockito.times;
+import java.util.stream.Stream;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -36,28 +44,70 @@ class MySQLColumnDefinition41PacketTest {
private MySQLPacketPayload payload;
@Test
- void assertWriteWithPayload() {
-
when(payload.readInt1()).thenReturn(MySQLBinaryColumnType.LONG.getValue(), 0);
-
when(payload.readInt2()).thenReturn(MySQLConstants.DEFAULT_CHARSET.getId(), 0);
- when(payload.readInt4()).thenReturn(10);
- when(payload.readIntLenenc()).thenReturn(0x0cL);
- when(payload.readStringLenenc()).thenReturn("def", "logic_db", "tbl",
"tbl", "id", "id");
+ void assertNewWithPayload() {
+ mockPayloadForNewPacket("def", 0x0cL);
+ assertDoesNotThrow(() -> new MySQLColumnDefinition41Packet(payload));
+ }
+
+ @ParameterizedTest(name = "{0}")
+ @MethodSource("assertNewWithInvalidPayloadArguments")
+ void assertNewWithInvalidPayload(final String name, final String catalog,
final long nextLength) {
+ when(payload.readStringLenenc()).thenReturn(catalog, "logic_db",
"tbl", "tbl_org", "id", "id_org");
+ if ("def".equals(catalog)) {
+ when(payload.readIntLenenc()).thenReturn(nextLength);
+ }
+ assertThrows(IllegalArgumentException.class, () -> new
MySQLColumnDefinition41Packet(payload));
+ }
+
+ @Test
+ void assertWriteWithoutDefaultValues() {
+ mockPayloadForNewPacket("def", 0x0cL);
MySQLColumnDefinition41Packet actual = new
MySQLColumnDefinition41Packet(payload);
- actual.write(payload);
- verifyWrite();
+ actual.write((PacketPayload) payload);
+ verifyWrite("logic_db", "tbl", "tbl_org", "id", "id_org",
MySQLConstants.DEFAULT_CHARSET.getId(), 10,
MySQLBinaryColumnType.LONG.getValue(), 2, 1);
+ verify(payload, never()).writeIntLenenc(0);
+ verify(payload, never()).writeStringLenenc("");
+ }
+
+ @Test
+ void assertWriteWithDefaultValues() {
+ MySQLColumnDefinition41Packet actual = new
MySQLColumnDefinition41Packet(
+ MySQLConstants.DEFAULT_CHARSET.getId(), "logic_db", "tbl",
"tbl_org", "id", "id_org", 10, MySQLBinaryColumnType.LONG, 1, true);
+ actual.write((PacketPayload) payload);
+ verifyWrite("logic_db", "tbl", "tbl_org", "id", "id_org",
MySQLConstants.DEFAULT_CHARSET.getId(), 10,
MySQLBinaryColumnType.LONG.getValue(), 0, 1);
+ verify(payload).writeIntLenenc(0);
+ verify(payload).writeStringLenenc("");
+ }
+
+ private void mockPayloadForNewPacket(final String catalog, final long
nextLength) {
+ when(payload.readStringLenenc()).thenReturn(catalog, "logic_db",
"tbl", "tbl_org", "id", "id_org");
+ when(payload.readIntLenenc()).thenReturn(nextLength);
+
when(payload.readInt2()).thenReturn(MySQLConstants.DEFAULT_CHARSET.getId(), 2);
+ when(payload.readInt4()).thenReturn(10);
+
when(payload.readInt1()).thenReturn(MySQLBinaryColumnType.LONG.getValue(), 1);
+ }
+
+ private static Stream<Arguments> assertNewWithInvalidPayloadArguments() {
+ return Stream.of(
+ Arguments.of("catalog is invalid", "catalog", 0x0cL),
+ Arguments.of("next length is negative", "def", -1L),
+ Arguments.of("next length is zero", "def", 0L));
}
- private void verifyWrite() {
+ private void verifyWrite(final String schema, final String table, final
String orgTable, final String name, final String orgName,
+ final int characterSet, final int columnLength,
final int columnType, final int flags, final int decimals) {
verify(payload).writeStringLenenc("def");
- verify(payload).writeStringLenenc("logic_db");
- verify(payload, times(2)).writeStringLenenc("tbl");
- verify(payload, times(2)).writeStringLenenc("id");
+ verify(payload).writeStringLenenc(schema);
+ verify(payload).writeStringLenenc(table);
+ verify(payload).writeStringLenenc(orgTable);
+ verify(payload).writeStringLenenc(name);
+ verify(payload).writeStringLenenc(orgName);
verify(payload).writeIntLenenc(0x0c);
- verify(payload).writeInt2(MySQLConstants.DEFAULT_CHARSET.getId());
- verify(payload).writeInt4(10);
- verify(payload).writeInt1(MySQLBinaryColumnType.LONG.getValue());
- verify(payload).writeInt2(0);
- verify(payload).writeInt1(0);
+ verify(payload).writeInt2(characterSet);
+ verify(payload).writeInt4(columnLength);
+ verify(payload).writeInt1(columnType);
+ verify(payload).writeInt2(flags);
+ verify(payload).writeInt1(decimals);
verify(payload).writeReserved(2);
}
}