polardbxengine/unittest/gunit/xplugin/xpl/mock/ngs_general.h

184 lines
6.9 KiB
C++

/*
* Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2.0,
* as published by the Free Software Foundation.
*
* This program is also distributed with certain software (including
* but not limited to OpenSSL) that is licensed under separate terms,
* as designated in a particular file or component or in included license
* documentation. The authors of MySQL hereby grant you an additional
* permission to link the program and your derivative works with the
* separately licensed software that they have included with MySQL.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License, version 2.0, for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef UNITTEST_GUNIT_XPLUGIN_XPL_MOCK_NGS_GENERAL_H_
#define UNITTEST_GUNIT_XPLUGIN_XPL_MOCK_NGS_GENERAL_H_
#include "plugin/x/ngs/include/ngs/interface/listener_factory_interface.h"
#include "plugin/x/ngs/include/ngs/interface/operations_factory_interface.h"
#include "plugin/x/ngs/include/ngs/interface/socket_events_interface.h"
#include "plugin/x/ngs/include/ngs/interface/socket_interface.h"
#include "plugin/x/ngs/include/ngs/interface/ssl_context_options_interface.h"
#include "plugin/x/src/ssl_session_options.h"
namespace ngs {
namespace test {
class Mock_options_session : public Ssl_session_options_interface {
public:
MOCK_CONST_METHOD0(active_tls, bool());
MOCK_CONST_METHOD0(ssl_cipher, std::string());
MOCK_CONST_METHOD0(ssl_version, std::string());
MOCK_CONST_METHOD0(ssl_cipher_list, std::vector<std::string>());
MOCK_CONST_METHOD0(ssl_verify_depth, long());
MOCK_CONST_METHOD0(ssl_verify_mode, long());
MOCK_CONST_METHOD0(ssl_sessions_reused, long());
MOCK_CONST_METHOD0(ssl_get_verify_result_and_cert, long());
MOCK_CONST_METHOD0(ssl_get_peer_certificate_issuer, std::string());
MOCK_CONST_METHOD0(ssl_get_peer_certificate_subject, std::string());
};
class Mock_options_context : public Ssl_context_options_interface {
public:
MOCK_METHOD0(ssl_ctx_verify_depth, long());
MOCK_METHOD0(ssl_ctx_verify_mode, long());
MOCK_METHOD0(ssl_server_not_after, std::string());
MOCK_METHOD0(ssl_server_not_before, std::string());
MOCK_METHOD0(ssl_sess_accept_good, long());
MOCK_METHOD0(ssl_sess_accept, long());
MOCK_METHOD0(ssl_accept_renegotiates, long());
MOCK_METHOD0(ssl_session_cache_mode, std::string());
MOCK_METHOD0(ssl_session_cache_hits, long());
MOCK_METHOD0(ssl_session_cache_misses, long());
MOCK_METHOD0(ssl_session_cache_overflows, long());
MOCK_METHOD0(ssl_session_cache_size, long());
MOCK_METHOD0(ssl_session_cache_timeouts, long());
MOCK_METHOD0(ssl_used_session_cache_entries, long());
};
class Mock_socket : public Socket_interface {
public:
MOCK_METHOD2(bind, int(const struct sockaddr *, socklen_t));
MOCK_METHOD3(accept,
MYSQL_SOCKET(PSI_socket_key, struct sockaddr *, socklen_t *));
MOCK_METHOD1(listen, int(int));
MOCK_METHOD0(close, void());
MOCK_METHOD0(get_socket_mysql, MYSQL_SOCKET());
MOCK_METHOD0(get_socket_fd, my_socket());
MOCK_METHOD4(set_socket_opt, int(int, int, const SOCKBUF_T *, socklen_t));
MOCK_METHOD0(set_socket_thread_owner, void());
};
class Mock_system : public System_interface {
public:
MOCK_METHOD1(unlink, int(const char *));
MOCK_METHOD2(kill, int(int, int));
MOCK_METHOD0(get_ppid, int());
MOCK_METHOD0(get_pid, int());
MOCK_METHOD0(get_errno, int());
MOCK_METHOD0(get_socket_errno, int());
MOCK_METHOD1(set_socket_errno, void(const int));
MOCK_METHOD2(get_socket_error_and_message, void(int &, std::string &));
MOCK_METHOD1(freeaddrinfo, void(addrinfo *));
MOCK_METHOD4(getaddrinfo,
int(const char *, const char *, const addrinfo *, addrinfo **));
MOCK_METHOD1(sleep, void(uint32));
};
class Mock_file : public File_interface {
public:
MOCK_METHOD0(is_valid, bool());
MOCK_METHOD0(close, int());
MOCK_METHOD2(read, int(void *, int));
MOCK_METHOD2(write, int(void *, int));
MOCK_METHOD0(fsync, int());
};
class Mock_factory : public Operations_factory_interface {
public:
MOCK_METHOD4(create_socket,
Socket_interface::Shared_ptr(PSI_socket_key, int, int, int));
MOCK_METHOD1(create_socket, Socket_interface::Shared_ptr(MYSQL_SOCKET));
MOCK_METHOD3(open_file, File_interface::Shared_ptr(const char *, int, int));
MOCK_METHOD0(create_system_interface, System_interface::Shared_ptr());
};
class Mock_socket_events : public Socket_events_interface {
public:
MOCK_METHOD2(listen,
bool(Socket_interface::Shared_ptr,
std::function<void(Connection_acceptor_interface &)>));
MOCK_METHOD2(add_timer, void(const std::size_t, std::function<bool()>));
MOCK_METHOD0(loop, void());
MOCK_METHOD0(break_loop, void());
MOCK_METHOD3(listen, bool(Socket_interface::Shared_ptr ,
std::function<void(Connection_acceptor_interface &)> ,
gx::Protocol_type ));
};
class Mock_listener_factory_interface : public Listener_factory_interface {
public:
MOCK_METHOD3(create_unix_socket_listener_ptr,
Listener_interface *(const std::string &unix_socket_path,
Socket_events_interface &event,
const uint32 backlog));
MOCK_METHOD6(create_tcp_socket_listener_ptr,
Listener_interface *(std::string &bind_address,
const std::string &network_namespace,
const unsigned short port,
const uint32 port_open_timeout,
Socket_events_interface &event,
const uint32 backlog));
Listener_interface_ptr create_unix_socket_listener(
const std::string &unix_socket_path, Socket_events_interface &event,
const uint32 backlog) {
return Listener_interface_ptr{
create_unix_socket_listener_ptr(unix_socket_path, event, backlog)};
}
Listener_interface_ptr create_tcp_socket_listener(
std::string &bind_address, const std::string &network_namespace,
const unsigned short port, const uint32 port_open_timeout,
Socket_events_interface &event, const uint32 backlog) {
return Listener_interface_ptr{
create_tcp_socket_listener_ptr(bind_address, network_namespace, port,
port_open_timeout, event, backlog)};
}
};
} // namespace test
} // namespace ngs
#endif // UNITTEST_GUNIT_XPLUGIN_XPL_MOCK_NGS_GENERAL_H_