Files
2026-07-13 13:12:33 +08:00

71 lines
2.2 KiB
Python

from __future__ import annotations
import pytest
def test_offline_identity_requires_username_and_protected_password() -> None:
from opensquilla.sandbox.backend.windows_default_identity import (
offline_identity_from_boundary,
)
with pytest.raises(ValueError, match="offlineUsername"):
offline_identity_from_boundary({"offlineUserSid": "S-1-5-21-1"})
def test_offline_identity_parses_boundary_payload() -> None:
from opensquilla.sandbox.backend.windows_default_identity import (
offline_identity_from_boundary,
)
identity = offline_identity_from_boundary(
{
"offlineUserSid": "S-1-5-21-100-200-300-400",
"offlineUsername": "OpenSquillaSandbox",
"protectedPassword": "base64-dpapi-payload",
}
)
assert identity.sid == "S-1-5-21-100-200-300-400"
assert identity.username == "OpenSquillaSandbox"
assert identity.protected_password == "base64-dpapi-payload"
def test_protect_and_unprotect_password_round_trip(monkeypatch) -> None:
from opensquilla.sandbox.backend import windows_default_identity as mod
monkeypatch.setattr(
mod,
"_protect_password_native",
lambda value: f"protected:{value}",
)
monkeypatch.setattr(
mod,
"_unprotect_password_native",
lambda value: value.removeprefix("protected:"),
)
protected = mod.protect_password("secret-password")
assert protected == "protected:secret-password"
assert mod.unprotect_password(protected) == "secret-password"
def test_logon_offline_identity_unprotects_password_before_logon(monkeypatch) -> None:
from opensquilla.sandbox.backend import windows_default_identity as mod
identity = mod.OfflineSandboxIdentity(
sid="S-1-5-21-100-200-300-400",
username="OpenSquillaSandbox",
protected_password="protected",
)
calls: list[tuple[str, str]] = []
monkeypatch.setattr(mod, "_unprotect_password", lambda value: "plain-password")
monkeypatch.setattr(
mod,
"_logon_user_native",
lambda username, password: calls.append((username, password)) or 123,
)
assert mod.logon_offline_identity(identity) == 123
assert calls == [("OpenSquillaSandbox", "plain-password")]