提高项目健壮性
This commit is contained in:
parent
0ff88b0ba2
commit
ef1f4adc83
@ -8,6 +8,7 @@
|
|||||||
#include <boost/asio/strand.hpp>
|
#include <boost/asio/strand.hpp>
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
#include <cmath>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
namespace network {
|
namespace network {
|
||||||
@ -191,6 +192,10 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
double value = body.at("value").get<double>();
|
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;
|
double oldValue = 0.0;
|
||||||
bool updated = false;
|
bool updated = false;
|
||||||
const char* field = nullptr;
|
const char* field = nullptr;
|
||||||
@ -212,7 +217,7 @@ private:
|
|||||||
json{{"status", "error"}, {"message", "Failed to update config"}}));
|
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,
|
return send_response(json_response(req_, http::status::ok,
|
||||||
json{{"status", "success"},
|
json{{"status", "success"},
|
||||||
@ -223,6 +228,9 @@ private:
|
|||||||
} catch (const json::parse_error& e) {
|
} catch (const json::parse_error& e) {
|
||||||
return send_response(json_response(req_, http::status::bad_request,
|
return send_response(json_response(req_, http::status::bad_request,
|
||||||
json{{"status", "error"}, {"message", "Invalid JSON"}, {"detail", e.what()}}));
|
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) {
|
} catch (const std::exception& e) {
|
||||||
return send_response(json_response(req_, http::status::internal_server_error,
|
return send_response(json_response(req_, http::status::internal_server_error,
|
||||||
json{{"status", "error"}, {"message", "Internal error"}, {"detail", e.what()}}));
|
json{{"status", "error"}, {"message", "Internal error"}, {"detail", e.what()}}));
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <gmock/gmock.h>
|
#include <gmock/gmock.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <unordered_set>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include "detector/CollisionDetector.h"
|
#include "detector/CollisionDetector.h"
|
||||||
#include "vehicle/ControllableVehicles.h"
|
#include "vehicle/ControllableVehicles.h"
|
||||||
@ -9,10 +11,27 @@
|
|||||||
#include "config/AirportBounds.h"
|
#include "config/AirportBounds.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
std::unordered_set<std::string> g_registered_test_vehicle_ids;
|
||||||
|
|
||||||
void RegisterManagedVehicle(const std::string& vehicleId) {
|
void RegisterManagedVehicle(const std::string& vehicleId) {
|
||||||
ControllableVehicles::getInstance().updateRegistry({
|
ControllableVehicles::getInstance().updateRegistry({
|
||||||
VehicleRegistryEntry{vehicleId, "WUREN"}
|
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_);
|
detector_ = std::make_unique<CollisionDetector>(*airportBounds_, *mockControllableVehicles_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TearDown() override {
|
||||||
|
CleanupRegisteredVehicles();
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<MockAirportBounds> airportBounds_;
|
std::unique_ptr<MockAirportBounds> airportBounds_;
|
||||||
std::unique_ptr<MockControllableVehicles> mockControllableVehicles_;
|
std::unique_ptr<MockControllableVehicles> mockControllableVehicles_;
|
||||||
std::unique_ptr<CollisionDetector> detector_;
|
std::unique_ptr<CollisionDetector> detector_;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user