Files
KubeControl/tests/test_massivPodHandling.cpp
2024-03-14 09:46:37 +01:00

151 lines
4.1 KiB
C++

#include "kubecontrol/KubePod.hpp"
#include "nlohmann/json_fwd.hpp"
#include <math.h>
#include <string>
#include <thread>
#include <vector>
#include <future>
#define CATCH_CONFIG_MAIN
#include <catch2/catch.hpp>
#include <kubecontrol/PodController.hpp>
#include <crossguid/guid.hpp>
const int podGrid = 2;
void startShip(kubecontrol::PodController* podc,std::string uuid,std::string Name, std::string lat, std::string lon)
{
std::string owner = "controller";
std::string type = "ship";
std::string image = "ship:latest";
kubecontrol::KubePod ShipPod1(owner,uuid,type,image,"simulator");
nlohmann::json vars;
vars["ENTITY_ID"] = uuid;
vars["ENTITY_NAME"] = Name;
vars["ENTITY_SIDE"] = "Neutral";
vars["POSITION"]["LAT"] = lat;
vars["POSITION"]["LON"] = lon;
vars["POSITION"]["Height"] = "0";
vars["COURSE"] = "0";
vars["SPEED"] = "0";
vars["GROUNDTRUTH_PORT"] = std::to_string(10000);
vars["GROUNDTRUTH_ADDR"] = "239.0.0.1";
vars["COMMAND_PORT"] = "5555";
vars["ENTITY_RCS"] = std::to_string(850);
vars["ENTITY_SENSORS"].push_back("radar:latest");
ShipPod1.setEnvironmentVar("CONFIG", vars.dump());
podc->startPod(ShipPod1);
}
void createScenario(kubecontrol::PodController* podc,std::vector<std::string> *uuidList)
{
// GeographicLib::Geodesic geod(GeographicLib::Constants::WGS84_a(), GeographicLib::Constants::WGS84_f());
double lat = 54, lon = 1;
int counter = 0;
double distance = 10000;
int rasterSize = podGrid;
for (int i = 0; i < rasterSize; i++ )
{
double lonTmp = lon;
for (int a = 0; a < rasterSize; a++)
{
std::string name = "test";
name += std::to_string(counter);
double lat2 = 0;
double lon2 = 0;
// geod.Direct(lat, lonTmp, 90, distance, lat2, lon2);
lat2= lat+10;
// SimCore::Identifier id;
// ids->push_back(id.getUUID());
std::string uuid = xg::newGuid().str();
uuidList->push_back(uuid);
// startShip( podc,uuid,name, std::to_string(lat2), std::to_string(lon2));
auto retrurn = std::async(std::launch::async, &startShip,podc,uuid,name, std::to_string(lat2), std::to_string(lon2));
// SimCore::Position pos;
// pos.setGeodesicPos(lat2, lon2, 0);
// auto track = std::make_shared<SimCore::SimTrack>(id,name,SimCore::Kind::EntityKind::SURFACE,SimCore::Side::NEUTRAL);
// track->setPosition(pos);
// list->addTrack(track);
// SimControl::startNewShip(name, std::to_string(lat2), std::to_string(lon2), "0", "0", "0");
lonTmp = lon2;
counter ++;
}
double lat2, lon2;
// geod.Direct(lat, lon, 0, distance, lat2, lon2);
lat = lat + 10;
}
}
SCENARIO("Testing massiv pod handling")
{
// kubecontrol::PodController podc("docs/config");
auto podc = new kubecontrol::PodController("docs/config");
std::vector<std::string> uuidList;
createScenario(podc, &uuidList);
LOG_S(INFO)<<"Amount Parent Pods: " << uuidList.size();
std::this_thread::sleep_for(std::chrono::milliseconds(4000));
// podc.stopPod(std::string Label)
// for (auto i: uuidList)
// {
// auto retrurn = std::async(std::launch::async, &kubecontrol::PodController::stopPod,podc,i);
// }
// std::this_thread::sleep_for(std::chrono::milliseconds(20000));
// Create a random number generator
std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(0, uuidList.size()-1);
// Generate a random index
int random_index = distribution(generator);
GIVEN("different Attributes for a Track in different forms")
{
WHEN("constructing Track Object with data")
{
THEN("check if Track attributes are correct")
{
auto info = podc->getInfoForPod(uuidList[random_index]);
REQUIRE(info.Component == "ship");
REQUIRE(info.UUID == uuidList[random_index]);
REQUIRE(info.IP != "");
REQUIRE(info.Owner == "controller");
REQUIRE(podc->getInfoForAllPods().size() == podGrid*podGrid);
// REQUIRE(info1 != "");
podc->stopAllPods();
} //THEN
} // WHEN
} // GIVEN
} //SCENARIO