#include "generic_data_tests.h" #include #include #include #include #include #include int main(int argc, char *argv[]) { NGLCoreApplication app(argc, argv); app.createLogger("UnitTests", "log4cxx_ddsUnitTests.props"); GenericDataTests *tc = new GenericDataTests; int retCode = QTest::qExec(tc, argc, argv); delete tc; return retCode; } GenericDataTests::GenericDataTests() : m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger().getNGLLogger("UnitTests.GenericDataTests")) { m_spatialData.equipNo(0); m_testPart.location().equipNo(0); m_testPart.location().participantId(0); } void GenericDataTests::initTestCase() { DEBUG_LOG(m_logger) <<"GenericDataTests: initTestCase"; m_init = new Initialisation(); int domainId = 0; int exerciseId = 2; QVERIFY2(m_init, "Initialisation failed"); QVERIFY2(m_init->initDDS(domainId, exerciseId, Initialisation::USE_PUBLISHER), "Initialisation (Publisher) failed"); QVERIFY2(m_init->initDDS(domainId, exerciseId, Initialisation::USE_SUBSCRIBER), "Initialisation (Subscriber) failed"); QVERIFY2(m_init->getSubscriberListener(), "Initialisation SubscriberListener failed"); } void GenericDataTests::initDRTestCase() { m_dataReader = new DTC::DroTestParticipant; QVERIFY2(m_dataReader, "Initialisation of GenericDataReader(TestParticipant) failed"); QVERIFY2(m_dataReader->create(m_init->getDomainParticipantSub(), m_init->getDDSSubscriber()), "Creating DataReader (TestParticipant) failed"); m_init->getSubscriberListener()->addCallback(m_dataReader->getDataReader(), this); m_dataReaderSd = new DTC::DroSpatialData; QVERIFY2(m_dataReaderSd, "Initialisation of GenericDataReader(SpatialData) failed"); QVERIFY2(m_dataReaderSd->create(m_init->getDomainParticipantSub(), m_init->getDDSSubscriber()), "Creating DataReader (SpatialData) failed"); m_init->getSubscriberListener()->addCallback(m_dataReaderSd->getDataReader(), this); } void GenericDataTests::initDWTestCase() { m_dataWriter = new DTS::DwoTestParticipant(); QVERIFY2(m_dataWriter, "Initialisation of GenericDataWriter(TestParticipant) failed"); QVERIFY2(m_dataWriter->create(m_init->getDomainParticipant(), m_init->getDDSPublisher()), "Creating DataWriter (TestParticipant) failed"); m_dataWriterSd = new DTS::DwoSpatialData(); QVERIFY2(m_dataWriterSd, "Initialisation of GenericDataWriter(SpatialData) failed"); QVERIFY2(m_dataWriterSd->create(m_init->getDomainParticipant(), m_init->getDDSPublisher()), "Creating DataWriter (SpatialData) failed"); } void GenericDataTests::dataWriterTestCase() { DEBUG_LOG(m_logger) <<"GenericDataTests: dataWriter"; DdsUnitTests::SpatialData data; data.participantId(100); data.equipNo(999); data.gpsPosition().lon(70000); data.gpsPosition().lat(90000); data.gpsPosition().z(10); data.orientation().heave(10); data.orientation().pitch(10); data.orientation().roll(10); data.velocity().x(10); data.velocity().y(2); data.velocity().z(1); data.changedAt(11111); QVERIFY2(m_dataWriterSd->write(data), "Publishing Topic (SpatialData) failed"); DdsUnitTests::TestParticipant allData; allData.name("************************ Name of TestParticpant ***********************"); allData.location() = data; allData.id(10000); QVERIFY2(m_dataWriter->write(allData), "Publishing Topic (TestParticipant) failed"); allData.id(11000); QVERIFY2(m_dataWriter->write(allData), "Publishing Topic (TestParticipant) failed"); allData.id(11100); QVERIFY2(m_dataWriter->write(allData), "Publishing Topic (TestParticipant) failed"); allData.id(11110); QVERIFY2(m_dataWriter->write(allData), "Publishing Topic (TestParticipant) failed"); allData.id(11111); QVERIFY2(m_dataWriter->write(allData), "Publishing Topic (TestParticipant) failed"); } void GenericDataTests::dataReaderTestCase() { DEBUG_LOG(m_logger) << "GenericDataTests: dataReader"; QTRY_COMPARE(m_spatialData.equipNo(), 999); QCOMPARE(m_spatialData.changedAt(), 11111); QTRY_COMPARE(m_testPart.location().equipNo(), 999); QCOMPARE(m_testPart.location().participantId(), 100); bool bSeenUnreadSamples = false; dds::sub::LoanedSamples vecTp = m_dataReader->readAlive(bSeenUnreadSamples); INFO_LOG(m_logger) <<"vecTp size: " << vecTp.length(); QCOMPARE(vecTp.length(), static_cast(5)); QCOMPARE(vecTp[0].data().id(), 10000); QCOMPARE(vecTp[1].data().id(), 11000); QCOMPARE(vecTp[2].data().id(), 11100); QCOMPARE(vecTp[3].data().id(), 11110); QCOMPARE(vecTp[4].data().id(), 11111); dds::sub::LoanedSamples vecTpLoaned = m_dataReader->takeAlive(bSeenUnreadSamples); INFO_LOG(m_logger) <<"vecTpLoaned size: " << vecTp.length(); QCOMPARE(vecTpLoaned.length(), static_cast(5)); QCOMPARE(vecTpLoaned[0].data().id(), 10000); QCOMPARE(vecTpLoaned[1].data().id(), 11000); QCOMPARE(vecTpLoaned[2].data().id(), 11100); QCOMPARE(vecTpLoaned[3].data().id(), 11110); QCOMPARE(vecTpLoaned[4].data().id(), 11111); } void GenericDataTests::deleteDataReaderTestCase() { DdsUnitTests::TestParticipant data; for (int i = 0; i < 1000; ++i) { data.id(i); m_dataWriter->write(data); } m_init->getSubscriberListener()->removeCallback(m_dataReader->getDataReader(), this); delete m_dataReader; m_dataReader = nullptr; for(int i = 0; i < 1000; ++i) { data.id(i); m_dataWriter->write(data); } } void GenericDataTests::cleanupTestCase() { DEBUG_LOG(m_logger) <<"GenericDataTests: cleanupTestCase"; if (m_dataReader) { m_init->getSubscriberListener()->removeCallback(m_dataReader->getDataReader(), this); delete m_dataReader; } if (m_dataReaderSd) { m_init->getSubscriberListener()->removeCallback(m_dataReaderSd->getDataReader(), this); delete m_dataReaderSd; } m_init->cleanupSubscriberListener(); delete m_dataWriter; delete m_dataWriterSd; delete m_init; deleteLater(); } void GenericDataTests::processData(const DdsUnitTests::SpatialData &data, DataModification modType) { DEBUG_LOG(m_logger) << "SpatialData: equipNo = " << data.equipNo() << " modType: " << modType; m_spatialData = data; } void GenericDataTests::processData(const DdsUnitTests::TestParticipant &data, const dds::sub::SampleInfo &si) { Q_UNUSED(si); DEBUG_LOG(m_logger) << "TestParticipant: equipNo = " << data.location().equipNo(); m_testPart = data; } void GenericDataTests::droDataAvailable(const std::string &topicType, const std::string &topicName) { Q_UNUSED(topicName) DEBUG_LOG(m_logger) << "IN droDataAvailable: type = " << topicType; if (topicType == "DdsUnitTests::TestParticipant") { m_init->getSubscriberListener()->enableCallback(m_dataReader->getDataReader(), this); m_dataReader->read([this](const DdsUnitTests::TestParticipant &data, const dds::sub::SampleInfo &si) { processData(data, si); }); } else if(topicType == "DdsUnitTests::SpatialData") { m_init->getSubscriberListener()->enableCallback(m_dataReaderSd->getDataReader(), this); m_dataReaderSd->read([this](const DdsUnitTests::SpatialData &data, DataModification modType) { processData(data, modType); } ); } }