da5eb4c18c
Strategy nodes gain fleet token APIs; control/ app for local ops; manage.sh offers strategy vs control one-click deploy. Co-authored-by: Cursor <cursoragent@cursor.com>
49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
"""Fleet token / ticket unit tests."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
from fastapi import HTTPException
|
|
|
|
from app.api.fleet import (
|
|
clear_fleet_token,
|
|
consume_login_ticket,
|
|
create_login_ticket,
|
|
fleet_token_configured,
|
|
require_fleet_token,
|
|
set_fleet_token,
|
|
)
|
|
from app.models.db import Database, set_db
|
|
|
|
|
|
@pytest.fixture()
|
|
def db(tmp_path, monkeypatch):
|
|
monkeypatch.setenv("MODE", "SIM")
|
|
path = tmp_path / "t.db"
|
|
d = Database(path)
|
|
set_db(d)
|
|
yield d
|
|
d.close()
|
|
set_db(None)
|
|
|
|
|
|
def test_fleet_token_hash_and_auth(db):
|
|
assert not fleet_token_configured(db)
|
|
set_fleet_token("test-fleet-token-32chars-xxxx", db)
|
|
assert fleet_token_configured(db)
|
|
assert require_fleet_token(x_fleet_token="test-fleet-token-32chars-xxxx")
|
|
with pytest.raises(HTTPException) as ei:
|
|
require_fleet_token(x_fleet_token="wrong-token-xxxxxxxxxx")
|
|
assert ei.value.status_code == 401
|
|
clear_fleet_token(db)
|
|
with pytest.raises(HTTPException):
|
|
require_fleet_token(x_fleet_token="test-fleet-token-32chars-xxxx")
|
|
|
|
|
|
def test_login_ticket_once(db):
|
|
t, ttl = create_login_ticket("admin")
|
|
assert ttl >= 30
|
|
assert consume_login_ticket(t) == "admin"
|
|
with pytest.raises(HTTPException):
|
|
consume_login_ticket(t)
|