#include #include #include // Test non-blocking configuration portal void test_nonblocking_mode_setup() { Serial.println("[TEST] Testing non-blocking mode setup..."); WiFiManager wm; // Enable non-blocking mode wm.setConfigPortalBlocking(false); wm.setConfigPortalTimeout(10); // Start portal wm.startConfigPortal("TestAP"); // Verify portal is active TEST_ASSERT_TRUE(wm.getConfigPortalActive()); // Process should not block unsigned long start = millis(); wm.process(); unsigned long elapsed = millis() - start; // Should return quickly (< 200ms) TEST_ASSERT_LESS_THAN(200, elapsed); wm.stopConfigPortal(); Serial.println("[TEST] Non-blocking mode setup test completed successfully"); } void test_nonblocking_process() { Serial.println("[TEST] Testing non-blocking process() calls..."); WiFiManager wm; wm.setConfigPortalBlocking(false); wm.setConfigPortalTimeout(10); wm.startConfigPortal("TestAP"); // Call process multiple times - should not block for (int i = 0; i < 10; i++) { unsigned long start = millis(); wm.process(); unsigned long elapsed = millis() - start; // Each call should be fast TEST_ASSERT_LESS_THAN(100, elapsed); delay(10); } // Portal should still be active TEST_ASSERT_TRUE(wm.getConfigPortalActive()); wm.stopConfigPortal(); Serial.println("[TEST] Non-blocking process() test completed successfully"); } void test_ap_client_check() { Serial.println("[TEST] Testing setAPClientCheck()..."); WiFiManager wm; // Test enabling client check wm.setAPClientCheck(true); // Test disabling client check wm.setAPClientCheck(false); // Use non-blocking mode wm.setConfigPortalBlocking(false); wm.setConfigPortalTimeout(10); // Start portal // Note: In non-blocking mode, startConfigPortal() returns false even when successful wm.startConfigPortal("TestAP"); delay(100); // Should not crash and portal should be active TEST_ASSERT_TRUE(wm.getConfigPortalActive()); wm.stopConfigPortal(); Serial.println("[TEST] setAPClientCheck() test completed successfully"); } void test_web_portal_client_check() { Serial.println("[TEST] Testing setWebPortalClientCheck()..."); WiFiManager wm; // Test enabling client check wm.setWebPortalClientCheck(true); // Test disabling client check wm.setWebPortalClientCheck(false); // Start web portal wm.setConfigPortalTimeout(5); wm.startWebPortal(); // Should not crash TEST_ASSERT_TRUE(wm.getWebPortalActive()); wm.stopWebPortal(); Serial.println("[TEST] setWebPortalClientCheck() test completed successfully"); } void test_nonblocking_timeout_behavior() { Serial.println("[TEST] Testing non-blocking timeout behavior..."); WiFiManager wm; wm.setConfigPortalBlocking(false); wm.setConfigPortalTimeout(2); // 2 second timeout wm.startConfigPortal("TestAP"); unsigned long start = millis(); bool stillActive = true; // Process until timeout or max wait while (stillActive && (millis() - start < 5000)) { wm.process(); // Check if portal is still active (may become inactive after timeout) if (!wm.getConfigPortalActive()) { stillActive = false; break; // Exit loop if portal has closed } delay(50); } // After timeout, portal should be inactive (may have auto-closed) // Just verify we can check the state without crashing bool portalState = wm.getConfigPortalActive(); // Only call stopConfigPortal if portal is still active // If it auto-closed on timeout, calling stopConfigPortal may crash if (portalState) { wm.stopConfigPortal(); } // Test completed without crash TEST_ASSERT_TRUE_MESSAGE(true, "Non-blocking timeout test completed without crash"); Serial.println("[TEST] Non-blocking timeout behavior test completed successfully"); }