libuav original

Dependents:   UAVCAN UAVCAN_Subscriber

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers panic_listener.cpp Source File

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 }