60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import sqlite3
|
|
|
|
from app.store import RunStore
|
|
|
|
|
|
def test_restart_marks_unfinished_runs_interrupted(settings) -> None:
|
|
store = RunStore(settings.database_path)
|
|
store.initialize()
|
|
run, created = store.enqueue(
|
|
target_kind="task",
|
|
target_path="checks/status.py",
|
|
queue_group="checks",
|
|
)
|
|
assert created is True
|
|
|
|
store.mark_interrupted()
|
|
|
|
interrupted = store.get(run.id)
|
|
assert interrupted is not None
|
|
assert interrupted.status == "interrupted"
|
|
assert interrupted.finished_at is not None
|
|
|
|
|
|
def test_initialize_migrates_existing_database_with_input_column(settings) -> None:
|
|
settings.state_root.mkdir()
|
|
with sqlite3.connect(settings.database_path) as connection:
|
|
connection.execute(
|
|
"""
|
|
CREATE TABLE runs (
|
|
id INTEGER PRIMARY KEY,
|
|
target_kind TEXT NOT NULL,
|
|
target_path TEXT NOT NULL,
|
|
queue_group TEXT NOT NULL,
|
|
trigger TEXT NOT NULL,
|
|
status TEXT NOT NULL,
|
|
created_at TEXT NOT NULL,
|
|
started_at TEXT,
|
|
finished_at TEXT,
|
|
exit_code INTEGER,
|
|
cancel_requested_at TEXT,
|
|
parent_run_id INTEGER,
|
|
log_path TEXT,
|
|
message TEXT
|
|
)
|
|
"""
|
|
)
|
|
|
|
store = RunStore(settings.database_path)
|
|
store.initialize()
|
|
run, _ = store.enqueue(
|
|
target_kind="task",
|
|
target_path="checks/status.py",
|
|
queue_group="checks",
|
|
input_data={"attempts": 2},
|
|
)
|
|
|
|
assert run.input_json == '{"attempts":2}'
|