![]() |
Bitcoin Core 28.99.0
P2P Digital Currency
|
Simple scripted UDP server emulation for testing. More...
Public Member Functions | |
PCPTestSock (const CNetAddr &local_ip, const CNetAddr &gateway_ip, const std::vector< TestOp > &script) | |
PCPTestSock & | operator= (Sock &&other) override |
Move assignment operator, grab the socket from another object and close ours (if set). More... | |
ssize_t | Send (const void *data, size_t len, int) const override |
send(2) wrapper. More... | |
ssize_t | Recv (void *buf, size_t len, int flags) const override |
recv(2) wrapper. More... | |
int | Connect (const sockaddr *sa, socklen_t sa_len) const override |
connect(2) wrapper. More... | |
int | Bind (const sockaddr *sa, socklen_t sa_len) const override |
bind(2) wrapper. More... | |
int | Listen (int) const override |
listen(2) wrapper. More... | |
std::unique_ptr< Sock > | Accept (sockaddr *addr, socklen_t *addr_len) const override |
accept(2) wrapper. More... | |
int | GetSockOpt (int level, int opt_name, void *opt_val, socklen_t *opt_len) const override |
getsockopt(2) wrapper. More... | |
int | SetSockOpt (int, int, const void *, socklen_t) const override |
setsockopt(2) wrapper. More... | |
int | GetSockName (sockaddr *name, socklen_t *name_len) const override |
getsockname(2) wrapper. More... | |
bool | SetNonBlocking () const override |
Set the non-blocking option on the socket. More... | |
bool | IsSelectable () const override |
Check if the underlying socket can be used for select(2) (or the Wait() method). More... | |
bool | Wait (std::chrono::milliseconds timeout, Event requested, Event *occurred=nullptr) const override |
Wait for readiness for input (recv) or output (send). More... | |
bool | WaitMany (std::chrono::milliseconds timeout, EventsPerSock &events_per_sock) const override |
Same as Wait() , but wait on many sockets within the same timeout. More... | |
bool | IsConnected (std::string &) const override |
Check if still connected. More... | |
![]() | |
Sock ()=delete | |
Sock (SOCKET s) | |
Take ownership of an existent socket. More... | |
Sock (const Sock &)=delete | |
Copy constructor, disabled because closing the same socket twice is undesirable. More... | |
Sock (Sock &&other) | |
Move constructor, grab the socket from another object and close ours (if set). More... | |
virtual | ~Sock () |
Destructor, close the socket or do nothing if empty. More... | |
Sock & | operator= (const Sock &)=delete |
Copy assignment operator, disabled because closing the same socket twice is undesirable. More... | |
virtual Sock & | operator= (Sock &&other) |
Move assignment operator, grab the socket from another object and close ours (if set). More... | |
virtual ssize_t | Send (const void *data, size_t len, int flags) const |
send(2) wrapper. More... | |
virtual ssize_t | Recv (void *buf, size_t len, int flags) const |
recv(2) wrapper. More... | |
virtual int | Connect (const sockaddr *addr, socklen_t addr_len) const |
connect(2) wrapper. More... | |
virtual int | Bind (const sockaddr *addr, socklen_t addr_len) const |
bind(2) wrapper. More... | |
virtual int | Listen (int backlog) const |
listen(2) wrapper. More... | |
virtual std::unique_ptr< Sock > | Accept (sockaddr *addr, socklen_t *addr_len) const |
accept(2) wrapper. More... | |
virtual int | GetSockOpt (int level, int opt_name, void *opt_val, socklen_t *opt_len) const |
getsockopt(2) wrapper. More... | |
virtual int | SetSockOpt (int level, int opt_name, const void *opt_val, socklen_t opt_len) const |
setsockopt(2) wrapper. More... | |
virtual int | GetSockName (sockaddr *name, socklen_t *name_len) const |
getsockname(2) wrapper. More... | |
virtual bool | SetNonBlocking () const |
Set the non-blocking option on the socket. More... | |
virtual bool | IsSelectable () const |
Check if the underlying socket can be used for select(2) (or the Wait() method). More... | |
virtual bool | Wait (std::chrono::milliseconds timeout, Event requested, Event *occurred=nullptr) const |
Wait for readiness for input (recv) or output (send). More... | |
virtual bool | WaitMany (std::chrono::milliseconds timeout, EventsPerSock &events_per_sock) const |
Same as Wait() , but wait on many sockets within the same timeout. More... | |
virtual void | SendComplete (Span< const unsigned char > data, std::chrono::milliseconds timeout, CThreadInterrupt &interrupt) const |
Send the given data, retrying on transient errors. More... | |
virtual void | SendComplete (Span< const char > data, std::chrono::milliseconds timeout, CThreadInterrupt &interrupt) const |
Convenience method, equivalent to SendComplete(MakeUCharSpan(data), timeout, interrupt) . More... | |
virtual std::string | RecvUntilTerminator (uint8_t terminator, std::chrono::milliseconds timeout, CThreadInterrupt &interrupt, size_t max_data) const |
Read from socket until a terminator character is encountered. More... | |
virtual bool | IsConnected (std::string &errmsg) const |
Check if still connected. More... | |
bool | operator== (SOCKET s) const |
Check if the internal socket is equal to s . More... | |
Private Member Functions | |
void | ElapseTime (std::chrono::milliseconds duration) const |
bool | AtEndOfScript () const |
const TestOp & | CurOp () const |
void | PrepareOp () const |
void | AdvanceOp () const |
void | FailScript () const |
Private Attributes | |
const std::vector< TestOp > | m_script |
size_t | m_script_ptr = 0 |
std::chrono::milliseconds | m_time_left |
std::chrono::milliseconds | m_time {MockableSteadyClock::INITIAL_MOCK_TIME} |
bool | m_connected {false} |
CService | m_bound |
CNetAddr | m_local_ip |
CNetAddr | m_gateway_ip |
Additional Inherited Members | |
![]() | |
using | Event = uint8_t |
using | EventsPerSock = std::unordered_map< std::shared_ptr< const Sock >, Events, HashSharedPtrSock, EqualSharedPtrSock > |
On which socket to wait for what events in WaitMany() . More... | |
![]() | |
static constexpr Event | RECV = 0b001 |
If passed to Wait() , then it will wait for readiness to read from the socket. More... | |
static constexpr Event | SEND = 0b010 |
If passed to Wait() , then it will wait for readiness to send to the socket. More... | |
static constexpr Event | ERR = 0b100 |
Ignored if passed to Wait() , but could be set in the occurred events if an exceptional condition has occurred on the socket or if it has been disconnected. More... | |
![]() | |
SOCKET | m_socket |
Contained socket. More... | |
Simple scripted UDP server emulation for testing.
Definition at line 81 of file pcp_tests.cpp.
|
inlineoverridevirtual |
accept(2) wrapper.
Equivalent to std::make_unique<Sock>(accept(m_socket, addr, addr_len))
. Code that uses this wrapper can be unit tested if this method is overridden by a mock Sock implementation. The returned unique_ptr is empty if accept()
failed in which case errno will be set.
Reimplemented from Sock.
Definition at line 165 of file pcp_tests.cpp.
|
inlineprivate |
Definition at line 246 of file pcp_tests.cpp.
|
inlineprivate |
|
inlineoverridevirtual |
bind(2) wrapper.
Equivalent to bind(m_socket, addr, addr_len)
. Code that uses this wrapper can be unit tested if this method is overridden by a mock Sock implementation.
Reimplemented from Sock.
Definition at line 150 of file pcp_tests.cpp.
|
inlineoverridevirtual |
connect(2) wrapper.
Equivalent to connect(m_socket, addr, addrlen)
. Code that uses this wrapper can be unit tested if this method is overridden by a mock Sock implementation.
Reimplemented from Sock.
Definition at line 135 of file pcp_tests.cpp.
|
inlineprivate |
|
inlineprivate |
Definition at line 229 of file pcp_tests.cpp.
|
inlineprivate |
|
inlineoverridevirtual |
getsockname(2) wrapper.
Equivalent to getsockname(m_socket, name, name_len)
. Code that uses this wrapper can be unit tested if this method is overridden by a mock Sock implementation.
Reimplemented from Sock.
Definition at line 177 of file pcp_tests.cpp.
|
inlineoverridevirtual |
getsockopt(2) wrapper.
Equivalent to getsockopt(m_socket, level, opt_name, opt_val, opt_len)
. Code that uses this wrapper can be unit tested if this method is overridden by a mock Sock implementation.
Reimplemented from Sock.
Definition at line 170 of file pcp_tests.cpp.
|
inlineoverridevirtual |
Check if still connected.
[out] | errmsg | The error string, if the socket has been disconnected. |
Reimplemented from Sock.
Definition at line 214 of file pcp_tests.cpp.
|
inlineoverridevirtual |
Check if the underlying socket can be used for select(2)
(or the Wait()
method).
Reimplemented from Sock.
Definition at line 185 of file pcp_tests.cpp.
|
inlineoverridevirtual |
listen(2) wrapper.
Equivalent to listen(m_socket, backlog)
. Code that uses this wrapper can be unit tested if this method is overridden by a mock Sock implementation.
Reimplemented from Sock.
Definition at line 163 of file pcp_tests.cpp.
|
inlineoverridevirtual |
Move assignment operator, grab the socket from another object and close ours (if set).
Reimplemented from Sock.
Definition at line 96 of file pcp_tests.cpp.
|
inlineprivate |
Definition at line 241 of file pcp_tests.cpp.
|
inlineoverridevirtual |
recv(2) wrapper.
Equivalent to recv(m_socket, buf, len, flags);
. Code that uses this wrapper can be unit tested if this method is overridden by a mock Sock implementation.
Reimplemented from Sock.
Definition at line 120 of file pcp_tests.cpp.
|
inlineoverridevirtual |
send(2) wrapper.
Equivalent to send(m_socket, data, len, flags);
. Code that uses this wrapper can be unit tested if this method is overridden by a mock Sock implementation.
Reimplemented from Sock.
Definition at line 102 of file pcp_tests.cpp.
|
inlineoverridevirtual |
Set the non-blocking option on the socket.
Reimplemented from Sock.
Definition at line 183 of file pcp_tests.cpp.
|
inlineoverridevirtual |
setsockopt(2) wrapper.
Equivalent to setsockopt(m_socket, level, opt_name, opt_val, opt_len)
. Code that uses this wrapper can be unit tested if this method is overridden by a mock Sock implementation.
Reimplemented from Sock.
Definition at line 175 of file pcp_tests.cpp.
|
inlineoverridevirtual |
Wait for readiness for input (recv) or output (send).
[in] | timeout | Wait this much for at least one of the requested events to occur. |
[in] | requested | Wait for those events, bitwise-or of RECV and SEND . |
[out] | occurred | If not nullptr and the function returns true , then this indicates which of the requested events occurred (ERR will be added, even if not requested, if an exceptional event occurs on the socket). A timeout is indicated by return value of true and occurred being set to 0. |
occurred
of 0 is returned), false otherwise Reimplemented from Sock.
Definition at line 187 of file pcp_tests.cpp.
|
inlineoverridevirtual |
Same as Wait()
, but wait on many sockets within the same timeout.
[in] | timeout | Wait this long for at least one of the requested events to occur. |
[in,out] | events_per_sock | Wait for the requested events on these sockets and set occurred for the events that actually occurred. |
what[].occurred
are returned as 0), false otherwise Reimplemented from Sock.
Definition at line 209 of file pcp_tests.cpp.
|
mutableprivate |
Definition at line 225 of file pcp_tests.cpp.
|
mutableprivate |
Definition at line 224 of file pcp_tests.cpp.
|
mutableprivate |
Definition at line 227 of file pcp_tests.cpp.
|
mutableprivate |
Definition at line 226 of file pcp_tests.cpp.
|
private |
Definition at line 220 of file pcp_tests.cpp.
|
mutableprivate |
Definition at line 221 of file pcp_tests.cpp.
|
mutableprivate |
Definition at line 223 of file pcp_tests.cpp.
|
mutableprivate |
Definition at line 222 of file pcp_tests.cpp.