提高项目健壮性

This commit is contained in:
sladro 2026-03-04 16:20:53 +08:00
parent 0ff88b0ba2
commit ef1f4adc83
2 changed files with 32 additions and 1 deletions

View File

@ -8,6 +8,7 @@
#include <boost/asio/strand.hpp>
#include <nlohmann/json.hpp>
#include <chrono>
#include <cmath>
#include <unordered_map>
namespace network {
@ -191,6 +192,10 @@ private:
}
double value = body.at("value").get<double>();
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()}}));

View File

@ -1,6 +1,8 @@
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <memory>
#include <unordered_set>
#include <vector>
#include "detector/CollisionDetector.h"
#include "vehicle/ControllableVehicles.h"
@ -9,10 +11,27 @@
#include "config/AirportBounds.h"
namespace {
std::unordered_set<std::string> 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<VehicleRegistryEntry> 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<CollisionDetector>(*airportBounds_, *mockControllableVehicles_);
}
void TearDown() override {
CleanupRegisteredVehicles();
}
std::unique_ptr<MockAirportBounds> airportBounds_;
std::unique_ptr<MockControllableVehicles> mockControllableVehicles_;
std::unique_ptr<CollisionDetector> detector_;