mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
84 lines
2.3 KiB
C++
84 lines
2.3 KiB
C++
/*
|
|
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
|
|
*/
|
|
|
|
#include <gtest/gtest.h>
|
|
#include <uavcan/protocol/restart_request_server.hpp>
|
|
#include "helpers.hpp"
|
|
|
|
|
|
struct RestartHandler : 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)
|
|
{
|
|
InterlinkedTestNodesWithSysClock 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(10));
|
|
|
|
ASSERT_TRUE(rrs_cln.collector.result.get());
|
|
ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
|
|
ASSERT_FALSE(rrs_cln.collector.result->response.ok);
|
|
|
|
/*
|
|
* Accepted
|
|
*/
|
|
RestartHandler handler;
|
|
handler.accept = true;
|
|
rrs.setHandler(&handler);
|
|
|
|
ASSERT_LE(0, rrs_cln.call(1, request));
|
|
nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(10));
|
|
|
|
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(10));
|
|
|
|
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(10));
|
|
|
|
ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
|
|
ASSERT_FALSE(rrs_cln.collector.result->response.ok);
|
|
}
|