| import pytest |
|
|
| from docsifer.core.url_guard import validate_url |
| from docsifer.exceptions import InvalidInputError |
|
|
|
|
| def test_rejects_empty() -> None: |
| with pytest.raises(InvalidInputError): |
| validate_url("") |
|
|
|
|
| def test_rejects_disallowed_scheme() -> None: |
| with pytest.raises(InvalidInputError): |
| validate_url("file:///etc/passwd") |
|
|
|
|
| def test_rejects_loopback(monkeypatch) -> None: |
| import socket |
|
|
| monkeypatch.setattr( |
| socket, |
| "getaddrinfo", |
| lambda *a, **k: [(0, 0, 0, "", ("127.0.0.1", 0))], |
| ) |
| with pytest.raises(InvalidInputError): |
| validate_url("http://localhost/") |
|
|
|
|
| def test_rejects_link_local_metadata(monkeypatch) -> None: |
| import socket |
|
|
| monkeypatch.setattr( |
| socket, |
| "getaddrinfo", |
| lambda *a, **k: [(0, 0, 0, "", ("169.254.169.254", 0))], |
| ) |
| with pytest.raises(InvalidInputError): |
| validate_url("http://169.254.169.254/latest/meta-data") |
|
|
|
|
| def test_accepts_public(monkeypatch) -> None: |
| import socket |
|
|
| monkeypatch.setattr( |
| socket, |
| "getaddrinfo", |
| lambda *a, **k: [(0, 0, 0, "", ("93.184.216.34", 0))], |
| ) |
| out = validate_url("https://example.com/foo") |
| assert out.startswith("https://example.com") |
|
|
|
|
| def test_allow_private_when_configured(monkeypatch) -> None: |
| out = validate_url( |
| "http://localhost/x", |
| allow_private_networks=True, |
| ) |
| assert "localhost" in out |
|
|