40 lines
1.7 KiB
Python
40 lines
1.7 KiB
Python
|
|
"""Mode contract bundle (MAS-WP-0010 T02/T03/T07): vendored copies, fixtures, flows,
|
||
|
|
and the gateway event schema checked against real gateway output."""
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
from mas_core.discovery import Response, discover
|
||
|
|
from mas_gateway.core import Resolver, build_event, message_meta_from_rfc822
|
||
|
|
from mas_modes import event_errors
|
||
|
|
from mas_modes.runner import run_mode_corpus
|
||
|
|
|
||
|
|
ROOT = Path(__file__).resolve().parents[1]
|
||
|
|
BUNDLE = ROOT / "mas-modes-v0.1-spec"
|
||
|
|
VENDORED = ROOT / "mas_modes"
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.parametrize("rel", sorted(str(p.relative_to(BUNDLE)) for p in BUNDLE.glob("*/*.json")))
|
||
|
|
def test_vendored_copy_matches_bundle(rel):
|
||
|
|
assert (BUNDLE / rel).read_bytes() == (VENDORED / rel).read_bytes()
|
||
|
|
|
||
|
|
|
||
|
|
def test_mode_corpus():
|
||
|
|
rep = run_mode_corpus()
|
||
|
|
assert rep.ok, rep.failures
|
||
|
|
assert rep.passed >= 170
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.parametrize("recipient", [
|
||
|
|
"ticket!callback@great-service.example", "ticket=GS-1+comments@great-service.example",
|
||
|
|
"bernd.worsch@great-service.example", "ticket=PR42$4@great-service.example",
|
||
|
|
"x@unknown.invalid"])
|
||
|
|
def test_gateway_events_match_schema(recipient):
|
||
|
|
raw = (b"Authentication-Results: great-service.example; dmarc=pass header.from=example.net\r\n"
|
||
|
|
b"From: c@example.net\r\nTo: x@great-service.example\r\nSubject: s\r\n\r\nbody\r\n")
|
||
|
|
offline = lambda host, **kw: discover(host, transport=lambda u, t: Response(404, {}, b"")) # noqa: E731
|
||
|
|
resolver = Resolver.with_statute_files(
|
||
|
|
[ROOT / "examples/statute/great-service.example/.well-known/mas"], discover_fn=offline)
|
||
|
|
event = build_event(recipient, message_meta_from_rfc822(raw, "great-service.example"), resolver)
|
||
|
|
assert event_errors(event) == [], event
|