Skip to content

Commit fe66d13

Browse files
committed
test: adjust unit tests
1 parent 82d5d0a commit fe66d13

File tree

13 files changed

+65
-72
lines changed

13 files changed

+65
-72
lines changed

solnlib/conf_manager.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,11 @@
3636
InvalidHostnameError,
3737
)
3838

39-
from solnlib.log import Logs
39+
from solnlib.utils import get_solnlib_logger
40+
41+
logger = get_solnlib_logger(__name__)
42+
4043

41-
logger = Logs().get_logger(__name__)
4244

4345
__all__ = [
4446
"ConfFile",
@@ -342,7 +344,7 @@ def delete(self, stanza_name: str):
342344
try:
343345
self._conf.delete(stanza_name)
344346
except KeyError:
345-
logger.error(
347+
logger().error(
346348
"Delete stanza: %s error: %s.", stanza_name, traceback.format_exc()
347349
)
348350
raise ConfStanzaNotExistException(

solnlib/file_monitor.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@
2424
import traceback
2525
from typing import Any, Callable, List
2626

27-
from solnlib.log import Logs
27+
from solnlib.utils import get_solnlib_logger
28+
29+
logger = get_solnlib_logger(__name__)
30+
2831

29-
logger = Logs().get_logger(__name__)
3032

3133

3234
__all__ = ["FileChangesChecker", "FileMonitor"]
@@ -53,7 +55,7 @@ def __init__(self, callback: Callable[[List[str]], Any], files: List):
5355
logging.debug(
5456
f"Getmtime for {k}, failed: {traceback.format_exc()}"
5557
) # deprecated
56-
logger.debug(f"Getmtime for {k}, failed: {traceback.format_exc()}")
58+
logger().debug(f"Getmtime for {k}, failed: {traceback.format_exc()}")
5759

5860
def check_changes(self) -> bool:
5961
"""Check files change.
@@ -64,7 +66,7 @@ def check_changes(self) -> bool:
6466
Returns:
6567
True if files changed else False
6668
"""
67-
logger.debug(f"Checking files={self._files}")
69+
logger().debug(f"Checking files={self._files}")
6870
file_mtimes = self.file_mtimes
6971
changed_files = []
7072
for f, last_mtime in list(file_mtimes.items()):
@@ -73,7 +75,7 @@ def check_changes(self) -> bool:
7375
if current_mtime != last_mtime:
7476
file_mtimes[f] = current_mtime
7577
changed_files.append(f)
76-
logger.info(f"Detect {f} has changed", f)
78+
logger().info(f"Detect {f} has changed", f)
7779
except OSError:
7880
pass
7981
if changed_files:

solnlib/modular_input/checkpointer.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030

3131
from solnlib import _utils, utils
3232

33-
from solnlib.log import Logs
33+
from solnlib.utils import get_solnlib_logger
3434

35-
logger = Logs().get_logger(__name__)
35+
logger = get_solnlib_logger(__name__)
3636

3737
__all__ = ["CheckpointerException", "KVStoreCheckpointer", "FileCheckpointer"]
3838

@@ -181,7 +181,7 @@ def get(self, key: str) -> Optional[Any]:
181181
record = self._collection_data.query_by_id(key)
182182
except binding.HTTPError as e:
183183
if e.status != 404:
184-
logger.error(f"Get checkpoint failed: {traceback.format_exc()}.")
184+
logger().error(f"Get checkpoint failed: {traceback.format_exc()}.")
185185
raise
186186
return None
187187
return json.loads(record["state"])
@@ -202,7 +202,7 @@ def delete(self, key: str) -> None:
202202
self._collection_data.delete_by_id(key)
203203
except binding.HTTPError as e:
204204
if e.status != 404:
205-
logger.error(f"Delete checkpoint failed: {traceback.format_exc()}.")
205+
logger().error(f"Delete checkpoint failed: {traceback.format_exc()}.")
206206
raise
207207

208208

solnlib/modular_input/modinput.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020

2121
import solnlib.splunkenv as sp
2222

23-
from solnlib.log import Logs
23+
from solnlib.utils import get_solnlib_logger
2424

25-
logger = Logs().get_logger(__name__)
25+
logger = get_solnlib_logger(__name__)
2626

2727

2828
def _parse_modinput_configs(root, outer_block, inner_block):
@@ -65,7 +65,7 @@ def _parse_modinput_configs(root, outer_block, inner_block):
6565

6666
confs = root.getElementsByTagName(outer_block)
6767
if not confs:
68-
logger.error("Invalid config, missing %s section", outer_block)
68+
logger().error("Invalid config, missing %s section", outer_block)
6969
raise Exception(f"Invalid config, missing {outer_block} section")
7070

7171
configs = []
@@ -74,7 +74,7 @@ def _parse_modinput_configs(root, outer_block, inner_block):
7474
config = {}
7575
stanza_name = stanza.getAttribute("name")
7676
if not stanza_name:
77-
logger.error("Invalid config, missing name")
77+
logger().error("Invalid config, missing name")
7878
raise Exception("Invalid config, missing name")
7979

8080
config["name"] = stanza_name
@@ -110,13 +110,13 @@ def parse_modinput_configs(config_str):
110110
for tag in meta_configs.keys():
111111
nodes = doc.getElementsByTagName(tag)
112112
if not nodes:
113-
logger.error("Invalid config, missing %s section", tag)
113+
logger().error("Invalid config, missing %s section", tag)
114114
raise Exception("Invalid config, missing %s section", tag)
115115

116116
if nodes[0].firstChild and nodes[0].firstChild.nodeType == nodes[0].TEXT_NODE:
117117
meta_configs[tag] = nodes[0].firstChild.data
118118
else:
119-
logger.error("Invalid config, expect text ndoe")
119+
logger().error("Invalid config, expect text ndoe")
120120
raise Exception("Invalid config, expect text ndoe")
121121

122122
if doc.nodeName == "input":
@@ -143,7 +143,7 @@ def get_modinput_configs_from_cli(modinput, modinput_stanza=None):
143143
cli, stdout=subprocess.PIPE, stderr=subprocess.PIPE
144144
).communicate()
145145
if err:
146-
logger.error("Failed to get modinput configs with error: %s", err)
146+
logger().error("Failed to get modinput configs with error: %s", err)
147147
return None, None
148148
else:
149149
return parse_modinput_configs(out)
@@ -155,7 +155,7 @@ def get_modinput_config_str_from_stdin():
155155
try:
156156
return sys.stdin.read(5000)
157157
except Exception:
158-
logger.error(traceback.format_exc())
158+
logger().error(traceback.format_exc())
159159
raise
160160

161161

solnlib/modular_input/modular_input.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@
3434
from ..orphan_process_monitor import OrphanProcessMonitor
3535
from . import checkpointer, event_writer
3636

37-
from solnlib.log import Logs
37+
from solnlib.utils import get_solnlib_logger
3838

39-
logger = Logs().get_logger(__name__)
39+
logger = get_solnlib_logger(__name__)
4040

4141
__all__ = ["ModularInputException", "ModularInput"]
4242

@@ -199,7 +199,7 @@ def _create_checkpointer(self):
199199
port=self.server_port,
200200
)
201201
except binding.HTTPError:
202-
logger.error(
202+
logger().error(
203203
"Failed to init kvstore checkpointer: %s.", traceback.format_exc()
204204
)
205205
raise
@@ -237,7 +237,7 @@ def _create_event_writer(self):
237237
global_settings_schema=self.hec_global_settings_schema,
238238
)
239239
except binding.HTTPError:
240-
logger.error(
240+
logger().error(
241241
"Failed to init HECEventWriter: %s.", traceback.format_exc()
242242
)
243243
raise
@@ -467,10 +467,10 @@ def execute(self):
467467
else:
468468
self.config_name = list(input_definition["inputs"].keys())[0]
469469
self.do_run(input_definition["inputs"])
470-
logger.info("Modular input: %s exit normally.", self.name)
470+
logger().info("Modular input: %s exit normally.", self.name)
471471
return 0
472472
except Exception:
473-
logger.error(
473+
logger().error(
474474
"Modular input: %s exit with exception: %s.",
475475
self.name,
476476
traceback.format_exc(),
@@ -493,7 +493,7 @@ def execute(self):
493493
self.do_validation(validation_definition["parameters"])
494494
return 0
495495
except Exception as e:
496-
logger.error(
496+
logger().error(
497497
"Modular input: %s validate arguments with exception: %s.",
498498
self.name,
499499
traceback.format_exc(),
@@ -504,7 +504,7 @@ def execute(self):
504504
sys.stderr.flush()
505505
return 1
506506
else:
507-
logger.error(
507+
logger().error(
508508
'Modular input: %s run with invalid arguments: "%s".',
509509
self.name,
510510
" ".join(sys.argv[1:]),

solnlib/rest.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@
2323

2424
import logging
2525

26-
from solnlib.log import Logs, log_exception
26+
from solnlib.log import log_exception
2727

28-
logger = Logs().get_logger(__name__)
28+
from solnlib.utils import get_solnlib_logger
29+
30+
logger = get_solnlib_logger(__name__)
2931

3032

3133
def splunkd_request(
@@ -69,7 +71,7 @@ def splunkd_request(
6971
except Exception as e:
7072
logging.error(msg_temp, splunkd_uri, "unknown", format_exc()) # deprecated
7173
log_exception(
72-
logger,
74+
logger(),
7375
e,
7476
exc_label="unknown",
7577
msg_before=f"Failed to send rest request={splunkd_uri}, errcode=unknown",
@@ -80,7 +82,7 @@ def splunkd_request(
8082
logging.debug(
8183
msg_temp, splunkd_uri, resp.status_code, code_to_msg(resp)
8284
) # deprecated
83-
logger.debug(
85+
logger().debug(
8486
msg_temp, splunkd_uri, resp.status_code, code_to_msg(resp)
8587
)
8688
else:

solnlib/splunk_rest_client.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@
3434
from .net_utils import validate_scheme_host_port
3535
from .splunkenv import get_splunkd_access_info
3636

37-
from solnlib.log import Logs
37+
from solnlib.utils import get_solnlib_logger
3838

39-
logger = Logs().get_logger(__name__)
39+
logger = get_solnlib_logger(__name__)
4040

4141
__all__ = ["SplunkRestClient"]
4242
MAX_REQUEST_RETRIES = 5
@@ -174,7 +174,7 @@ def request(url, message, **kwargs):
174174
**kwargs,
175175
)
176176
except Exception:
177-
logger.error(
177+
logger().error(
178178
"Failed to issue http request=%s to url=%s, error=%s",
179179
method,
180180
url,

solnlib/timer_queue.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
from solnlib.log import Logs
2929

30-
logger = Logs().get_logger(__name__)
30+
3131

3232

3333
__all__ = ["Timer", "TimerQueueStruct", "TimerQueue"]
@@ -193,7 +193,8 @@ def check_and_execute(self) -> float:
193193
try:
194194
timer()
195195
except Exception:
196-
logging.error(traceback.format_exc()) # deprecated
196+
logging.error(traceback.format_exc())
197+
logger = Logs().get_logger(__name__)# deprecated
197198
logger.error(traceback.format_exc())
198199

199200
self.reset_timers(expired_timers)
@@ -241,6 +242,7 @@ def start(self):
241242
self._started = True
242243

243244
self._thr.start()
245+
logger = Logs().get_logger(__name__)
244246
logger.info("TimerQueue started.")
245247

246248
def stop(self):
@@ -294,7 +296,8 @@ def _check_and_execute(self):
294296
# Note, please make timer callback effective/short
295297
timer()
296298
except Exception:
297-
logging.error(traceback.format_exc()) # deprecated
299+
logging.error(traceback.format_exc())
300+
logger = Logs().get_logger(__name__)# deprecated
298301
logger.error(traceback.format_exc())
299302

300303
self._reset_timers(expired_timers)

solnlib/utils.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,8 @@
2626
from typing import Any, Callable, List, Tuple, Union
2727
from urllib import parse as urlparse
2828

29-
3029
from solnlib.log import Logs
3130

32-
logger = Logs().get_logger(__name__)
3331

3432
__all__ = [
3533
"handle_teardown_signals",
@@ -162,11 +160,6 @@ def wrapper(*args, **kwargs):
162160
func.__name__,
163161
traceback.format_exc(),
164162
) # deprecated
165-
logger.warning(
166-
"Run function: %s failed: %s.",
167-
func.__name__,
168-
traceback.format_exc(),
169-
)
170163
if not exceptions or any(
171164
isinstance(e, exception) for exception in exceptions
172165
):
@@ -229,3 +222,14 @@ def get_appname_from_path(absolute_path):
229222
pass
230223
continue
231224
return "-"
225+
226+
227+
def get_solnlib_logger(name):
228+
_logger = None
229+
230+
def logger():
231+
nonlocal _logger
232+
if _logger is None:
233+
_logger = Logs().get_logger(name)
234+
return _logger
235+
return logger

tests/integration/conftest.py

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,11 @@
11
import os
22
import sys
3-
import os.path as op
4-
from unittest.mock import MagicMock
53

64
import pytest
75

86
import context
97

108

11-
cur_dir = op.dirname(op.abspath(__file__))
12-
13-
14-
# Mock only once globally, before anything imports `log.py`
15-
mock_msp = MagicMock(return_value=op.sep.join([cur_dir, "data/mock_log"]))
16-
mock_bundle_paths = MagicMock()
17-
mock_bundle_paths.make_splunkhome_path = mock_msp
18-
19-
sys.modules["splunk"] = MagicMock()
20-
sys.modules["splunk.clilib"] = MagicMock()
21-
sys.modules["splunk.clilib.bundle_paths"] = mock_bundle_paths
22-
23-
24-
@pytest.fixture(autouse=True)
25-
def patch_log_msp(monkeypatch):
26-
"""Ensure log.msp is patched in all tests after mocking sys.modules."""
27-
from solnlib import log # only import after sys.modules is patched
28-
monkeypatch.setattr(log, "msp", mock_msp)
29-
30-
319
@pytest.fixture(autouse=True, scope="session")
3210
def setup_env():
3311
# path manipulation get the 'splunk' library for the imports while running on GH Actions

0 commit comments

Comments
 (0)