Skip to content

Commit e70ae01

Browse files
committed
Mocked telemetry in modularinput tests
1 parent a8ba77e commit e70ae01

File tree

5 files changed

+42
-18
lines changed

5 files changed

+42
-18
lines changed

splunklib/modularinput/script.py

+15
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from .event_writer import EventWriter
2222
from .input_definition import InputDefinition
2323
from .validation_definition import ValidationDefinition
24+
from ..wire._internal import Telemetry, TelemetryMetric
2425
from splunklib import six
2526

2627
try:
@@ -70,6 +71,20 @@ def run_script(self, args, event_writer, input_stream):
7071
# passed on stdin as XML, and the script will write events on
7172
# stdout and log entries on stderr.
7273
self._input_definition = InputDefinition.parse(input_stream)
74+
75+
# create a telemetry metric
76+
metric = TelemetryMetric(**{
77+
'metric_type': 'event',
78+
'component': 'telemetry_test_case',
79+
'data': {
80+
'testValue': 32
81+
}
82+
})
83+
84+
# call out to telemetry
85+
telemetry = Telemetry(self.service)
86+
telemetry.submit(metric.to_wire())
87+
7388
self.stream_events(self._input_definition, event_writer)
7489
event_writer.close()
7590
return 0

splunklib/wire/_internal/json_sink.py

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ def submit(self, data):
4444
"""
4545

4646
response = self._post('', headers=self.__class__.JSON_HEADER, body=json.dumps(data))
47+
4748
body = json.loads(response.body.read().decode('utf-8'))
4849

4950
return response, body

tests/modularinput/test_script.py

+22-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
import io
2+
import json
13
import sys
24

5+
from mock import Mock, patch
6+
7+
from splunklib import six
38
from splunklib.client import Service
49
from splunklib.modularinput import Script, EventWriter, Scheme, Argument, Event
5-
import io
610

711
from splunklib.modularinput.utils import xml_compare
812
from tests.modularinput.modularinput_testlib import data_open
@@ -184,9 +188,24 @@ def stream_events(self, inputs, ew):
184188
script = NewScript()
185189
input_configuration = data_open("data/conf_with_2_inputs.xml")
186190

187-
ew = EventWriter(sys.stdout, sys.stderr)
191+
event_writer = EventWriter(sys.stdout, sys.stderr)
192+
193+
patched_telemetry_response = {
194+
'status': 201,
195+
'reason': 'Created',
196+
'body.read.return_value': six.ensure_binary(json.dumps({
197+
'message': 'Data submitted successfully',
198+
'metricValueID': '26844DB9-7806-40E0-96C0-1BD554930BA8'
199+
})),
200+
'headers': [
201+
('content-type', 'application/json; charset=UTF-8')
202+
]
203+
}
204+
205+
with patch.object(Service, 'post') as patched_telemetry_post:
206+
patched_telemetry_post.return_value = Mock(**patched_telemetry_response)
188207

189-
return_value = script.run_script([TEST_SCRIPT_PATH], ew, input_configuration)
208+
return_value = script.run_script([TEST_SCRIPT_PATH], event_writer, input_configuration)
190209

191210
output = capsys.readouterr()
192211
assert output.err == ""

tests/test_telemetry.py

+2-14
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,10 @@
2121
from splunklib.wire._internal.telemetry import Telemetry
2222
from splunklib.wire._internal.telemetry_metric import TelemetryMetric
2323

24-
try:
25-
import unittest
26-
except ImportError:
27-
import unittest2 as unittest
28-
2924
@pytest.mark.app
30-
class TelemetryTestCase(testlib.SDKTestCase):
25+
class TestTelemetry(testlib.SDKTestCase):
3126
def setUp(self):
32-
super(TelemetryTestCase, self).setUp()
27+
super(TestTelemetry, self).setUp()
3328

3429
self.service.namespace['owner'] = 'nobody'
3530
self.service.namespace['app'] = 'sdk-app-collection'
@@ -51,10 +46,3 @@ def test_submit(self):
5146

5247
# it should return a 201
5348
self.assertEqual(response.status, 201)
54-
55-
if __name__ == "__main__":
56-
try:
57-
import unittest2 as unittest
58-
except ImportError:
59-
import unittest
60-
unittest.main()

tox.ini

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ passenv = LANG
2727
setenv = SPLUNK_HOME=/opt/splunk
2828
INPUT_EXAMPLE_UPLOAD=/opt/splunk/var/log/splunk/splunkd_ui_access.log
2929
whitelist_externals = true
30-
deps = pytest
30+
deps = mock
31+
pytest
3132
pytest-cov
3233
xmlrunner
3334
unittest2

0 commit comments

Comments
 (0)