libuav original

Dependents:   UAVCAN UAVCAN_Subscriber

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers transfer_test_helpers.cpp Source File

transfer_test_helpers.cpp

00001 /*
00002  * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
00003  */
00004 
00005 #include <gtest/gtest.h>
00006 #include "transfer_test_helpers.hpp"
00007 #include "../clock.hpp"
00008 
00009 
00010 TEST(TransferTestHelpers, Transfer)
00011 {
00012     uavcan::PoolAllocator<uavcan::MemPoolBlockSize * 8, uavcan::MemPoolBlockSize> pool;
00013 
00014     uavcan::TransferBufferManager mgr(128, pool);
00015     uavcan::TransferBufferAccessor tba(mgr, uavcan::TransferBufferManagerKey(0, uavcan::TransferTypeMessageBroadcast));
00016 
00017     uavcan::RxFrame frame(uavcan::Frame(123, uavcan::TransferTypeMessageBroadcast, 1, 0, 0),
00018                           uavcan::MonotonicTime(), uavcan::UtcTime(), 0);
00019     frame.setEndOfTransfer(true);
00020     uavcan::MultiFrameIncomingTransfer mfit(tsMono(10), tsUtc(1000), frame, tba);
00021 
00022     // Filling the buffer with data
00023     static const std::string TEST_DATA = "Kaneda! What do you see? Kaneda! What do you see? Kaneda! Kaneda!!!";
00024     ASSERT_TRUE(tba.create());
00025     ASSERT_EQ(TEST_DATA.length(), tba.access()->write(0, reinterpret_cast<const uint8_t*>(TEST_DATA.c_str()),
00026                                                       unsigned(TEST_DATA.length())));
00027 
00028     // Reading back
00029     const Transfer transfer(mfit, uavcan::DataTypeDescriptor());
00030     ASSERT_EQ(TEST_DATA, transfer.payload);
00031 }
00032 
00033 
00034 TEST(TransferTestHelpers, MFTSerialization)
00035 {
00036     uavcan::DataTypeDescriptor type(uavcan::DataTypeKindMessage, 123, uavcan::DataTypeSignature(123456789), "Foo");
00037 
00038     static const std::string DATA = "To go wrong in one's own way is better than to go right in someone else's.";
00039     const Transfer transfer(1, 100000, 10,
00040                             uavcan::TransferTypeServiceRequest, 2, 42, 127, DATA, type);
00041 
00042     const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer);
00043 
00044     std::cout << "Serialized transfer:\n";
00045     for (std::vector<uavcan::RxFrame>::const_iterator it = ser.begin(); it != ser.end(); ++it)
00046     {
00047         std::cout << "\t" << it->toString() << "\n";
00048     }
00049 
00050     for (std::vector<uavcan::RxFrame>::const_iterator it = ser.begin(); it != ser.end(); ++it)
00051     {
00052         std::cout << "\t'";
00053         for (unsigned i = 0; i < it->getPayloadLen(); i++)
00054         {
00055             uint8_t ch = it->getPayloadPtr()[i];
00056             if (ch < 0x20 || ch > 0x7E)
00057             {
00058                 ch = '.';
00059             }
00060             std::cout << static_cast<char>(ch);
00061         }
00062         std::cout << "'\n";
00063     }
00064     std::cout << std::flush;
00065 }
00066 
00067 
00068 TEST(TransferTestHelpers, SFTSerialization)
00069 {
00070     uavcan::DataTypeDescriptor type(uavcan::DataTypeKindMessage, 123, uavcan::DataTypeSignature(123456789), "Foo");
00071 
00072     {
00073         const Transfer transfer(1, 100000, 10,
00074                                 uavcan::TransferTypeMessageBroadcast, 7, 42, 0, "Nvrfrgt", type);
00075         const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer);
00076         ASSERT_EQ(1, ser.size());
00077         std::cout << "Serialized transfer:\n\t" << ser[0].toString() << "\n";
00078     }
00079     {
00080         const Transfer transfer(1, 100000, 11,
00081                                 uavcan::TransferTypeServiceRequest, 7, 42, 127, "7-chars", type);
00082         const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer);
00083         ASSERT_EQ(1, ser.size());
00084         std::cout << "Serialized transfer:\n\t" << ser[0].toString() << "\n";
00085     }
00086     {
00087         const Transfer transfer(1, 100000, 12,
00088                                 uavcan::TransferTypeMessageBroadcast, 7, 42, 0, "", type);
00089         const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer);
00090         ASSERT_EQ(1, ser.size());
00091         std::cout << "Serialized transfer:\n\t" << ser[0].toString() << "\n";
00092     }
00093     {
00094         const Transfer transfer(1, 100000, 13,
00095                                 uavcan::TransferTypeServiceResponse, 7, 42, 127, "", type);
00096         const std::vector<uavcan::RxFrame> ser = serializeTransfer(transfer);
00097         ASSERT_EQ(1, ser.size());
00098         std::cout << "Serialized transfer:\n\t" << ser[0].toString() << "\n";
00099     }
00100 }