32 using namespace swift::misc::aviation;
33 using namespace swift::misc::db;
34 using namespace swift::misc::simulation;
35 using namespace swift::misc::network;
39 namespace swiftcoretest
56 void readAirportData();
58 void cleanupTestCase();
69 void CTestReaders::initTestCase()
71 m_airportReader =
new CAirportDataReader(
this, CDatabaseReaderConfigList::allDirectDbAccess());
72 m_icaoReader =
new CIcaoDataReader(
this, CDatabaseReaderConfigList::allDirectDbAccess());
73 m_modelReader =
new CModelDataReader(
this, CDatabaseReaderConfigList::allDirectDbAccess());
74 m_airportReader->markAsUsedInUnitTest();
75 m_icaoReader->markAsUsedInUnitTest();
76 m_modelReader->markAsUsedInUnitTest();
79 void CTestReaders::readIcaoData()
82 qDebug() <<
"Reader URL" << url.toQString();
83 if (!this->connectServer(url))
85 QSKIP(
"Server not reachable.");
88 m_icaoReader->start();
89 m_icaoReader->readInBackgroundThread(CEntityFlags::AllIcaoEntities, QDateTime());
93 for (
int i = 0; i < 60; i++)
95 CApplication::processEventsFor(500);
96 if (this->m_icaoReader->getAircraftIcaoCodesCount() > 0 &&
97 this->m_icaoReader->getAirlineIcaoCodesCount() > 0)
103 const QString m1(
"No aircraft ICAOs " + url.getFullUrl());
104 const QString m2(
"No airline ICAOs " + url.getFullUrl());
105 QVERIFY2(this->m_icaoReader->getAircraftIcaoCodesCount() > 0, qUtf8Printable(m1));
106 QVERIFY2(this->m_icaoReader->getAirlineIcaoCodesCount() > 0, qUtf8Printable(m2));
115 const int aircraftValidSize = aircraftIcaosValid.size();
116 const int aircraftSize = aircraftIcaos.
size();
117 const int airlineValidSize = airlineIcaosValid.size();
118 const int airlineSize = airlineIcaos.
size();
120 if (!aircraftIcaosInvalid.isEmpty()) { qDebug() << aircraftIcaosInvalid.toQString(); }
121 if (!airlineIcaosInvalid.isEmpty()) { qDebug() << airlineIcaosInvalid.toQString(); }
123 QVERIFY2(aircraftValidSize == aircraftSize,
"All aircraft ICAOs must be valid");
124 QVERIFY2(airlineValidSize == airlineSize,
"Some airline ICAOs must be valid");
126 CApplication::processEventsFor(2500);
129 void CTestReaders::readModelData()
132 qDebug() <<
"Reader URL" << url.toQString();
133 if (!this->connectServer(url))
135 QSKIP(
"Server not reachable.");
138 m_modelReader->start();
139 m_modelReader->readInBackgroundThread(CEntityFlags::ModelEntity, QDateTime());
141 for (
int i = 0; i < 120; i++)
143 CApplication::processEventsFor(500);
144 if (this->m_modelReader->getModelsCount() > 0) {
break; }
147 const QString m1(
"No models " + url.getFullUrl());
148 QVERIFY2(this->m_modelReader->getModelsCount() > 0, qUtf8Printable(m1));
150 const CAircraftModel model(m_modelReader->getModels().frontOrDefault());
151 QVERIFY2(model.getLivery().hasCompleteData(),
"Missing data for livery");
153 CApplication::processEventsFor(2500);
156 void CTestReaders::readAirportData()
158 using namespace swift::misc::geo;
159 using namespace swift::misc::physical_quantities;
162 qDebug() <<
"Reader URL" << url.toQString();
163 if (!this->connectServer(url))
165 QSKIP(
"Server not reachable.");
168 m_airportReader->start();
169 m_airportReader->readInBackgroundThread(CEntityFlags::AirportEntity, QDateTime());
171 for (
int i = 0; i < 120; ++i)
173 CApplication::processEventsFor(500);
174 if (this->m_airportReader->getAirports().size() > 0) {
break; }
177 QVERIFY2(this->m_airportReader->getAirports().size() > 0,
"No airports");
178 const auto heathrow = this->m_airportReader->getAirports().findByIcao(
"EGLL");
179 QVERIFY2(heathrow.size() == 1,
"No Heathrow");
180 QVERIFY2(heathrow[0].isOperating(),
"Wrong airport data");
182 auto airports = m_airportReader->getAirports();
186 QVERIFY2(airports[0].getIcao() ==
CAirportIcaoCode(
"EGLW"),
"Wrong airport data");
188 CApplication::processEventsFor(2500);
191 bool CTestReaders::connectServer(
const CUrl &url)
194 if (CNetworkUtils::canConnect(url, m, 2500))
196 qDebug() <<
"URL" << url.
getFullUrl() <<
"connected";
201 qWarning() <<
"URL" << url.
getFullUrl() <<
"cannot be connected";
206 void CTestReaders::cleanupTestCase()
208 m_airportReader->quitAndWait();
209 m_icaoReader->quitAndWait();
210 m_modelReader->quitAndWait();
217 #include "testreaders.moc"
SWIFT_CORE_EXPORT swift::core::CApplication * sApp
Single instance of application object.
data::CGlobalSetup getGlobalSetup() const
Global setup.
swift::misc::network::CUrl getDbIcaoReaderUrl() const
ICAO reader URL.
swift::misc::network::CUrl getDbAirportReaderUrl() const
Airport reader URL.
swift::misc::network::CUrl getDbModelReaderUrl() const
Model reader URL.
Reader for airport database data.
Read ICAO data from Database.
Read model related data from Database.
size_type size() const
Returns number of elements in the sequence.
Value object encapsulating a list of ICAO codes.
CAircraftIcaoCodeList findByInvalidDesignator() const
Ones with an invalid designator.
CAircraftIcaoCodeList findByValidDesignator() const
Ones with a valid designator.
Value object encapsulating a list of ICAO codes.
CAirlineIcaoCodeList findByValidDesignator() const
The ones with a valid designator.
CAirlineIcaoCodeList findByInvalidDesignator() const
The ones with an invalid designator.
Value object encapsulating information of airport ICAO data.
Altitude as used in aviation, can be AGL or MSL altitude.
Value object encapsulating information of a location, kind of simplified CValueObject compliant versi...
QString getFullUrl(bool withQuery=true) const
Qualified name.
Aircraft model (used by another pilot, my models on disk)
Test data readers (for ICAOs, JSON, etc.)
Classes interacting with the swift database (aka "datastore").
Backend services of the swift project, like dealing with the network or the simulators.
Free functions in swift::misc.
SWIFTTEST_APPLESS_MAIN(swiftcoretest::CTestReaders)
main