libuav original
Dependents: UAVCAN UAVCAN_Subscriber
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 }
Generated on Tue Jul 12 2022 17:17:35 by 1.7.2