mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-15 17:23:33 +08:00
RestartRequestServer
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
|
||||
*/
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <uavcan/protocol/restart_request_server.hpp>
|
||||
#include "helpers.hpp"
|
||||
|
||||
|
||||
struct Handler : public uavcan::IRestartRequestHandler
|
||||
{
|
||||
bool accept;
|
||||
|
||||
bool handleRestartRequest(uavcan::NodeID request_source)
|
||||
{
|
||||
std::cout << "Restart request from " << int(request_source.get()) << " will be "
|
||||
<< (accept ? "accepted" : "rejected") << std::endl;
|
||||
return accept;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
TEST(RestartRequestServer, Basic)
|
||||
{
|
||||
InterlinkedTestNodes nodes;
|
||||
|
||||
uavcan::RestartRequestServer rrs(nodes.a);
|
||||
|
||||
ServiceClientWithCollector<uavcan::protocol::RestartNode> rrs_cln(nodes.b);
|
||||
|
||||
uavcan::GlobalDataTypeRegistry::instance().reset();
|
||||
uavcan::DefaultDataTypeRegistrator<uavcan::protocol::RestartNode> _reg1;
|
||||
|
||||
ASSERT_LE(0, rrs.start());
|
||||
|
||||
uavcan::protocol::RestartNode::Request request;
|
||||
request.magic_number = uavcan::protocol::RestartNode::Request::MAGIC_NUMBER;
|
||||
|
||||
/*
|
||||
* Rejected - handler was not set
|
||||
*/
|
||||
ASSERT_LE(0, rrs_cln.call(1, request));
|
||||
nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(2));
|
||||
|
||||
ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
|
||||
ASSERT_FALSE(rrs_cln.collector.result->response.ok);
|
||||
|
||||
/*
|
||||
* Accepted
|
||||
*/
|
||||
Handler handler;
|
||||
handler.accept = true;
|
||||
rrs.setHandler(&handler);
|
||||
|
||||
ASSERT_LE(0, rrs_cln.call(1, request));
|
||||
nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(2));
|
||||
|
||||
ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
|
||||
ASSERT_TRUE(rrs_cln.collector.result->response.ok);
|
||||
|
||||
/*
|
||||
* Rejected by handler
|
||||
*/
|
||||
handler.accept = false;
|
||||
|
||||
ASSERT_LE(0, rrs_cln.call(1, request));
|
||||
nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(2));
|
||||
|
||||
ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
|
||||
ASSERT_FALSE(rrs_cln.collector.result->response.ok);
|
||||
|
||||
/*
|
||||
* Rejected because of invalid magic number
|
||||
*/
|
||||
handler.accept = true;
|
||||
|
||||
ASSERT_LE(0, rrs_cln.call(1, uavcan::protocol::RestartNode::Request()));
|
||||
nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(2));
|
||||
|
||||
ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
|
||||
ASSERT_FALSE(rrs_cln.collector.result->response.ok);
|
||||
}
|
||||
Reference in New Issue
Block a user