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

Dependents:   UAVCAN UAVCAN_Subscriber

Committer:
RuslanUrya
Date:
Sat Apr 14 10:25:32 2018 +0000
Revision:
0:dfe6edabb8ec
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RuslanUrya 0:dfe6edabb8ec 1 /*
RuslanUrya 0:dfe6edabb8ec 2 * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
RuslanUrya 0:dfe6edabb8ec 3 */
RuslanUrya 0:dfe6edabb8ec 4
RuslanUrya 0:dfe6edabb8ec 5 #include <gtest/gtest.h>
RuslanUrya 0:dfe6edabb8ec 6 #include <uavcan/protocol/restart_request_server.hpp>
RuslanUrya 0:dfe6edabb8ec 7 #include "helpers.hpp"
RuslanUrya 0:dfe6edabb8ec 8
RuslanUrya 0:dfe6edabb8ec 9
RuslanUrya 0:dfe6edabb8ec 10 struct RestartHandler : public uavcan::IRestartRequestHandler
RuslanUrya 0:dfe6edabb8ec 11 {
RuslanUrya 0:dfe6edabb8ec 12 bool accept;
RuslanUrya 0:dfe6edabb8ec 13
RuslanUrya 0:dfe6edabb8ec 14 bool handleRestartRequest(uavcan::NodeID request_source)
RuslanUrya 0:dfe6edabb8ec 15 {
RuslanUrya 0:dfe6edabb8ec 16 std::cout << "Restart request from " << int(request_source.get()) << " will be "
RuslanUrya 0:dfe6edabb8ec 17 << (accept ? "accepted" : "rejected") << std::endl;
RuslanUrya 0:dfe6edabb8ec 18 return accept;
RuslanUrya 0:dfe6edabb8ec 19 }
RuslanUrya 0:dfe6edabb8ec 20 };
RuslanUrya 0:dfe6edabb8ec 21
RuslanUrya 0:dfe6edabb8ec 22
RuslanUrya 0:dfe6edabb8ec 23 TEST(RestartRequestServer, Basic)
RuslanUrya 0:dfe6edabb8ec 24 {
RuslanUrya 0:dfe6edabb8ec 25 InterlinkedTestNodesWithSysClock nodes;
RuslanUrya 0:dfe6edabb8ec 26
RuslanUrya 0:dfe6edabb8ec 27 uavcan::RestartRequestServer rrs(nodes.a);
RuslanUrya 0:dfe6edabb8ec 28
RuslanUrya 0:dfe6edabb8ec 29 ServiceClientWithCollector<uavcan::protocol::RestartNode> rrs_cln(nodes.b);
RuslanUrya 0:dfe6edabb8ec 30
RuslanUrya 0:dfe6edabb8ec 31 uavcan::GlobalDataTypeRegistry::instance().reset();
RuslanUrya 0:dfe6edabb8ec 32 uavcan::DefaultDataTypeRegistrator<uavcan::protocol::RestartNode> _reg1;
RuslanUrya 0:dfe6edabb8ec 33
RuslanUrya 0:dfe6edabb8ec 34 ASSERT_LE(0, rrs.start());
RuslanUrya 0:dfe6edabb8ec 35
RuslanUrya 0:dfe6edabb8ec 36 uavcan::protocol::RestartNode::Request request;
RuslanUrya 0:dfe6edabb8ec 37 request.magic_number = uavcan::protocol::RestartNode::Request::MAGIC_NUMBER;
RuslanUrya 0:dfe6edabb8ec 38
RuslanUrya 0:dfe6edabb8ec 39 /*
RuslanUrya 0:dfe6edabb8ec 40 * Rejected - handler was not set
RuslanUrya 0:dfe6edabb8ec 41 */
RuslanUrya 0:dfe6edabb8ec 42 ASSERT_LE(0, rrs_cln.call(1, request));
RuslanUrya 0:dfe6edabb8ec 43 nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(10));
RuslanUrya 0:dfe6edabb8ec 44
RuslanUrya 0:dfe6edabb8ec 45 ASSERT_TRUE(rrs_cln.collector.result.get());
RuslanUrya 0:dfe6edabb8ec 46 ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
RuslanUrya 0:dfe6edabb8ec 47 ASSERT_FALSE(rrs_cln.collector.result->getResponse().ok);
RuslanUrya 0:dfe6edabb8ec 48
RuslanUrya 0:dfe6edabb8ec 49 /*
RuslanUrya 0:dfe6edabb8ec 50 * Accepted
RuslanUrya 0:dfe6edabb8ec 51 */
RuslanUrya 0:dfe6edabb8ec 52 RestartHandler handler;
RuslanUrya 0:dfe6edabb8ec 53 handler.accept = true;
RuslanUrya 0:dfe6edabb8ec 54 rrs.setHandler(&handler);
RuslanUrya 0:dfe6edabb8ec 55
RuslanUrya 0:dfe6edabb8ec 56 ASSERT_LE(0, rrs_cln.call(1, request));
RuslanUrya 0:dfe6edabb8ec 57 nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(10));
RuslanUrya 0:dfe6edabb8ec 58
RuslanUrya 0:dfe6edabb8ec 59 ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
RuslanUrya 0:dfe6edabb8ec 60 ASSERT_TRUE(rrs_cln.collector.result->getResponse().ok);
RuslanUrya 0:dfe6edabb8ec 61
RuslanUrya 0:dfe6edabb8ec 62 /*
RuslanUrya 0:dfe6edabb8ec 63 * Rejected by handler
RuslanUrya 0:dfe6edabb8ec 64 */
RuslanUrya 0:dfe6edabb8ec 65 handler.accept = false;
RuslanUrya 0:dfe6edabb8ec 66
RuslanUrya 0:dfe6edabb8ec 67 ASSERT_LE(0, rrs_cln.call(1, request));
RuslanUrya 0:dfe6edabb8ec 68 nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(10));
RuslanUrya 0:dfe6edabb8ec 69
RuslanUrya 0:dfe6edabb8ec 70 ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
RuslanUrya 0:dfe6edabb8ec 71 ASSERT_FALSE(rrs_cln.collector.result->getResponse().ok);
RuslanUrya 0:dfe6edabb8ec 72
RuslanUrya 0:dfe6edabb8ec 73 /*
RuslanUrya 0:dfe6edabb8ec 74 * Rejected because of invalid magic number
RuslanUrya 0:dfe6edabb8ec 75 */
RuslanUrya 0:dfe6edabb8ec 76 handler.accept = true;
RuslanUrya 0:dfe6edabb8ec 77
RuslanUrya 0:dfe6edabb8ec 78 ASSERT_LE(0, rrs_cln.call(1, uavcan::protocol::RestartNode::Request()));
RuslanUrya 0:dfe6edabb8ec 79 nodes.spinBoth(uavcan::MonotonicDuration::fromMSec(10));
RuslanUrya 0:dfe6edabb8ec 80
RuslanUrya 0:dfe6edabb8ec 81 ASSERT_TRUE(rrs_cln.collector.result->isSuccessful());
RuslanUrya 0:dfe6edabb8ec 82 ASSERT_FALSE(rrs_cln.collector.result->getResponse().ok);
RuslanUrya 0:dfe6edabb8ec 83 }