123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- from functools import cached_property
- import orjson
- import pytest
- import responses
- from sentry.shared_integrations.exceptions import ApiError
- from sentry.testutils.cases import PluginTestCase
- 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 = orjson.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": "foo@example.com", "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"
|