mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
141 lines
5.4 KiB
Python
141 lines
5.4 KiB
Python
from functools import cached_property
|
|
|
|
import pytest
|
|
import responses
|
|
|
|
from sentry.shared_integrations.exceptions import ApiError
|
|
from sentry.testutils.cases import PluginTestCase
|
|
from sentry.utils import json
|
|
from sentry_plugins.splunk.plugin import SplunkPlugin
|
|
|
|
|
|
class SplunkPluginTest(PluginTestCase):
|
|
@cached_property
|
|
def plugin(self):
|
|
return SplunkPlugin()
|
|
|
|
def test_conf_key(self):
|
|
assert self.plugin.conf_key == "splunk"
|
|
|
|
def test_entry_point(self):
|
|
self.assertPluginInstalled("splunk", self.plugin)
|
|
|
|
@responses.activate
|
|
def test_simple_notification(self):
|
|
responses.add(responses.POST, "https://splunk.example.com:8088/services/collector")
|
|
|
|
self.plugin.set_option("token", "12345678-1234-1234-1234-1234567890AB", self.project)
|
|
self.plugin.set_option("index", "main", self.project)
|
|
self.plugin.set_option("instance", "https://splunk.example.com:8088", self.project)
|
|
|
|
event = self.store_event(
|
|
data={"message": "Hello world", "level": "warning"}, project_id=self.project.id
|
|
)
|
|
with self.options({"system.url-prefix": "http://example.com"}):
|
|
self.plugin.post_process(event)
|
|
|
|
request = responses.calls[0].request
|
|
payload = json.loads(request.body)
|
|
assert payload == self.plugin.get_event_payload(event)
|
|
headers = request.headers
|
|
assert headers["Authorization"] == "Splunk 12345678-1234-1234-1234-1234567890AB"
|
|
|
|
@responses.activate
|
|
def test_dont_reraise_error(self):
|
|
responses.add(
|
|
responses.POST, "https://splunk.example.com:8088/services/collector", status=404
|
|
)
|
|
|
|
self.plugin.set_option("token", "12345678-1234-1234-1234-1234567890AB", self.project)
|
|
self.plugin.set_option("index", "main", self.project)
|
|
self.plugin.set_option("instance", "https://splunk.example.com:8088", self.project)
|
|
|
|
event = self.store_event(
|
|
data={"message": "Hello world", "level": "warning"}, project_id=self.project.id
|
|
)
|
|
with self.options({"system.url-prefix": "http://example.com"}):
|
|
self.plugin.post_process(event)
|
|
|
|
resp = responses.calls[0].response
|
|
assert resp.status_code == 404
|
|
|
|
@responses.activate
|
|
def test_reraise_error(self):
|
|
responses.add(
|
|
responses.POST, "https://splunk.example.com:8088/services/collector", status=500
|
|
)
|
|
|
|
self.plugin.set_option("token", "12345678-1234-1234-1234-1234567890AB", self.project)
|
|
self.plugin.set_option("index", "main", self.project)
|
|
self.plugin.set_option("instance", "https://splunk.example.com:8088", self.project)
|
|
|
|
event = self.store_event(
|
|
data={"message": "Hello world", "level": "warning"}, project_id=self.project.id
|
|
)
|
|
with self.options({"system.url-prefix": "http://example.com"}):
|
|
with pytest.raises(ApiError):
|
|
self.plugin.post_process(event)
|
|
|
|
def test_http_payload(self):
|
|
event = self.store_event(
|
|
data={
|
|
"request": {
|
|
"url": "http://example.com",
|
|
"method": "POST",
|
|
"headers": {"Referer": "http://example.com/foo"},
|
|
}
|
|
},
|
|
project_id=self.project.id,
|
|
)
|
|
|
|
result = self.plugin.get_event_payload(event)
|
|
assert result["event"]["request_url"] == "http://example.com/"
|
|
assert result["event"]["request_method"] == "POST"
|
|
assert result["event"]["request_referer"] == "http://example.com/foo"
|
|
|
|
def test_error_payload(self):
|
|
event = self.store_event(
|
|
data={
|
|
"exception": {"values": [{"type": "ValueError", "value": "foo bar"}]},
|
|
"type": "error",
|
|
},
|
|
project_id=self.project.id,
|
|
)
|
|
|
|
result = self.plugin.get_event_payload(event)
|
|
assert result["event"]["type"] == "error"
|
|
assert result["event"]["exception_type"] == "ValueError"
|
|
assert result["event"]["exception_value"] == "foo bar"
|
|
|
|
def test_csp_payload(self):
|
|
event = self.store_event(
|
|
data={
|
|
"csp": {
|
|
"document_uri": "http://example.com/",
|
|
"violated_directive": "style-src cdn.example.com",
|
|
"blocked_uri": "http://example.com/style.css",
|
|
"effective_directive": "style-src",
|
|
},
|
|
"type": "csp",
|
|
},
|
|
project_id=self.project.id,
|
|
)
|
|
|
|
result = self.plugin.get_event_payload(event)
|
|
assert result["event"]["type"] == "csp"
|
|
assert result["event"]["csp_document_uri"] == "http://example.com/"
|
|
assert result["event"]["csp_violated_directive"] == "style-src cdn.example.com"
|
|
assert result["event"]["csp_blocked_uri"] == "http://example.com/style.css"
|
|
assert result["event"]["csp_effective_directive"] == "style-src"
|
|
|
|
def test_user_payload(self):
|
|
event = self.store_event(
|
|
data={"user": {"id": "1", "email": "[email protected]", "ip_address": "127.0.0.1"}},
|
|
project_id=self.project.id,
|
|
)
|
|
|
|
result = self.plugin.get_event_payload(event)
|
|
assert result["event"]["user_id"] == "1"
|
|
assert result["event"]["user_email_hash"] == "b48def645758b95537d4424c84d1a9ff"
|
|
assert result["event"]["user_ip_trunc"] == "127.0.0.0"
|