@@ -630,6 +630,8 @@ set(SOURCES_CORE
630630 src/cpp/server/system_info.cpp
631631 src/cpp/server/recipe_options.cpp
632632 src/cpp/server/routing_policy.cpp
633+ src/cpp/server/routing_policy_parser.cpp
634+ src/cpp/server/routing_policy_store.cpp
633635 src/cpp/server/runtime_config.cpp
634636 src/cpp/server/telemetry.cpp
635637 src/cpp/server/logging_config.cpp
@@ -2025,6 +2027,78 @@ if(EXISTS "${_ROUTING_ENGINE_TEST_SRC}")
20252027 add_test (NAME RoutingPolicyEngineTest COMMAND test_routing_policy_engine )
20262028endif ()
20272029
2030+ # Routing policy parser (issue #2383): collection.router JSON -> RoutePolicy,
2031+ # schema/parser key parity, component resolution, and validation errors.
2032+ set (_ROUTING_PARSER_TEST_SRC
2033+ "${CMAKE_CURRENT_SOURCE_DIR } /test/cpp/test_routing_policy_parser.cpp"
2034+ )
2035+ if (EXISTS "${_ROUTING_PARSER_TEST_SRC} " )
2036+ add_executable (test_routing_policy_parser
2037+ test /cpp/test_routing_policy_parser.cpp
2038+ src/cpp/server/routing_policy.cpp
2039+ src/cpp/server/routing_policy_parser.cpp
2040+ )
2041+ target_include_directories (test_routing_policy_parser PRIVATE
2042+ ${CMAKE_CURRENT_SOURCE_DIR } /src/cpp/include
2043+ ${CMAKE_CURRENT_SOURCE_DIR } /test/cpp
2044+ ${CMAKE_CURRENT_BINARY_DIR } /include
2045+ )
2046+ target_link_libraries (test_routing_policy_parser PRIVATE nlohmann_json::nlohmann_json )
2047+ target_compile_definitions (test_routing_policy_parser PRIVATE
2048+ ROUTING_FIXTURE_DIR= "${CMAKE_CURRENT_SOURCE_DIR } /test/cpp/fixtures/routing"
2049+ ROUTING_SCHEMA_FILE= "${CMAKE_CURRENT_SOURCE_DIR } /src/cpp/resources/schemas/route_policy.schema.json"
2050+ )
2051+
2052+ include (CTest )
2053+ add_test (NAME RoutingPolicyParserTest COMMAND test_routing_policy_parser )
2054+ endif ()
2055+
2056+ # Routing policy store (issue #2383): directory-backed policy loading and
2057+ # DirectoryWatcher-triggered shared_ptr snapshot swaps.
2058+ set (_ROUTING_STORE_TEST_SRC
2059+ "${CMAKE_CURRENT_SOURCE_DIR } /test/cpp/test_routing_policy_store.cpp"
2060+ )
2061+ if (EXISTS "${_ROUTING_STORE_TEST_SRC} " )
2062+ add_executable (test_routing_policy_store
2063+ test /cpp/test_routing_policy_store.cpp
2064+ src/cpp/server/routing_policy.cpp
2065+ src/cpp/server/routing_policy_parser.cpp
2066+ src/cpp/server/routing_policy_store.cpp
2067+ src/cpp/server/directory_watcher.cpp
2068+ )
2069+ target_include_directories (test_routing_policy_store PRIVATE
2070+ ${CMAKE_CURRENT_SOURCE_DIR } /src/cpp/include
2071+ ${CMAKE_CURRENT_SOURCE_DIR } /test/cpp
2072+ ${CMAKE_CURRENT_BINARY_DIR } /include
2073+ )
2074+ target_link_libraries (test_routing_policy_store PRIVATE nlohmann_json::nlohmann_json )
2075+ find_package (Threads REQUIRED )
2076+ target_link_libraries (test_routing_policy_store PRIVATE Threads::Threads )
2077+ target_compile_definitions (test_routing_policy_store PRIVATE
2078+ ROUTING_FIXTURE_DIR= "${CMAKE_CURRENT_SOURCE_DIR } /test/cpp/fixtures/routing"
2079+ )
2080+
2081+ include (CTest )
2082+ add_test (NAME RoutingPolicyStoreTest COMMAND test_routing_policy_store )
2083+ endif ()
2084+
2085+ # ModelManager collection validation for collection.router registration:
2086+ # /pull-style validation rejects malformed routing and preserves the routing
2087+ # block in ModelInfo::extras after user-model registration.
2088+ set (_MODEL_MANAGER_COLLECTION_VALIDATION_TEST_SRC
2089+ "${CMAKE_CURRENT_SOURCE_DIR } /test/cpp/test_model_manager_collection_validation.cpp"
2090+ )
2091+ if (EXISTS "${_MODEL_MANAGER_COLLECTION_VALIDATION_TEST_SRC} " )
2092+ add_executable (test_model_manager_collection_validation
2093+ test /cpp/test_model_manager_collection_validation.cpp
2094+ )
2095+ target_link_libraries (test_model_manager_collection_validation PRIVATE lemonade-server-core )
2096+ add_dependencies (test_model_manager_collection_validation copy_resources )
2097+
2098+ include (CTest )
2099+ add_test (NAME ModelManagerCollectionValidationTest COMMAND test_model_manager_collection_validation )
2100+ endif ()
2101+
20282102# Auto-tune: GGUF array storage, scalar derivation, weighted KV cache computation.
20292103# Covers head_count_kv_per_layer, sliding_window_pattern, SWA precise weighted sum,
20302104# full_attention_interval exact count, and scalar fallback paths.
0 commit comments