simple-socket library 1.2.0
CANSocket_TEST.cpp
Go to the documentation of this file.
1#include <cppunit/extensions/HelperMacros.h>
2#include "../CANRawSocket.h"
3#include "../CANFrame.h"
4
5#include <stdexcept>
6#include <cstring>
7
10static const int len = sizeof(NET::can_frame);
11
12class CANSocket_TEST : public CppUnit::TestFixture
13{
14 CPPUNIT_TEST_SUITE( CANSocket_TEST );
15 CPPUNIT_TEST( testFilter );
16 CPPUNIT_TEST( testSendTo );
17 CPPUNIT_TEST_SUITE_END();
18
19private:
20 NET::CANRawSocket* send_socket;
21 NET::CANRawSocket* recv_socket;
22
23public:
24 void setUp()
25 {
26 NET::can_frame frame1;
27 frame1.id.value = 0x10000000;
28 frame1.id.ext_format = 1;
29 frame1.dlc = 2;
30 frame1[0] = 0x00;
31 frame1[1] = 0x01;
32
33 frame1.data[0] = 0x00;
34 frame1.data[0] = 0x01;
35
36 send_socket = new NET::CANRawSocket();
37 recv_socket = new NET::CANRawSocket();
38 }
39
40 void tearDown()
41 {
42 delete send_socket;
43 delete recv_socket;
44 }
45
46 void testFilter()
47 {
48 NET::can_filter filter[2];
49 filter[0].id.value = 0x1ff;
50 filter[0].id.ext_format = 0;
51 filter[0].mask.value = 0x1ff;
52 filter[0].mask.ext_format = 1;
53
54 recv_socket->setReceiveFilter( filter, 2);
55 }
56
57 void testSendTo()
58 {
59 int ret;
60 std::string source;
61 send_socket->bind("vcan0");
62 recv_socket->bind("vcan0");
63 send_socket->sendTo( send_msg, len, "vcan0");
64
65 ret = recv_socket->receiveFrom( recv_msg, len, source);
66 CPPUNIT_ASSERT_EQUAL( len, ret );
67 CPPUNIT_ASSERT_EQUAL( std::string("vcan0"), source );
68
69 ret = recv_socket->timedReceiveFrom( recv_msg, len, source, 10);
70 CPPUNIT_ASSERT_EQUAL( 0, ret );
71 CPPUNIT_ASSERT_EQUAL( std::string("vcan0"), source );
72 CPPUNIT_ASSERT( std::memcmp(send_msg, recv_msg, len) == 0 );
73 }
74};
75
CPPUNIT_TEST_SUITE_REGISTRATION(CANSocket_TEST)
static NET::can_frame recv_msg
static NET::can_frame send_msg
static const int len
uint32_t ext_format
Definition CANFrame.h:17
uint32_t value
Definition CANFrame.h:14
Structure to represent a CAN 2.0 Frame.
Definition CANFrame.h:22
uint8_t dlc
Definition CANFrame.h:24
uint8_t data[8]
Definition CANFrame.h:26
Structure of id and mask used by filters.
Definition CANFrame.h:40
Raw CAN socket class.
int timedReceiveFrom(void *buffer, size_t len, std::string &interface, int timeout)
int receiveFrom(void *buffer, size_t len, std::string &interface)
void setReceiveFilter(const can_filter *filters, size_t len)
void sendTo(const void *buffer, size_t len, std::string_view interface)
void bind(std::string_view interface="")
Definition CANSocket.cpp:26