Release 0.1.37 deployment prep
This commit is contained in:
Executable
+104
@@ -0,0 +1,104 @@
|
||||
#!/bin/bash
|
||||
set -uo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
|
||||
PYTHONPATH="$ROOT/lib" python3 - <<'PY'
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
from classroom_config import dock_items, ensure_device_config, read_device_config
|
||||
|
||||
passed = failed = 0
|
||||
|
||||
|
||||
def check(label, condition, detail=""):
|
||||
global passed, failed
|
||||
if condition:
|
||||
print(f" ok {label}")
|
||||
passed += 1
|
||||
else:
|
||||
print(f" FAIL {label}")
|
||||
if detail:
|
||||
print(f" {detail}")
|
||||
failed += 1
|
||||
|
||||
|
||||
print("1. dock capabilities")
|
||||
cases = [
|
||||
({}, ("browser",)),
|
||||
({"DVD_ENABLED": "true"}, ("browser", "dvd")),
|
||||
({"LIVE_ENABLED": "true"}, ("browser", "live")),
|
||||
(
|
||||
{"DVD_ENABLED": "true", "LIVE_ENABLED": "true"},
|
||||
("browser", "dvd", "live"),
|
||||
),
|
||||
]
|
||||
|
||||
for config, expected in cases:
|
||||
actual = dock_items(config)
|
||||
check(f"{config or 'both disabled'} -> {expected}", actual == expected, actual)
|
||||
|
||||
check(
|
||||
"false spellings do not leave placeholder items",
|
||||
dock_items({"DVD_ENABLED": "false", "LIVE_ENABLED": "off"}) == ("browser",),
|
||||
)
|
||||
check(
|
||||
"existing dock order is browser, DVD, LIVE",
|
||||
dock_items({"DVD_ENABLED": "yes", "LIVE_ENABLED": "1"})
|
||||
== ("browser", "dvd", "live"),
|
||||
)
|
||||
|
||||
print()
|
||||
print("2. fresh device configuration")
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
path = Path(directory) / "etc" / "device.conf"
|
||||
ensure_device_config(path)
|
||||
config = read_device_config(path)
|
||||
check("fresh config is created", path.is_file())
|
||||
check("DVD defaults off", config.get("DVD_ENABLED") == "false")
|
||||
check("LIVE defaults off", config.get("LIVE_ENABLED") == "false")
|
||||
check("MQTT defaults off", config.get("MQTT_ENABLED") == "false")
|
||||
check("stable remains the fresh-install default", config.get("CHANNEL") == "stable")
|
||||
|
||||
print()
|
||||
print("3. upgrade from 0.1.36")
|
||||
old = """# endpoint configuration from 0.1.36
|
||||
UPDATE_URL=https://updates.example.test
|
||||
CHANNEL=canary
|
||||
DVD_ENABLED=true
|
||||
UI_SCALE=1.25
|
||||
MQTT_ENABLED=true
|
||||
MQTT_HOST=broker.example.test
|
||||
MQTT_PORT=1884
|
||||
MQTT_USERNAME=room
|
||||
MQTT_PASSWORD=secret
|
||||
CUSTOM_SETTING=keep-me
|
||||
"""
|
||||
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
path = Path(directory) / "device.conf"
|
||||
path.write_text(old)
|
||||
|
||||
ensure_device_config(path)
|
||||
first = path.read_text()
|
||||
config = read_device_config(path)
|
||||
|
||||
check("old bytes remain at the start", first.startswith(old))
|
||||
check("channel survives", config.get("CHANNEL") == "canary")
|
||||
check("DVD choice survives", config.get("DVD_ENABLED") == "true")
|
||||
check("UI scale survives", config.get("UI_SCALE") == "1.25")
|
||||
check("MQTT host survives", config.get("MQTT_HOST") == "broker.example.test")
|
||||
check("MQTT password survives", config.get("MQTT_PASSWORD") == "secret")
|
||||
check("unknown settings survive", config.get("CUSTOM_SETTING") == "keep-me")
|
||||
check("LIVE is appended once", first.count("LIVE_ENABLED=") == 1)
|
||||
|
||||
ensure_device_config(path)
|
||||
second = path.read_text()
|
||||
check("reinstall makes no further change", second == first)
|
||||
check("LIVE still occurs once", second.count("LIVE_ENABLED=") == 1)
|
||||
|
||||
print()
|
||||
print(f"passed: {passed} failed: {failed}")
|
||||
raise SystemExit(1 if failed else 0)
|
||||
PY
|
||||
Reference in New Issue
Block a user