From 8da70b84d01065e56c965bcda8cf7f3e58004011 Mon Sep 17 00:00:00 2001 From: mikecarper Date: Thu, 22 Oct 2026 15:02:28 -0700 Subject: [PATCH] Repair CI fixtures for WebConfig and Indicator roles --- test/test_esp32_full_power_lifecycle.py | 6 ++++++ test/test_esp32_hwcdc_recipes.py | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/test/test_esp32_full_power_lifecycle.py b/test/test_esp32_full_power_lifecycle.py index 23f57eb24..fe468c861 100644 --- a/test/test_esp32_full_power_lifecycle.py +++ b/test/test_esp32_full_power_lifecycle.py @@ -243,6 +243,7 @@ struct MyMesh { void configureBridgeFilter(AbstractBridge*) {} void drainOutbound(unsigned) {} void otaAlert(const char*) {} void suspendUnconfiguredSetupBridges(); void serviceIdleWiFi(); bool startWebConfigImpl(bool force_ap, char* reply, bool automatic_setup); + @WIFI_OWNER_DECLARATION@ bool startWebConfig(bool force_ap, char* reply); bool stopWebConfig(char* reply); uint32_t getPowerSaveSleepMilliseconds(uint32_t) const; bool hasPendingWork() const; uint32_t getPowerSaveSleepSeconds(uint32_t) const; @@ -398,6 +399,10 @@ class ESP32FullPowerLifecycleTest(unittest.TestCase): "bool MyMesh::hasPendingWork() const", "mesh::powerdiag::Mask MyMesh::pendingWorkReason() const", "uint32_t MyMesh::getPowerSaveSleepMilliseconds(", "uint32_t MyMesh::getPowerSaveSleepSeconds(")) + wifi_owner_signature = "bool MyMesh::webConfigOwnsWiFi(" + wifi_owner = (extract_braced(source, wifi_owner_signature) + if wifi_owner_signature in source else "") + methods += "\n" + wifi_owner defaults_start = source.index(" // bridge defaults") defaults = source[defaults_start:source.index(" _prefs.bridge_delay", defaults_start)] startup = source[source.index(" bool start_webui = WebConfigServer::loadEnabled(false);"):] @@ -417,6 +422,7 @@ class ESP32FullPowerLifecycleTest(unittest.TestCase): stop_owned = extract_braced(web_source, "static void stopOwnedWiFiRadio()") return (FIXTURE.replace("@INLINE_METHODS@", inline.replace(" override", "")) .replace("@METHODS@", methods).replace("@DEFAULTS@", defaults) + .replace("@WIFI_OWNER_DECLARATION@", "bool webConfigOwnsWiFi() const;" if wifi_owner else "") .replace("@STARTUP@", startup).replace("@PORTAL_LOOP@", portal_loop) .replace("@MANIFEST@", manifest).replace("@OTA_CLI@", cli[begin:end]) .replace("@OTA_STATE@", state) diff --git a/test/test_esp32_hwcdc_recipes.py b/test/test_esp32_hwcdc_recipes.py index 43686f8bc..0a5c7e805 100644 --- a/test/test_esp32_hwcdc_recipes.py +++ b/test/test_esp32_hwcdc_recipes.py @@ -73,7 +73,8 @@ UNCHANGED_COUNTS = { ("esp32-c3-devkitm-1", "uart"): 19, ("esp32-c6-devkitm-1", "hwcdc"): 16, ("esp32-s3-devkitc-1", "hwcdc"): 22, - ("esp32-s3-devkitc-1", "uart"): 55, + # Original OPI and N16R2 Indicator LoRa repeaters retain their UART backend. + ("esp32-s3-devkitc-1", "uart"): 57, ("esp32-s3-zero", "hwcdc"): 25, ("esp32dev", "classic_uart"): 5, ("esp32doit-devkit-v1", "classic_uart"): 19, @@ -281,7 +282,7 @@ class Esp32HwcdcRecipeTests(unittest.TestCase): self.assertEqual(self.sdk["hwcdc_primary_enabled"](row["env"]), row["kind"] == "hwcdc") self.assertFalse(self.sdk["native_primary_enabled"](row["env"])) - expected = Counter({"hwcdc": 338, "uart": 120, "classic_uart": 61}) + expected = Counter({"hwcdc": 338, "uart": 122, "classic_uart": 61}) expected.update(kind for _, _, kind in USB_PARTITION_BRIDGES.values()) self.assertEqual(counts, expected)