60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
"""Tests for the protocol-version registry and comparison helpers."""
|
|
|
|
import pytest
|
|
|
|
from mcp.shared.version import (
|
|
KNOWN_PROTOCOL_VERSIONS,
|
|
SUPPORTED_PROTOCOL_VERSIONS,
|
|
is_version_at_least,
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("version", "minimum", "expected"),
|
|
[
|
|
# equal
|
|
("2025-11-25", "2025-11-25", True),
|
|
("2024-11-05", "2024-11-05", True),
|
|
# above
|
|
("2025-11-25", "2025-06-18", True),
|
|
("2025-06-18", "2024-11-05", True),
|
|
# below
|
|
("2025-06-18", "2025-11-25", False),
|
|
("2024-11-05", "2025-03-26", False),
|
|
],
|
|
)
|
|
def test_is_version_at_least_ordering(version: str, minimum: str, expected: bool) -> None:
|
|
"""Known revisions order by registry position: equal, newer, and older pairs."""
|
|
assert is_version_at_least(version, minimum) is expected
|
|
|
|
|
|
@pytest.mark.parametrize("version", ["zzz", "", "2025-11-26", "draft", "9999-99-99"])
|
|
def test_is_version_at_least_unknown_version_is_false(version: str) -> None:
|
|
"""Unrecognized peer strings compare conservatively, never accidentally."""
|
|
assert is_version_at_least(version, "2024-11-05") is False
|
|
|
|
|
|
def test_is_version_at_least_unknown_minimum_raises() -> None:
|
|
"""An unknown minimum is programmer error, not peer input."""
|
|
with pytest.raises(ValueError, match="zzz"):
|
|
is_version_at_least("2025-11-25", "zzz")
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("version", "minimum"), [(v, m) for v in KNOWN_PROTOCOL_VERSIONS for m in KNOWN_PROTOCOL_VERSIONS]
|
|
)
|
|
def test_is_version_at_least_matches_lexicographic_for_known_versions(version: str, minimum: str) -> None:
|
|
"""Drop-in equivalence: for every known (date-shaped) revision pair the helper
|
|
agrees with the string comparison it replaced."""
|
|
assert is_version_at_least(version, minimum) is (version >= minimum)
|
|
|
|
|
|
def test_supported_versions_are_known() -> None:
|
|
"""Every negotiable revision must be in the ordering registry."""
|
|
assert set(SUPPORTED_PROTOCOL_VERSIONS) <= set(KNOWN_PROTOCOL_VERSIONS)
|
|
|
|
|
|
def test_known_versions_are_strictly_ordered() -> None:
|
|
"""The registry tuple is the ordering source of truth: ascending, no duplicates."""
|
|
assert list(KNOWN_PROTOCOL_VERSIONS) == sorted(set(KNOWN_PROTOCOL_VERSIONS))
|