/****************************************************************************** __ ____ __ / / ___ ____ _/ __/_____________ _/ /__ / / / _ \/ __ `/ /_/ ___/ ___/ __ `/ / _ \ / /___/ __/ /_/ / __(__ ) /__/ /_/ / / __/ /_____/\___/\__,_/_/ /____/\___/\__,_/_/\___/ (C)opyright 2026, Leafscale, LLC - https://www.leafscale.com Project: repoman Filename: tests/test_config_migrate.reef Authors: Chris Tusa License: Description: Tests: schema 1 -> 2 -> 3 migration ******************************************************************************/ import config import test.framework import core.result_generic as rg proc main() let runner = new framework.TestRunner() // v1 (no llm block, no host block) → v3 with empty lan_ip let v1: string = "[repoman]\nschema = 1\noutput = \"quiet\"\n\n[defaults]\nrepos_root = \"~/repos\"\nbackup_root = \"/nfs/repos\"\nlogdir = \"~/.local/state/repoman\"\nincus_project = \"repoman\"\ndefault_image = \"images:ubuntu/26.04/cloud\"\nprofiles = [\"default\", \"claude-share\"]\n" let r1 = config.parse_registry(v1) runner.assert_eq_bool(rg.is_ok(r1), true, "v1 parses ok") if rg.is_ok(r1) let reg = rg.unwrap_ok(r1) runner.assert_eq_int(reg.schema, 3, "v1 schema migrates to 3") runner.assert_eq_string(reg.host.lan_ip, "", "v1 has no lan_ip") end if // v2 with [defaults.llm.ollama_url] → v3 with extracted lan_ip let v2: string = "[repoman]\nschema = 2\noutput = \"quiet\"\n\n[defaults]\nrepos_root = \"~/repos\"\nbackup_root = \"/nfs/repos\"\nlogdir = \"~/.local/state/repoman\"\nincus_project = \"repoman\"\ndefault_image = \"images:ubuntu/26.04/cloud\"\nprofiles = [\"default\"]\n\n[defaults.llm]\nenabled = true\nhermes_default = false\nollama_url = \"http://192.168.168.124:11434\"\nhermes_seed = []\n" let r2 = config.parse_registry(v2) runner.assert_eq_bool(rg.is_ok(r2), true, "v2 parses ok") if rg.is_ok(r2) let reg = rg.unwrap_ok(r2) runner.assert_eq_int(reg.schema, 3, "v2 schema migrates to 3") runner.assert_eq_string(reg.host.lan_ip, "192.168.168.124", "v2 lan_ip extracted from ollama_url") end if // v2 without [defaults.llm.ollama_url] (LLM was disabled) → v3 with empty lan_ip let v2_no_llm: string = "[repoman]\nschema = 2\noutput = \"quiet\"\n\n[defaults]\nrepos_root = \"~/repos\"\nbackup_root = \"/nfs/repos\"\nlogdir = \"~/.local/state/repoman\"\nincus_project = \"repoman\"\ndefault_image = \"images:ubuntu/26.04/cloud\"\nprofiles = [\"default\"]\n" let r3 = config.parse_registry(v2_no_llm) runner.assert_eq_bool(rg.is_ok(r3), true, "v2 without llm block parses ok") if rg.is_ok(r3) let reg = rg.unwrap_ok(r3) runner.assert_eq_string(reg.host.lan_ip, "", "v2 without ollama_url has empty lan_ip") end if // v3 native (with [host].lan_ip) round-trip let v3: string = "[repoman]\nschema = 3\noutput = \"quiet\"\n\n[host]\nlan_ip = \"10.0.0.5\"\n\n[defaults]\nrepos_root = \"~/repos\"\nbackup_root = \"/nfs/repos\"\nlogdir = \"~/.local/state/repoman\"\nincus_project = \"repoman\"\ndefault_image = \"images:ubuntu/26.04/cloud\"\nprofiles = [\"default\"]\n" let r4 = config.parse_registry(v3) runner.assert_eq_bool(rg.is_ok(r4), true, "v3 parses ok") if rg.is_ok(r4) let reg = rg.unwrap_ok(r4) runner.assert_eq_string(reg.host.lan_ip, "10.0.0.5", "v3 native lan_ip read directly") end if runner.report() end main