#include #include "mock.h" const amqp_table_t amqp_empty_table = { 0, nullptr }; AmqpMock* amqp_mock_instance = nullptr; amqp_connection_state_t AmqpMock::defaultConnectionState = reinterpret_cast(1); amqp_socket_t* AmqpMock::defaultSocket = reinterpret_cast(2); amqp_rpc_reply_t AmqpMock::defaultRpcReply { static_cast(AMQP_RESPONSE_NORMAL), { 0, nullptr }, 0 }; void AmqpMock::setInstance(AmqpMock* value) { amqp_mock_instance = value; } void AmqpMock::clearInstance(AmqpMock* value) { if (amqp_mock_instance == value) amqp_mock_instance = nullptr; } const char* amqp_error_string2(int err) { return (amqp_mock_instance ? amqp_mock_instance->amqp_error_string2(err) : nullptr); } amqp_channel_open_ok_t* amqp_channel_open(amqp_connection_state_t state, amqp_channel_t channel) { return (amqp_mock_instance ? amqp_mock_instance->amqp_channel_open(state, channel) : nullptr); } amqp_rpc_reply_t amqp_get_rpc_reply(amqp_connection_state_t state) { return (amqp_mock_instance ? amqp_mock_instance->amqp_get_rpc_reply(state) : AmqpMock::defaultRpcReply); } amqp_rpc_reply_t amqp_channel_close(amqp_connection_state_t state, amqp_channel_t channel, int code) { return (amqp_mock_instance ? amqp_mock_instance->amqp_channel_close(state, channel, code) : amqp_rpc_reply_t { }); } amqp_queue_declare_ok_t* amqp_queue_declare(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_boolean_t passive, amqp_boolean_t durable, amqp_boolean_t exclusive, amqp_boolean_t auto_delete, amqp_table_t arguments) { return (amqp_mock_instance ? amqp_mock_instance->amqp_queue_declare(state, channel, queue, passive, durable, exclusive, auto_delete, arguments) : nullptr); } void amqp_release_buffers(amqp_connection_state_t state) { if (amqp_mock_instance) amqp_mock_instance->amqp_release_buffers(state); } amqp_rpc_reply_t amqp_consume_message(amqp_connection_state_t state, amqp_envelope_t *envelope, struct timeval *timeout, int flags) { return (amqp_mock_instance ? amqp_mock_instance->amqp_consume_message(state, envelope, timeout, flags) : AmqpMock::defaultRpcReply); } int amqp_simple_wait_frame_noblock(amqp_connection_state_t state, amqp_frame_t *decoded_frame, struct timeval *tv) { return (amqp_mock_instance ? amqp_mock_instance->amqp_simple_wait_frame_noblock(state, decoded_frame, tv) : 0); } amqp_rpc_reply_t amqp_read_message(amqp_connection_state_t state, amqp_channel_t channel, amqp_message_t *message, int flags) { return (amqp_mock_instance ? amqp_mock_instance->amqp_read_message(state, channel, message, flags) : AmqpMock::defaultRpcReply); } amqp_rpc_reply_t amqp_connection_close(amqp_connection_state_t state, int code) { return (amqp_mock_instance ? amqp_mock_instance->amqp_connection_close(state, code) : AmqpMock::defaultRpcReply); } void amqp_destroy_envelope(amqp_envelope_t *envelope) { if (amqp_mock_instance) amqp_mock_instance->amqp_destroy_envelope(envelope); } void amqp_destroy_message(amqp_message_t *message) { if (amqp_mock_instance) amqp_mock_instance->amqp_destroy_message(message); } int amqp_destroy_connection(amqp_connection_state_t state) { return (amqp_mock_instance ? amqp_mock_instance->amqp_destroy_connection(state) : 0); } void amqp_maybe_release_buffers(amqp_connection_state_t state) { if (amqp_mock_instance) amqp_mock_instance->amqp_maybe_release_buffers(state); } amqp_connection_state_t amqp_new_connection(void) { return (amqp_mock_instance ? amqp_mock_instance->amqp_new_connection() : AmqpMock::defaultConnectionState); } amqp_socket_t* amqp_tcp_socket_new(amqp_connection_state_t state) { return (amqp_mock_instance ? amqp_mock_instance->amqp_tcp_socket_new(state) : AmqpMock::defaultSocket); } int amqp_socket_open(amqp_socket_t *self, const char *host, int port) { return (amqp_mock_instance ? amqp_mock_instance->amqp_socket_open(self, host, port) : 0); } #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wvarargs" amqp_rpc_reply_t amqp_login(amqp_connection_state_t state, char const *vhost, int channel_max, int frame_max, int heartbeat, amqp_sasl_method_enum sasl_method, ...) { if (!amqp_mock_instance) return AmqpMock::defaultRpcReply; amqp_rpc_reply_t ret; va_list args; va_start(args, sasl_method); switch (sasl_method) { case AMQP_SASL_METHOD_PLAIN: { const char* username = va_arg(args, const char*); const char* password = va_arg(args, const char*); ret = amqp_mock_instance->amqp_login_plain(state, vhost, channel_max, frame_max, heartbeat, sasl_method, username, password); } break; case AMQP_SASL_METHOD_EXTERNAL: { const char* token = va_arg(args, const char*); ret = amqp_mock_instance->amqp_login_external(state, vhost, channel_max, frame_max, heartbeat, sasl_method, token); } break; default: ret = AmqpMock::defaultRpcReply; } va_end(args); return ret; } #pragma clang diagnostic pop amqp_queue_bind_ok_t* amqp_queue_bind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_table_t arguments) { return (amqp_mock_instance ? amqp_mock_instance->amqp_queue_bind(state, channel, queue, exchange, routing_key, arguments) : nullptr); } int amqp_basic_publish(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_boolean_t mandatory, amqp_boolean_t immediate, struct amqp_basic_properties_t_ const *properties, amqp_bytes_t body) { return (amqp_mock_instance ? amqp_mock_instance->amqp_basic_publish(state, channel, exchange, routing_key, mandatory, immediate, properties, body) : 0); } amqp_basic_consume_ok_t* amqp_basic_consume(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t consumer_tag, amqp_boolean_t no_local, amqp_boolean_t no_ack, amqp_boolean_t exclusive, amqp_table_t arguments) { return (amqp_mock_instance ? amqp_mock_instance->amqp_basic_consume(state, channel, queue, consumer_tag, no_local, no_ack, exclusive, arguments) : nullptr); }