WL#12861: Support the current mysql-server-mock features for x-protocol.
Motivation
mysql_server_mock
is used for the component tests of MySQL Router.
It allows accepting the connections and takes a trace (json) file (that maps the SQL queries to expected results) as a parameter to mock the client server communication.
Currently it only supports the classic protocol. For the new features that MySQLRouter is adding (GR notifications via XPlugin etc.) we also need it to speak the x-protocol.
Goal
The goal of this WL is to have similar functionality that we currently have for the classic port to extend it further later on (CRUD, Notices, etc) with another WL.
Functional Requirements:
- FR1
-
mysql_server_mock
MUST accept xproto connections via its own port. - FR2
-
xproto port of
mysql_server_mock
MUST be configurable via the command-line - FR3
-
mysql_server_mock
MUST authenticate connections via the xproto port using the libmysqlxclient's authentication methods. - FR4
- statements in the JSON-trace-files MUST work for xproto connections.
- FR5
-
(To satisfy FR3, FR4)
mysql_server_mock
MUST support the at least the xproto messages from the client: CON_CAPABILITIES_SET, SESS_AUTHENTICATE_START, SESS_AUTHENTICATE_CONTINUE, SQL_STMT_EXECUTE
To run the mysql_server_mock
with X-protocol server support:
$ mysql_server_mock --xport=1234 --filename=/home/areliga/dev/server/mysql/router/tests/component/data/my_port.js
It binds to TCP port 1234
and handles xproto connections.
Connections from client that speaks xproto (mysqlxtest, mysqlShell) can authenticate. SQL statements received by the client which match the statements in the in *.js
file will receive the resultset as a X-protocol messages.