mirror of
https://github.com/jkingsman/Remote-Terminal-for-MeshCore.git
synced 2026-07-06 09:52:06 +02:00
Actually persist out_path_hash_mode instead of lossily deriving it
This commit is contained in:
@@ -1064,3 +1064,144 @@ class TestMigration033:
|
||||
assert row["on_radio"] == 1 # Not overwritten
|
||||
finally:
|
||||
await conn.close()
|
||||
|
||||
|
||||
class TestMigration039:
|
||||
"""Test migration 039: persist contacts.out_path_hash_mode."""
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_adds_column_and_backfills_legacy_rows(self):
|
||||
"""Pre-039 contacts get flood=-1 and legacy routed paths=0."""
|
||||
conn = await aiosqlite.connect(":memory:")
|
||||
conn.row_factory = aiosqlite.Row
|
||||
try:
|
||||
await set_version(conn, 38)
|
||||
await conn.execute("""
|
||||
CREATE TABLE contacts (
|
||||
public_key TEXT PRIMARY KEY,
|
||||
name TEXT,
|
||||
type INTEGER DEFAULT 0,
|
||||
flags INTEGER DEFAULT 0,
|
||||
last_path TEXT,
|
||||
last_path_len INTEGER DEFAULT -1,
|
||||
last_advert INTEGER,
|
||||
lat REAL,
|
||||
lon REAL,
|
||||
last_seen INTEGER,
|
||||
on_radio INTEGER DEFAULT 0,
|
||||
last_contacted INTEGER,
|
||||
first_seen INTEGER
|
||||
)
|
||||
""")
|
||||
await conn.execute(
|
||||
"""
|
||||
INSERT INTO contacts (
|
||||
public_key, name, last_path, last_path_len, first_seen
|
||||
) VALUES (?, ?, ?, ?, ?), (?, ?, ?, ?, ?)
|
||||
""",
|
||||
(
|
||||
"aa" * 32,
|
||||
"Flood",
|
||||
"",
|
||||
-1,
|
||||
1000,
|
||||
"bb" * 32,
|
||||
"LegacyPath",
|
||||
"1122",
|
||||
1,
|
||||
1001,
|
||||
),
|
||||
)
|
||||
await conn.commit()
|
||||
|
||||
applied = await run_migrations(conn)
|
||||
|
||||
assert applied == 1
|
||||
assert await get_version(conn) == 39
|
||||
|
||||
cursor = await conn.execute(
|
||||
"""
|
||||
SELECT public_key, last_path_len, out_path_hash_mode
|
||||
FROM contacts
|
||||
ORDER BY public_key
|
||||
"""
|
||||
)
|
||||
rows = await cursor.fetchall()
|
||||
assert rows[0]["public_key"] == "aa" * 32
|
||||
assert rows[0]["last_path_len"] == -1
|
||||
assert rows[0]["out_path_hash_mode"] == -1
|
||||
assert rows[1]["public_key"] == "bb" * 32
|
||||
assert rows[1]["last_path_len"] == 1
|
||||
assert rows[1]["out_path_hash_mode"] == 0
|
||||
finally:
|
||||
await conn.close()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_existing_valid_modes_are_preserved_when_column_already_exists(self):
|
||||
"""Migration does not clobber post-upgrade multibyte rows."""
|
||||
conn = await aiosqlite.connect(":memory:")
|
||||
conn.row_factory = aiosqlite.Row
|
||||
try:
|
||||
await set_version(conn, 38)
|
||||
await conn.execute("""
|
||||
CREATE TABLE contacts (
|
||||
public_key TEXT PRIMARY KEY,
|
||||
name TEXT,
|
||||
type INTEGER DEFAULT 0,
|
||||
flags INTEGER DEFAULT 0,
|
||||
last_path TEXT,
|
||||
last_path_len INTEGER DEFAULT -1,
|
||||
out_path_hash_mode INTEGER NOT NULL DEFAULT 0,
|
||||
last_advert INTEGER,
|
||||
lat REAL,
|
||||
lon REAL,
|
||||
last_seen INTEGER,
|
||||
on_radio INTEGER DEFAULT 0,
|
||||
last_contacted INTEGER,
|
||||
first_seen INTEGER
|
||||
)
|
||||
""")
|
||||
await conn.execute(
|
||||
"""
|
||||
INSERT INTO contacts (
|
||||
public_key, name, last_path, last_path_len, out_path_hash_mode, first_seen
|
||||
) VALUES (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?)
|
||||
""",
|
||||
(
|
||||
"cc" * 32,
|
||||
"Multi",
|
||||
"aa00bb00",
|
||||
2,
|
||||
1,
|
||||
1000,
|
||||
"dd" * 32,
|
||||
"Flood",
|
||||
"",
|
||||
-1,
|
||||
0,
|
||||
1001,
|
||||
),
|
||||
)
|
||||
await conn.commit()
|
||||
|
||||
applied = await run_migrations(conn)
|
||||
|
||||
assert applied == 1
|
||||
assert await get_version(conn) == 39
|
||||
|
||||
cursor = await conn.execute(
|
||||
"""
|
||||
SELECT public_key, out_path_hash_mode
|
||||
FROM contacts
|
||||
WHERE public_key IN (?, ?)
|
||||
ORDER BY public_key
|
||||
""",
|
||||
("cc" * 32, "dd" * 32),
|
||||
)
|
||||
rows = await cursor.fetchall()
|
||||
assert rows[0]["public_key"] == "cc" * 32
|
||||
assert rows[0]["out_path_hash_mode"] == 1
|
||||
assert rows[1]["public_key"] == "dd" * 32
|
||||
assert rows[1]["out_path_hash_mode"] == -1
|
||||
finally:
|
||||
await conn.close()
|
||||
|
||||
Reference in New Issue
Block a user