Electroneum
net_load_tests::open_close_test_helper Class Reference

#include <net_load_tests.h>

Public Member Functions

 open_close_test_helper (test_tcp_server &tcp_server, size_t open_request_target, size_t max_opened_connection_count)
 
bool handle_new_connection (const boost::uuids::uuid &connection_id, bool ignore_close_fails=false)
 
void close_remaining_connections ()
 
bool close_next_connection (bool ignore_close_fails)
 
size_t opened_connection_count () const
 

Detailed Description

Definition at line 137 of file net_load_tests.h.

Constructor & Destructor Documentation

◆ open_close_test_helper()

net_load_tests::open_close_test_helper::open_close_test_helper ( test_tcp_server tcp_server,
size_t  open_request_target,
size_t  max_opened_connection_count 
)
inline

Definition at line 140 of file net_load_tests.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)
147  {
148  for (auto& conn_id : m_connections)
149  conn_id = boost::uuids::nil_uuid();
150  }

Member Function Documentation

◆ close_next_connection()

bool net_load_tests::open_close_test_helper::close_next_connection ( bool  ignore_close_fails)
inline

Definition at line 176 of file net_load_tests.h.

177  {
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)
180  {
181  LOG_PRINT_L0("Not enough opened connections");
182  return false;
183  }
184  if (m_connections[idx].is_nil())
185  {
186  LOG_PRINT_L0("Connection isn't opened");
187  return false;
188  }
189  if (!m_tcp_server.get_config_object().close(m_connections[idx]))
190  {
191  LOG_PRINT_L0("Close connection error: " << m_connections[idx]);
192  if (!ignore_close_fails)
193  {
194  return false;
195  }
196  }
197 
198  m_connections[idx] = boost::uuids::nil_uuid();
199  m_opened_connection_count.fetch_sub(1, std::memory_order_relaxed);
200  return true;
201  }
#define LOG_PRINT_L0(x)
Definition: misc_log_ex.h:99
t_protocol_handler::config_type & get_config_object()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ close_remaining_connections()

void net_load_tests::open_close_test_helper::close_remaining_connections ( )
inline

Definition at line 171 of file net_load_tests.h.

172  {
173  while (close_next_connection(false));
174  }
bool close_next_connection(bool ignore_close_fails)
Here is the call graph for this function:

◆ handle_new_connection()

bool net_load_tests::open_close_test_helper::handle_new_connection ( const boost::uuids::uuid &  connection_id,
bool  ignore_close_fails = false 
)
inline

Definition at line 152 of file net_load_tests.h.

153  {
154  size_t idx = m_next_opened_conn_idx.fetch_add(1, std::memory_order_relaxed);
155  if (idx >= m_connections.size())
156  {
157  LOG_PRINT_L0("ERROR: connections overflow");
158  exit(1);
159  }
160  m_connections[idx] = connection_id;
161 
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)
164  {
165  return close_next_connection(ignore_close_fails);
166  }
167 
168  return true;
169  }
bool close_next_connection(bool ignore_close_fails)
#define LOG_PRINT_L0(x)
Definition: misc_log_ex.h:99
Here is the call graph for this function:

◆ opened_connection_count()

size_t net_load_tests::open_close_test_helper::opened_connection_count ( ) const
inline

Definition at line 203 of file net_load_tests.h.

203 { return m_opened_connection_count.load(std::memory_order_relaxed); }

The documentation for this class was generated from the following file: