![]() |
Bitcoin Core 30.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... | |
Public Member Functions inherited from Sock | |
| 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 (std::span< const unsigned char > data, std::chrono::milliseconds timeout, CThreadInterrupt &interrupt) const |
| Send the given data, retrying on transient errors. More... | |
| virtual void | SendComplete (std::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 | |
Public Types inherited from Sock | |
| 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 Public Attributes inherited from Sock | |
| 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... | |
Protected Attributes inherited from Sock | |
| SOCKET | m_socket |
| Contained socket. More... | |
Simple scripted UDP server emulation for testing.
Definition at line 83 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 167 of file pcp_tests.cpp.
|
inlineprivate |
Definition at line 248 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 152 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 137 of file pcp_tests.cpp.
|
inlineprivate |
|
inlineprivate |
Definition at line 231 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 179 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 172 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 216 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 187 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 165 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 98 of file pcp_tests.cpp.
|
inlineprivate |
Definition at line 243 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 122 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 104 of file pcp_tests.cpp.
|
inlineoverridevirtual |
Set the non-blocking option on the socket.
Reimplemented from Sock.
Definition at line 185 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 177 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 189 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 211 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.
|
mutableprivate |
Definition at line 229 of file pcp_tests.cpp.
|
mutableprivate |
Definition at line 228 of file pcp_tests.cpp.
|
private |
Definition at line 222 of file pcp_tests.cpp.
|
mutableprivate |
Definition at line 223 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.