Skip to content

Commit 9fed13e

Browse files
decwestTomoya.Fujita
authored andcommitted
FIX: add ValueError when empty string is inputted in get_absolute_node_name
Signed-off-by: Decwest <fumiyaonishi1016@gmail.com> Signed-off-by: Tomoya.Fujita <Tomoya.Fujita@sony.com>
1 parent bfa51e8 commit 9fed13e

2 files changed

Lines changed: 33 additions & 6 deletions

File tree

ros2log/ros2log/api/__init__.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,21 @@
3232
LOGGER_SET_SERVICE_TYPE = 'rcl_interfaces/srv/SetLoggerLevels'
3333

3434

35+
def _require_absolute_node_name(node_name: str) -> str:
36+
absolute_node_name = get_absolute_node_name(node_name)
37+
if absolute_node_name is None:
38+
raise ValueError('node_name must not be empty')
39+
return absolute_node_name
40+
41+
3542
def get_get_logger_levels_service_name(node_name: str) -> str:
3643
"""Return the get-logger-levels service name for a node."""
37-
return f'{get_absolute_node_name(node_name)}{LOGGER_GET_SERVICE_SUFFIX}'
44+
return f'{_require_absolute_node_name(node_name)}{LOGGER_GET_SERVICE_SUFFIX}'
3845

3946

4047
def get_set_logger_levels_service_name(node_name: str) -> str:
4148
"""Return the set-logger-levels service name for a node."""
42-
return f'{get_absolute_node_name(node_name)}{LOGGER_SET_SERVICE_SUFFIX}'
49+
return f'{_require_absolute_node_name(node_name)}{LOGGER_SET_SERVICE_SUFFIX}'
4350

4451

4552
def get_logger_name_for_node(node_name: str) -> str:
@@ -49,15 +56,13 @@ def get_logger_name_for_node(node_name: str) -> str:
4956
ROS node logger names use dot-separated namespaces, e.g. `/demo/talker`
5057
becomes `demo.talker`.
5158
"""
52-
absolute_node_name = get_absolute_node_name(node_name)
53-
if absolute_node_name is None:
54-
raise ValueError('node_name must not be empty')
59+
absolute_node_name = _require_absolute_node_name(node_name)
5560
return absolute_node_name.lstrip('/').replace('/', '.')
5661

5762

5863
def format_logger_service_unavailable_error(node_name: str) -> str:
5964
"""Return the user-facing error for nodes without logger services."""
60-
absolute_node_name = get_absolute_node_name(node_name)
65+
absolute_node_name = _require_absolute_node_name(node_name)
6166
return (
6267
f"Logger service not available for node '{absolute_node_name}'.\n"
6368
"The 'enable_logger_service' node option must be enabled for this node."

ros2log/test/test_api.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,36 @@
1616
from unittest.mock import patch
1717

1818
from ros2log.api import format_logger_service_unavailable_error
19+
from ros2log.api import get_get_logger_levels_service_name
1920
from ros2log.api import get_logger_name_for_node
21+
from ros2log.api import get_set_logger_levels_service_name
2022
from ros2log.api import get_target_node_names
2123
from ros2node.api import NodeName
2224

2325

26+
class TestLoggerServiceNameHelpers(unittest.TestCase):
27+
"""Test logger service name helpers."""
28+
29+
def test_empty_node_name_raises_value_error_for_get_service_name(self):
30+
with self.assertRaisesRegex(ValueError, 'node_name must not be empty'):
31+
get_get_logger_levels_service_name('')
32+
33+
def test_empty_node_name_raises_value_error_for_set_service_name(self):
34+
with self.assertRaisesRegex(ValueError, 'node_name must not be empty'):
35+
get_set_logger_levels_service_name('')
36+
37+
def test_empty_node_name_raises_value_error_for_unavailable_error(self):
38+
with self.assertRaisesRegex(ValueError, 'node_name must not be empty'):
39+
format_logger_service_unavailable_error('')
40+
41+
2442
class TestGetLoggerNameForNode(unittest.TestCase):
2543
"""Test node-name to logger-name conversion helpers."""
2644

45+
def test_empty_node_name_raises_value_error(self):
46+
with self.assertRaisesRegex(ValueError, 'node_name must not be empty'):
47+
get_logger_name_for_node('')
48+
2749
def test_root_namespace(self):
2850
self.assertEqual(get_logger_name_for_node('/talker'), 'talker')
2951

0 commit comments

Comments
 (0)