Skip to content

Commit 61b8ac6

Browse files
Tests added for Custom Search Command apps
1 parent 6477d5b commit 61b8ac6

File tree

1 file changed

+239
-0
lines changed

1 file changed

+239
-0
lines changed
Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
#!/usr/bin/env python
2+
#
3+
# Copyright 2011-2015 Splunk, Inc.
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the "License"): you may
6+
# not use this file except in compliance with the License. You may obtain
7+
# a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14+
# License for the specific language governing permissions and limitations
15+
# under the License.
16+
17+
import unittest
18+
from tests import testlib
19+
from splunklib import results
20+
21+
22+
class TestCSC(testlib.SDKTestCase):
23+
24+
def test_eventing_app(self):
25+
app_name = "eventing_app"
26+
27+
self.assertTrue(app_name in self.service.apps, msg=f"{app_name} is not installed.")
28+
29+
# Fetch the app
30+
app = self.service.apps[app_name]
31+
app.refresh()
32+
33+
# Extract app info
34+
access = app.access
35+
content = app.content
36+
state = app.state
37+
38+
# App info assertions
39+
self.assertEqual(access.app, "system")
40+
self.assertEqual(access.can_change_perms, "1")
41+
self.assertEqual(access.can_list, "1")
42+
self.assertEqual(access.can_share_app, "1")
43+
self.assertEqual(access.can_share_global, "1")
44+
self.assertEqual(access.can_share_user, "0")
45+
self.assertEqual(access.can_write, "1")
46+
self.assertEqual(access.modifiable, "1")
47+
self.assertEqual(access.owner, "nobody")
48+
self.assertEqual(access.sharing, "app")
49+
self.assertEqual(access.perms.read, ['*'])
50+
self.assertEqual(access.perms.write, ['admin', 'power'])
51+
self.assertEqual(access.removable, "0")
52+
53+
self.assertEqual(content.author, "Splunk")
54+
self.assertEqual(content.configured, "0")
55+
self.assertEqual(content.description, "Eventing custom search commands example")
56+
self.assertEqual(content.label, "Eventing App")
57+
self.assertEqual(content.version, "1.0.0")
58+
self.assertEqual(content.visible, "1")
59+
60+
self.assertEqual(state.title, "eventing_app")
61+
62+
jobs = self.service.jobs
63+
stream = jobs.oneshot('search index="_internal" | head 4000 | eventingcsc status=200 | head 10',
64+
output_mode='json')
65+
result = results.JSONResultsReader(stream)
66+
ds = list(result)
67+
68+
self.assertEqual(result.is_preview, False)
69+
self.assertTrue(isinstance(ds[0], (dict, results.Message)))
70+
nonmessages = [d for d in ds if isinstance(d, dict)]
71+
self.assertTrue(len(nonmessages) <= 10)
72+
73+
def test_generating_app(self):
74+
app_name = "generating_app"
75+
76+
self.assertTrue(app_name in self.service.apps, msg=f"{app_name} is not installed.")
77+
78+
# Fetch the app
79+
app = self.service.apps[app_name]
80+
app.refresh()
81+
82+
# Extract app info
83+
access = app.access
84+
content = app.content
85+
state = app.state
86+
87+
# App info assertions
88+
self.assertEqual(access.app, "system")
89+
self.assertEqual(access.can_change_perms, "1")
90+
self.assertEqual(access.can_list, "1")
91+
self.assertEqual(access.can_share_app, "1")
92+
self.assertEqual(access.can_share_global, "1")
93+
self.assertEqual(access.can_share_user, "0")
94+
self.assertEqual(access.can_write, "1")
95+
self.assertEqual(access.modifiable, "1")
96+
self.assertEqual(access.owner, "nobody")
97+
self.assertEqual(access.sharing, "app")
98+
self.assertEqual(access.perms.read, ['*'])
99+
self.assertEqual(access.perms.write, ['admin', 'power'])
100+
self.assertEqual(access.removable, "0")
101+
102+
self.assertEqual(content.author, "Splunk")
103+
self.assertEqual(content.configured, "0")
104+
self.assertEqual(content.description, "Generating custom search commands example")
105+
self.assertEqual(content.label, "Generating App")
106+
self.assertEqual(content.version, "1.0.0")
107+
self.assertEqual(content.visible, "1")
108+
109+
self.assertEqual(state.title, "generating_app")
110+
111+
jobs = self.service.jobs
112+
stream = jobs.oneshot('| generatingcsc count=4', output_mode='json')
113+
result = results.JSONResultsReader(stream)
114+
ds = list(result)
115+
self.assertTrue(len(ds) == 4)
116+
117+
def test_reporting_app(self):
118+
app_name = "reporting_app"
119+
120+
self.assertTrue(app_name in self.service.apps, msg=f"{app_name} is not installed.")
121+
122+
# Fetch the app
123+
app = self.service.apps[app_name]
124+
app.refresh()
125+
126+
# Extract app info
127+
access = app.access
128+
content = app.content
129+
state = app.state
130+
131+
# App info assertions
132+
self.assertEqual(access.app, "system")
133+
self.assertEqual(access.can_change_perms, "1")
134+
self.assertEqual(access.can_list, "1")
135+
self.assertEqual(access.can_share_app, "1")
136+
self.assertEqual(access.can_share_global, "1")
137+
self.assertEqual(access.can_share_user, "0")
138+
self.assertEqual(access.can_write, "1")
139+
self.assertEqual(access.modifiable, "1")
140+
self.assertEqual(access.owner, "nobody")
141+
self.assertEqual(access.sharing, "app")
142+
self.assertEqual(access.perms.read, ['*'])
143+
self.assertEqual(access.perms.write, ['admin', 'power'])
144+
self.assertEqual(access.removable, "0")
145+
146+
self.assertEqual(content.author, "Splunk")
147+
self.assertEqual(content.configured, "0")
148+
self.assertEqual(content.description, "Reporting custom search commands example")
149+
self.assertEqual(content.label, "Reporting App")
150+
self.assertEqual(content.version, "1.0.0")
151+
self.assertEqual(content.visible, "1")
152+
153+
self.assertEqual(state.title, "reporting_app")
154+
155+
jobs = self.service.jobs
156+
157+
# All above 150
158+
stream = jobs.oneshot(
159+
'| makeresults count=10 | eval math=100, eng=100, cs=100 | reportingcsc cutoff=150 math eng cs',
160+
output_mode='json')
161+
result = results.JSONResultsReader(stream)
162+
ds = list(result)
163+
164+
self.assertTrue(len(ds) > 0)
165+
self.assertTrue(ds[0].values() is not None)
166+
self.assertTrue(len(ds[0].values()) > 0)
167+
168+
no_of_students = int(list(ds[0].values())[0])
169+
self.assertTrue(no_of_students == 10)
170+
171+
# All below 150
172+
stream = jobs.oneshot(
173+
'| makeresults count=10 | eval math=45, eng=45, cs=45 | reportingcsc cutoff=150 math eng cs',
174+
output_mode='json')
175+
result = results.JSONResultsReader(stream)
176+
ds = list(result)
177+
178+
self.assertTrue(len(ds) > 0)
179+
self.assertTrue(ds[0].values() is not None)
180+
self.assertTrue(len(ds[0].values()) > 0)
181+
182+
no_of_students = int(list(ds[0].values())[0])
183+
self.assertTrue(no_of_students == 0)
184+
185+
def test_streaming_app(self):
186+
app_name = "streaming_app"
187+
188+
self.assertTrue(app_name in self.service.apps, msg=f"{app_name} is not installed.")
189+
190+
# Fetch the app
191+
app = self.service.apps[app_name]
192+
app.refresh()
193+
194+
# Extract app info
195+
access = app.access
196+
content = app.content
197+
state = app.state
198+
199+
# App info assertions
200+
self.assertEqual(access.app, "system")
201+
self.assertEqual(access.can_change_perms, "1")
202+
self.assertEqual(access.can_list, "1")
203+
self.assertEqual(access.can_share_app, "1")
204+
self.assertEqual(access.can_share_global, "1")
205+
self.assertEqual(access.can_share_user, "0")
206+
self.assertEqual(access.can_write, "1")
207+
self.assertEqual(access.modifiable, "1")
208+
self.assertEqual(access.owner, "nobody")
209+
self.assertEqual(access.sharing, "app")
210+
self.assertEqual(access.perms.read, ['*'])
211+
self.assertEqual(access.perms.write, ['admin', 'power'])
212+
self.assertEqual(access.removable, "0")
213+
214+
self.assertEqual(content.author, "Splunk")
215+
self.assertEqual(content.configured, "0")
216+
self.assertEqual(content.description, "Streaming custom search commands example")
217+
self.assertEqual(content.label, "Streaming App")
218+
self.assertEqual(content.version, "1.0.0")
219+
self.assertEqual(content.visible, "1")
220+
221+
self.assertEqual(state.title, "streaming_app")
222+
223+
jobs = self.service.jobs
224+
225+
stream = jobs.oneshot('| makeresults count=5 | eval celsius = 35 | streamingcsc', output_mode='json')
226+
result = results.JSONResultsReader(stream)
227+
ds = list(result)
228+
229+
self.assertTrue(len(ds) == 5)
230+
self.assertTrue('_time' in ds[0])
231+
self.assertTrue('celsius' in ds[0])
232+
self.assertTrue('fahrenheit' in ds[0])
233+
self.assertTrue(ds[0]['celsius'] == '35')
234+
self.assertTrue(ds[0]['fahrenheit'] == '95.0')
235+
self.assertTrue(len(ds) == 5)
236+
237+
238+
if __name__ == "__main__":
239+
unittest.main()

0 commit comments

Comments
 (0)