From 80ec1f0e94876cdf63d9ebb9215a52ce1253d10e Mon Sep 17 00:00:00 2001 From: kkania-splunk Date: Fri, 29 Jan 2021 10:59:37 +0100 Subject: [PATCH 1/3] eventtype_parser unit tests --- tests/unit/test_eventtype_parser.py | 57 +++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 tests/unit/test_eventtype_parser.py diff --git a/tests/unit/test_eventtype_parser.py b/tests/unit/test_eventtype_parser.py new file mode 100644 index 000000000..292d71021 --- /dev/null +++ b/tests/unit/test_eventtype_parser.py @@ -0,0 +1,57 @@ +import pytest +from unittest.mock import patch +from pytest_splunk_addon.standard_lib.addon_parser.eventtype_parser import EventTypeParser + + +def test_eventtypes_can_be_parsed_and_extracted(parser): + assert parser.eventtypes, "eventypes can not be called or does not return any value" + + +def test_eventtypes_can_be_parsed_and_returned(parser): + expected_outputs = [{"stanza": x} for x in ["fake_splunkd", "fake_for_tags_positive"]] + for i, event in enumerate(parser.get_eventtypes()): + assert event == expected_outputs[i], "expeceted event {} not found".format(expected_outputs[i]) + + +def test_get_eventtypes_calls_app_get_config(parser): + with patch.object(parser.app, "eventtypes_conf") as mock: + for _ in parser.get_eventtypes(): + pass + mock.assert_called_once() + + +def test_no_config_file(parser): + parser.app.eventtypes_conf = os_error + assert not parser.eventtypes, "eventtypes created when no config file exists" + + +@pytest.fixture() +def parser(): + class FakeApp: + def __init__(self): + self.splunk_app_path = "fake_path" + self.eventtypes = FakeConfigurationFile() + + def eventtypes_conf(self): + return self.eventtypes + + class FakeConfigurationFile: + def __init__(self): + self.headers = [] + self.sects = { + "fake_splunkd": { + "name": "fake_splunkd", + "options": "index=_internal sourcetype=splunkd" + }, + "fake_for_tags_positive": { + "name": "fake_for_tags_positive", + "options": "sourcetype=splunkd" + } + } + self.errors = [] + + return EventTypeParser("fake_path", FakeApp()) + + +def os_error(): + raise OSError From b8bd0d16190676600264b68129c4459aec7b93a9 Mon Sep 17 00:00:00 2001 From: kkania-splunk Date: Fri, 29 Jan 2021 14:20:04 +0100 Subject: [PATCH 2/3] eventtype_parser no config file update --- tests/unit/test_eventtype_parser.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/unit/test_eventtype_parser.py b/tests/unit/test_eventtype_parser.py index 292d71021..85b22f395 100644 --- a/tests/unit/test_eventtype_parser.py +++ b/tests/unit/test_eventtype_parser.py @@ -20,9 +20,12 @@ def test_get_eventtypes_calls_app_get_config(parser): mock.assert_called_once() -def test_no_config_file(parser): +def test_no_eventtype_config_file(parser): parser.app.eventtypes_conf = os_error - assert not parser.eventtypes, "eventtypes created when no config file exists" + output = [] + for i in parser.get_eventtypes(): + output.append(i) + assert not output, "eventtypes created when no config file exists" @pytest.fixture() From 6d81c76b8847568618aeb5a431ca1434cd15a7a8 Mon Sep 17 00:00:00 2001 From: kkania-splunk Date: Fri, 29 Jan 2021 16:05:08 +0100 Subject: [PATCH 3/3] review remarks #1 --- tests/unit/conftest.py | 29 +++++++++++++ tests/unit/test_eventtype_parser.py | 64 +++++++---------------------- 2 files changed, 44 insertions(+), 49 deletions(-) create mode 100644 tests/unit/conftest.py diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py new file mode 100644 index 000000000..8a0d8cfe3 --- /dev/null +++ b/tests/unit/conftest.py @@ -0,0 +1,29 @@ +import pytest +from unittest.mock import Mock +from pytest_splunk_addon.standard_lib.addon_parser.eventtype_parser import ( + EventTypeParser, +) + + +@pytest.fixture() +def parser(): + class FakeConfigurationFile: + def __init__(self): + self.headers = [] + self.sects = { + "fake_splunkd": { + "name": "fake_splunkd", + "options": "index=_internal sourcetype=splunkd", + }, + "fake_for_tags_positive": { + "name": "fake_for_tags_positive", + "options": "sourcetype=splunkd", + }, + } + self.errors = [] + + FakeApp = Mock() + FakeApp.eventtypes = FakeConfigurationFile() + FakeApp.eventtypes_conf.return_value = FakeConfigurationFile() + + return EventTypeParser("fake_path", FakeApp) diff --git a/tests/unit/test_eventtype_parser.py b/tests/unit/test_eventtype_parser.py index 85b22f395..d76788f91 100644 --- a/tests/unit/test_eventtype_parser.py +++ b/tests/unit/test_eventtype_parser.py @@ -1,60 +1,26 @@ -import pytest -from unittest.mock import patch -from pytest_splunk_addon.standard_lib.addon_parser.eventtype_parser import EventTypeParser - - def test_eventtypes_can_be_parsed_and_extracted(parser): - assert parser.eventtypes, "eventypes can not be called or does not return any value" + assert hasattr( + parser.eventtypes, "sects" + ), "eventypes can not be called or does have sects attribute" def test_eventtypes_can_be_parsed_and_returned(parser): - expected_outputs = [{"stanza": x} for x in ["fake_splunkd", "fake_for_tags_positive"]] + expected_outputs = [ + {"stanza": x} for x in ["fake_splunkd", "fake_for_tags_positive"] + ] for i, event in enumerate(parser.get_eventtypes()): - assert event == expected_outputs[i], "expeceted event {} not found".format(expected_outputs[i]) + assert event == expected_outputs[i], "expeceted event {} not found".format( + expected_outputs[i] + ) def test_get_eventtypes_calls_app_get_config(parser): - with patch.object(parser.app, "eventtypes_conf") as mock: - for _ in parser.get_eventtypes(): - pass - mock.assert_called_once() + for _ in parser.get_eventtypes(): + pass + parser.app.eventtypes_conf.assert_called_once() def test_no_eventtype_config_file(parser): - parser.app.eventtypes_conf = os_error - output = [] - for i in parser.get_eventtypes(): - output.append(i) - assert not output, "eventtypes created when no config file exists" - - -@pytest.fixture() -def parser(): - class FakeApp: - def __init__(self): - self.splunk_app_path = "fake_path" - self.eventtypes = FakeConfigurationFile() - - def eventtypes_conf(self): - return self.eventtypes - - class FakeConfigurationFile: - def __init__(self): - self.headers = [] - self.sects = { - "fake_splunkd": { - "name": "fake_splunkd", - "options": "index=_internal sourcetype=splunkd" - }, - "fake_for_tags_positive": { - "name": "fake_for_tags_positive", - "options": "sourcetype=splunkd" - } - } - self.errors = [] - - return EventTypeParser("fake_path", FakeApp()) - - -def os_error(): - raise OSError + parser.app.eventtypes_conf.side_effect = OSError + output = [eventtype for eventtype in parser.get_eventtypes() if eventtype] + assert output == [], "eventtypes created when no config file exists"