36 #include <boost/asio/io_service.hpp> 37 #include <boost/uuid/uuid_io.hpp> 45 #include "../unit_tests/unit_tests_utils.h" 141 : m_tcp_server(tcp_server)
142 , m_max_opened_connection_count(max_opened_connection_count)
143 , m_opened_connection_count(0)
144 , m_next_opened_conn_idx(0)
145 , m_next_closed_conn_idx(0)
146 , m_connections(open_request_target)
148 for (
auto& conn_id : m_connections)
149 conn_id = boost::uuids::nil_uuid();
154 size_t idx = m_next_opened_conn_idx.fetch_add(1, std::memory_order_relaxed);
155 if (idx >= m_connections.size())
160 m_connections[idx] = connection_id;
162 size_t prev_connection_count = m_opened_connection_count.fetch_add(1, std::memory_order_relaxed);
163 if (m_max_opened_connection_count <= prev_connection_count)
178 size_t idx = m_next_closed_conn_idx.fetch_add(1, std::memory_order_relaxed);
179 if (m_next_opened_conn_idx.load(std::memory_order_relaxed) <= idx)
184 if (m_connections[idx].is_nil())
191 LOG_PRINT_L0(
"Close connection error: " << m_connections[idx]);
192 if (!ignore_close_fails)
198 m_connections[idx] = boost::uuids::nil_uuid();
199 m_opened_connection_count.fetch_sub(1, std::memory_order_relaxed);
207 size_t m_max_opened_connection_count;
208 std::atomic<size_t> m_opened_connection_count;
209 std::atomic<size_t> m_next_opened_conn_idx;
210 std::atomic<size_t> m_next_closed_conn_idx;
211 std::vector<boost::uuids::uuid> m_connections;
286 std::stringstream ss;
287 ss <<
"opened_connections_count = " << opened_connections_count <<
288 ", new_connection_counter = " << new_connection_counter <<
289 ", close_connection_counter = " << close_connection_counter;
epee::net_utils::connection< test_levin_protocol_handler > test_connection
bool close_next_connection(bool ignore_close_fails)
virtual int notify(int command, const epee::span< const uint8_t > in_buff, test_connection_context &context)
const std::string clt_port("36230")
epee::net_utils::boosted_tcp_server< test_levin_protocol_handler > test_tcp_server
virtual int invoke(int command, const epee::span< const uint8_t > in_buff, std::string &buff_out, test_connection_context &context)
uint64_t opened_connections_count
Non-owning sequence of data. Does not deep copy.
#define KV_SERIALIZE(varialble)
uint64_t max_opened_conn_count
uint64_t close_connection_counter
void close_remaining_connections()
unit_test::call_counter m_close_connection_counter
the connection templated-class for one peer connection
Represents a single connection from a client.
epee::levin::async_protocol_handler_config< test_connection_context > test_levin_protocol_handler_config
unit_test::call_counter m_new_connection_counter
unsigned __int64 uint64_t
size_t close_connection_counter() const
std::unique_ptr< void, terminate > context
Unique ZMQ context handle, calls zmq_term on destruction.
virtual void callback(test_connection_context &context)
virtual void on_connection_new(test_connection_context &context)
epee::levin::async_protocol_handler< test_connection_context > test_levin_protocol_handler
test_levin_commands_handler()
bool handle_new_connection(const boost::uuids::uuid &connection_id, bool ignore_close_fails=false)
virtual void on_connection_close(test_connection_context &context)
const std::string srv_port("36231")
uint64_t open_request_target
uint64_t new_connection_counter
open_close_test_helper(test_tcp_server &tcp_server, size_t open_request_target, size_t max_opened_connection_count)
size_t opened_connection_count() const
const unsigned int min_thread_count
std::string to_string(t_connection_type type)
#define END_KV_SERIALIZE_MAP()
#define BEGIN_KV_SERIALIZE_MAP()
size_t get() volatile const
size_t new_connection_counter() const
t_protocol_handler::config_type & get_config_object()