MockTransport.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2023 SICK AG, Waldkirch
3 //
4 // SPDX-License-Identifier: Unlicense
5 
6 #pragma once
7 
8 #include <functional>
9 #include <initializer_list>
10 #include <stdexcept>
11 #include <string>
12 #include <vector>
13 
14 #include <ITransport.h>
15 
16 namespace visionary_test {
17 
18 using ByteBuffer = std::vector<std::uint8_t>;
19 
20 // poor man's optional; since std::optional is only be available on C++17+
21 template <typename T>
22 class Opt
23 {
24 public:
25  Opt()
26  {
27  reset();
28  }
29  Opt(const T& val)
30  {
31  *this = val;
32  }
33 
34  Opt& operator=(const T& val)
35  {
36  m_value = val;
37  m_has_value = true;
38  return *this;
39  }
40  operator bool() const
41  {
42  return has_value();
43  }
44  const T& operator*() const
45  {
46  return value();
47  }
49  {
50  return value();
51  }
52  const T* operator->() const
53  {
54  return &(value());
55  }
57  {
58  return &(value());
59  }
60 
61  bool has_value() const
62  {
63  return m_has_value;
64  }
65  T& value()
66  {
67  assert_value();
68  return m_value;
69  }
70  const T& value() const
71  {
72  assert_value();
73  return m_value;
74  }
75  void reset()
76  {
77  m_has_value = false;
78  }
79 
80  template <typename U>
81  T value_or(const U& default_value) const
82  {
83  return has_value() ? value() : default_value;
84  }
85 
86 protected:
87  void assert_value() const
88  {
89  if (!m_has_value)
90  throw std::runtime_error("value not set");
91  }
92 
93 private:
96 };
97 
99 {
100 public:
102  {
104  {
105  }
106  std::uint32_t length;
107  std::uint8_t hubCntr;
108  std::uint8_t noC;
109  };
110 
111  static void nop();
112 
113  MockTransport();
114  MockTransport(const ByteBuffer& buffer);
115  MockTransport(std::initializer_list<ByteBuffer::value_type> init);
116 
117  virtual ~MockTransport();
118 
119  MockTransport& recvBuffer(const ByteBuffer& buffer);
120  MockTransport& recvBuffer(std::initializer_list<ByteBuffer::value_type> init);
123 
124  MockTransport& onSend(std::function<void()> fct);
125  MockTransport& onRecv(std::function<void()> fct);
126 
128  {
129  return m_mockSendBuffer;
130  }
131 
132  send_return_t send(const char* buffer, size_t size) override;
133  recv_return_t recv(ByteBuffer& buffer, std::size_t maxBytesToReceive) override;
134  recv_return_t read(ByteBuffer& buffer, std::size_t nBytesToReceive) override;
135 
136  int shutdown() override;
137  int getLastError() override;
138 
139  static ByteBuffer buildProtocol(const ProtocolReqRespHeader& header, const ByteBuffer& payload);
140  static bool parseProtocol(ProtocolReqRespHeader& header,
141  ByteBuffer::const_iterator& it,
142  const ByteBuffer::const_iterator& end);
143 
144 protected:
145  virtual void recvHandler();
146  virtual void sendHandler();
147 
148  // optional send return value override
150 
151  enum
152  {
158  } m_state;
159 
160  // callback when a recv was called (on the beginning of recv)
161  std::function<void()> m_onRecv;
162  // callback when a send was called (on the beginning of send)
163  std::function<void()> m_onSend;
166 };
167 
169 {
170 public:
172  {
174  {
175  }
176  std::uint32_t sessionId;
177  std::uint16_t reqId;
178  std::string cmdMode;
179  };
180 
182  virtual ~MockCoLa2Transport() = default;
183 
184  MockCoLa2Transport& sessionId(std::uint32_t sessionId);
185  MockCoLa2Transport& reqId(std::uint16_t reqId);
186  MockCoLa2Transport& cmdMode(const std::string& cmdMode);
187  MockCoLa2Transport& name(const std::string& name);
188  MockCoLa2Transport& returnvals(const ByteBuffer& parameterBuf);
189  MockCoLa2Transport& forceReply(bool force = true);
190 
192  {
193  return m_optCmdHeader;
194  }
195  const ByteBuffer& cmdpayload() const
196  {
197  return m_cmdpayload;
198  }
199 
200  static ByteBuffer buildCmd(const CmdReqRespHeader& header, const std::string& name, const ByteBuffer& parametersBuf);
201  static bool parseCmd(CmdReqRespHeader& header, ByteBuffer::const_iterator& it, const ByteBuffer::const_iterator& end);
202 
203 protected:
204  void recvHandler() override;
205 
206  // header used in the mocked respose package
208  // name of variablke or method to use in mocked response. needs to be space-delimited!
209  std::string m_name;
210  // buffer containing the parameter payload
212 
213  // parsed command header (if successfully parsed)
214  // if the parsing was not successful, the Opt is empty
216 
217  // buffer containing the parsed parameter payload
219 
220  // optional session overwrite value
222  // optional requiest overwrite value
224  // flag whether the response should given even if the package could not be parsed
226 };
227 
228 } // namespace visionary_test
visionary_test::MockTransport::parseProtocol
static bool parseProtocol(ProtocolReqRespHeader &header, ByteBuffer::const_iterator &it, const ByteBuffer::const_iterator &end)
Definition: MockTransport.cpp:164
visionary_test::Opt::value
const T & value() const
Definition: MockTransport.h:70
visionary_test::MockCoLa2Transport::m_header
CmdReqRespHeader m_header
Definition: MockTransport.h:207
visionary_test::Opt
Definition: MockTransport.h:22
visionary_test::MockTransport::recvHandler
virtual void recvHandler()
Definition: MockTransport.cpp:72
visionary_test::MockTransport::m_fakeSendReturn
Opt< send_return_t > m_fakeSendReturn
Definition: MockTransport.h:149
visionary_test::MockTransport::onSend
MockTransport & onSend(std::function< void()> fct)
T
T
Definition: mem_fn_cc.hpp:25
visionary_test::MockTransport::getLastError
int getLastError() override
Definition: MockTransport.cpp:140
visionary_test::MockCoLa2Transport::m_fakeReqId
Opt< std::uint16_t > m_fakeReqId
Definition: MockTransport.h:223
visionary_test::MockTransport::MockTransport
MockTransport()
Definition: MockTransport.cpp:22
visionary::ITransport::recv_return_t
ssize_t recv_return_t
Definition: ITransport.h:29
visionary_test::MockTransport::m_onSend
std::function< void()> m_onSend
Definition: MockTransport.h:163
visionary_test::MockTransport::kSEND_STARTED
@ kSEND_STARTED
Definition: MockTransport.h:154
visionary_test::MockCoLa2Transport::CmdReqRespHeader::CmdReqRespHeader
CmdReqRespHeader()
Definition: MockTransport.h:173
visionary::ITransport::ByteBuffer
std::vector< std::uint8_t > ByteBuffer
Definition: ITransport.h:22
visionary_test::Opt::operator->
T * operator->()
Definition: MockTransport.h:56
visionary_test::MockTransport::ProtocolReqRespHeader
Definition: MockTransport.h:101
visionary_test::Opt::Opt
Opt(const T &val)
Definition: MockTransport.h:29
visionary_test::MockCoLa2Transport::buildCmd
static ByteBuffer buildCmd(const CmdReqRespHeader &header, const std::string &name, const ByteBuffer &parametersBuf)
Definition: MockTransport.cpp:237
visionary_test::MockCoLa2Transport::reqId
MockCoLa2Transport & reqId(std::uint16_t reqId)
Definition: MockTransport.cpp:213
visionary_test::MockTransport::read
recv_return_t read(ByteBuffer &buffer, std::size_t nBytesToReceive) override
Definition: MockTransport.cpp:131
visionary_test::Opt::operator*
T & operator*()
Definition: MockTransport.h:48
visionary_test::MockTransport::ProtocolReqRespHeader::noC
std::uint8_t noC
Definition: MockTransport.h:108
visionary_test::MockCoLa2Transport::cmdMode
MockCoLa2Transport & cmdMode(const std::string &cmdMode)
Definition: MockTransport.cpp:219
visionary_test::MockTransport::sendBuffer
ByteBuffer & sendBuffer()
Definition: MockTransport.h:127
visionary_test::MockTransport::kSEND_CONTD
@ kSEND_CONTD
Definition: MockTransport.h:155
visionary_test::Opt::reset
void reset()
Definition: MockTransport.h:75
visionary_test::MockCoLa2Transport::m_forceReply
bool m_forceReply
Definition: MockTransport.h:225
visionary_test::MockCoLa2Transport::returnvals
MockCoLa2Transport & returnvals(const ByteBuffer &parameterBuf)
Definition: MockTransport.cpp:231
visionary_test::MockTransport::onRecv
MockTransport & onRecv(std::function< void()> fct)
Definition: MockTransport.cpp:66
visionary_test::MockTransport::sendHandler
virtual void sendHandler()
Definition: MockTransport.cpp:77
visionary_test::MockTransport::m_state
enum visionary_test::MockTransport::@13 m_state
visionary_test::MockTransport::kSEND_IDLE
@ kSEND_IDLE
Definition: MockTransport.h:153
visionary_test::MockTransport::noFakeSendReturn
MockTransport & noFakeSendReturn()
Definition: MockTransport.cpp:54
visionary_test::MockTransport::m_mockRecvBuffer
ByteBuffer m_mockRecvBuffer
Definition: MockTransport.h:164
visionary_test::MockCoLa2Transport::m_fakeSessionId
Opt< std::uint32_t > m_fakeSessionId
Definition: MockTransport.h:221
visionary_test::MockTransport::ProtocolReqRespHeader::hubCntr
std::uint8_t hubCntr
Definition: MockTransport.h:107
boost::foreach_detail_::end
auto_any< BOOST_DEDUCED_TYPENAME foreach_iterator< T, C >::type > end(auto_any_t col, type2type< T, C > *, boost::mpl::true_ *)
Definition: foreach.hpp:700
visionary_test::MockCoLa2Transport::forceReply
MockCoLa2Transport & forceReply(bool force=true)
visionary_test::MockTransport::kRECV_STARTED
@ kRECV_STARTED
Definition: MockTransport.h:156
visionary_test::MockTransport::nop
static void nop()
Definition: MockTransport.cpp:38
visionary_test::Opt::assert_value
void assert_value() const
Definition: MockTransport.h:87
visionary_test::MockCoLa2Transport::cmdHeader
const Opt< CmdReqRespHeader > & cmdHeader() const
Definition: MockTransport.h:191
visionary_test::MockCoLa2Transport::recvHandler
void recvHandler() override
Definition: MockTransport.cpp:297
visionary_test::MockTransport::buildProtocol
static ByteBuffer buildProtocol(const ProtocolReqRespHeader &header, const ByteBuffer &payload)
Definition: MockTransport.cpp:145
visionary_test::MockCoLa2Transport::m_optCmdHeader
Opt< CmdReqRespHeader > m_optCmdHeader
Definition: MockTransport.h:215
visionary_test::MockTransport::ProtocolReqRespHeader::length
std::uint32_t length
Definition: MockTransport.h:106
visionary_test::MockCoLa2Transport::m_cmdpayload
ByteBuffer m_cmdpayload
Definition: MockTransport.h:218
visionary_test::MockTransport::send
send_return_t send(const char *buffer, size_t size) override
Definition: MockTransport.cpp:82
visionary_test::MockTransport
Definition: MockTransport.h:98
visionary::ITransport::send_return_t
ssize_t send_return_t
Definition: ITransport.h:28
visionary_test::Opt::m_has_value
bool m_has_value
Definition: MockTransport.h:94
visionary_test::MockCoLa2Transport
Definition: MockTransport.h:168
visionary_test::MockCoLa2Transport::CmdReqRespHeader::sessionId
std::uint32_t sessionId
Definition: MockTransport.h:176
visionary_test::MockTransport::fakeSendReturn
MockTransport & fakeSendReturn(send_return_t retval)
Definition: MockTransport.cpp:60
visionary_test::Opt::value
T & value()
Definition: MockTransport.h:65
visionary_test::MockTransport::~MockTransport
virtual ~MockTransport()
visionary_test::MockTransport::recv
recv_return_t recv(ByteBuffer &buffer, std::size_t maxBytesToReceive) override
Definition: MockTransport.cpp:104
visionary_test::Opt::has_value
bool has_value() const
Definition: MockTransport.h:61
visionary_test::Opt::operator->
const T * operator->() const
Definition: MockTransport.h:52
visionary_test::MockTransport::m_onRecv
std::function< void()> m_onRecv
Definition: MockTransport.h:161
visionary_test::MockCoLa2Transport::m_returnvals
ByteBuffer m_returnvals
Definition: MockTransport.h:211
visionary_test::MockCoLa2Transport::name
MockCoLa2Transport & name(const std::string &name)
Definition: MockTransport.cpp:225
visionary_test::MockTransport::recvBuffer
MockTransport & recvBuffer(const ByteBuffer &buffer)
Definition: MockTransport.cpp:42
visionary_test::MockCoLa2Transport::MockCoLa2Transport
MockCoLa2Transport()
Definition: MockTransport.cpp:203
visionary_test::MockTransport::m_mockSendBuffer
ByteBuffer m_mockSendBuffer
Definition: MockTransport.h:165
visionary_test::Opt::m_value
T m_value
Definition: MockTransport.h:95
visionary_test::MockCoLa2Transport::cmdpayload
const ByteBuffer & cmdpayload() const
Definition: MockTransport.h:195
visionary_test::Opt::operator=
Opt & operator=(const T &val)
Definition: MockTransport.h:34
default_value
def default_value(type_)
visionary_test::Opt::value_or
T value_or(const U &default_value) const
Definition: MockTransport.h:81
visionary_test::MockTransport::ProtocolReqRespHeader::ProtocolReqRespHeader
ProtocolReqRespHeader()
Definition: MockTransport.h:103
visionary_test::Opt::operator*
const T & operator*() const
Definition: MockTransport.h:44
visionary_test::MockCoLa2Transport::~MockCoLa2Transport
virtual ~MockCoLa2Transport()=default
visionary_test
Definition: MockTransport.cpp:14
ITransport.h
visionary::ITransport
Definition: ITransport.h:19
visionary_test::MockTransport::shutdown
int shutdown() override
Definition: MockTransport.cpp:136
visionary_test::MockCoLa2Transport::CmdReqRespHeader::reqId
std::uint16_t reqId
Definition: MockTransport.h:177
visionary_test::ByteBuffer
std::vector< std::uint8_t > ByteBuffer
Definition: MockTransport.h:18
visionary_test::MockCoLa2Transport::m_name
std::string m_name
Definition: MockTransport.h:209
visionary_test::MockCoLa2Transport::sessionId
MockCoLa2Transport & sessionId(std::uint32_t sessionId)
Definition: MockTransport.cpp:207
visionary_test::MockCoLa2Transport::parseCmd
static bool parseCmd(CmdReqRespHeader &header, ByteBuffer::const_iterator &it, const ByteBuffer::const_iterator &end)
Definition: MockTransport.cpp:260
visionary_test::MockCoLa2Transport::CmdReqRespHeader::cmdMode
std::string cmdMode
Definition: MockTransport.h:178
visionary_test::MockTransport::kRECV_CONTD
@ kRECV_CONTD
Definition: MockTransport.h:157
visionary_test::MockCoLa2Transport::CmdReqRespHeader
Definition: MockTransport.h:171
visionary_test::Opt::Opt
Opt()
Definition: MockTransport.h:25


sick_visionary_ros
Author(s): SICK AG TechSupport 3D Snapshot
autogenerated on Thu Feb 8 2024 03:44:22