Files
T
torsten d17d397fe7 LtsUtilsCore: Alle Include-Pfade korrigiert (LtsUtils/ → LtsUtilsCore/)
- CMakeLists.txt: Include-Pfade von ../ zu . geändert, json.h hinzugefügt
- ~95 Dateien: Include-Pfade systematisch korrigiert
  - LtsUtils/ → LtsUtilsCore/ für alle Core-Header
  - LtsUtilsGui/LtsUtils/LtsUtilsGui/ → LtsUtilsGui/LtsUtilsGuiDds/
- Logger-API: getLogger() mit const char* Parameter
- DataModification: enum class global (nicht im Lts-Namespace)
- Participant-Struct: Member mit m_-Präfix
- Export-Macro: SVCALMCOMMON_EXPORT statt ALMCOMMON_EXPORT
- Signal/Slot-Signaturen korrigiert für Qt6 template matching

Build validiert: LtsUtilsCore, LtsUtilsDds, LtsSessionData erfolgreich
2026-08-21 01:49:35 +02:00

1230 lines
39 KiB
C++
Executable File

/**
* @RDE_HEADER@
* ISM Function Topic test executable
* $Id$
* $HeadURL$
* $Author$
* Created by Iuliana Ojog, SLSE, 2016-11-28
*/
#include "ism_tests.h"
#include <utility>
#include <nglapplication/nglcoreapplication.h>
#include <LtsCommandLineParser/LtsCommandLineParser.h>
#include <QTimer>
#include <QDateTime>
#include <QTest>
#include <QSet>
#include <QVector>
#include <QJsonObject>
#include <QJsonDocument>
#include <LtsUtils/pgarray.h>
#include <LtsUtilsCore/dds_vector.h>
#include <InfrastructureManagement/ism_ftc.h>
#include <InfrastructureManagement/ism_dtc.h>
#include <InfrastructureManagement/ism_enums.hpp>
#include <InfrastructureManagement/settings.h>
/* ----------------------------------------------------------------------------------
* HOW TO RUN THE TESTS (for example)
* ----------------------------------------------------------------------------------
* 0. Preconditions:
* Start with an empty database (BUILD)
* make db
* Start services: (SV)
* ./bin/svcExerciseManagement -d 74 &
* ./bin/svcInfrastructureManagement -d 74 &
* Test steps: see ism_tests.csv
*/
// ------------------------------------------------------------------------------
using namespace InfrastructureManagement;
IsmTests::IsmTests(QObject *parent)
: QObject(parent)
, m_testId(0)
, m_assetId(0)
, m_mainStructureElementId(0)
, m_structureElementId(0)
, m_indexNo(0)
, m_bTestsSuccessful(true)
{
qRegisterMetaType<Core::FunctionReply>("Core::FunctionReply");
}
// ------------------------------------------------------------------------------
IsmTests::~IsmTests()
{
}
// ------------------------------------------------------------------------------
bool IsmTests::init(int domainId, int testId, int assetId, int mainStructureElementId, int structureElementId, int indexNo)
{
INFO_LOG(m_logger) << "init begin";
m_testId = testId;
m_assetId = assetId;
m_mainStructureElementId = mainStructureElementId;
m_structureElementId = structureElementId;
m_indexNo = indexNo;
// initialize DDS, always on exercise 0
m_ddsConnector.reset(new DDSConnector::DdsConnector(domainId, IDL::PartitionType::Global));
if (!m_ddsConnector->init())
return false;
m_ddsConnector->initPublisherSubscriber();
// initialize database
m_dbHandler = std::make_shared<DbHandler>();
if(!m_dbHandler->init(0, Settings::settings()))
{
ERROR_LOG(m_logger) << "Initialisation dbHandler failed.";
return false;
}
DEBUG_LOG(m_logger) << "Initialisation dbHandler succesful.";
m_db = m_dbHandler->db();
TRACE_LOG(m_logger) << "create dtc";
m_dtc = InfrastructureManagement::Interface::Dtc::create(m_ddsConnector);
TRACE_LOG(m_logger) << "init dtc";
bool bRet = m_dtc->enableAll();
TRACE_LOG(m_logger) << "init dtc end - bRet = " << bRet;
TRACE_LOG(m_logger) << "create ftc";
m_ftc = InfrastructureManagement::Interface::Ftc::create(m_ddsConnector);
TRACE_LOG(m_logger) << "init ftc";
bRet &= m_ftc->enableAll();
TRACE_LOG(m_logger) << "init ftc end - bRet = " << bRet;
DEBUG_LOG(m_logger) << "########### Domain Id = " << domainId;
DEBUG_LOG(m_logger) << "########### Test Id = " << testId;
DEBUG_LOG(m_logger) << "########### Asset Id = " << assetId;
DEBUG_LOG(m_logger) << "########### Main Structure Element Id = " << mainStructureElementId;
DEBUG_LOG(m_logger) << "########### Structure Element Id = " << structureElementId;
DEBUG_LOG(m_logger) << "########### Index No = " << indexNo;
return bRet;
}
// ------------------------------------------------------------------------------
void IsmTests::startTest()
{
INFO_LOG(m_logger) << "********* startTest **************";
// main structure elements
switch (m_testId)
{
// main structure elements
case 101:
tryCreateMainStructureElement();
break;
case 102:
tryModifyMainStructureElement();
break;
case 103:
tryRemoveMainStructureElement();
break;
case 104:
tryCreateBridge();
break;
case 105:
tryChangeBridgeStatus();
break;
// assets
case 131:
tryCreateAsset();
break;
case 132:
tryModifyAsset();
break;
case 133:
tryRemoveAsset();
break;
case 134:
tryUnmountAsset();
break;
// mounting point asset
case 141:
tryCreateMountingPointAsset();
break;
case 143:
tryRemoveMountingPointAsset();
break;
// mounting point schedule
case 151:
tryCreateMainSchedule();
break;
case 152:
tryModifyMainSchedule();
break;
case 153:
tryRemoveMainSchedule();
break;
case 154:
tryChangeStatusSchedule();
break;
case 155:
tryCopySchedule();
break;
case 156:
checkSchedule();
break;
// mouting point plan
case 161:
tryCreateMountingPointPlan();
break;
default:
failExit();
break;
}
INFO_LOG(m_logger) << "********* endTest **************";
QTimer::singleShot(0, qApp, &QCoreApplication::quit);
}
// ------------------------------------------------------------------------------
static void addElementToRequest(MainStructureElementModifyRequest &request,
const StructureElement &se,
int parentIdx)
{
const size_t size = request.elements().size();
request.elements().resize(size + 1, se);
request.childParentRelations().resize(size + 1, parentIdx);
}
// ************* MAIN STRUCTURE ELEMENT **********************************************
// ------------------------------------------------------------------------------
void IsmTests::tryCreateMainStructureElement()
{
INFO_LOG(m_logger) << "trying to send MainStructureElementCreateRequest";
MainStructureElementModifyRequest data;
// Building 56
data.name("Test Building");
QJsonObject jsonObj;
jsonObj[QStringLiteral("street")] = QStringLiteral("Brueggeweg");
jsonObj[QStringLiteral("number")] = QStringLiteral("56");
// '{"street":"Brueggeweg", "number":"56"}'
QJsonDocument doc(jsonObj);
data.description(doc.toJson().toStdString());
data.angle(30.5);
data.modelId(1001);
data.externalWlsId(1001);
data.geoPosition().lon(0.1552736550);
data.geoPosition().lat(0.9259746511);
data.geoPosition().z(0.00);
data.properties("{}");
data.structureElementTypeId(InfrastructureManagement::StructureElementType::Building);
StructureElement seData;
// element 1 & 2 -> see ParseBuildingXml::parseXmlInternal()
// building, idx = 0
seData.name("Test Building");
seData.displayName("Building 56");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::Building);
seData.relPosition().offsetX(0);
seData.relPosition().offsetY(0);
seData.relPosition().offsetZ(0);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::Unknown);
seData.properties("{\"description\":\"Info Test Building\"}");
addElementToRequest(data, seData, -1); // root element has no parent
// building mounting point, idx = 1
seData.name("Test Building - Mounting Point");
seData.displayName("Building 56 - MP");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::MountingPoint);
seData.barcode("4711");
seData.relPosition().offsetX(0);
seData.relPosition().offsetY(0);
seData.relPosition().offsetZ(0);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::BuildingControlUnit);
seData.properties("{\"description\":\"Info Test Mounting Point\"}");
addElementToRequest(data, seData, 0);
// Floor 1, idx = 1
seData.name("Floor 01");
seData.displayName("Floor 1");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::Floor); // type floor
seData.barcode("123xxxx");
seData.relPosition().offsetX(70000);
seData.relPosition().offsetY(90000);
seData.relPosition().offsetZ(10);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::Unknown);
seData.orientation(Core::Orientation(0, 0, 0));
seData.properties("{\"description\":\"Info-Building-56-Floor-01\"}");
addElementToRequest(data, seData, 0);
// Floor 2, idx = 2
seData.name("Floor 02");
seData.displayName("Floor 2");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::Floor); // type floor
seData.barcode("123xxxx");
seData.relPosition().offsetX(70000);
seData.relPosition().offsetY(90000);
seData.relPosition().offsetZ(10);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::Unknown);
seData.orientation(Core::Orientation(0, 0, 0));
seData.properties("{\"description\":\"Info-Building-56-Floor-02\"}");
addElementToRequest(data, seData, 0);
// Room 01-01, idx = 3
seData.name("Room 01");
seData.displayName("Room 01");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::Room); // type room
seData.barcode("123xxxx");
seData.relPosition().offsetX(70000);
seData.relPosition().offsetY(90000);
seData.relPosition().offsetZ(10);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::Unknown);
seData.orientation(Core::Orientation(0, 0, 0));
seData.properties("{\"description\":\"Info-Building-56-Floor-01-Room-01\"}");
addElementToRequest(data, seData, 1);
// Room 01-02, idx = 4
seData.name("Room 02");
seData.displayName("Room 02");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::Room); // type room
seData.barcode("123xxxx");
seData.relPosition().offsetX(70000);
seData.relPosition().offsetY(90000);
seData.relPosition().offsetZ(10);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::Unknown);
seData.orientation(Core::Orientation(0, 0, 0));
seData.properties("{\"description\":\"Info-Building-56-Floor-01-Room-02\"}");
addElementToRequest(data, seData, 1);
// Room 02-01, idx = 5
seData.name("Room 01");
seData.displayName("Room 01");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::Room); // type room
seData.barcode("123xxxx");
seData.relPosition().offsetX(70000);
seData.relPosition().offsetY(90000);
seData.relPosition().offsetZ(10);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::Unknown);
seData.orientation(Core::Orientation(0, 0, 0));
seData.properties("{\"description\":\"Info-Building-56-Floor-02-Room-01\"}");
addElementToRequest(data, seData, 2);
// Room 02-02, idx = 6
seData.name("Room 02");
seData.displayName("Room 02");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::Room); // type room
seData.barcode("123xxxx");
seData.relPosition().offsetX(70000);
seData.relPosition().offsetY(90000);
seData.relPosition().offsetZ(10);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::Unknown);
seData.orientation(Core::Orientation(0, 0, 0));
seData.properties("{\"description\":\"Info-Building-56-Floor-02-Room-02\"}");
addElementToRequest(data, seData, 2);
// Mounting Point 01-01-01
seData.name("Mounting Point 56-01-01-01");
seData.displayName("MP 1");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::MountingPoint); // type mounting point
seData.barcode("123xxxx");
seData.relPosition().offsetX(70000);
seData.relPosition().offsetY(90000);
seData.relPosition().offsetZ(10);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::IndoorCamera);
seData.orientation(Core::Orientation(0, 0, 0));
seData.properties("{\"description\":\"Info-Building-56-Floor-01-Room-01-MP-01\"}");
addElementToRequest(data, seData, 3);
// Mounting Point 01-01-02
seData.name("Mounting Point 56-01-01-02");
seData.displayName("MP 2");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::MountingPoint); // type mounting point
seData.barcode("123xxxx");
seData.relPosition().offsetX(70000);
seData.relPosition().offsetY(90000);
seData.relPosition().offsetZ(10);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::IndoorCamera);
seData.orientation(Core::Orientation(0, 0, 0));
seData.properties("{\"description\":\"Info-Building-56-Floor-01-Room-01-MP-02\"}");
addElementToRequest(data, seData, 3);
// Mounting Point 01-02-01
seData.name("Mounting Point 56-01-02-01");
seData.displayName("MP 3");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::MountingPoint); // type mounting point
seData.barcode("123xxxx");
seData.relPosition().offsetX(70000);
seData.relPosition().offsetY(90000);
seData.relPosition().offsetZ(10);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::IndoorCamera);
seData.orientation(Core::Orientation(0, 0, 0));
seData.properties("{\"description\":\"Info-Building-56-Floor-01-Room-02-MP-01\"}");
addElementToRequest(data, seData, 4);
// Mounting Point 01-02-02
seData.name("Mounting Point 56-01-02-02");
seData.displayName("MP 4");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::MountingPoint); // type mounting point
seData.barcode("123xxxx");
seData.relPosition().offsetX(70000);
seData.relPosition().offsetY(90000);
seData.relPosition().offsetZ(10);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::IndoorCamera);
seData.orientation(Core::Orientation(0, 0, 0));
seData.properties("{\"description\":\"Info-Building-56-Floor-01-Room-02-MP-02\"}");
addElementToRequest(data, seData, 4);
// mounting point building central unit
seData.name("Test MP Building");
seData.displayName("MP 5");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::MountingPoint);
seData.barcode("4711");
seData.relPosition().offsetX(0);
seData.relPosition().offsetY(0);
seData.relPosition().offsetZ(0);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::BuildingControlUnit);
seData.properties("{\"description\":\"Info MP Test Building\"}");
addElementToRequest(data, seData, 0);
//Footprint
InfrastructureManagement::FootprintElement feData;
std::vector<FootprintElement> elements;
elements.resize(4);
// index 1
feData.id(1);
feData.relPosition().offsetX(0);
feData.relPosition().offsetY(0);
feData.relPosition().offsetZ(0);
elements[0] = feData;
// index 2
feData.id(2);
feData.relPosition().offsetX(9.11999988555908);
feData.relPosition().offsetY(0);
feData.relPosition().offsetZ(0);
elements[1] = feData;
// index 3
feData.id(3);
feData.relPosition().offsetX(9.11999988555908);
feData.relPosition().offsetY(9.02999973297119);
feData.relPosition().offsetZ(0);
elements[2] = feData;
// index 4
feData.id(4);
feData.relPosition().offsetX(0);
feData.relPosition().offsetY(9.02999973297119);
feData.relPosition().offsetZ(0);
elements[3] = feData;
data.footprint(elements);
QByteArray vmTest;
vmTest += "bla-bla-bla";
// data.vulnerabilityData(LtsUtils::convert<std::vector<uint8_t>>(vmTest));
// if (!m_ftc->mainStructureElementModifyRequest(data, this))
// {
// ERROR_LOG(m_logger) << "Error requesting create data (building)";
// failExit();
// }
QTest::qWait(1000);
}
// ------------------------------------------------------------------------------
void IsmTests::tryModifyMainStructureElement()
{
INFO_LOG(m_logger) << "trying to send MainStructureElementModifyRequest ";
m_dtc->waitForHistoricalDataMainStructureElement();
InfrastructureManagement::MainStructureElement mse = m_dtc->mainStructureElement(m_mainStructureElementId);
InfrastructureManagement::MainStructureElementModifyRequest data;
if (mse.id() == 0)
{
ERROR_LOG(m_logger) << "Error requesting modify data";
failExit();
}
DEBUG_LOG(m_logger) << "Modify MainStructureElement with id = " << mse.id();
// creating ModifyRequest
data.id(mse.id());
data.name(mse.name());
data.description(mse.description());
data.angle(mse.angle());
data.modelId(mse.modelId());
data.externalWlsId(mse.externalWlsId());
data.geoPosition(mse.geoPosition());
data.elements(mse.elements());
data.properties(mse.properties());
data.structureElementTypeId(mse.structureElementTypeId());
// changing MSE name
data.name("TestBuilding-Updated");
m_replyFinished = false;
if (!m_ftc->mainStructureElementModifyRequest(data, this))
{
ERROR_LOG(m_logger) << "Error requesting modify data";
failExit();
}
QTRY_COMPARE(m_replyFinished, true);
// updating SE barcodes
InfrastructureManagement::StructureElement se;
InfrastructureManagement::StructureElementModifyRequest seData;
seData.mainStructureElementId(mse.id());
seData.elements().reserve(mse.elements().size());
for (size_t i = 0; i < mse.elements().size(); ++i)
{
se = mse.elements().at(i);
DEBUG_LOG(m_logger) << "Updating barcode for element (" << i << ") with old barcode = " << se.barcode();
se.barcode("BARCODE");
seData.elements().push_back(se);
}
if (!m_ftc->structureElementModifyRequest(seData, this))
{
ERROR_LOG(m_logger) << "Error requesting modify data";
failExit();
}
QTest::qWait(1000);
}
// ------------------------------------------------------------------------------
void IsmTests::tryRemoveMainStructureElement()
{
INFO_LOG(m_logger) << "trying to send MainStructureElementRemoveRequest for mse id = " << m_mainStructureElementId;
m_dtc->waitForHistoricalDataMainStructureElement();
InfrastructureManagement::MainStructureElement mse = m_dtc->mainStructureElement(m_mainStructureElementId);
if (mse.id() == 0)
{
ERROR_LOG(m_logger) << "Cannot find main structure element with id = " << m_mainStructureElementId;
failExit();
}
if (!m_ftc->mainStructureElementRemoveRequest(MainStructureElementRemoveRequest(m_mainStructureElementId), this))
{
ERROR_LOG(m_logger) << "Error requesting delete data";
failExit();
}
QTest::qWait(1000);
}
// ------------------------------------------------------------------------------
void IsmTests::tryCreateBridge()
{
INFO_LOG(m_logger) << "trying to send MainStructureElementCreateRequest";
MainStructureElementModifyRequest data;
data.name("Test Bridge");
QJsonObject jsonObj;
jsonObj[QStringLiteral("bridgeStatus")] = 0;
// '{"bridgeStatus":0}'
QJsonDocument doc(jsonObj);
data.properties(doc.toJson().toStdString());
data.angle(30.5);
data.modelId(0);
data.externalWlsId(0);
data.geoPosition().lon(0.1552736550);
data.geoPosition().lat(0.9259746511);
data.geoPosition().z(0.00);
data.description("{}");
data.structureElementTypeId(InfrastructureManagement::StructureElementType::Bridge);
StructureElement seData;
seData.name("Test Bridge");
seData.displayName("Bridge 001");
seData.structureElementTypeId(InfrastructureManagement::StructureElementType::Bridge);
seData.relPosition().offsetX(0);
seData.relPosition().offsetY(0);
seData.relPosition().offsetZ(0);
seData.mountingPointTypeId(InfrastructureManagement::MountingPointType::Unknown);
seData.properties("{\"description\":\"Info Test Bridge\"}");
addElementToRequest(data, seData, -1); // root element has no parent
if (!m_ftc->mainStructureElementModifyRequest(data, this))
{
ERROR_LOG(m_logger) << "Error requesting create data (bridge)";
failExit();
}
QTest::qWait(1000);
}
// ------------------------------------------------------------------------------
void IsmTests::tryChangeBridgeStatus()
{
INFO_LOG(m_logger) << "trying to send MainStructureElementModifyBridgeStatusRequest ";
m_dtc->waitForHistoricalDataMainStructureElement();
InfrastructureManagement::MainStructureElement mse = m_dtc->mainStructureElement(m_mainStructureElementId);
InfrastructureManagement::MainStructureElementModifyBridgeStatusRequest data;
if (mse.id() == 0)
{
ERROR_LOG(m_logger) << "Error requesting modify data";
failExit();
}
DEBUG_LOG(m_logger) << "Modify MainStructureElement with id = " << mse.id();
// creating ModifyRequest
data.id(mse.id());
if (m_dtc->getBridgeStatus(m_mainStructureElementId) == BridgeStatus::Intact)
data.status(BridgeStatus::Broken);
else
data.status(BridgeStatus::Intact);
m_replyFinished = false;
if (!m_ftc->mainStructureElementModifyBridgeStatusRequest(data, this))
{
ERROR_LOG(m_logger) << "Error requesting modify bridge status";
failExit();
}
QTRY_COMPARE(m_replyFinished, true);
QTest::qWait(1000);
}
// ************* ASSET **********************************************************
// ------------------------------------------------------------------------------
void IsmTests::tryCreateAsset()
{
INFO_LOG(m_logger) << "trying to send AssetCreateRequest";
InstrumentationAssetModifyRequest data;
data.name("Camera-01");
data.mountingPointTypeId(InfrastructureManagement::MountingPointType::IndoorCamera);
data.barcode("1");
data.properties("{\"description\":\"Info-Camera-01\"}");
if (!m_ftc->instrumentationAssetModifyRequest(data, this))
{
ERROR_LOG(m_logger) << "Error requesting create data";
failExit();
}
QTest::qWait(1000);
data.name("Camera-02");
data.barcode("2");
data.mountingPointTypeId(InfrastructureManagement::MountingPointType::IndoorCamera);
data.properties("{\"description\":\"Info-Camera-02\"}");
if (!m_ftc->instrumentationAssetModifyRequest(data, this))
{
ERROR_LOG(m_logger) << "Error requesting create data";
failExit();
}
QTest::qWait(1000);
data.name("Camera-03");
data.barcode("3");
data.mountingPointTypeId(InfrastructureManagement::MountingPointType::MeteoDataUnit);
data.properties("{\"description\":\"Info-Camera-03\"}");
if (!m_ftc->instrumentationAssetModifyRequest(data, this))
{
ERROR_LOG(m_logger) << "Error requesting create data";
failExit();
}
QTest::qWait(1000);
data.name("Camera-04");
data.barcode("4");
data.mountingPointTypeId(InfrastructureManagement::MountingPointType::MeteoDataUnit);
data.properties("{\"description\":\"Info-Camera-03\"}");
if (!m_ftc->instrumentationAssetModifyRequest(data, this))
{
ERROR_LOG(m_logger) << "Error requesting create data";
failExit();
}
QTest::qWait(1000);
}
// ------------------------------------------------------------------------------
void IsmTests::tryModifyAsset()
{
INFO_LOG(m_logger) << "trying to send asset modify request ";
DEBUG_LOG(m_logger) << "m_assetId = " << m_assetId;
m_dtc->waitForHistoricalDataInstrumentationAsset();
const InfrastructureManagement::InstrumentationAsset &ast = m_dtc->instrumentationAsset(m_assetId);
// const InfrastructureManagement::InstrumentationAsset &ast1 = m_dtc->instrumentationAssets()[m_assetId];
InfrastructureManagement::InstrumentationAssetModifyRequest data;
DEBUG_LOG(m_logger) << "ast.id() = " << ast.id();
// DEBUG_LOG(m_logger) << "ast1.id() = " << ast1.id();
if (ast.id() == 0)
{
ERROR_LOG(m_logger) << "Cannot find Asset Id = " << m_assetId;
failExit();
}
else
{
data.id(ast.id());
data.name(ast.name());
data.barcode(ast.barcode());
data.mountingPointTypeId(ast.mountingPointTypeId());
data.instrumentationAssetStateId(ast.assetStateId());
data.properties(ast.properties());
// changing only name
data.name("Asset-Updated");
if (!m_ftc->instrumentationAssetModifyRequest(InstrumentationAssetModifyRequest(data), this))
{
ERROR_LOG(m_logger) << "Error requesting modify data";
failExit();
}
QTest::qWait(1000);
}
}
// ------------------------------------------------------------------------------
void IsmTests::tryRemoveAsset()
{
INFO_LOG(m_logger) << "trying to send AssetRemoveRequest for id = " << m_assetId;
m_dtc->waitForHistoricalDataInstrumentationAsset();
const InfrastructureManagement::InstrumentationAsset &ast = m_dtc->instrumentationAsset(m_assetId);
if (ast.id() == 0)
{
ERROR_LOG(m_logger) << "Cannot find Asset Id = " << m_assetId;
failExit();
}
if (!m_ftc->instrumentationAssetRemoveRequest(InstrumentationAssetRemoveRequest(m_assetId), this))
{
ERROR_LOG(m_logger) << "Error requesting delete data";
failExit();
}
QTest::qWait(1000);
}
// ------------------------------------------------------------------------------
void IsmTests::tryUnmountAsset()
{
INFO_LOG(m_logger) << "trying to send asset state modify request ";
DEBUG_LOG(m_logger) << "m_assetId = " << m_assetId;
m_dtc->waitForHistoricalDataInstrumentationAsset();
const InfrastructureManagement::InstrumentationAsset &ast = m_dtc->instrumentationAsset(m_assetId);
// const InfrastructureManagement::InstrumentationAsset &ast1 = m_dtc->instrumentationAssets()[m_assetId];
InfrastructureManagement::InstrumentationAssetSetStateRequest data;
DEBUG_LOG(m_logger) << "ast.id() = " << ast.id();
// DEBUG_LOG(m_logger) << "ast1.id() = " << ast1.id();
if (ast.id() == 0)
{
ERROR_LOG(m_logger) << "Cannot find Asset Id = " << m_assetId;
failExit();
}
else
{
data.id(ast.id());
data.instrumentationAssetStateId(InstrumentationAssetState::Unmounted);
if (!m_ftc->instrumentationAssetSetStateRequest(InstrumentationAssetSetStateRequest(data), this))
{
ERROR_LOG(m_logger) << "Error requesting set asset state";
failExit();
}
QTest::qWait(1000);
}
}
// ************* MOUNTING POINT ASSETS *******************************************
// ------------------------------------------------------------------------------
void IsmTests::tryCreateMountingPointAsset()
{
INFO_LOG(m_logger) << "trying to send AssetCreateRequest";
MountingPointAssetModifyRequest data;
data.assetId(m_assetId);
data.structureElementId(m_structureElementId);
data.lastUpdated(QDateTime::currentMSecsSinceEpoch());
if (!m_ftc->mountingPointAssetModifyRequest(data, this))
{
ERROR_LOG(m_logger) << "Error requesting create data";
failExit();
}
QTest::qWait(1000);
}
// ------------------------------------------------------------------------------
void IsmTests::tryRemoveMountingPointAsset()
{
INFO_LOG(m_logger) << "trying to send MountingPointAssetRemoveRequest ";
m_dtc->waitForHistoricalDataMountingPointAsset();
if (!m_dtc->getMountingPointAssetId(m_structureElementId, m_assetId, m_mountingPointAssetId))
{
ERROR_LOG(m_logger) << "Cannot find requested mounting point asset";
failExit();
}
DEBUG_LOG(m_logger) << "MountingPointAsset Id = " << m_mountingPointAssetId;
if (!m_ftc->mountingPointAssetRemoveRequest(MountingPointAssetRemoveRequest(m_mountingPointAssetId), this))
{
ERROR_LOG(m_logger) << "Error requesting delete data";
failExit();
}
QTest::qWait(1000);
}
// ************* MOUNTING POINT SCHEDULE **********************************************************
// ------------------------------------------------------------------------------
void IsmTests::tryCreateMainSchedule()
{
INFO_LOG(m_logger) << "trying to send MainScheduleCreateRequest";
MainScheduleModifyRequest data0, data1, data2;
data1.id(0); // to be inserted
data1.name("Instrumentation Plan 1 (ex 42)");
data1.exerciseId(42);
data1.statusId(InfrastructureManagement::ScheduleStatus::Inactive);
data1.timeCreated(10000000);
data1.timeStart(12000000);
data1.timeEnd( 13000000);
data1.description("Info-Main-Schedule-01");
if (!m_ftc->mainScheduleModifyRequest(data1, this))
{
ERROR_LOG(m_logger) << "Error requesting create data";
failExit();
}
QTest::qWait(1000);
data2.id(0); // to be inserted
data2.name("Instrumentation Plan 2 (ex 42)");
data2.exerciseId(42);
data2.statusId(InfrastructureManagement::ScheduleStatus::Inactive);
data2.timeCreated(14000000);
data2.timeStart(16000000);
data2.timeEnd( 17000000);
data2.description("Info-Main-Schedule-02");
if (!m_ftc->mainScheduleModifyRequest(data2, this))
{
ERROR_LOG(m_logger) << "Error requesting create data";
failExit();
}
QTest::qWait(1000);
data0.id(0); // to be inserted
data0.name("No exercise");
data0.statusId(InfrastructureManagement::ScheduleStatus::Active);
data0.timeCreated(14000000);
data0.timeStart(15000000);
data0.timeEnd( 19000000);
data0.description("Info-Main-Schedule-03");
if (!m_ftc->mainScheduleModifyRequest(data0, this))
{
ERROR_LOG(m_logger) << "Error requesting create data";
failExit();
}
QTest::qWait(1000);
}
// ------------------------------------------------------------------------------
void IsmTests::tryModifyMainSchedule()
{
INFO_LOG(m_logger) << "trying to send mounting point schedule modify request ";
m_dtc->waitForHistoricalDataMainSchedule();
// using m_assetId as main schedule id
InfrastructureManagement::MainSchedule ast = m_dtc->mainSchedule(m_assetId);
InfrastructureManagement::MainScheduleModifyRequest data;
DEBUG_LOG(m_logger) << "m_assetId = " << m_assetId;
DEBUG_LOG(m_logger) << "ast.id() = " << ast.id();
// creating ModifyRequest
if (ast.id() > 0)
{
data.id(ast.id());
data.name(ast.name());
data.statusId(ast.statusId());
data.exerciseId(ast.exerciseId());
data.timeCreated(ast.timeCreated());
data.timeStart(ast.timeStart());
data.timeEnd(ast.timeEnd());
data.description(ast.description());
// changing name
data.name("MPS-Updated");
if (!m_ftc->mainScheduleModifyRequest(MainScheduleModifyRequest(data), this))
{
ERROR_LOG(m_logger) << "Error requesting modify data";
failExit();
}
}
else
{
ERROR_LOG(m_logger) << "Cannot find main schedule id = " << m_assetId;
failExit();
}
QTest::qWait(1000);
}
// ------------------------------------------------------------------------------
void IsmTests::tryChangeStatusSchedule()
{
INFO_LOG(m_logger) << "trying to send mounting point schedule modify request ";
m_dtc->waitForHistoricalDataMainSchedule();
// using m_assetId as main schedule id
InfrastructureManagement::MainSchedule ast = m_dtc->mainSchedule(m_assetId);
InfrastructureManagement::MainScheduleModifyRequest data;
DEBUG_LOG(m_logger) << "m_assetId = " << m_assetId;
DEBUG_LOG(m_logger) << "ast.id() = " << ast.id();
// creating ModifyRequest
if (ast.id() > 0)
{
data.id(ast.id());
data.name(ast.name());
data.statusId(ast.statusId());
data.exerciseId(ast.exerciseId());
data.timeCreated(ast.timeCreated());
data.timeStart(ast.timeStart());
data.timeEnd(ast.timeEnd());
data.description(ast.description());
// changing name and status
switch (data.statusId().underlying())
{
case InfrastructureManagement::ScheduleStatus::Inactive:
{
data.name("MPS-UpdatedStatus-Activated");
data.statusId(InfrastructureManagement::ScheduleStatus::Active);
data.timeStart(QDateTime::currentMSecsSinceEpoch());
break;
}
case InfrastructureManagement::ScheduleStatus::Active:
{
data.name("MPS-UpdatedStatus-Inactivated");
data.statusId(InfrastructureManagement::ScheduleStatus::Inactive);
data.timeEnd(QDateTime::currentMSecsSinceEpoch());
break;
}
default:
break;
}
if (!m_ftc->mainScheduleModifyRequest(MainScheduleModifyRequest(data), this))
{
ERROR_LOG(m_logger) << "Error requesting modify data";
failExit();
}
}
else
{
ERROR_LOG(m_logger) << "Cannot find main schedule id = " << m_assetId;
failExit();
}
QTest::qWait(1000);
}
// ------------------------------------------------------------------------------
void IsmTests::tryRemoveMainSchedule()
{
INFO_LOG(m_logger) << "trying to send MainScheduleRemoveRequest for id = " << m_assetId;
m_dtc->waitForHistoricalDataMainSchedule();
InfrastructureManagement::MainSchedule ast = m_dtc->mainSchedule(m_assetId);
if (ast.id() == 0)
{
ERROR_LOG(m_logger) << "Cannot find main schedule id = " << m_assetId;
failExit();
}
if (!m_ftc->mainScheduleRemoveRequest(MainScheduleRemoveRequest(m_assetId), this))
{
ERROR_LOG(m_logger) << "Error requesting delete data";
failExit();
}
QTest::qWait(1000);
}
// ------------------------------------------------------------------------------
void IsmTests::tryCopySchedule()
{
INFO_LOG(m_logger) << "trying to copy schedule";
m_dtc->waitForHistoricalDataMainSchedule();
// using m_assetId as main schedule id
InfrastructureManagement::MainSchedule ms = m_dtc->mainSchedule(m_assetId);
DEBUG_LOG(m_logger) << "scheduleId = " << m_assetId;
DEBUG_LOG(m_logger) << "ms.id() = " << ms.id();
int newId = m_db->copySchedule(ms.id());
if (newId <= 0)
{
ERROR_LOG(m_logger) << "Error copy schedule, code = " << newId;
failExit();
}
QTest::qWait(1000);
}
// ------------------------------------------------------------------------------
void IsmTests::checkSchedule()
{
ERROR_LOG(m_logger) << "check instrumentation plan";
m_dtc->waitForHistoricalDataMainSchedule();
// using m_assetId as main schedule id
InfrastructureManagement::MainSchedule ms = m_dtc->mainSchedule(m_assetId);
DEBUG_LOG(m_logger) << "scheduleId = " << m_assetId;
DEBUG_LOG(m_logger) << "ms.id() = " << ms.id();
QList<MountingPointPlan> diff;
bool ok = m_dtc->getScheduleDifferences(m_assetId, diff);
if (ok)
ERROR_LOG(m_logger) << "Instrumentation plan complete!";
else
{
ERROR_LOG(m_logger) << "Instrumentation plan not complete !!!";
for (const MountingPointPlan &mpp : std::as_const(diff))
ERROR_LOG(m_logger) << "Diff - # mpp.structureElementId() = " << mpp.structureElementId();
}
QTest::qWait(1000);
}
// ************* MOUNTING POINT PLAN **********************************************************
// ------------------------------------------------------------------------------
void IsmTests::tryCreateMountingPointPlan()
{
INFO_LOG(m_logger) << "trying to send MountingPointPlanCreateRequest";
MountingPointPlanModifyRequest data;
data.mountingPointScheduleId(m_assetId);
// data.structureElementId(m_structureElementId);
// data.mountingPointState(InfrastructureManagement::MountingPointState::Equipped);
if (!m_ftc->mountingPointPlanModifyRequest(data, this))
{
ERROR_LOG(m_logger) << "Error requesting create data";
failExit();
}
QTest::qWait(1000);
data.mountingPointScheduleId(m_assetId);
// data.structureElementId(m_mainStructureElementId);
// data.mountingPointState(InfrastructureManagement::MountingPointState::Idle);
if (!m_ftc->mountingPointPlanModifyRequest(data, this))
{
ERROR_LOG(m_logger) << "Error requesting create data";
failExit();
}
QTest::qWait(1000);
}
//********************* GENERAL *************************************************
// ------------------------------------------------------------------------------
void IsmTests::onError(const QString &reason)
{
ERROR_LOG(m_logger) << "Got Reply error: " << reason;
failExit();
}
// ------------------------------------------------------------------------------
void IsmTests::onCreateReply(const Core::FunctionReplyObject &replyObject)
{
if (replyObject.error())
{
onError(replyObject.translated());
return;
}
INFO_LOG(m_logger) << "Got createReply with id " << replyObject.id()
<< " and errorString " << replyObject.translated();
QTimer::singleShot(0, qApp, &QCoreApplication::quit);
}
// ------------------------------------------------------------------------------
void IsmTests::onModifyReply(const Core::FunctionReplyObject &replyObject)
{
m_replyFinished = true;
if (replyObject.error())
{
onError(replyObject.translated());
return;
}
INFO_LOG(m_logger) << "Got modifyRequest with id " << replyObject.id()
<< " and errorString " << replyObject.translated();
QTimer::singleShot(0, qApp, &QCoreApplication::quit);
}
// ------------------------------------------------------------------------------
void IsmTests::onRemoveReply(const Core::FunctionReplyObject &replyObject)
{
if (replyObject.error())
{
onError(replyObject.translated());
return;
}
INFO_LOG(m_logger) << "Got removeReply with id " << replyObject.id()
<< " and errorString " << replyObject.translated();
QTimer::singleShot(0, qApp, &QCoreApplication::quit);
}
// ------------------------------------------------------------------------------
void IsmTests::failExit()
{
ERROR_LOG(m_logger) << "FAIL EXIT !";
m_bTestsSuccessful = false;
QTimer::singleShot(0, qApp, &QCoreApplication::quit);
}
// ------------------------------------------------------------------
class CmdLineParser : public LtsCommandLineParser::LtsCommandLineParser
{
public:
CmdLineParser()
: LtsCommandLineParser()
{
addOption( { QStringList() << QLatin1String("t") << QLatin1String("testId")
, QLatin1String("TestId.")
, QLatin1String("Default: 0")
, QLatin1String("0")
} );
addOption( { QStringList() << QLatin1String("a") << QLatin1String("assetId")
, QLatin1String("AssetId.MainScheduleId.")
, QLatin1String("Default: 0")
, QLatin1String("0")
} );
addOption( { QStringList() << QLatin1String("m") << QLatin1String("mainStructureElementId")
, QLatin1String("MainStructureElementId.")
, QLatin1String("Default: 0")
, QLatin1String("0")
} );
addOption( { QStringList() << QLatin1String("s") << QLatin1String("structureElementId")
, QLatin1String("StructureElementId.")
, QLatin1String("Default: 0")
, QLatin1String("0")
} );
addOption( { QStringList() << QLatin1String("i") << QLatin1String("indexNo")
, QLatin1String("IndexNo.")
, QLatin1String("Default: 0")
, QLatin1String("0")
} );
}
int testId() const { return isSet(QLatin1String("t")) ? value(QLatin1String("t")).toInt() : -1; }
int assetId() const { return isSet(QLatin1String("a")) ? value(QLatin1String("a")).toInt() : -1; }
int mainStructureElementId() const { return isSet(QLatin1String("m")) ? value(QLatin1String("m")).toInt() : -1; }
int structureElementId() const { return isSet(QLatin1String("s")) ? value(QLatin1String("s")).toInt() : -1; }
int indexNo() const { return isSet(QLatin1String("i")) ? value(QLatin1String("i")).toInt() : -1; }
};
// ------------------------------------------------------------------
int main(int argc, char **argv)
{
int iRet = -1;
NGLCoreApplication app(argc, argv);
app.createLogger("ISM", 0 );
CmdLineParser options;
if (!options.init())
return iRet;
std::unique_ptr<InfrastructureManagement::IsmTests> IsmTests(new InfrastructureManagement::IsmTests);
if(!IsmTests->init(options.domainId(), options.testId(), options.assetId(), options.mainStructureElementId(), options.structureElementId(), options.indexNo()))
return iRet;
QTimer::singleShot(0, IsmTests.get(), &InfrastructureManagement::IsmTests::startTest);
STARTUP_LOG(app.baseLogger());
app.exec();
iRet = IsmTests->testsSuccessful() ? 0 : 1;
fprintf(stderr, "\n%d\n\n", iRet);
INFO_LOG(app.baseLogger()) << "** TEST result = " << iRet;
SHUTDOWN_LOG(app.baseLogger());
return iRet;
}