Skip to content

Commit a6d048b

Browse files
committed
feat(test): add unit test for --enable-rosout-logs
Signed-off-by: PeterWrighten <peterwrighten@gmail.com>
1 parent 75a80b8 commit a6d048b

4 files changed

Lines changed: 78 additions & 3 deletions

File tree

docs/agnocast_node_interface_comparison.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ This provides the same argument parsing functionality as rcl.
203203
| `--enable-rosout-logs` | - | **Supportable** | TBD | Enable logging to rosout |
204204
| `--disable-external-lib-logs` | - | **Default** | - | Disable external library logs |
205205
| `--disable-stdout-logs` || **Full Support** | - | Disable stdout logging |
206-
| `-e` (enclave) || **Unsupported** | TBD | Specify security enclave |
206+
| `-e` (enclave) || **Unsupported** | - | Specify security enclave |
207207

208208
### 3.2 Parameter Override Resolution
209209

src/agnocastlib/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ endif()
1818

1919
# find dependencies
2020
find_package(ament_cmake REQUIRED)
21+
find_package(rcl_interfaces REQUIRED)
2122
find_package(rclcpp REQUIRED)
2223
find_package(rclcpp_components REQUIRED)
2324
find_package(rcl_yaml_param_parser REQUIRED)
@@ -37,15 +38,15 @@ add_library(agnocast SHARED
3738
src/agnocast_single_threaded_executor.cpp src/agnocast_multi_threaded_executor.cpp
3839
src/agnocast_callback_isolated_executor.cpp
3940
src/agnocast_tracepoint_wrapper.c src/agnocast_client.cpp
40-
src/node/agnocast_node.cpp src/node/agnocast_arguments.cpp src/node/agnocast_context.cpp src/node/agnocast_signal_handler.cpp
41+
src/node/agnocast_node.cpp src/node/agnocast_arguments.cpp src/node/agnocast_context.cpp src/node/agnocast_rosout.cpp src/node/agnocast_signal_handler.cpp
4142
src/node/agnocast_only_executor.cpp src/node/agnocast_only_single_threaded_executor.cpp src/node/agnocast_only_multi_threaded_executor.cpp
4243
src/node/agnocast_only_callback_isolated_executor.cpp
4344
src/cie_client_utils.cpp
4445
src/node/node_interfaces/node_base.cpp src/node/node_interfaces/node_parameters.cpp src/node/node_interfaces/node_topics.cpp src/node/node_interfaces/node_clock.cpp src/node/node_interfaces/node_time_source.cpp src/node/node_interfaces/node_services.cpp src/node/node_interfaces/node_logging.cpp
4546
src/bridge/standard/agnocast_standard_bridge_ipc_event_loop.cpp src/bridge/standard/agnocast_standard_bridge_loader.cpp src/bridge/standard/agnocast_standard_bridge_manager.cpp src/bridge/agnocast_bridge_utils.cpp
4647
src/bridge/performance/agnocast_performance_bridge_ipc_event_loop.cpp src/bridge/performance/agnocast_performance_bridge_loader.cpp src/bridge/performance/agnocast_performance_bridge_manager.cpp)
4748

48-
ament_target_dependencies(agnocast rclcpp agnocast_cie_thread_configurator rosgraph_msgs agnocast_cie_config_msgs ament_index_cpp message_filters)
49+
ament_target_dependencies(agnocast rcl_interfaces rclcpp agnocast_cie_thread_configurator rosgraph_msgs agnocast_cie_config_msgs ament_index_cpp message_filters)
4950

5051
target_link_libraries(agnocast
5152
${rcl_yaml_param_parser_LIBRARIES}

src/agnocastlib/package.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
<buildtool_depend>ament_cmake</buildtool_depend>
2323

24+
<depend>rcl_interfaces</depend>
2425
<depend>rclcpp</depend>
2526
<depend>rclcpp_components</depend>
2627
<depend>rcl_yaml_param_parser</depend>

src/agnocastlib/test/unit/test_agnocast_context.cpp

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,79 @@
44

55
#include <gtest/gtest.h>
66

7+
// =========================================
8+
// agnocast::Context --enable-rosout-logs tests
9+
// =========================================
10+
11+
class AgnocastContextRosoutTest : public ::testing::Test
12+
{
13+
protected:
14+
void SetUp() override { original_handler_ = rcutils_logging_get_output_handler(); }
15+
16+
void TearDown() override { rcutils_logging_set_output_handler(original_handler_); }
17+
18+
rcutils_logging_output_handler_t original_handler_;
19+
};
20+
21+
TEST_F(AgnocastContextRosoutTest, enable_rosout_logs_sets_flag)
22+
{
23+
const char * argv[] = {"program", "--ros-args", "--enable-rosout-logs"};
24+
int argc = 3;
25+
agnocast::Context ctx;
26+
27+
ctx.init(argc, argv);
28+
29+
EXPECT_TRUE(ctx.is_rosout_enabled());
30+
}
31+
32+
TEST_F(AgnocastContextRosoutTest, no_flag_rosout_disabled)
33+
{
34+
const char * argv[] = {"program", "--ros-args", "--log-level", "info"};
35+
int argc = 4;
36+
agnocast::Context ctx;
37+
38+
ctx.init(argc, argv);
39+
40+
EXPECT_FALSE(ctx.is_rosout_enabled());
41+
}
42+
43+
TEST_F(AgnocastContextRosoutTest, flag_outside_ros_args_is_ignored)
44+
{
45+
const char * argv[] = {"program", "--enable-rosout-logs", "--ros-args", "--log-level", "info"};
46+
int argc = 5;
47+
agnocast::Context ctx;
48+
49+
ctx.init(argc, argv);
50+
51+
EXPECT_FALSE(ctx.is_rosout_enabled());
52+
}
53+
54+
TEST_F(AgnocastContextRosoutTest, flag_after_double_dash_is_ignored)
55+
{
56+
const char * argv[] = {"program", "--ros-args", "--", "--enable-rosout-logs"};
57+
int argc = 4;
58+
agnocast::Context ctx;
59+
60+
ctx.init(argc, argv);
61+
62+
EXPECT_FALSE(ctx.is_rosout_enabled());
63+
}
64+
65+
TEST_F(AgnocastContextRosoutTest, both_disable_stdout_and_enable_rosout)
66+
{
67+
const char * argv[] = {
68+
"program", "--ros-args", "--disable-stdout-logs", "--enable-rosout-logs"};
69+
int argc = 4;
70+
agnocast::Context ctx;
71+
72+
ctx.init(argc, argv);
73+
74+
// --enable-rosout-logs flag should be set
75+
EXPECT_TRUE(ctx.is_rosout_enabled());
76+
// --disable-stdout-logs should have replaced the handler
77+
EXPECT_NE(rcutils_logging_get_output_handler(), original_handler_);
78+
}
79+
780
// =========================================
881
// agnocast::Context --disable-stdout-logs tests
982
// =========================================

0 commit comments

Comments
 (0)