Files
yawan-workbench/server/tests/test_secret_store.py
T

47 lines
1.7 KiB
Python
Raw Normal View History

"""密钥安全存储单元测试。"""
from unittest.mock import patch
from app import secret_store
from app.secret_store import mask_secret, resolve_secret, store_secret
def test_mask_plaintext():
assert mask_secret("sk-abcdef123456") == "***3456"
assert mask_secret("abc") == "••••"
assert mask_secret("") == ""
def test_mask_keychain_ref():
assert mask_secret("keychain:yawen-workbench.providers:provider-1") == "•••• 钥匙串保管"
def test_store_without_keychain_returns_plaintext():
with patch.object(secret_store, "keychain_available", return_value=False):
result = store_secret("provider-1", "sk-secret")
assert result == "sk-secret" # 降级:DB 存明文(旧行为)
def test_store_with_keychain_writes_reference():
class FakeCompleted:
returncode = 0
with patch.object(secret_store, "keychain_available", return_value=True), \
patch.object(secret_store.subprocess, "run", return_value=FakeCompleted()) as run:
result = store_secret("provider-1", "sk-secret")
assert result == "keychain:yawen-workbench.providers:provider-1"
assert run.call_count == 2 # delete + add
def test_resolve_keychain_reference():
class FakeCompleted:
returncode = 0
stdout = "sk-real-secret\n"
with patch.object(secret_store, "keychain_available", return_value=True), \
patch.object(secret_store.subprocess, "run", return_value=FakeCompleted()):
assert resolve_secret("keychain:yawen-workbench.providers:provider-1",
"provider-1") == "sk-real-secret"
def test_resolve_plaintext_passthrough():
assert resolve_secret("sk-plain", "provider-1") == "sk-plain"
assert resolve_secret("", "provider-1") == ""