libuav original
Dependents: UAVCAN UAVCAN_Subscriber
panic_listener.cpp
00001 /* 00002 * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com> 00003 */ 00004 00005 #include <gtest/gtest.h> 00006 #include <uavcan/protocol/panic_listener.hpp> 00007 #include <uavcan/protocol/panic_broadcaster.hpp> 00008 #include "helpers.hpp" 00009 00010 00011 struct PanicHandler 00012 { 00013 uavcan::protocol::Panic msg; 00014 00015 PanicHandler() : msg() { } 00016 00017 void handle(const uavcan::protocol::Panic& msg) 00018 { 00019 std::cout << msg << std::endl; 00020 this->msg = msg; 00021 } 00022 00023 typedef uavcan::MethodBinder<PanicHandler*, void (PanicHandler::*)(const uavcan::protocol::Panic& msg)> Binder; 00024 00025 Binder bind() { return Binder(this, &PanicHandler::handle); } 00026 }; 00027 00028 00029 TEST(PanicListener, Basic) 00030 { 00031 InterlinkedTestNodesWithSysClock nodes; 00032 00033 uavcan::GlobalDataTypeRegistry::instance().reset(); 00034 uavcan::DefaultDataTypeRegistrator<uavcan::protocol::Panic> _reg1; 00035 00036 uavcan::PanicListener<PanicHandler::Binder> pl(nodes.a); 00037 uavcan::PanicBroadcaster pbr(nodes.b); 00038 PanicHandler handler; 00039 ASSERT_LE(0, pl.start(handler.bind())); 00040 00041 pbr.panic("PANIC!!!"); 00042 ASSERT_TRUE(handler.msg == uavcan::protocol::Panic()); // One message published, panic is not registered yet 00043 00044 pbr.dontPanic(); 00045 ASSERT_FALSE(pbr.isPanicking()); 00046 std::cout << "Not panicking" << std::endl; 00047 00048 nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(1000)); // Will reset 00049 ASSERT_TRUE(handler.msg == uavcan::protocol::Panic()); 00050 00051 pbr.panic("PANIC2!!!"); // Message text doesn't matter 00052 ASSERT_TRUE(pbr.isPanicking()); 00053 nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(1000)); 00054 ASSERT_STREQ("PANIC2!", handler.msg.reason_text.c_str()); // Registered, only 7 chars preserved 00055 }
Generated on Tue Jul 12 2022 17:17:33 by 1.7.2