From 70b366d680c8f990fb7010346d7766705cacc767 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Mon, 8 Jun 2015 12:49:44 +0300 Subject: [PATCH] SubNode<> test --- libuavcan/test/node/sub_node.cpp | 83 ++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 libuavcan/test/node/sub_node.cpp diff --git a/libuavcan/test/node/sub_node.cpp b/libuavcan/test/node/sub_node.cpp new file mode 100644 index 0000000000..698573ed8f --- /dev/null +++ b/libuavcan/test/node/sub_node.cpp @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2015 Pavel Kirienko + */ + +#include +#include +#include +#include +#include "test_node.hpp" +#include "../protocol/helpers.hpp" + +static void registerTypes() +{ + uavcan::GlobalDataTypeRegistry::instance().reset(); + uavcan::DefaultDataTypeRegistrator _reg1; + uavcan::DefaultDataTypeRegistrator _reg2; + uavcan::DefaultDataTypeRegistrator _reg3; + uavcan::DefaultDataTypeRegistrator _reg4; + uavcan::DefaultDataTypeRegistrator _reg5; + uavcan::DefaultDataTypeRegistrator _reg6; + uavcan::DefaultDataTypeRegistrator _reg7; + uavcan::DefaultDataTypeRegistrator _reg8; +} + + +TEST(SubNode, Basic) +{ + registerTypes(); + InterlinkedTestNodesWithSysClock nodes; + + uavcan::protocol::SoftwareVersion swver; + swver.major = 0; + swver.minor = 1; + swver.vcs_commit = 0xDEADBEEF; + + /* + * uavcan::Node + */ + uavcan::Node<0> node1(nodes.can_a, nodes.clock_a); + node1.setName("com.example"); + node1.setNodeID(1); + node1.setSoftwareVersion(swver); + + /* + * uavcan::SubNode + */ + uavcan::SubNode<0> node2(nodes.can_b, nodes.clock_b); + std::cout << "sizeof(uavcan::SubNode<0>): " << sizeof(uavcan::SubNode<0>) << std::endl; + + BackgroundSpinner bgspinner(node2, node1); + bgspinner.startPeriodic(uavcan::MonotonicDuration::fromMSec(10)); + + uavcan::NodeStatusMonitor node_status_monitor(node2); + ASSERT_LE(0, node_status_monitor.start()); + + /* + * Init the first node + */ + ASSERT_FALSE(node1.isStarted()); + ASSERT_EQ(-uavcan::ErrNotInited, node1.spin(uavcan::MonotonicDuration::fromMSec(20))); + ASSERT_LE(0, node1.start()); + uavcan::NetworkCompatibilityCheckResult result; + ASSERT_LE(0, node1.checkNetworkCompatibility(result)); + ASSERT_TRUE(result.isOk()); + ASSERT_TRUE(node1.isStarted()); + + ASSERT_EQ(1, node_status_monitor.findNodeWithWorstStatus().get()); + + /* + * Some logging + */ + SubscriberWithCollector log_sub(node2); + ASSERT_LE(0, log_sub.start()); + + node1.getLogger().setLevel(uavcan::protocol::debug::LogLevel::DEBUG); + node1.logInfo("test", "6 * 9 = 42"); + + ASSERT_LE(0, node1.spin(uavcan::MonotonicDuration::fromMSec(20))); + ASSERT_LE(0, node2.spin(uavcan::MonotonicDuration::fromMSec(20))); + + ASSERT_TRUE(log_sub.collector.msg.get()); + std::cout << *log_sub.collector.msg << std::endl; +}