Руслан Урядинский / libuavcan

Dependents:   UAVCAN UAVCAN_Subscriber

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers restart_request_server.cpp Source File

restart_request_server.cpp

00001 /*
00002  * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
00003  */
00004 
00005 #include <gtest/gtest.h>
00006 #include <uavcan/protocol/restart_request_server.hpp>
00007 #include "helpers.hpp"
00008 
00009 
00010 struct RestartHandler : public uavcan::IRestartRequestHandler
00011 {
00012     bool accept;
00013 
00014     bool handleRestartRequest(uavcan::NodeID request_source)
00015     {
00016         std::cout << "Restart request from " << int(request_source.get()) << " will be "
00017                   << (accept ? "accepted" : "rejected") << std::endl;
00018         return accept;
00019     }
00020 };
00021 
00022 
00023 TEST(RestartRequestServer, Basic)
00024 {
00025     InterlinkedTestNodesWithSysClock nodes;
00026 
00027     uavcan::RestartRequestServer rrs(nodes.a);
00028 
00029     ServiceClientWithCollector<uavcan::protocol::RestartNode> rrs_cln(nodes.b);
00030 
00031     uavcan::GlobalDataTypeRegistry::instance().reset();
00032     uavcan::DefaultDataTypeRegistrator<uavcan::protocol::RestartNode> _reg1;
00033 
00034     ASSERT_LE(0, rrs.start());
00035 
00036     uavcan::protocol::RestartNode::Request request;
00037     request.magic_number = uavcan::protocol::RestartNode::Request::MAGIC_NUMBER;
00038 
00039     /*
00040      * Rejected - handler was not set
00041      */
00042     ASSERT_LE(0, rrs_cln.call(1, request));
00043     nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(10));
00044 
00045     ASSERT_TRUE(rrs_cln.collector.result.get());
00046     ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
00047     ASSERT_FALSE(rrs_cln.collector.result->getResponse().ok);
00048 
00049     /*
00050      * Accepted
00051      */
00052     RestartHandler handler;
00053     handler.accept = true;
00054     rrs.setHandler(&handler);
00055 
00056     ASSERT_LE(0, rrs_cln.call(1, request));
00057     nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(10));
00058 
00059     ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
00060     ASSERT_TRUE(rrs_cln.collector.result->getResponse().ok);
00061 
00062     /*
00063      * Rejected by handler
00064      */
00065     handler.accept = false;
00066 
00067     ASSERT_LE(0, rrs_cln.call(1, request));
00068     nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(10));
00069 
00070     ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
00071     ASSERT_FALSE(rrs_cln.collector.result->getResponse().ok);
00072 
00073     /*
00074      * Rejected because of invalid magic number
00075      */
00076     handler.accept = true;
00077 
00078     ASSERT_LE(0, rrs_cln.call(1, uavcan::protocol::RestartNode::Request()));
00079     nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(10));
00080 
00081     ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
00082     ASSERT_FALSE(rrs_cln.collector.result->getResponse().ok);
00083 }