This repository has been archived by the owner on Jun 10, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 8
/
test_composition.cpp
72 lines (61 loc) · 2.57 KB
/
test_composition.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <gtest/gtest.h>
#include <memory>
#include <string>
#include <vector>
#include "class_loader/class_loader.hpp"
#include "rclcpp/rclcpp.hpp"
#include "rclcpp_components/node_factory.hpp"
#include "test_constants.hpp"
namespace
{
constexpr const char kSystemMetricsCollectorLibName[] = "libsystem_metrics_collector.so";
constexpr const std::array<const char *, 2> kExpectedClassNames = {
"system_metrics_collector::LinuxProcessCpuMeasurementNode",
"system_metrics_collector::LinuxProcessMemoryMeasurementNode"
};
}
bool IsExpectedClassName(const std::string & class_name)
{
auto result = std::find_if(kExpectedClassNames.cbegin(), kExpectedClassNames.cend(),
[&class_name](const char * expected_class_name) {
return class_name.find(expected_class_name) != std::string::npos;
});
return result != kExpectedClassNames.cend();
}
TEST(TestComposeableNodes, DlopenTest)
{
rclcpp::init(0, nullptr);
rclcpp::executors::SingleThreadedExecutor exec;
rclcpp::NodeOptions options;
const auto loader = std::make_unique<class_loader::ClassLoader>(kSystemMetricsCollectorLibName);
auto class_names = loader->getAvailableClasses<rclcpp_components::NodeFactory>();
ASSERT_EQ(kExpectedClassNames.size(), class_names.size());
std::vector<rclcpp_components::NodeInstanceWrapper> node_wrappers;
for (const auto & class_name : class_names) {
ASSERT_TRUE(IsExpectedClassName(class_name));
auto node_factory = loader->createInstance<rclcpp_components::NodeFactory>(class_name);
auto wrapper = node_factory->create_node_instance(options);
exec.add_node(wrapper.get_node_base_interface());
node_wrappers.push_back(wrapper);
}
std::promise<bool> empty_promise;
std::shared_future<bool> dummy_future = empty_promise.get_future();
exec.spin_until_future_complete(dummy_future, test_constants::kTestDuration);
for (auto & wrapper : node_wrappers) {
exec.remove_node(wrapper.get_node_base_interface());
}
rclcpp::shutdown();
}