Add some tests for header validation

See #179
This commit is contained in:
Klaas van Schelven
2025-08-02 22:25:43 +02:00
parent c62b0a47e4
commit 7594227b2b

View File

@@ -32,7 +32,8 @@ from bsmain.management.commands.send_json import Command as SendJsonCommand
from .views import BaseIngestAPIView
from .parsers import readuntil, NewlineFinder, ParseError, LengthFinder, StreamingEnvelopeParser
from .event_counter import check_for_thresholds
from .header_validators import validate_envelope_headers
from .header_validators import (
validate_envelope_headers, validate_item_headers, filter_valid_item_headers, filter_valid_envelope_headers)
from bugsink.exceptions import ViolatedExpectation
@@ -918,3 +919,56 @@ class HeaderValidationTest(RegularTestCase):
with self.assertRaises(ParseError):
validate_envelope_headers({"sent_at": "2025-07-31T23:05:37.0926+12:00"})
def test_dsn(self):
validate_envelope_headers({"dsn": "https://public@example.com/1"})
with self.assertRaises(ParseError):
validate_envelope_headers({"dsn": "not-a-dsn"})
def test_sdk(self):
validate_envelope_headers({"sdk": {}})
with self.assertRaises(ParseError):
validate_envelope_headers({"sdk": "1.0"})
def test_event_id(self):
valid32 = "a" * 32
valid36 = "123e4567-e89b-12d3-a456-426614174000"
validate_envelope_headers({"event_id": valid32})
validate_envelope_headers({"event_id": valid36})
with self.assertRaises(ParseError):
validate_envelope_headers({"event_id": "xyz"})
with self.assertRaises(ParseError):
validate_envelope_headers({"event_id": "g" * 32})
def test_filter_valid_envelope_headers(self):
headers = {
"dsn": "bad",
"sent_at": "2025-08-02T00:00:00Z",
"sdk": "bad",
"event_id": "deadbeefdeadbeefdeadbeefdeadbeef"
}
self.assertEqual(filter_valid_envelope_headers(headers), {
"sent_at": "2025-08-02T00:00:00Z",
"event_id": "deadbeefdeadbeefdeadbeefdeadbeef",
})
def test_validate_item_headers_non_event_doesnt_raise(self):
validate_item_headers({"type": "transaction", "length": -1})
def test_validate_item_headers(self):
validate_item_headers({"type": "event", "length": 0})
with self.assertRaises(ParseError):
validate_item_headers({"type": "event", "length": -1})
def test_filter_valid_item_headers_non_event(self):
header = {"type": "transaction", "length": -1}
self.assertIs(filter_valid_item_headers(header), header)
def test_filter_valid_item_headers_event(self):
self.assertEqual(filter_valid_item_headers(
{"type": "event", "length": 3, "foo": 1}),
{"type": "event", "length": 3})