Skip to content

Commit c6c269c

Browse files
committed
Add loggers in Service, add test for service creation
1 parent 1f3fa35 commit c6c269c

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

splunklib/searchcommands/search_command.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,24 +340,29 @@ def service(self):
340340
of :code:`None` is returned.
341341
342342
"""
343+
343344
if self._service is not None:
344345
return self._service
345346

346347
metadata = self._metadata
347348

348349
if metadata is None:
350+
self.logger.warning("Missing metadata for service creation.")
349351
return None
350352

351353
try:
352354
searchinfo = self._metadata.searchinfo
353355
except AttributeError:
356+
self.logger.warning("Missing searchinfo in metadata for service creation.")
354357
return None
355358

356359
splunkd_uri = searchinfo.splunkd_uri
357360

358-
if splunkd_uri is None:
361+
if splunkd_uri is None or splunkd_uri == "" or splunkd_uri == " ":
362+
self.logger.warning(f"Incorrect value for Splunkd URI: {splunkd_uri!r} in metadata")
359363
return None
360364

365+
361366
uri = urlsplit(splunkd_uri, allow_fragments=False)
362367

363368
self._service = Service(

tests/searchcommands/test_search_command.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,17 @@
2222
import codecs
2323
import os
2424
import re
25+
import logging
2526

2627
from io import TextIOWrapper
28+
from unittest.mock import MagicMock, patch
2729

2830
import pytest
2931

3032
import splunklib
3133
from splunklib.searchcommands import Configuration, StreamingCommand
3234
from splunklib.searchcommands.decorators import ConfigurationSetting, Option
35+
from splunklib.searchcommands.internals import ObjectView
3336
from splunklib.searchcommands.search_command import SearchCommand
3437
from splunklib.client import Service
3538
from splunklib.utils import ensure_binary
@@ -265,6 +268,52 @@ def test_process_scpv2(self):
265268

266269
_package_directory = os.path.dirname(os.path.abspath(__file__))
267270

271+
class TestSearchCommandService(TestCase):
272+
def setUp(self):
273+
TestCase.setUp(self)
274+
self.command = SearchCommand()
275+
console_handler = logging.StreamHandler()
276+
console_handler.setLevel(logging.WARNING)
277+
self.command.logger.addHandler(console_handler)
278+
279+
def test_service_exists(self):
280+
self.command._service = Service()
281+
self.assertIsNotNone(self.command.service)
282+
283+
def test_service_not_exists(self):
284+
self.assertIsNone(self.command.service)
285+
286+
def test_missing_metadata(self):
287+
with self.assertLogs(self.command.logger, level='WARNING') as log:
288+
service = self.command.service
289+
self.assertIsNone(service)
290+
self.assertTrue(any("Missing metadata for service creation." in message for message in log.output))
291+
292+
def test_missing_searchinfo(self):
293+
with self.assertLogs(self.command.logger, level='WARNING') as log:
294+
self.command._metadata = ObjectView({})
295+
self.assertIsNone(self.command.service)
296+
self.assertTrue(any("Missing searchinfo in metadata for service creation." in message for message in log.output))
297+
298+
299+
def test_missing_splunkd_uri(self):
300+
with self.assertLogs(self.command.logger, level='WARNING') as log:
301+
metadata = ObjectView({"searchinfo": ObjectView({"splunkd_uri": ""})})
302+
self.command._metadata = metadata
303+
self.assertIsNone(self.command.service)
304+
self.assertTrue(any("Incorrect value for Splunkd URI: '' in metadata" in message for message in log.output))
305+
306+
307+
308+
def test_service_returns_valid_service_object(self):
309+
metadata = ObjectView({"searchinfo":ObjectView({"splunkd_uri":"https://127.0.0.1:8089",
310+
"session_key":"mock_session_key",
311+
"app":"search",
312+
})})
313+
self.command._metadata = metadata
314+
self.assertIsInstance(self.command.service, Service)
315+
316+
268317

269318
if __name__ == "__main__":
270319
main()

0 commit comments

Comments
 (0)