From 7594227b2b70fda1324a4df0df30f58f06f15f04 Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Sat, 2 Aug 2025 22:25:43 +0200 Subject: [PATCH] Add some tests for header validation See #179 --- ingest/tests.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/ingest/tests.py b/ingest/tests.py index 6f66613..3e0d634 100644 --- a/ingest/tests.py +++ b/ingest/tests.py @@ -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})