You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2020/09/16 16:46:19 UTC

[shardingsphere] branch master updated: test cases added for MySQLErrPacketFactory (#7488)

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 5e7787b  test cases added for MySQLErrPacketFactory (#7488)
5e7787b is described below

commit 5e7787ba93ca9465404e29ce05c11377978f8407
Author: sluk3r <sl...@qq.com>
AuthorDate: Thu Sep 17 00:45:42 2020 +0800

    test cases added for MySQLErrPacketFactory (#7488)
    
    * assertNewInstanceWithDBCreateExistsException added
    
    * assertNewInstanceWithDBCreateExistsException, assertNewInstanceWithDBDropExistsException and assertNewInstanceWithTableExistsException added
    
    * assertNewInstanceWithCircuitBreakException,assertNewInstanceWithShardingSphereConfigurationException and assertNewInstanceWithSQLParsingException added
    
    * in-line variable refactor
    
    * changed for refactor of MySQLErrPacketFactory.newInstance
    
    * assertNewInstanceWithUnsupportedCommandException and assertNewInstanceWithUnsupportedPreparedStatementException added
    
    Co-authored-by: wangxichun <wa...@jd.com>
---
 .../frontend/mysql/MySQLErrPacketFactoryTest.java  | 79 ++++++++++++++++++++++
 1 file changed, 79 insertions(+)

diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLErrPacketFactoryTest.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLErrPacketFactoryTest.java
index 5f78bfd..37f83c3 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLErrPacketFactoryTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLErrPacketFactoryTest.java
@@ -18,11 +18,19 @@
 package org.apache.shardingsphere.proxy.frontend.mysql;
 
 import org.apache.shardingsphere.db.protocol.mysql.packet.generic.MySQLErrPacket;
+import org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException;
+import org.apache.shardingsphere.proxy.backend.exception.CircuitBreakException;
+import org.apache.shardingsphere.proxy.backend.exception.DBCreateExistsException;
+import org.apache.shardingsphere.proxy.backend.exception.DBDropExistsException;
 import org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException;
 import org.apache.shardingsphere.proxy.backend.exception.TableModifyInTransactionException;
 import org.apache.shardingsphere.proxy.backend.exception.UnknownDatabaseException;
 import org.apache.shardingsphere.proxy.backend.text.sctl.exception.InvalidShardingCTLFormatException;
 import org.apache.shardingsphere.proxy.backend.text.sctl.exception.UnsupportedShardingCTLTypeException;
+import org.apache.shardingsphere.proxy.frontend.exception.UnsupportedCommandException;
+import org.apache.shardingsphere.proxy.frontend.exception.UnsupportedPreparedStatementException;
+import org.apache.shardingsphere.sharding.route.engine.exception.TableExistsException;
+import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
 import org.junit.Test;
 
 import java.sql.SQLException;
@@ -115,4 +123,75 @@ public final class MySQLErrPacketFactoryTest {
         assertThat(actual.getSqlState(), is("C10002"));
         assertThat(actual.getErrorMessage(), is("Unknown exception: [No reason]"));
     }
+    
+    @Test
+    public void assertNewInstanceWithDBCreateExistsException() {
+        MySQLErrPacket actual = MySQLErrPacketFactory.newInstance(new DBCreateExistsException("No reason"));
+        assertThat(actual.getSequenceId(), is(1));
+        assertThat(actual.getErrorCode(), is(1007));
+        assertThat(actual.getSqlState(), is("HY000"));
+        assertThat(actual.getErrorMessage(), is("Can't create database 'No reason'; database exists"));
+    }
+    
+    @Test
+    public void assertNewInstanceWithDBDropExistsException() {
+        MySQLErrPacket actual = MySQLErrPacketFactory.newInstance(new DBDropExistsException("No reason"));
+        assertThat(actual.getSequenceId(), is(1));
+        assertThat(actual.getErrorCode(), is(1008));
+        assertThat(actual.getSqlState(), is("HY000"));
+        assertThat(actual.getErrorMessage(), is("Can't drop database 'No reason'; database doesn't exist"));
+    }
+    
+    @Test
+    public void assertNewInstanceWithTableExistsException() {
+        MySQLErrPacket actual = MySQLErrPacketFactory.newInstance(new TableExistsException("table_name"));
+        assertThat(actual.getSequenceId(), is(1));
+        assertThat(actual.getErrorCode(), is(1050));
+        assertThat(actual.getSqlState(), is("42S01"));
+        assertThat(actual.getErrorMessage(), is("Table 'table_name' already exists"));
+    }
+    
+    @Test
+    public void assertNewInstanceWithCircuitBreakException() {
+        MySQLErrPacket actual = MySQLErrPacketFactory.newInstance(new CircuitBreakException());
+        assertThat(actual.getSequenceId(), is(1));
+        assertThat(actual.getErrorCode(), is(10000));
+        assertThat(actual.getSqlState(), is("C10000"));
+        assertThat(actual.getErrorMessage(), is("Circuit break mode is ON."));
+    }
+    
+    @Test
+    public void assertNewInstanceWithShardingSphereConfigurationException() {
+        assertCommonException(MySQLErrPacketFactory.newInstance(new ShardingSphereConfigurationException("No reason")));
+    }
+    
+    @Test
+    public void assertNewInstanceWithSQLParsingException() {
+        assertCommonException(MySQLErrPacketFactory.newInstance(new SQLParsingException("No reason")));
+    }
+    
+    @Test
+    public void assertNewInstanceWithUnsupportedCommandException() {
+        MySQLErrPacket actual = MySQLErrPacketFactory.newInstance(new UnsupportedCommandException("No reason"));
+        assertThat(actual.getSequenceId(), is(1));
+        assertThat(actual.getErrorCode(), is(10001));
+        assertThat(actual.getSqlState(), is("C10001"));
+        assertThat(actual.getErrorMessage(), is("Unsupported command: [No reason]"));
+    }
+    
+    @Test
+    public void assertNewInstanceWithUnsupportedPreparedStatementException() {
+        MySQLErrPacket actual = MySQLErrPacketFactory.newInstance(new UnsupportedPreparedStatementException());
+        assertThat(actual.getSequenceId(), is(1));
+        assertThat(actual.getErrorCode(), is(1295));
+        assertThat(actual.getSqlState(), is("HY000"));
+        assertThat(actual.getErrorMessage(), is("This command is not supported in the prepared statement protocol yet"));
+    }
+    
+    private void assertCommonException(final MySQLErrPacket actual) {
+        assertThat(actual.getSequenceId(), is(1));
+        assertThat(actual.getErrorCode(), is(1235));
+        assertThat(actual.getSqlState(), is("42000"));
+        assertThat(actual.getErrorMessage(), is("This version of ShardingProxy doesn't yet support this SQL. 'No reason'"));
+    }
 }