aim-web2.1.0rc9
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
"""Additive v4 -> v5 migration, not a running managed DB."""
|
||||
import json,sqlite3
|
||||
from pathlib import Path
|
||||
from aim_webgui.db.store import Store
|
||||
|
||||
|
||||
def test_schema4_history_and_accounts_preserved_old_work_stopped_once(tmp_path):
|
||||
state=tmp_path/'state';state.mkdir(mode=0o700);path=state/'webgui.sqlite3';path.touch(mode=0o600)
|
||||
directory=Path(__import__('aim_webgui.db.store',fromlist=['x']).__file__).parent/'migrations'
|
||||
db=sqlite3.connect(path)
|
||||
for version in range(1,5):db.executescript(next(directory.glob(f'{version:04d}_*.sql')).read_text())
|
||||
db.execute('PRAGMA user_version=4')
|
||||
db.execute("INSERT INTO users(username,password_hash,role,enabled,must_change_password,created_at,updated_at) VALUES('admin','SYNTHETIC-only','admin',1,0,1,1)")
|
||||
user=db.execute('SELECT id FROM users').fetchone()[0]
|
||||
db.execute("INSERT INTO metadata VALUES('initialized','1')")
|
||||
for status in ('successful','failed','blocked','interrupted','queued','pending','running'):
|
||||
db.execute('INSERT INTO jobs(id,owner_id,status,plan,created_at,scheduled_at,mode,core_result) VALUES(?,?,?,?,?,?,?,?)',
|
||||
(status,user,status,'{"targets":["fixture.example"]}',1,1,'apply','{"fixture":"keep"}' if status=='successful' else None))
|
||||
db.commit();db.close()
|
||||
store=Store(path);store.migrate();store.migrate();store.check()
|
||||
with store.read()as db:
|
||||
assert db.execute('PRAGMA user_version').fetchone()[0]==5
|
||||
assert db.execute('SELECT password_hash FROM users').fetchone()[0]=='SYNTHETIC-only'
|
||||
assert dict(db.execute('SELECT id,status FROM jobs'))=={k:('blocked' if k in ('queued','pending') else 'interrupted' if k=='running' else k)for k in ('successful','failed','blocked','interrupted','queued','pending','running')}
|
||||
assert db.execute("SELECT core_result FROM jobs WHERE id='successful'").fetchone()[0]=='{"fixture":"keep"}'
|
||||
assert db.execute("SELECT COUNT(*) FROM audit WHERE action='core33-job-stopped'").fetchone()[0]==3
|
||||
assert db.execute('SELECT COUNT(*) FROM job_progress_events').fetchone()[0]==0
|
||||
assert db.execute('SELECT COUNT(*) FROM job_operation_reports').fetchone()[0]==0
|
||||
backup=tmp_path/'schema5-backup';store.backup(backup)
|
||||
with sqlite3.connect(backup)as db:assert db.execute('PRAGMA user_version').fetchone()[0]==5
|
||||
Reference in New Issue
Block a user