26#ifndef MYSQLD_MOCK_STATEMENT_READER_INCLUDED 
   27#define MYSQLD_MOCK_STATEMENT_READER_INCLUDED 
   38#include <openssl/bio.h> 
   71    const std::vector<session_tracker_field> &trackers);
 
   77  std::vector<classic_protocol::message::server::ColumnMeta> 
columns;
 
   78  std::vector<RowValueType> 
rows;
 
  123  template <
class CompletionToken>
 
  130      auto write_ec = write_res.error();
 
  136            [
this, compl_handler = std::move(
init.completion_handler)](
 
  137                std::error_code ec) 
mutable {
 
  139                compl_handler(ec, {});
 
  147                   [compl_handler = std::move(
init.completion_handler),
 
  148                    ec = write_res.error()]() { compl_handler(ec, {}); });
 
  154                 [compl_handler = std::move(
init.completion_handler),
 
  155                  transferred = write_res.value()]() {
 
  156                   compl_handler({}, transferred);
 
  160    return init.result.get();
 
  163  template <
class CompletionToken>
 
  166      async_send_tls(std::forward<CompletionToken>(token));
 
  169                       std::forward<CompletionToken>(token));
 
  173  template <
class CompletionToken>
 
  180    auto orig_size = 
buf.size();
 
  181    auto grow_size = 16 * 1024;
 
  184    size_t transferred{};
 
  185    auto read_res = read_ssl(
buf.data(orig_size, grow_size));
 
  187      transferred = read_res.value();
 
  190    buf.shrink(grow_size - transferred);
 
  193      const auto read_ec = read_res.error();
 
  198            [
this, compl_handler = std::move(
init.completion_handler)](
 
  199                std::error_code ec) 
mutable {
 
  201                compl_handler(ec, {});
 
  205              async_receive_tls(std::move(compl_handler));
 
  213            [compl_handler = std::move(
init.completion_handler),
 
  214             ec = map_tls_error_code(read_ec)]() { compl_handler(ec, {}); });
 
  219                 [compl_handler = std::move(
init.completion_handler),
 
  220                  transferred]() { compl_handler({}, transferred); });
 
  223    return init.result.get();
 
  226  template <
