// Copyright (c) 2025 YAMS Contributors // SPDX-License-Identifier: GPL-3.0-or-later // Validates degraded->ready recovery via ServiceManager's FSM helper. #include #include #include #include using namespace yams::daemon; TEST_CASE("EmbeddingProviderRecovery: degraded then recovered to ready", "[daemon]") { #ifdef _WIN32 SKIP("EmbeddingProvider FSM tests skipped on Windows - see daemon IPC plan"); #endif DaemonConfig cfg; // defaults are fine; no plugins needed StateComponent state{}; DaemonLifecycleFsm lifecycleFsm; ServiceManager sm(cfg, state, lifecycleFsm); // Simulate degraded provider sm.testing_setModelProviderDegraded(true, "unit-test degraded"); auto s1 = sm.getEmbeddingProviderFsmSnapshot(); CHECK(s1.state == EmbeddingProviderState::Degraded); CHECK(s1.lastError.find("degraded") != std::string::npos); // Simulate recovery (helper dispatches ModelLoadedEvent with dimension 0) sm.testing_setModelProviderDegraded(false, ""); auto s2 = sm.getEmbeddingProviderFsmSnapshot(); CHECK(s2.state == EmbeddingProviderState::ModelReady); CHECK(s2.embeddingDimension == 0u); }