igneum/packaging/ota/TEST.md

5.2 KiB

Testing the over-the-air update on Windows (PC 2, machine id 1ccfe586)

The Windows apply path could not be run from the Mac. It was reviewed against packaging/windows/Igneum-Miner.iss, stop-igneum.ps1 and app/windows/host.cpp; these steps run it for real. Allow 20 minutes.

What is untested on Windows

  • ota-apply.ps1 end to end: the wait for the engine, Start-Process -Verb RunAs of the installer, the UAC prompt, the exit code, the relaunch through the [Run] entry on /IGNOTA=1.
  • CloseApplications=yes with the window host: the host hides on WM_CLOSE instead of quitting, so the Restart Manager cannot close it; PrepareToInstall (stop-igneum.ps1, Stop-Process -Force on "Igneum Miner") is what ends it. Watch for an installer dialog about files in use.
  • The rollback: the previous installer is kept in updates/ only from the second OTA on; a first update has none.
  • powershell 5.1 parsing of the helper (tools/ci/windows/check-ps51.ps1 cannot see it: it is a string in src/ota.rs). The helper avoids "$x: y" and uses nothing newer than 5.1.

Before

PC 2 runs Igneum Miner 0.3.0, which has no updater at all. Step 0 is therefore a hand install of the first OTA-capable build; from then on every update is automatic.

  1. On the Mac: push master, wait for the green windows-ci run, then packaging/windows/fetch-ci-artifacts.sh --deploy (writes the Windows entry into the manifest and deploys). Note the version in the installer name (0.3.1 or later). On PC 2: download that installer from https://dl.igneum.network/dl/<token>/Igneum-Miner-Setup-<v>.exe, run it over the running 0.3.0 (it stops the old app itself), let it start the app.

The test

  1. Settings (gear) shows "Igneum Miner ", "Check now", "Install now" (hidden until a download exists), the "Install updates by itself at a safe moment" switch ON, and a note. Click Check now: within 10 s the note says "This is the latest version (checked ...)" and the log drawer (Logs) has update check: <v> is current. If it says no manifest at the update URL yet the deploy did not land; if manifest signature does not verify the installer was built from a tree with a different OTA_PUBLIC_KEY_HEX than the key that signed.
  2. On the Mac, publish a test version: bump version in app/igneum-app/Cargo.toml, app/windows/version.h and app/igneum-app/resources/igneum-app.rc (patch level only), push, wait for CI, fetch-ci-artifacts.sh --deploy with OTA_NOTES="OTA test". (The Mac entry is carried over only when it has the same version; without a Mac build the manifest carries the Windows entry alone, which is fine.)
  3. On PC 2: Settings > Check now. Expected within a minute: the banner "Igneum Miner <v+1> is available. Downloading it." then "Downloading ... 43%" then "Igneum Miner <v+1> is ready. Installs at the next safe moment." with Install now and Later. Events: is available: downloading (44 MB), is ready; it installs at the next safe moment. %LOCALAPPDATA%\igneum\app\updates\ holds Igneum-Miner-Setup-<v+1>.exe (and manifest.json).
  4. Wait. The node is synced and a worker is mining, so the only wait is an hourly boundary within 3 minutes (the "next program" tile). Expected: the banner changes to "Installing Igneum Miner <v+1>: the miners stop, then the node, then the app opens again", the footer says stopping, then ONE UAC prompt "Igneum-Miner-Setup-<v+1>.exe". Click Yes. The window closes (stop-igneum.ps1 ends it), about 20 s later the app opens again on its own. Check: Settings shows the new version and "Updated from ."; the event feed starts with updated to Igneum Miner <v+1> from <v>; the node and the miner are back (same chain data, same address). Files: %LOCALAPPDATA%\igneum\app\ota-apply.log (the helper), ota-setup.log (Inno), no update-pending.json after 90 s.
  5. The declined prompt: repeat 2 and 3 with another patch bump, and click No on the UAC prompt. Expected: the app comes back by itself on the OLD version within 15 s with the banner "Update: Windows did not let the installer run: ..." and Install now; clicking it brings the prompt again, Yes installs.
  6. Install now: with automatic off (the switch), the banner waits "waiting for Install now"; Install now installs at once, ignoring the boundary wait.
  7. The red bar (consensus): publish with --activation-height <node daa + 1000> (the node tile shows the DAA score): the banner turns solid ember "Consensus upgrade at height ...: the node is N blocks away. Installing ... now." and the apply skips the safe-moment wait.

If something goes wrong

  • The app does not come back: Start Menu > Igneum Miner. ota-apply.log says which step failed. The old files are still in place when the installer did not run; when it ran and the new app fails, reinstall from the download page.
  • A UAC prompt every hour: the installer failed or was declined and the retry loop runs at the next check; Settings shows the error. Switch automatic off to stop it, or install by hand.
  • "update-pending.json" stays and the app keeps restarting: the new version dies early; on the third start the helper reinstalls the previous installer when one is in updates/, else reinstall by hand.