Minor test refactoring

This commit is contained in:
Pavel Kirienko
2014-02-18 12:00:45 +04:00
parent 06d74d3213
commit 980659ebb5
3 changed files with 40 additions and 37 deletions
+11 -13
View File
@@ -12,21 +12,23 @@ class Emulator
const uavcan::DataTypeDescriptor type_;
uint64_t ts_;
uavcan::TransferID tid_;
uavcan::NodeID target_node_id_;
uavcan::NodeID dst_node_id_;
public:
Emulator(uavcan::TransferListenerBase& target, const uavcan::DataTypeDescriptor& type,
uavcan::NodeID target_node_id = 127)
uavcan::NodeID dst_node_id = 127)
: target_(target)
, type_(type)
, ts_(0)
, target_node_id_(target_node_id)
, dst_node_id_(dst_node_id)
{ }
Transfer makeTransfer(uavcan::TransferType transfer_type, uint8_t source_node_id, const std::string& payload)
{
ts_ += 100;
const Transfer tr(ts_, ts_ + 1000000000ul, transfer_type, tid_, source_node_id, payload);
const uavcan::NodeID dst_node_id = (transfer_type == uavcan::TRANSFER_TYPE_MESSAGE_BROADCAST)
? uavcan::NodeID::BROADCAST : dst_node_id_;
const Transfer tr(ts_, ts_ + 1000000000ul, transfer_type, tid_, source_node_id, dst_node_id, payload);
tid_.increment();
return tr;
}
@@ -56,11 +58,7 @@ public:
{
std::vector<std::vector<uavcan::RxFrame> > sers;
while (num_transfers--)
{
const uavcan::NodeID dnid = (transfers->transfer_type == uavcan::TRANSFER_TYPE_MESSAGE_BROADCAST)
? uavcan::NodeID::BROADCAST : target_node_id_;
sers.push_back(serializeTransfer(*transfers++, dnid, type_));
}
sers.push_back(serializeTransfer(*transfers++, type_));
send(sers);
}
@@ -145,8 +143,8 @@ TEST(TransferListener, CrcFailure)
const Transfer tr_mft = emulator.makeTransfer(uavcan::TRANSFER_TYPE_MESSAGE_BROADCAST, 42, "123456789abcdefghik");
const Transfer tr_sft = emulator.makeTransfer(uavcan::TRANSFER_TYPE_MESSAGE_UNICAST, 11, "abcd");
std::vector<uavcan::RxFrame> ser_mft = serializeTransfer(tr_mft, 0, type);
std::vector<uavcan::RxFrame> ser_sft = serializeTransfer(tr_sft, 9, type);
std::vector<uavcan::RxFrame> ser_mft = serializeTransfer(tr_mft, type);
std::vector<uavcan::RxFrame> ser_sft = serializeTransfer(tr_sft, type);
ASSERT_TRUE(ser_mft.size() > 1);
ASSERT_TRUE(ser_sft.size() == 1);
@@ -227,8 +225,8 @@ TEST(TransferListener, Cleanup)
const Transfer tr_mft = emulator.makeTransfer(uavcan::TRANSFER_TYPE_MESSAGE_BROADCAST, 42, "123456789abcdefghik");
const Transfer tr_sft = emulator.makeTransfer(uavcan::TRANSFER_TYPE_MESSAGE_UNICAST, 11, "abcd");
const std::vector<uavcan::RxFrame> ser_mft = serializeTransfer(tr_mft, 0, type);
const std::vector<uavcan::RxFrame> ser_sft = serializeTransfer(tr_sft, 9, type);
const std::vector<uavcan::RxFrame> ser_mft = serializeTransfer(tr_mft, type);
const std::vector<uavcan::RxFrame> ser_sft = serializeTransfer(tr_sft, type);
ASSERT_TRUE(ser_mft.size() > 1);
ASSERT_TRUE(ser_sft.size() == 1);
@@ -37,9 +37,9 @@ TEST(TransferTestHelpers, MFTSerialization)
type.hash.value[i] = i;
static const std::string DATA = "To go wrong in one's own way is better than to go right in someone else's.";
const Transfer transfer(1, 100000, uavcan::TRANSFER_TYPE_MESSAGE_UNICAST, 2, 42, DATA);
const Transfer transfer(1, 100000, uavcan::TRANSFER_TYPE_MESSAGE_UNICAST, 2, 42, 127, DATA);
const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer, 127, type);
const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer, type);
std::cout << "Serialized transfer:\n";
for (std::vector<uavcan::RxFrame>::const_iterator it = ser.begin(); it != ser.end(); ++it)
@@ -68,26 +68,26 @@ TEST(TransferTestHelpers, SFTSerialization)
type.hash.value[i] = i;
{
const Transfer transfer(1, 100000, uavcan::TRANSFER_TYPE_MESSAGE_BROADCAST, 7, 42, "Nvrfrget");
const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer, 0, type);
const Transfer transfer(1, 100000, uavcan::TRANSFER_TYPE_MESSAGE_BROADCAST, 7, 42, 0, "Nvrfrget");
const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer, type);
ASSERT_EQ(1, ser.size());
std::cout << "Serialized transfer:\n\t" << ser[0].toString() << "\n";
}
{
const Transfer transfer(1, 100000, uavcan::TRANSFER_TYPE_SERVICE_REQUEST, 7, 42, "7-chars");
const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer, 127, type);
const Transfer transfer(1, 100000, uavcan::TRANSFER_TYPE_SERVICE_REQUEST, 7, 42, 127, "7-chars");
const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer, type);
ASSERT_EQ(1, ser.size());
std::cout << "Serialized transfer:\n\t" << ser[0].toString() << "\n";
}
{
const Transfer transfer(1, 100000, uavcan::TRANSFER_TYPE_MESSAGE_BROADCAST, 7, 42, "");
const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer, 0, type);
const Transfer transfer(1, 100000, uavcan::TRANSFER_TYPE_MESSAGE_BROADCAST, 7, 42, 0, "");
const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer, type);
ASSERT_EQ(1, ser.size());
std::cout << "Serialized transfer:\n\t" << ser[0].toString() << "\n";
}
{
const Transfer transfer(1, 100000, uavcan::TRANSFER_TYPE_SERVICE_RESPONSE, 7, 42, "");
const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer, 127, type);
const Transfer transfer(1, 100000, uavcan::TRANSFER_TYPE_SERVICE_RESPONSE, 7, 42, 127, "");
const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer, type);
ASSERT_EQ(1, ser.size());
std::cout << "Serialized transfer:\n\t" << ser[0].toString() << "\n";
}
@@ -17,7 +17,8 @@ struct Transfer
uint64_t ts_utc;
uavcan::TransferType transfer_type;
uavcan::TransferID transfer_id;
uavcan::NodeID source_node_id;
uavcan::NodeID src_node_id;
uavcan::NodeID dst_node_id;
std::string payload;
Transfer(const uavcan::IncomingTransfer& tr)
@@ -25,7 +26,8 @@ struct Transfer
, ts_utc(tr.getUtcTimestamp())
, transfer_type(tr.getTransferType())
, transfer_id(tr.getTransferID())
, source_node_id(tr.getSrcNodeID())
, src_node_id(tr.getSrcNodeID())
, dst_node_id() // default is invalid
{
unsigned int offset = 0;
while (true)
@@ -45,24 +47,27 @@ struct Transfer
}
Transfer(uint64_t ts_monotonic, uint64_t ts_utc, uavcan::TransferType transfer_type,
uavcan::TransferID transfer_id, uavcan::NodeID source_node_id, const std::string& payload)
uavcan::TransferID transfer_id, uavcan::NodeID src_node_id, uavcan::NodeID dst_node_id,
const std::string& payload)
: ts_monotonic(ts_monotonic)
, ts_utc(ts_utc)
, transfer_type(transfer_type)
, transfer_id(transfer_id)
, source_node_id(source_node_id)
, src_node_id(src_node_id)
, dst_node_id(dst_node_id)
, payload(payload)
{ }
bool operator==(const Transfer& rhs) const
{
return
(ts_monotonic == rhs.ts_monotonic) &&
(ts_utc == rhs.ts_utc) &&
(transfer_type == rhs.transfer_type) &&
(transfer_id == rhs.transfer_id) &&
(source_node_id == rhs.source_node_id) &&
(payload == rhs.payload);
(ts_monotonic == rhs.ts_monotonic) &&
(ts_utc == rhs.ts_utc) &&
(transfer_type == rhs.transfer_type) &&
(transfer_id == rhs.transfer_id) &&
(src_node_id == rhs.src_node_id) &&
(dst_node_id.isValid() ? (dst_node_id == rhs.dst_node_id) : true) &&
(payload == rhs.payload);
}
std::string toString() const
@@ -72,7 +77,8 @@ struct Transfer
<< " ts_utc=" << ts_utc
<< " tt=" << transfer_type
<< " tid=" << int(transfer_id.get())
<< " snid=" << int(source_node_id.get())
<< " snid=" << int(src_node_id.get())
<< " dnid=" << int(dst_node_id.get())
<< "\n\t'" << payload << "'";
return os.str();
}
@@ -131,8 +137,7 @@ public:
namespace
{
std::vector<uavcan::RxFrame> serializeTransfer(const Transfer& transfer, uavcan::NodeID dst_node_id,
const uavcan::DataTypeDescriptor& type)
std::vector<uavcan::RxFrame> serializeTransfer(const Transfer& transfer, const uavcan::DataTypeDescriptor& type)
{
bool need_crc = false;
switch (transfer.transfer_type)
@@ -172,7 +177,7 @@ std::vector<uavcan::RxFrame> serializeTransfer(const Transfer& transfer, uavcan:
const int bytes_left = raw_payload.size() - offset;
EXPECT_TRUE(bytes_left >= 0);
uavcan::Frame frm(type.id, transfer.transfer_type, transfer.source_node_id, dst_node_id, frame_index,
uavcan::Frame frm(type.id, transfer.transfer_type, transfer.src_node_id, transfer.dst_node_id, frame_index,
transfer.transfer_id);
const int spres = frm.setPayload(&*(raw_payload.begin() + offset), bytes_left);
if (spres < 0)