Uncrustified tests

This commit is contained in:
Pavel Kirienko
2014-03-25 22:49:31 +04:00
parent 57de608bf0
commit d1278b5ed3
28 changed files with 185 additions and 120 deletions
+4
View File
@@ -60,7 +60,9 @@ TEST(DataTypeSignature, Correctness)
crc.add(0x34);
crc.add(0x12);
for (int i = 0; i < 8; i++)
{
crc.add(0);
}
ASSERT_EQ(crc.get(), signature.get());
@@ -79,7 +81,9 @@ TEST(DataTypeSignature, Correctness)
crc.add(0xdc);
crc.add(0xfe);
for (int i = 0; i < 64; i += 8)
{
crc.add((old_signature >> i) & 0xFF);
}
ASSERT_EQ(crc.get(), signature.get());
+2 -2
View File
@@ -10,7 +10,7 @@ struct ListItem : uavcan::LinkedListNode<ListItem>
int value;
ListItem(int value = 0)
: value(value)
: value(value)
{ }
struct GreaterThanComparator
@@ -18,7 +18,7 @@ struct ListItem : uavcan::LinkedListNode<ListItem>
const int compare_with;
GreaterThanComparator(int compare_with)
: compare_with(compare_with)
: compare_with(compare_with)
{ }
bool operator()(const ListItem* item) const
+24 -9
View File
@@ -106,11 +106,15 @@ TEST(Array, Basic)
*/
ASSERT_FALSE(a1.empty());
for (A1::const_iterator it = a1.begin(); it != a1.end(); ++it)
{
ASSERT_EQ(0, *it);
}
ASSERT_FALSE(a2.empty());
for (A2::const_iterator it = a2.begin(); it != a2.end(); ++it)
{
ASSERT_EQ(0, *it);
}
for (A3::const_iterator it = a3.begin(); it != a3.end(); ++it)
{
@@ -124,17 +128,21 @@ TEST(Array, Basic)
* Modification with known values; array lengths are hard coded.
*/
for (int i = 0; i < 4; i++)
{
a1.at(i) = i;
}
for (int i = 0; i < 2; i++)
{
a2.at(i) = i;
}
for (int i = 0; i < 2; i++)
{
a3[i].a = i;
a3[i].b = i;
for (int i2 = 0; i2 < 5; i2++)
{
a3[i].c.push_back(i2 & 1);
}
ASSERT_EQ(5, a3[i].c.size());
ASSERT_FALSE(a3[i].c.empty());
}
@@ -180,11 +188,13 @@ TEST(Array, Basic)
ASSERT_EQ(a3_, a3);
for (int i = 0; i < 4; i++)
{
ASSERT_EQ(a1[i], a1_[i]);
}
for (int i = 0; i < 2; i++)
{
ASSERT_EQ(a2[i], a2_[i]);
}
for (int i = 0; i < 2; i++)
{
ASSERT_EQ(a3[i].a, a3_[i].a);
@@ -346,10 +356,13 @@ TEST(Array, Dynamic)
ASSERT_EQ(255, b.size());
for (int i = 0; i < 5; i++)
{
ASSERT_TRUE(a[i]);
}
for (int i = 0; i < 255; i++)
{
ASSERT_EQ(72, b[i]);
}
}
@@ -566,8 +579,8 @@ TEST(Array, TailArrayOptimizationErrors)
TEST(Array, DynamicEncodeDecodeErrors)
{
typedef CustomType2<Array<Array<IntegerSpec<8, SignednessUnsigned, CastModeSaturate>,
ArrayModeDynamic, 255>,
ArrayModeDynamic, 255> > A;
ArrayModeDynamic, 255>,
ArrayModeDynamic, 255> > A;
A a;
a.b.resize(2);
a.b[0].push_back(55);
@@ -598,8 +611,8 @@ TEST(Array, DynamicEncodeDecodeErrors)
TEST(Array, StaticEncodeDecodeErrors)
{
typedef CustomType2<Array<Array<IntegerSpec<8, SignednessUnsigned, CastModeSaturate>,
ArrayModeStatic, 2>,
ArrayModeStatic, 2> > A;
ArrayModeStatic, 2>,
ArrayModeStatic, 2> > A;
A a;
a.a = 1.0;
a.b[0][0] = 0x11;
@@ -810,7 +823,9 @@ TEST(Array, MultidimensionalStreaming)
{
threedee[x][y].resize(3);
for (int z = 0; z < threedee[x][y].size(); z++)
{
threedee[x][y][z] = 1.0 / (x + y + z + 1.0);
}
}
}
@@ -52,7 +52,8 @@ TEST(CharArrayFormatter, Hardcore)
CharArrayFormatter<A8> f(a);
f.write("%% char='%*' double='%*' long='%*' unsigned long='%*' int='%s' long double='%*' bool='%*' const char='%*' %%",
f.write(
"%% char='%*' double='%*' long='%*' unsigned long='%*' int='%s' long double='%*' bool='%*' const char='%*' %%",
'%', -12.3456, -123456789123456789L, 987654321, -123456789, 0.000001L, true, "Don't Panic.");
static const std::string Reference =
+4 -4
View File
@@ -124,10 +124,10 @@ TEST(FloatSpec, Basic)
do { \
StorageType<FloatType>::Type var = StorageType<FloatType>::Type(); \
ASSERT_EQ(1, FloatType::decode(var, sc_rd, uavcan::TailArrayOptDisabled)); \
if (!isnan(expected_value)) \
ASSERT_FLOAT_EQ(expected_value, var); \
else \
ASSERT_EQ(!!isnan(expected_value), !!isnan(var)); \
if (!isnan(expected_value)) { \
ASSERT_FLOAT_EQ(expected_value, var); } \
else { \
ASSERT_EQ(!!isnan(expected_value), !!isnan(var)); } \
} while (0)
for (int i = 0; i < NumValues; i++)
@@ -173,17 +173,20 @@ TEST(GlobalDataTypeRegistry, Basic)
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindService, "my_namespace.DataTypeB"));
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindService, 42));
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, "my_namespace.DataTypeB")));
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage,
"my_namespace.DataTypeB")));
ASSERT_EQ(extractDescriptor<DataTypeB>(741), *pdtd);
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, 741)));
ASSERT_EQ(extractDescriptor<DataTypeB>(741), *pdtd);
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, "my_namespace.DataTypeA")));
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage,
"my_namespace.DataTypeA")));
ASSERT_EQ(extractDescriptor<DataTypeAMessage>(), *pdtd);
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, uavcan::DataTypeID(0))));
ASSERT_EQ(extractDescriptor<DataTypeAMessage>(), *pdtd);
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindService, "my_namespace.DataTypeA")));
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindService,
"my_namespace.DataTypeA")));
ASSERT_EQ(extractDescriptor<DataTypeAService>(147), *pdtd);
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindService, 147)));
ASSERT_EQ(extractDescriptor<DataTypeAService>(147), *pdtd);
+2 -1
View File
@@ -67,7 +67,8 @@ TEST(Publisher, Basic)
// Second shot - checking the transfer ID
ASSERT_LT(0, publisher.broadcast(msg));
expected_frame = uavcan::Frame(uavcan::mavlink::Message::DefaultDataTypeID, uavcan::TransferTypeMessageBroadcast,
expected_frame = uavcan::Frame(uavcan::mavlink::Message::DefaultDataTypeID,
uavcan::TransferTypeMessageBroadcast,
node.getNodeID(), uavcan::NodeID::Broadcast, 0, 1, true);
expected_frame.setPayload(expected_transfer_payload, 7);
ASSERT_TRUE(expected_frame.compile(expected_can_frame));
+1 -1
View File
@@ -17,7 +17,7 @@ struct TimerCallCounter
void callA(const uavcan::TimerEvent& ev) { events_a.push_back(ev); }
void callB(const uavcan::TimerEvent& ev) { events_b.push_back(ev); }
typedef uavcan::MethodBinder<TimerCallCounter*, void(TimerCallCounter::*)(const uavcan::TimerEvent&)> Binder;
typedef uavcan::MethodBinder<TimerCallCounter*, void (TimerCallCounter::*)(const uavcan::TimerEvent&)> Binder;
Binder bindA() { return Binder(this, &TimerCallCounter::callA); }
Binder bindB() { return Binder(this, &TimerCallCounter::callB); }
+2 -2
View File
@@ -39,7 +39,7 @@ struct ServiceCallResultHandler
}
typedef uavcan::MethodBinder<ServiceCallResultHandler*,
void (ServiceCallResultHandler::*)(const uavcan::ServiceCallResult<DataType>&)> Binder;
void (ServiceCallResultHandler::*)(const uavcan::ServiceCallResult<DataType>&)> Binder;
Binder bind() { return Binder(this, &ServiceCallResultHandler::handleResponse); }
};
@@ -69,7 +69,7 @@ TEST(ServiceClient, Basic)
// Caller
typedef uavcan::ServiceCallResult<root_ns_a::StringService> ResultType;
typedef uavcan::ServiceClient<root_ns_a::StringService,
typename ServiceCallResultHandler<root_ns_a::StringService>::Binder > ClientType;
typename ServiceCallResultHandler<root_ns_a::StringService>::Binder > ClientType;
ServiceCallResultHandler<root_ns_a::StringService> handler;
ClientType client1(nodes.b);
+8 -8
View File
@@ -28,13 +28,13 @@ struct SubscriptionListener
DataType msg;
ReceivedDataStructureCopy(const ReceivedDataStructure& s)
: ts_monotonic(s.getMonotonicTimestamp())
, ts_utc(s.getUtcTimestamp())
, transfer_type(s.getTransferType())
, transfer_id(s.getTransferID())
, src_node_id(s.getSrcNodeID())
, iface_index(s.getIfaceIndex())
, msg(s)
: ts_monotonic(s.getMonotonicTimestamp())
, ts_utc(s.getUtcTimestamp())
, transfer_type(s.getTransferType())
, transfer_id(s.getTransferID())
, src_node_id(s.getSrcNodeID())
, iface_index(s.getIfaceIndex())
, msg(s)
{ }
};
@@ -111,7 +111,7 @@ TEST(Subscriber, Basic)
{
uavcan::TransferType tt = (i & 1) ? uavcan::TransferTypeMessageUnicast : uavcan::TransferTypeMessageBroadcast;
uavcan::NodeID dni = (tt == uavcan::TransferTypeMessageBroadcast) ?
uavcan::NodeID::Broadcast : node.getDispatcher().getNodeID();
uavcan::NodeID::Broadcast : node.getDispatcher().getNodeID();
// uint_fast16_t data_type_id, TransferType transfer_type, NodeID src_node_id, NodeID dst_node_id,
// uint_fast8_t frame_index, TransferID transfer_id, bool last_frame
uavcan::Frame frame(uavcan::mavlink::Message::DefaultDataTypeID, tt, uavcan::NodeID(i + 100), dni, 0, i, true);
@@ -23,15 +23,25 @@ static bool validateDataTypeInfoResponse(const std::auto_ptr<ServiceCallResult<G
unsigned int mask)
{
if (!resp.get())
{
return false;
}
if (!resp->isSuccessful())
{
return false;
}
if (resp->response.name != DataType::getDataTypeFullName())
{
return false;
}
if (DataType::getDataTypeSignature().get() != resp->response.signature)
{
return false;
}
if (resp->response.mask != mask)
{
return false;
}
return true;
}
@@ -62,8 +72,8 @@ TEST(DataTypeInfoProvider, Basic)
nodes.spinBoth(MonotonicDuration::fromMSec(2));
ASSERT_TRUE(validateDataTypeInfoResponse<GetDataTypeInfo>(gdti_cln.collector.result,
GetDataTypeInfo::Response::MASK_KNOWN |
GetDataTypeInfo::Response::MASK_SERVING));
GetDataTypeInfo::Response::MASK_KNOWN |
GetDataTypeInfo::Response::MASK_SERVING));
ASSERT_EQ(1, gdti_cln.collector.result->server_node_id.get());
/*
@@ -75,7 +85,7 @@ TEST(DataTypeInfoProvider, Basic)
nodes.spinBoth(MonotonicDuration::fromMSec(2));
ASSERT_TRUE(validateDataTypeInfoResponse<NodeStatus>(gdti_cln.collector.result,
GetDataTypeInfo::Response::MASK_KNOWN));
GetDataTypeInfo::Response::MASK_KNOWN));
/*
* Starting publisher and subscriber for NodeStatus, requesting info again
@@ -91,9 +101,9 @@ TEST(DataTypeInfoProvider, Basic)
nodes.spinBoth(MonotonicDuration::fromMSec(2));
ASSERT_TRUE(validateDataTypeInfoResponse<NodeStatus>(gdti_cln.collector.result,
GetDataTypeInfo::Response::MASK_KNOWN |
GetDataTypeInfo::Response::MASK_PUBLISHING |
GetDataTypeInfo::Response::MASK_SUBSCRIBED));
GetDataTypeInfo::Response::MASK_KNOWN |
GetDataTypeInfo::Response::MASK_PUBLISHING |
GetDataTypeInfo::Response::MASK_SUBSCRIBED));
/*
* Requesting a non-existent type
@@ -14,8 +14,8 @@ struct GlobalTimeSyncMasterTestNode
TestNode node;
GlobalTimeSyncMasterTestNode(uavcan::NodeID nid)
: can(clock)
, node(can, clock, nid)
: can(clock)
, node(can, clock, nid)
{ }
};
@@ -26,9 +26,9 @@ struct GlobalTimeSyncTestNetwork
GlobalTimeSyncMasterTestNode master_high;
GlobalTimeSyncTestNetwork()
: slave(64)
, master_low(120)
, master_high(8)
: slave(64)
, master_low(120)
, master_high(8)
{
slave.can.other = &master_low.can;
master_low.can.other = &slave.can;
@@ -14,7 +14,7 @@ struct RestartHandler : public uavcan::IRestartRequestHandler
bool handleRestartRequest(uavcan::NodeID request_source)
{
std::cout << "Restart request from " << int(request_source.get()) << " will be "
<< (accept ? "accepted" : "rejected") << std::endl;
<< (accept ? "accepted" : "rejected") << std::endl;
return accept;
}
};
+5 -5
View File
@@ -23,7 +23,7 @@ TEST(CanFrame, FrameProperties)
TEST(CanFrame, ToString)
{
uavcan::CanFrame frame = makeCanFrame(123, "\x01\x02\x03\x04""1234", EXT);
uavcan::CanFrame frame = makeCanFrame(123, "\x01\x02\x03\x04" "1234", EXT);
EXPECT_EQ("0x0000007b 01 02 03 04 31 32 33 34 '....1234'", frame.toString());
EXPECT_TRUE(frame.toString() == frame.toString(uavcan::CanFrame::StrAligned));
@@ -32,14 +32,14 @@ TEST(CanFrame, ToString)
EXPECT_EQ("0x0000007b 7a 'z'", frame.toString());
EXPECT_EQ(" 0x141 61 62 63 64 aa bb cc dd 'abcd....'",
makeCanFrame(321, "abcd""\xaa\xbb\xcc\xdd", STD).toString(uavcan::CanFrame::StrAligned));
makeCanFrame(321, "abcd" "\xaa\xbb\xcc\xdd", STD).toString(uavcan::CanFrame::StrAligned));
EXPECT_EQ(" 0x100 ''",
makeCanFrame(256, "", STD).toString(uavcan::CanFrame::StrAligned));
makeCanFrame(256, "", STD).toString(uavcan::CanFrame::StrAligned));
EXPECT_EQ("0x100 ''",
makeCanFrame(256, "", STD).toString());
makeCanFrame(256, "", STD).toString());
EXPECT_EQ("0x141 61 62 63 64 aa bb cc dd 'abcd....'",
makeCanFrame(321, "abcd""\xaa\xbb\xcc\xdd", STD).toString());
makeCanFrame(321, "abcd" "\xaa\xbb\xcc\xdd", STD).toString());
}
@@ -24,7 +24,9 @@ TEST(CanDriverMock, Basic)
EXPECT_EQ(0, masks.read);
for (int i = 0; i < 3; i++)
{
driver.ifaces.at(i).writeable = false;
}
// No WR, no RD
masks.write = 7;
+10 -6
View File
@@ -15,7 +15,8 @@ static bool rxFrameEquals(const uavcan::CanRxFrame& rxframe, const uavcan::CanFr
<< " " << frame.toString(uavcan::CanFrame::StrAligned) << std::endl;
}
return (static_cast<const uavcan::CanFrame&>(rxframe) == frame) &&
(rxframe.ts_mono == uavcan::MonotonicTime::fromUSec(timestamp_usec)) && (rxframe.iface_index == iface_index);
(rxframe.ts_mono == uavcan::MonotonicTime::fromUSec(timestamp_usec)) &&
(rxframe.iface_index == iface_index);
}
TEST(CanIOManager, Reception)
@@ -137,11 +138,11 @@ TEST(CanIOManager, Transmission)
/*
* Simple transmission
*/
EXPECT_EQ(2, iomgr.send(frames[0], tsMono(100), tsMono(0), ALL_IFACES_MASK, CanTxQueue::Volatile, flags));// To both
EXPECT_EQ(2, iomgr.send(frames[0], tsMono(100), tsMono(0), ALL_IFACES_MASK, CanTxQueue::Volatile, flags));
EXPECT_TRUE(driver.ifaces.at(0).matchAndPopTx(frames[0], 100));
EXPECT_TRUE(driver.ifaces.at(1).matchAndPopTx(frames[0], 100));
EXPECT_EQ(1, iomgr.send(frames[1], tsMono(200), tsMono(100), 2, CanTxQueue::Persistent, flags)); // To #1
EXPECT_EQ(1, iomgr.send(frames[1], tsMono(200), tsMono(100), 2, CanTxQueue::Persistent, flags)); // To #1 only
EXPECT_TRUE(driver.ifaces.at(1).matchAndPopTx(frames[1], 200));
EXPECT_EQ(0, clockmock.monotonic);
@@ -186,7 +187,8 @@ TEST(CanIOManager, Transmission)
// Sending to #1, both writeable
driver.ifaces.at(0).writeable = true;
driver.ifaces.at(1).writeable = true;
EXPECT_LT(0, iomgr.send(frames[0], tsMono(999), tsMono(500), 2, CanTxQueue::Persistent, flags)); // One frame per each iface will be sent
// One frame per each iface will be sent:
EXPECT_LT(0, iomgr.send(frames[0], tsMono(999), tsMono(500), 2, CanTxQueue::Persistent, flags));
EXPECT_TRUE(driver.ifaces.at(0).matchAndPopTx(frames[1], 777)); // Note that frame[0] on iface #0 has expired
EXPECT_TRUE(driver.ifaces.at(1).matchAndPopTx(frames[0], 999)); // In different order due to prioritization
EXPECT_TRUE(driver.ifaces.at(0).tx.empty());
@@ -215,7 +217,8 @@ TEST(CanIOManager, Transmission)
// Sending 5 frames, one will be rejected
EXPECT_EQ(0, iomgr.send(frames[2], tsMono(2222), tsMono(1000), ALL_IFACES_MASK, CanTxQueue::Persistent, flags));
EXPECT_EQ(0, iomgr.send(frames[0], tsMono(3333), tsMono(1100), 2, CanTxQueue::Persistent, flags));
EXPECT_EQ(0, iomgr.send(frames[1], tsMono(4444), tsMono(1200), ALL_IFACES_MASK, CanTxQueue::Volatile, flags)); // One frame kicked here
// One frame kicked here:
EXPECT_EQ(0, iomgr.send(frames[1], tsMono(4444), tsMono(1200), ALL_IFACES_MASK, CanTxQueue::Volatile, flags));
// State checks
EXPECT_EQ(4, pool.getNumUsedBlocks()); // TX queue is full
@@ -271,7 +274,8 @@ TEST(CanIOManager, Transmission)
driver.ifaces.at(1).writeable = true;
driver.ifaces.at(0).tx_failure = true;
driver.ifaces.at(1).tx_failure = true;
EXPECT_GE(0, iomgr.send(frames[0], tsMono(2200), tsMono(0), ALL_IFACES_MASK, CanTxQueue::Persistent, flags)); // Non-blocking - return < 0
// Non-blocking - return < 0
EXPECT_GE(0, iomgr.send(frames[0], tsMono(2200), tsMono(0), ALL_IFACES_MASK, CanTxQueue::Persistent, flags));
ASSERT_EQ(2, pool.getNumUsedBlocks()); // Untransmitted frames will be buffered
@@ -25,7 +25,9 @@ static bool isInQueue(uavcan::CanTxQueue& queue, const uavcan::CanFrame& frame)
while (p)
{
if (frame == p->frame)
{
return true;
}
p = p->getNextListNode();
}
return false;
+8 -8
View File
@@ -6,14 +6,14 @@
#include <uavcan/transport/crc.hpp>
/*
import crcmod
crc = crcmod.predefined.Crc('crc-ccitt-false')
crc.update('123')
crc.hexdigest()
'5BCE'
crc.update('456789')
crc.hexdigest()
'29B1'
import crcmod
crc = crcmod.predefined.Crc('crc-ccitt-false')
crc.update('123')
crc.hexdigest()
'5BCE'
crc.update('456789')
crc.hexdigest()
'29B1'
*/
TEST(TransferCRC, Correctness)
+14 -4
View File
@@ -15,8 +15,8 @@ class DispatcherTransferEmulator : public IncomingTransferEmulatorBase
public:
DispatcherTransferEmulator(CanDriverMock& target, uavcan::NodeID dst_node_id = 127)
: IncomingTransferEmulatorBase(dst_node_id)
, target_(target)
: IncomingTransferEmulatorBase(dst_node_id)
, target_(target)
{ }
void sendOneFrame(const uavcan::RxFrame& frame)
@@ -24,7 +24,9 @@ public:
CanIfaceMock* const iface = static_cast<CanIfaceMock*>(target_.getIface(frame.getIfaceIndex()));
EXPECT_TRUE(iface);
if (iface)
{
iface->pushRx(frame);
}
}
};
@@ -125,7 +127,9 @@ TEST(Dispatcher, Reception)
ASSERT_TRUE(dispatcher.registerServiceResponseListener(subscribers[5].get()));
for (int i = 0; i < NUM_SUBSCRIBERS; i++)
{
ASSERT_FALSE(dispatcher.hasPublisher(subscribers[i]->getDataTypeDescriptor().getID()));
}
// Subscribers
ASSERT_TRUE(dispatcher.hasSubscriber(subscribers[0]->getDataTypeDescriptor().getID()));
@@ -147,7 +151,9 @@ TEST(Dispatcher, Reception)
ASSERT_EQ(2, dispatcher.getNumServiceResponseListeners());
for (int i = 0; i < NUM_SUBSCRIBERS; i++)
{
ASSERT_TRUE(subscribers[i]->isEmpty());
}
emulator.send(transfers);
emulator.send(transfers); // Just for fun, they will be ignored anyway.
@@ -158,7 +164,9 @@ TEST(Dispatcher, Reception)
ASSERT_LE(0, res);
clockmock.advance(100);
if (res == 0)
{
break;
}
}
/*
@@ -187,7 +195,9 @@ TEST(Dispatcher, Reception)
ASSERT_TRUE(subscribers[5]->matchAndPop(transfers[3]));
for (int i = 0; i < NUM_SUBSCRIBERS; i++)
{
ASSERT_TRUE(subscribers[i]->isEmpty());
}
/*
* Unregistering all transfers
@@ -284,8 +294,8 @@ struct DispatcherTestLoopbackFrameListener : public uavcan::LoopbackFrameListene
unsigned int count;
DispatcherTestLoopbackFrameListener(uavcan::Dispatcher& dispatcher)
: uavcan::LoopbackFrameListenerBase(dispatcher)
, count(0)
: uavcan::LoopbackFrameListenerBase(dispatcher)
, count(0)
{ }
using uavcan::LoopbackFrameListenerBase::startListening;
+16 -11
View File
@@ -84,7 +84,9 @@ TEST(Frame, FrameParsing)
ASSERT_FALSE(frame.parse(can));
for (unsigned int i = 0; i < sizeof(CanFrame::data); i++)
{
can.data[i] = i | (i << 4);
}
// CAN ID field order: Transfer ID, Last Frame, Frame Index, Source Node ID, Transfer Type, Data Type ID
@@ -92,7 +94,7 @@ TEST(Frame, FrameParsing)
* SFT broadcast
*/
can.id = CanFrame::FlagEFF |
(2 << 0) | (1 << 3) | (0 << 4) | (42 << 10) | (uavcan::TransferTypeMessageBroadcast << 17) | (456 << 19);
(2 << 0) | (1 << 3) | (0 << 4) | (42 << 10) | (uavcan::TransferTypeMessageBroadcast << 17) | (456 << 19);
ASSERT_TRUE(frame.parse(can));
ASSERT_TRUE(frame.isFirst());
@@ -109,7 +111,7 @@ TEST(Frame, FrameParsing)
* SFT addressed
*/
can.id = CanFrame::FlagEFF |
(2 << 0) | (1 << 3) | (0 << 4) | (42 << 10) | (uavcan::TransferTypeMessageUnicast << 17) | (456 << 19);
(2 << 0) | (1 << 3) | (0 << 4) | (42 << 10) | (uavcan::TransferTypeMessageUnicast << 17) | (456 << 19);
ASSERT_FALSE(frame.parse(can)); // No payload - failure
@@ -134,8 +136,8 @@ TEST(Frame, FrameParsing)
* MFT invalid - unterminated transfer
*/
can.id = CanFrame::FlagEFF |
(2 << 0) | (0 << 3) | (Frame::MaxIndex << 4) | (42 << 10) |
(uavcan::TransferTypeMessageUnicast << 17) | (456 << 19);
(2 << 0) | (0 << 3) | (Frame::MaxIndex << 4) | (42 << 10) |
(uavcan::TransferTypeMessageUnicast << 17) | (456 << 19);
ASSERT_FALSE(frame.parse(can));
@@ -143,7 +145,7 @@ TEST(Frame, FrameParsing)
* MFT invalid - invalid frame index
*/
can.id = CanFrame::FlagEFF |
(2 << 0) | (0 << 3) | (63 << 4) | (42 << 10) | (uavcan::TransferTypeMessageUnicast << 17) | (456 << 19);
(2 << 0) | (0 << 3) | (63 << 4) | (42 << 10) | (uavcan::TransferTypeMessageUnicast << 17) | (456 << 19);
ASSERT_FALSE(frame.parse(can));
@@ -151,7 +153,7 @@ TEST(Frame, FrameParsing)
* Malformed frames
*/
can.id = CanFrame::FlagEFF |
(2 << 0) | (1 << 3) | (0 << 4) | (42 << 10) | (uavcan::TransferTypeMessageUnicast << 17) | (456 << 19);
(2 << 0) | (1 << 3) | (0 << 4) | (42 << 10) | (uavcan::TransferTypeMessageUnicast << 17) | (456 << 19);
can.dlc = 3;
can.data[0] = 42;
ASSERT_FALSE(frame.parse(can)); // Src == Dst Node ID
@@ -159,7 +161,7 @@ TEST(Frame, FrameParsing)
ASSERT_TRUE(frame.parse(can));
can.id = CanFrame::FlagEFF | // cppcheck-suppress duplicateExpression
(2 << 0) | (1 << 3) | (0 << 4) | (0 << 10) | (uavcan::TransferTypeMessageUnicast << 17) | (456 << 19);
(2 << 0) | (1 << 3) | (0 << 4) | (0 << 10) | (uavcan::TransferTypeMessageUnicast << 17) | (456 << 19);
ASSERT_FALSE(frame.parse(can)); // Broadcast Src Node ID
}
@@ -213,7 +215,8 @@ TEST(Frame, FrameToString)
// RX frame default
RxFrame rx_frame;
EXPECT_EQ("dtid=65535 tt=4 snid=255 dnid=255 idx=0 last=0 tid=0 payload=[] ts_m=0.000000 ts_utc=0.000000 iface=0", rx_frame.toString());
EXPECT_EQ("dtid=65535 tt=4 snid=255 dnid=255 idx=0 last=0 tid=0 payload=[] ts_m=0.000000 ts_utc=0.000000 iface=0",
rx_frame.toString());
// RX frame max len
rx_frame = RxFrame(Frame(uavcan::DataTypeID::Max, uavcan::TransferTypeMessageUnicast,
@@ -223,12 +226,14 @@ TEST(Frame, FrameToString)
uint8_t data[8];
for (unsigned int i = 0; i < sizeof(data); i++)
{
data[i] = i;
}
rx_frame.setPayload(data, sizeof(data));
EXPECT_EQ(
"dtid=1023 tt=3 snid=127 dnid=126 idx=62 last=1 tid=7 payload=[00 01 02 03 04 05 06] ts_m=18446744073709.551615 ts_utc=18446744073709.551615 iface=3",
rx_frame.toString());
EXPECT_EQ("dtid=1023 tt=3 snid=127 dnid=126 idx=62 last=1 tid=7 payload=[00 01 02 03 04 05 06] "
"ts_m=18446744073709.551615 ts_utc=18446744073709.551615 iface=3",
rx_frame.toString());
// Plain frame default
Frame frame;
@@ -15,7 +15,9 @@ static uavcan::RxFrame makeFrame()
tsMono(123), tsUtc(456), 0);
uint8_t data[8];
for (unsigned int i = 0; i < sizeof(data); i++)
{
data[i] = i;
}
frame.setPayload(data, sizeof(data));
return frame;
}
@@ -105,4 +107,3 @@ TEST(MultiFrameIncomingTransfer, Basic)
it.release();
ASSERT_FALSE(bufmgr.access(bufmgr_key));
}
+4 -6
View File
@@ -26,7 +26,9 @@ template <typename T>
static void fill(const T a, int value)
{
for (unsigned int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
{
a[i] = value;
}
}
static bool matchAgainst(const std::string& data, const uavcan::ITransferBuffer& tbb,
@@ -58,12 +60,8 @@ static bool matchAgainst(const std::string& data, const uavcan::ITransferBuffer&
const bool equals = std::equal(local_buffer, local_buffer + len, data.begin() + offset);
if (!equals)
{
std::cout
<< "local_buffer:\n\t" << local_buffer
<< std::endl;
std::cout
<< "test_data:\n\t" << std::string(data.begin() + offset, data.begin() + offset + len)
<< std::endl;
std::cout << "local_buffer:\n\t" << local_buffer << std::endl;
std::cout << "test_data:\n\t" << std::string(data.begin() + offset, data.begin() + offset + len) << std::endl;
}
return equals;
}
@@ -14,10 +14,10 @@ class TransferListenerEmulator : public IncomingTransferEmulatorBase
public:
TransferListenerEmulator(uavcan::TransferListenerBase& target, const uavcan::DataTypeDescriptor& type,
uavcan::NodeID dst_node_id = 127)
: IncomingTransferEmulatorBase(dst_node_id)
, target_(target)
, data_type_(type)
uavcan::NodeID dst_node_id = 127)
: IncomingTransferEmulatorBase(dst_node_id)
, target_(target)
, data_type_(type)
{ }
void sendOneFrame(const uavcan::RxFrame& frame) { target_.handleFrame(frame); }
@@ -105,8 +105,8 @@ TEST(TransferListener, CrcFailure)
ASSERT_TRUE(ser_sft.size() == 1);
// Fuck my brain.
const_cast<uint8_t*>(ser_mft[1].getPayloadPtr())[1] = ~ser_mft[1].getPayloadPtr()[1];// CRC is no longer valid
const_cast<uint8_t*>(ser_sft[0].getPayloadPtr())[2] = ~ser_sft[0].getPayloadPtr()[2];// no CRC - will be undetected
const_cast<uint8_t*>(ser_mft[1].getPayloadPtr())[1] = ~ser_mft[1].getPayloadPtr()[1]; // CRC is no longer valid
const_cast<uint8_t*>(ser_sft[0].getPayloadPtr())[2] = ~ser_sft[0].getPayloadPtr()[2]; // no CRC - will be undetected
/*
* Sending and making sure that MFT was not received, but SFT was.
@@ -144,7 +144,7 @@ TEST(TransferListener, BasicSFT)
emulator.makeTransfer(uavcan::TransferTypeServiceResponse, 4, ""),
emulator.makeTransfer(uavcan::TransferTypeServiceResponse, 2, ""), // New TT, ignored due to OOM
emulator.makeTransfer(uavcan::TransferTypeMessageUnicast, 2, "foo"), // Same as 2, not ignored
emulator.makeTransfer(uavcan::TransferTypeMessageUnicast, 2, "123456789abc"),// Same as 2, not SFT - ignore
emulator.makeTransfer(uavcan::TransferTypeMessageUnicast, 2, "123456789abc"), // Same as 2, not SFT - ignore
emulator.makeTransfer(uavcan::TransferTypeMessageUnicast, 2, "bar"), // Same as 2, not ignored
};
+28 -26
View File
@@ -21,8 +21,8 @@ struct RxFrameGenerator
uavcan::TransferBufferManagerKey bufmgr_key;
RxFrameGenerator(uint16_t data_type_id, const uavcan::TransferBufferManagerKey& bufmgr_key = DEFAULT_KEY)
: data_type_id(data_type_id)
, bufmgr_key(bufmgr_key)
: data_type_id(data_type_id)
, bufmgr_key(bufmgr_key)
{ }
uavcan::RxFrame operator()(int iface_index, const std::string& data, uint8_t frame_index, bool last,
@@ -30,7 +30,7 @@ struct RxFrameGenerator
{
const uavcan::NodeID dst_nid =
(bufmgr_key.getTransferType() == uavcan::TransferTypeMessageBroadcast) ?
uavcan::NodeID::Broadcast : TARGET_NODE_ID;
uavcan::NodeID::Broadcast : TARGET_NODE_ID;
uavcan::Frame frame(data_type_id, bufmgr_key.getTransferType(), bufmgr_key.getNodeID(),
dst_nid, frame_index, transfer_id, last);
@@ -53,7 +53,7 @@ struct Context
uavcan::TransferBufferManager<BUFSIZE, 1> bufmgr;
Context()
: bufmgr(poolmgr)
: bufmgr(poolmgr)
{
assert(poolmgr.allocate(1) == NULL);
}
@@ -77,11 +77,13 @@ static bool matchBufferContent(const uavcan::ITransferBuffer* tbb, const std::st
}
tbb->read(0, data, content.length());
if (std::equal(content.begin(), content.end(), data))
{
return true;
}
std::cout << "Buffer content mismatch:"
<< "\n\tExpected: " << content
<< "\n\tActually: " << reinterpret_cast<const char*>(data)
<< std::endl;
<< "\n\tExpected: " << content
<< "\n\tActually: " << reinterpret_cast<const char*>(data)
<< std::endl;
return false;
}
@@ -134,7 +136,7 @@ TEST(TransferReceiver, Basic)
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "abcdefgh", 1, false, 1, 1200), bk));
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "45678910", 1, false, 2, 1300), bk)); // Next TID, but FI > 0
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "", 2, true, 1, 1300), bk)); // Wrong iface
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "", 31,true, 1, 1300), bk)); // Unexpected FI
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "", 31, true, 1, 1300), bk)); // Unexpected FI
CHECK_COMPLETE( rcv.addFrame(gen(0, "", 2, true, 1, 1300), bk));
ASSERT_TRUE(matchBufferContent(bufmgr.access(gen.bufmgr_key), "345678abcdefgh"));
@@ -176,21 +178,21 @@ TEST(TransferReceiver, Basic)
CHECK_SINGLE_FRAME(rcv.addFrame(gen(1, "qwe", 0, true, 6, 600000), bk)); // Accepted due to iface timeout
ASSERT_EQ(600000, rcv.getLastTransferTimestampMonotonic().toUSec());
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "qwe", 0, true, 7, 600100), bk));// Ignored - old iface 0
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "qwe", 0, true, 7, 600100), bk)); // Ignored - old iface 0
CHECK_SINGLE_FRAME(rcv.addFrame(gen(1, "qwe", 0, true, 7, 600100), bk));
ASSERT_EQ(600100, rcv.getLastTransferTimestampMonotonic().toUSec());
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "qwe", 0, true, 7, 600100), bk)); // Old TID
CHECK_SINGLE_FRAME(rcv.addFrame(gen(0, "qwe", 0, true, 7, 100000000), bk));// Accepted - global timeout
CHECK_SINGLE_FRAME(rcv.addFrame(gen(0, "qwe", 0, true, 7, 100000000), bk)); // Accepted - global timeout
ASSERT_EQ(100000000, rcv.getLastTransferTimestampMonotonic().toUSec());
CHECK_SINGLE_FRAME(rcv.addFrame(gen(0, "qwe", 0, true, 0, 100000100), bk));
ASSERT_EQ(100000100, rcv.getLastTransferTimestampMonotonic().toUSec());
ASSERT_TRUE(rcv.isTimedOut(tsMono(900000000)));
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "\x78\x56" "345678", 0, false, 0, 900000000), bk));// Global timeout
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "12345678", 0, false, 0, 900000100), bk));// Wrong iface
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "qwe", 1, true, 0, 900000200), bk));// Wrong iface
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "\x78\x56" "345678", 0, false, 0, 900000000), bk)); // Global timeout
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "12345678", 0, false, 0, 900000100), bk)); // Wrong iface
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "qwe", 1, true, 0, 900000200), bk)); // Wrong iface
CHECK_COMPLETE( rcv.addFrame(gen(1, "qwe", 1, true, 0, 900000200), bk));
ASSERT_EQ(900000000, rcv.getLastTransferTimestampMonotonic().toUSec());
ASSERT_FALSE(rcv.isTimedOut(tsMono(1000)));
@@ -330,15 +332,15 @@ TEST(TransferReceiver, Restart)
* This transfer looks complete, but must be ignored because of large delay after the first frame
*/
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "--------", 0, false, 0, 100), bk)); // Begin
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "--------", 1, false, 0, 10000100), bk));// Continue 10 sec later, expired
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "--------", 2, true, 0, 10000200), bk));// Ignored
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "--------", 1, false, 0, 10000100), bk)); // Continue 10 sec later, expired
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "--------", 2, true, 0, 10000200), bk)); // Ignored
/*
* Begins immediately after, gets an iface timeout but completes OK
*/
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "12345678", 0, false, 0, 10000300), bk));// Begin
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "12345678", 1, false, 0, 12000300), bk));// 2 sec later, iface timeout
CHECK_COMPLETE( rcv.addFrame(gen(1, "12345678", 2, true, 0, 12000400), bk));// OK nevertheless
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "12345678", 0, false, 0, 10000300), bk)); // Begin
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "12345678", 1, false, 0, 12000300), bk)); // 2 sec later, iface timeout
CHECK_COMPLETE( rcv.addFrame(gen(1, "12345678", 2, true, 0, 12000400), bk)); // OK nevertheless
ASSERT_TRUE(matchBufferContent(bufmgr.access(gen.bufmgr_key), "3456781234567812345678"));
ASSERT_EQ(0x3231, rcv.getLastTransferCrc());
@@ -346,14 +348,14 @@ TEST(TransferReceiver, Restart)
/*
* Begins OK, gets an iface timeout, switches to another iface
*/
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "--------", 0, false, 1, 13000500), bk));// Begin
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "--------", 1, false, 1, 16000500), bk));// 3 sec later, iface timeout
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "--------", 1, false, 1, 16000600), bk));// Same TID, another iface - ignore
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "--------", 1, false, 2, 16000700), bk));// Not first frame - ignore
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "12345678", 0, false, 2, 16000800), bk));// First, another iface - restart
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "--------", 2, true, 1, 16000600), bk));// Old iface - ignore
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "12345678", 1, false, 2, 16000900), bk));// Continuing
CHECK_COMPLETE( rcv.addFrame(gen(0, "12345678", 2, true, 2, 16000910), bk));// Done
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "--------", 0, false, 1, 13000500), bk)); // Begin
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "--------", 1, false, 1, 16000500), bk)); // 3 sec later, iface timeout
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "--------", 1, false, 1, 16000600), bk)); // Same TID, another iface - ignore
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "--------", 1, false, 2, 16000700), bk)); // Not first frame - ignore
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "12345678", 0, false, 2, 16000800), bk)); // First, another iface - restart
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "--------", 2, true, 1, 16000600), bk)); // Old iface - ignore
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "12345678", 1, false, 2, 16000900), bk)); // Continuing
CHECK_COMPLETE( rcv.addFrame(gen(0, "12345678", 2, true, 2, 16000910), bk)); // Done
ASSERT_TRUE(matchBufferContent(bufmgr.access(gen.bufmgr_key), "3456781234567812345678"));
ASSERT_EQ(0x3231, rcv.getLastTransferCrc());
+4 -2
View File
@@ -127,7 +127,9 @@ TEST(TransferSender, Basic)
ASSERT_LE(0, res);
clockmock.advance(100);
if (res == 0)
{
break;
}
}
/*
@@ -152,8 +154,8 @@ struct TransferSenderTestLoopbackFrameListener : public uavcan::LoopbackFrameLis
unsigned int count;
TransferSenderTestLoopbackFrameListener(uavcan::Dispatcher& dispatcher)
: uavcan::LoopbackFrameListenerBase(dispatcher)
, count(0)
: uavcan::LoopbackFrameListenerBase(dispatcher)
, count(0)
{
startListening();
}
@@ -43,7 +43,9 @@ TEST(TransferTestHelpers, MFTSerialization)
std::cout << "Serialized transfer:\n";
for (std::vector<uavcan::RxFrame>::const_iterator it = ser.begin(); it != ser.end(); ++it)
{
std::cout << "\t" << it->toString() << "\n";
}
for (std::vector<uavcan::RxFrame>::const_iterator it = ser.begin(); it != ser.end(); ++it)
{
@@ -52,7 +54,9 @@ TEST(TransferTestHelpers, MFTSerialization)
{
uint8_t ch = it->getPayloadPtr()[i];
if (ch < 0x20 || ch > 0x7E)
{
ch = '.';
}
std::cout << static_cast<char>(ch);
}
std::cout << "'\n";
+1 -1
View File
@@ -410,7 +410,7 @@ sp_before_squares = ignore # ignore/add/remove/force
sp_inside_square = ignore # ignore/add/remove/force
# Add or remove space after ','
sp_after_comma = ignore # ignore/add/remove/force
sp_after_comma = add # ignore/add/remove/force
# Add or remove space before ','
sp_before_comma = ignore # ignore/add/remove/force
+1
View File
@@ -3,5 +3,6 @@
#files="$files $(find include -name '*.hpp')"
#files="$files $(find src -name '*.cpp')"
#files="$files $(find test -name '*.cpp')"
#files="$files $(find test -name '*.hpp')"
uncrustify --replace --no-backup -c uncrustify.cfg $files