class CompletionToken>
 
  228    is_terminated_([&](
const bool killed) {
 
  234                                        std::move(
init.completion_handler)]() {
 
  235          compl_handler(make_error_code(std::errc::operation_canceled), 0);
 
  237      } 
else if (is_tls()) {
 
  238        return async_receive_tls(std::forward<CompletionToken>(token));
 
  241                                std::forward<CompletionToken>(token));
 
  246  template <
class CompletionToken>
 
  251    auto res = tls_accept();
 
  253      auto ec = res.error();
 
  259            wt, [&, compl_handler = std::move(
init.completion_handler)](
 
  260                    std::error_code ec) 
mutable {
 
  267              async_tls_accept(std::move(compl_handler));
 
  271                   [ec, compl_handler = std::move(
init.completion_handler)]() {
 
  277                 [compl_handler = std::move(
init.completion_handler)]() {
 
  282    return init.result.get();
 
  285  bool is_tls() { 
return static_cast<bool>(ssl_); }
 
  287  const SSL *
ssl()
 const { 
return ssl_.get(); }
 
  289  const std::vector<uint8_t> &
send_buffer()
 const { 
return send_buffer_; }
 
  292  const std::vector<uint8_t> &
recv_buffer()
 const { 
return recv_buffer_; }
 
  298    return sock_.native_handle();
 
  326  std::unique_ptr<SSL, SSL_Deleter> 
ssl_;
 
  336      : conn_(
std::move(
sock), 
std::move(ep), tls_ctx) {}
 
  355  template <
class CompletionToken>
 
  357    return conn_.async_send_tls(std::forward<CompletionToken>(token));
 
  360  template <
class CompletionToken>
 
  362    return conn_.async_send(std::forward<CompletionToken>(token));
 
  365  template <
class CompletionToken>
 
  367    return conn_.async_receive(std::forward<CompletionToken>(token));
 
  371    return conn_.send_buffer();
 
  374  std::vector<uint8_t> &
send_buffer() { 
return conn_.send_buffer(); }
 
  377    return conn_.recv_buffer();
 
  380  std::vector<uint8_t> &
recv_buffer() { 
return conn_.recv_buffer(); }
 
  387    server_auth_method_name_ = auth_method_name;
 
  391    return server_auth_method_name_;
 
  395    server_auth_method_data_ = auth_method_data;
 
  399    return server_auth_method_data_;
 
  403    auth_method_name_ = auth_method_name;
 
  409    auth_method_data_ = auth_method_data;
 
  414  static bool authenticate(
const std::string &auth_method_name,
 
  415                           const std::string &auth_method_data,
 
  417                           const std::vector<uint8_t> &auth_response);
 
  440  std::string username_{};
 
  442  std::string server_auth_method_name_{};
 
  443  std::string server_auth_method_data_{};
 
  445  std::string auth_method_name_{};
 
  446  std::string auth_method_data_{};
 
  457    bool cert_required{
false};
 
  490      bool is_greeting) = 0;
 
static mysql_service_status_t init()
Component initialization.
Definition: audit_api_message_emit.cc:566
 
Monitor pattern.
Definition: monitor.h:39
 
TLS Context for the server side.
Definition: tls_server_context.h:51
 
gtid changed.
Definition: classic_protocol_session_track.h:146
 
Definition: destination_endpoint.h:38
 
bool is_tcp() const
Definition: destination_endpoint.h:47
 
Definition: destination_socket.h:40
 
net::io_context::executor_type get_executor()
Definition: destination_socket.h:107
 
stdx::expected< void, std::error_code > native_non_blocking(bool val)
Definition: destination_socket.h:68
 
bool is_tcp() const
Definition: destination_socket.h:48
 
void async_wait(net::socket_base::wait_type wt, CompletionToken &&token)
Definition: destination_socket.h:134
 
stdx::expected< void, std::error_code > set_option(const SettableSocketOption &option)
Definition: destination_socket.h:88
 
Definition: executor.h:72
 
Definition: io_context.h:1004
 
io_context & context() const noexcept
Definition: io_context.h:1016
 
Definition: io_context.h:61
 
io_context()
Definition: io_context.h:68
 
static constexpr wait_type wait_read
Definition: socket.h:168
 
static constexpr wait_type wait_write
Definition: socket.h:169
 
Definition: statement_reader.h:321
 
void operator()(SSL *ssl)
Definition: statement_reader.h:323
 
Definition: statement_reader.h:95
 
const std::vector< uint8_t > & recv_buffer() const
Definition: statement_reader.h:292
 
stdx::expected< void, std::error_code > cancel()
Definition: statement_reader.h:295
 
void async_receive_tls(CompletionToken &&token)
Definition: statement_reader.h:174
 
std::vector< uint8_t > recv_buffer_
Definition: statement_reader.h:319
 
std::unique_ptr< SSL, SSL_Deleter > ssl_
Definition: statement_reader.h:326
 
stdx::expected< size_t, std::error_code > avail_ssl()
Definition: protocol_base.cc:62
 
TlsServerContext & tls_ctx_
Definition: statement_reader.h:328
 
void async_tls_accept(CompletionToken &&token)
Definition: statement_reader.h:247
 
void async_receive(CompletionToken &&token)
Definition: statement_reader.h:227
 
net::impl::socket::native_handle_type native_handle() const
Definition: statement_reader.h:297
 
mysql_harness::DestinationSocket sock_
Definition: statement_reader.h:315
 
stdx::expected< size_t, std::error_code > read_ssl(const net::mutable_buffer &buf)
Definition: protocol_base.cc:48
 
const std::vector< uint8_t > & send_buffer() const
Definition: statement_reader.h:289
 
Connection(mysql_harness::DestinationSocket sock, mysql_harness::DestinationEndpoint ep, TlsServerContext &tls_ctx)
Definition: statement_reader.h:97
 
void async_send(CompletionToken &&token)
Definition: statement_reader.h:164
 
net::io_context & io_context()
Definition: statement_reader.h:121
 
mysql_harness::DestinationEndpoint ep_
Definition: statement_reader.h:316
 
void async_send_tls(CompletionToken &&token)
Definition: statement_reader.h:124
 
stdx::expected< size_t, std::error_code > write_ssl(const net::const_buffer &buf)
Definition: protocol_base.cc:37
 
std::vector< uint8_t > & send_buffer()
Definition: statement_reader.h:290
 
static std::error_code map_tls_error_code(std::error_code ec)
Definition: statement_reader.h:309
 
const SSL * ssl() const
Definition: statement_reader.h:287
 
std::vector< uint8_t > & recv_buffer()
Definition: statement_reader.h:293
 
std::vector< uint8_t > send_buffer_
Definition: statement_reader.h:318
 
bool is_tls()
Definition: statement_reader.h:285
 
net::io_context::executor_type get_executor()
Definition: statement_reader.h:119
 
Definition: statement_reader.h:331
 
std::string username() const
Definition: statement_reader.h:384
 
virtual ~ProtocolBase()=default
 
ProtocolBase(ProtocolBase &&)=delete
 
std::string server_auth_method_name() const
Definition: statement_reader.h:390
 
net::steady_timer & exec_timer()
Definition: statement_reader.h:419
 
void terminate()
terminate the current connection.
Definition: statement_reader.h:430
 
Connection conn_
Definition: statement_reader.h:437
 
const std::vector< uint8_t > & send_buffer() const
Definition: statement_reader.h:370
 
void async_send_tls(CompletionToken &&token)
Definition: statement_reader.h:356
 
const std::vector< uint8_t > & recv_buffer() const
Definition: statement_reader.h:376
 
std::string server_auth_method_data() const
Definition: statement_reader.h:398
 
ProtocolBase & operator=(ProtocolBase &&rhs)=delete
 
std::string auth_method_data() const
Definition: statement_reader.h:412
 
Connection & connection()
Definition: statement_reader.h:434
 
void auth_method_name(const std::string &auth_method_name)
Definition: statement_reader.h:402
 
void server_auth_method_data(const std::string &auth_method_data)
Definition: statement_reader.h:394
 
virtual void encode_resultset(const ResultsetResponse &response)=0
 
void server_auth_method_name(const std::string &auth_method_name)
Definition: statement_reader.h:386
 
std::vector< uint8_t > & recv_buffer()
Definition: statement_reader.h:380
 
void auth_method_data(const std::string &auth_method_data)
Definition: statement_reader.h:408
 
void async_receive(CompletionToken &&token)
Definition: statement_reader.h:366
 
void async_send(CompletionToken &&token)
Definition: statement_reader.h:361
 
std::string auth_method_name() const
Definition: statement_reader.h:406
 
virtual void encode_error(const ErrorResponse &resp)=0
 
void username(const std::string &username)
Definition: statement_reader.h:382
 
ProtocolBase & operator=(const ProtocolBase &)=delete
 
virtual void encode_ok(const OkResponse &resp)=0
 
ProtocolBase(mysql_harness::DestinationSocket sock, mysql_harness::DestinationEndpoint ep, TlsServerContext &tls_ctx)
Definition: statement_reader.h:333
 
std::vector< uint8_t > & send_buffer()
Definition: statement_reader.h:374
 
net::io_context & io_context()
Definition: statement_reader.h:432
 
ProtocolBase(const ProtocolBase &)=delete
 
Definition: statement_reader.h:449
 
StatementReaderBase & operator=(StatementReaderBase &&)=default
 
virtual std::vector< AsyncNotice > get_async_notices()=0
 
virtual stdx::expected< handshake_data, ErrorResponse > handshake(bool is_greeting)=0
 
StatementReaderBase(StatementReaderBase &&)=default
 
virtual ~StatementReaderBase()=default
 
virtual void set_session_ssl_info(const SSL *ssl)=0
 
virtual void handle_statement(const std::string &statement, ProtocolBase *protocol)=0
Returns the data about the next statement from the json file.
 
StatementReaderBase & operator=(const StatementReaderBase &)=default
 
StatementReaderBase()=default
 
StatementReaderBase(const StatementReaderBase &)=default
 
virtual std::chrono::microseconds get_default_exec_time()=0
Returns the default execution time in microseconds.
 
static char * password
Definition: mysql_secure_installation.cc:58
 
static MYSQL * sock
Definition: mysqlcheck.cc:57
 
Definition: buf0block_hint.cc:30
 
constexpr value_type ssl
Definition: classic_protocol_constants.h:49
 
borrowable::message::server::Error< false > Error
Definition: classic_protocol_message.h:1411
 
borrowable::message::server::Greeting< false > Greeting
Definition: classic_protocol_message.h:1413
 
borrowable::message::server::Eof< false > Eof
Definition: classic_protocol_message.h:1412
 
borrowable::message::server::Ok< false > Ok
Definition: classic_protocol_message.h:1410
 
borrowable::session_track::TransactionCharacteristics< false > TransactionCharacteristics
Definition: classic_protocol_session_track.h:297
 
borrowable::session_track::TransactionState TransactionState
Definition: classic_protocol_session_track.h:298
 
borrowable::session_track::SystemVariable< false > SystemVariable
Definition: classic_protocol_session_track.h:299
 
borrowable::session_track::State State
Definition: classic_protocol_session_track.h:301
 
borrowable::session_track::Schema< false > Schema
Definition: classic_protocol_session_track.h:300
 
std::chrono::milliseconds milliseconds
Definition: authorize_manager.cc:67
 
int native_handle_type
Definition: socket_constants.h:51
 
dynamic_vector_buffer< T, Allocator > dynamic_buffer(std::vector< T, Allocator > &vec) noexcept
Definition: buffer.h:661
 
auto defer(CompletionToken &&token)
Definition: executor.h:779
 
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:418
 
Definition: mock_server_component.h:36
 
std::variant< classic_protocol::session_track::TransactionCharacteristics, classic_protocol::session_track::TransactionState, classic_protocol::session_track::SystemVariable, classic_protocol::session_track::Schema, classic_protocol::session_track::State, classic_protocol::session_track::Gtid > session_tracker_field
Definition: statement_reader.h:68
 
classic_protocol::message::server::Ok OkResponse
Definition: statement_reader.h:83
 
std::vector< std::optional< std::string > > RowValueType
Vector for keeping has_value|string representation of the values of the single row (ordered by column...
Definition: statement_reader.h:60
 
classic_protocol::message::server::Error ErrorResponse
Definition: statement_reader.h:84
 
std::string encode_session_trackers(const std::vector< session_tracker_field > &trackers)
Definition: duktape_statement_reader.cc:91
 
Definition: gcs_xcom_synode.h:64
 
Definition: statement_reader.h:86
 
std::chrono::milliseconds send_offset_ms
Definition: statement_reader.h:89
 
bool is_local
Definition: statement_reader.h:91
 
std::string payload
Definition: statement_reader.h:92
 
unsigned type
Definition: statement_reader.h:90
 
Keeps result data for single SQL statement that returns resultset.
Definition: statement_reader.h:76
 
std::vector< RowValueType > rows
Definition: statement_reader.h:78
 
classic_protocol::message::server::Eof end_of_rows
Definition: statement_reader.h:80
 
std::vector< classic_protocol::message::server::ColumnMeta > columns
Definition: statement_reader.h:77
 
Definition: statement_reader.h:451
 
std::optional< std::string > username
Definition: statement_reader.h:454
 
std::chrono::microseconds exec_time
Definition: statement_reader.h:461
 
classic_protocol::message::server::Greeting greeting
Definition: statement_reader.h:452
 
std::optional< std::string > cert_issuer
Definition: statement_reader.h:459
 
std::optional< std::string > password
Definition: statement_reader.h:455
 
std::optional< std::string > cert_subject
Definition: statement_reader.h:458
 
std::optional< std::string > auth_method_name
Definition: statement_reader.h:456
 
Definition: mysqlslap.cc:222