From ef1f4adc83417c27d74ff8707f3be1139d618b90 Mon Sep 17 00:00:00 2001 From: sladro Date: Wed, 4 Mar 2026 16:20:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E9=AB=98=E9=A1=B9=E7=9B=AE=E5=81=A5?= =?UTF-8?q?=E5=A3=AE=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/network/ConfigHttpServer.cpp | 10 +++++++++- tests/BasicCollisionTest.cpp | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/network/ConfigHttpServer.cpp b/src/network/ConfigHttpServer.cpp index 8e1de29..b6ba65f 100644 --- a/src/network/ConfigHttpServer.cpp +++ b/src/network/ConfigHttpServer.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include namespace network { @@ -191,6 +192,10 @@ private: } double value = body.at("value").get(); + if (!(value > 0.0) || !std::isfinite(value)) { + return send_response(json_response(req_, http::status::bad_request, + json{{"status", "error"}, {"message", "Invalid value: must be a finite number greater than 0"}})); + } double oldValue = 0.0; bool updated = false; const char* field = nullptr; @@ -212,7 +217,7 @@ private: json{{"status", "error"}, {"message", "Failed to update config"}})); } - Logger::info("Updated runway ", field, ": ", oldValue, " -> ", value); + Logger::info("Updated ", area, " ", field, ": ", oldValue, " -> ", value); return send_response(json_response(req_, http::status::ok, json{{"status", "success"}, @@ -223,6 +228,9 @@ private: } catch (const json::parse_error& e) { return send_response(json_response(req_, http::status::bad_request, json{{"status", "error"}, {"message", "Invalid JSON"}, {"detail", e.what()}})); + } catch (const json::type_error& e) { + return send_response(json_response(req_, http::status::bad_request, + json{{"status", "error"}, {"message", "Invalid field type"}, {"detail", e.what()}})); } catch (const std::exception& e) { return send_response(json_response(req_, http::status::internal_server_error, json{{"status", "error"}, {"message", "Internal error"}, {"detail", e.what()}})); diff --git a/tests/BasicCollisionTest.cpp b/tests/BasicCollisionTest.cpp index f521ca9..0b2c3cb 100644 --- a/tests/BasicCollisionTest.cpp +++ b/tests/BasicCollisionTest.cpp @@ -1,6 +1,8 @@ #include #include #include +#include +#include #include "detector/CollisionDetector.h" #include "vehicle/ControllableVehicles.h" @@ -9,10 +11,27 @@ #include "config/AirportBounds.h" namespace { +std::unordered_set g_registered_test_vehicle_ids; + void RegisterManagedVehicle(const std::string& vehicleId) { ControllableVehicles::getInstance().updateRegistry({ VehicleRegistryEntry{vehicleId, "WUREN"} }); + g_registered_test_vehicle_ids.insert(vehicleId); +} + +void CleanupRegisteredVehicles() { + if (g_registered_test_vehicle_ids.empty()) { + return; + } + + std::vector cleanupEntries; + cleanupEntries.reserve(g_registered_test_vehicle_ids.size()); + for (const auto& vehicleId : g_registered_test_vehicle_ids) { + cleanupEntries.push_back(VehicleRegistryEntry{vehicleId, "PUTONG"}); + } + ControllableVehicles::getInstance().updateRegistry(cleanupEntries); + g_registered_test_vehicle_ids.clear(); } } @@ -82,6 +101,10 @@ protected: detector_ = std::make_unique(*airportBounds_, *mockControllableVehicles_); } + void TearDown() override { + CleanupRegisteredVehicles(); + } + std::unique_ptr airportBounds_; std::unique_ptr mockControllableVehicles_; std::unique_ptr detector_;