Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: UAVCAN UAVCAN_Subscriber
libuavcan/test/protocol/restart_request_server.cpp@0:dfe6edabb8ec, 2018-04-14 (annotated)
- Committer:
- RuslanUrya
- Date:
- Sat Apr 14 10:25:32 2018 +0000
- Revision:
- 0:dfe6edabb8ec
Initial commit
Who changed what in which revision?
User | Revision | Line number | New 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 | } |