swift
Loading...
Searching...
No Matches
testserviceinterface.cpp
1// SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3
5
6#include <QTextStream>
7
10#include "misc/test/testing.h"
12
13class QDBusConnection;
14
15using namespace swift::misc;
16using namespace swift::misc::aviation;
17using namespace swift::misc::simulation;
18using namespace swift::misc::geo;
19using namespace swift::misc::network;
20using namespace swift::misc::test;
21using namespace swift::misc::physical_quantities;
22
23namespace swift::misc::test
24{
29
30 int ITestServiceInterface::pingTests(ITestServiceInterface &testServiceInterface, bool verbose)
31 {
32 int errors = 0;
33 bool ok = false;
34 QTextStream out(stdout);
35
36 const CPropertyIndex pi({ 1000, 2000, 3000, 4000, 5000 }); // numbers >= global index
37 const CPropertyIndex piPing = testServiceInterface.pingPropertyIndex(pi);
38 ok = pingCompare(pi, piPing, out, verbose, errors);
39 if (verbose)
40 {
41 out << "Pinged property index via interface" << errorInfo(ok) << Qt::endl;
42 }
43
45 const CPropertyIndexVariantMap ivmPing = testServiceInterface.pingIndexVariantMap(ivm);
46 ok = pingCompare(ivm, ivmPing, out, verbose, errors);
47 if (verbose)
48 {
49 out << "Pinged variant map via interface" << errorInfo(ok) << Qt::endl;
50 }
51
52 const CSimulatorPluginInfo pluginInfo("msfs24", "MSFS2024", "MSFS2024", "MSFS2024", true);
53 const CSimulatorPluginInfo pluginInfoPing = testServiceInterface.pingPluginInfo(pluginInfo);
54 ok = pingCompare(pluginInfo, pluginInfoPing, out, verbose, errors);
55 if (verbose)
56 {
57 out << "Pinged info via interface" << errorInfo(ok) << Qt::endl;
58 }
59
60 const CSpeed speedNotNull(22, CSpeedUnit::m_s());
61 const CSpeed speedNull = CSpeed(0, CSpeedUnit::nullUnit());
62
63 const CSpeed speedNotNullPing = testServiceInterface.pingSpeed(speedNotNull);
64 ok = pingCompare(speedNotNull, speedNotNullPing, out, verbose, errors);
65 if (verbose)
66 {
67 out << "Pinged not null speed via interface" << errorInfo(ok) << Qt::endl;
68 }
69
70 const CSpeed speedNullPing = testServiceInterface.pingSpeed(speedNull);
71 ok = pingCompare(speedNull, speedNullPing, out, verbose, errors);
72 if (verbose)
73 {
74 out << "Pinged null speed via interface" << errorInfo(ok) << Qt::endl;
75 }
76
78 const CAtcStation stationPing = testServiceInterface.pingAtcStation(station);
79 ok = pingCompare(station, stationPing, out, verbose, errors);
80 if (verbose)
81 {
82 out << "Pinged ATC station via interface" << errorInfo(ok) << Qt::endl;
83 }
84
86 const CAircraftIcaoCode icaoDataPing = testServiceInterface.pingAircraftIcaoData(icaoData);
87 ok = pingCompare(icaoData, icaoDataPing, out, verbose, errors);
88 if (verbose)
89 {
90 out << "Pinged ICAO data via interface" << errorInfo(ok) << Qt::endl;
91 }
92
93 const CUser user = CTestData::getRandomPilot();
94 const CUser userPing = testServiceInterface.pingUser(user);
95 ok = pingCompare(user, userPing, out, verbose, errors);
96 if (verbose)
97 {
98 out << "Pinged user via interface" << errorInfo(ok) << Qt::endl;
99 }
100
102 const CAircraftSituation situationPing = testServiceInterface.pingSituation(situation);
103 ok = pingCompare(situation, situationPing, out, verbose, errors);
104 if (verbose)
105 {
106 out << "Pinged situation via interface" << errorInfo(ok) << Qt::endl;
107 }
108
109 const CTransponder transponder(1234, "C");
110 const CTransponder transponderPing = testServiceInterface.pingTransponder(transponder);
111 ok = pingCompare(transponder, transponderPing, out, verbose, errors);
112 if (verbose)
113 {
114 out << "Pinged transponder via interface" << errorInfo(ok) << Qt::endl;
115 }
116
117 const CAircraftLights lights(true, false, true, false, true, false);
118 const CAircraftLights lightsPing = testServiceInterface.pingAircraftLights(lights);
119 ok = pingCompare(lights, lightsPing, out, verbose, errors);
120 if (verbose)
121 {
122 out << "Pinged lights via interface" << errorInfo(ok) << Qt::endl;
123 }
124
125 const CAircraftEngine engine(2, false, 0);
126 const CAircraftEngine enginePing = testServiceInterface.pingAircraftEngine(engine);
127 ok = pingCompare(engine, enginePing, out, verbose, errors);
128 if (verbose)
129 {
130 out << "Pinged engine via interface" << errorInfo(ok) << Qt::endl;
131 }
132
133 const CAircraftEngineList engines({ engine });
134 const CAircraftParts parts(lights, true, 11, true, engines, true);
135 const CAircraftParts partsPing = testServiceInterface.pingAircraftParts(parts);
136 ok = pingCompare(parts, partsPing, out, verbose, errors);
137 if (verbose)
138 {
139 out << "Pinged engine via interface" << errorInfo(ok) << Qt::endl;
140 }
141
143 const CAircraftModel modelPing = testServiceInterface.pingAircraftModel(model);
144 ok = pingCompare(model, modelPing, out, verbose, errors);
145 if (verbose)
146 {
147 out << "Pinged model via interface" << errorInfo(ok) << Qt::endl;
148 }
149
151 const CAircraftModelList modelsPing = testServiceInterface.pingAircraftModelList(models);
152 ok = pingCompare(models, modelsPing, out, verbose, errors);
153 if (verbose)
154 {
155 out << "Pinged model list via interface" << errorInfo(ok) << Qt::endl;
156 }
157
159 const CSimulatedAircraft aircraftPing = testServiceInterface.pingSimulatedAircraft(aircraft);
160 ok = pingCompare(aircraft, aircraftPing, out, verbose, errors);
161 if (verbose)
162 {
163 out << "Pinged simulated aircraft via interface" << errorInfo(ok) << Qt::endl;
164 }
165
166 const CAtcStationList atcStationList = CTestData::getAtcStations();
167 const CAtcStationList atcStationListPing = testServiceInterface.pingAtcStationList(atcStationList);
168 ok = pingCompare(atcStationList, atcStationListPing, out, verbose, errors);
169 if (verbose)
170 {
171 out << "Pinged ATC station list via interface" << errorInfo(ok) << Qt::endl;
172 }
173
174 const CAirportList airportList = CTesting::getAirports(10);
175 const CAirportList airportListPing = testServiceInterface.pingAirportList(airportList);
176 ok = pingCompare(airportList, airportListPing, out, verbose, errors);
177 if (verbose)
178 {
179 out << "Pinged airports list via interface" << errorInfo(ok) << Qt::endl;
180 }
181
182 const CClientList clients = CTesting::getClients(10);
183 const CClient client = clients.front();
184 const CClient clientPing = testServiceInterface.pingClient(client);
185 ok = pingCompare(client, clientPing, out, verbose, errors);
186 if (verbose)
187 {
188 out << "Pinged client list via interface" << errorInfo(ok) << Qt::endl;
189 }
190
191 const CClientList clientsPing = testServiceInterface.pingClientList(clients);
192 ok = pingCompare(clients, clientsPing, out, verbose, errors);
193 if (verbose)
194 {
195 out << "Pinged client list via interface" << errorInfo(ok) << Qt::endl;
196 }
197
198 CFlightPlan flightPlan;
199 flightPlan.setEnrouteTime(CTime(4, CTimeUnit::h()));
200 flightPlan.setFuelTime(CTime(5, CTimeUnit::h()));
203 const CFlightPlan flightPlanPing = testServiceInterface.pingFlightPlan(flightPlan);
204 ok = pingCompare(flightPlan, flightPlanPing, out, verbose, errors);
205 if (verbose)
206 {
207 out << "Pinged flight plan via interface" << errorInfo(ok) << Qt::endl;
208 }
209
210 const CVariant cv = CVariant::fromValue(clients);
211 const CVariant cvPing = testServiceInterface.pingCVariant(cv);
212 ok = pingCompare(cv.value<CClientList>(), cvPing.value<CClientList>(), out, verbose, errors);
213 if (verbose)
214 {
215 out << "Pinged CVariant(clients) list via interface" << errorInfo(ok) << Qt::endl;
216 }
217
218 const CVariant cv2 = CVariant::fromValue(aircraft);
219 const CVariant cv2Ping = testServiceInterface.pingCVariant(cv2);
220 ok = pingCompare(cv2.value<CSimulatedAircraft>(), cv2Ping.value<CSimulatedAircraft>(), out, verbose, errors);
221 if (verbose)
222 {
223 out << "Pinged CVariant(aircraft) list via interface" << errorInfo(ok) << Qt::endl;
224 }
225
226 // end
227 return errors;
228 }
229
230 const char *ITestServiceInterface::InterfaceName()
231 {
232 static const QByteArray in(CTestService::InterfaceName().toLatin1());
233 return in.constData();
234 }
235
236 const QString &ITestServiceInterface::errorInfo(bool ok)
237 {
238 static const QString sOk(": ok");
239 static const QString sError(": !! ERROR !!");
240 return ok ? sOk : sError;
241 }
242} // namespace swift::misc::test
Specialized value object compliant map for variants, based on indexes.
reference front()
Access the first element.
Definition sequence.h:225
Wrapper around QVariant which provides transparent access to CValueObject methods of the contained ob...
Definition variant.h:69
static CVariant fromValue(T &&value)
Construct a variant from a value.
Definition variant.h:139
T value() const
Return the value converted to the type T.
Definition variant.h:154
Value object encapsulating information about aircraft's engines.
Value object encapsulating a list of aircraft engines.
Value object for ICAO classification.
Value object encapsulating information about aircraft's lights.
Value object encapsulating information of aircraft's parts.
Value object encapsulating information of an aircraft's situation.
Value object for a list of airports.
Definition airportlist.h:29
Altitude as used in aviation, can be AGL or MSL altitude.
Definition altitude.h:52
Value object encapsulating information about an ATC station.
Definition atcstation.h:38
Value object for a list of ATC stations.
Value object for a flight plan.
Definition flightplan.h:148
void setCruiseTrueAirspeed(const physical_quantities::CSpeed &cruiseTrueAirspeed)
Set planned cruise TAS.
Definition flightplan.h:279
void setFuelTime(const physical_quantities::CTime &fuelTime)
Set amount of fuel load in time.
Definition flightplan.h:259
void setEnrouteTime(const physical_quantities::CTime &enrouteTime)
Set planned enroute flight time.
Definition flightplan.h:252
void setCruiseAltitude(const CAltitude &cruiseAltitude)
Set planned cruise altitude.
Definition flightplan.h:269
Another client software.
Definition client.h:27
Value object encapsulating a list of voice rooms.
Definition clientlist.h:27
Value object encapsulating information of a user.
Definition user.h:28
static CLengthUnit km()
Kilometer km.
Definition units.h:165
static CSpeedUnit km_h()
Kilometer/hour km/h.
Definition units.h:852
static CSpeedUnit m_s()
Meter/second m/s.
Definition units.h:808
static CSpeedUnit nullUnit()
Null unit.
Definition units.h:801
Aircraft model (used by another pilot, my models on disk).
Value object encapsulating a list of aircraft models.
Comprehensive information of an aircraft.
static const swift::misc::aviation::CAtcStation & getRandomAtcStation()
Get ATC station.
static const swift::misc::simulation::CAircraftModel & getDbAircraftModelFsxAerosoftA320()
FSX aircraft model, an Airbus A320.
static const swift::misc::aviation::CAircraftSituation & getAircraftSituationAboveMunichTower()
Aircraft situation (Munich).
static const swift::misc::network::CUser & getRandomPilot()
Get a random pilot user.
static const swift::misc::aviation::CAtcStationList & getAtcStations()
Tower stations.
static const swift::misc::simulation::CAircraftModel & getDbAircraftModelFsxA2AC172Skyhawk()
FSX aircraft model, a C172 Skyhawk.
static const swift::misc::aviation::CAircraftIcaoCode & getDBAircraftIcaoB737()
B737 ICAO code (as from DB).
static const swift::misc::CPropertyIndexVariantMap & getCPropertyIndexVariantMap()
Get a variant map.
static const swift::misc::simulation::CSimulatedAircraft & getA320Aircraft()
A320 simulated aircraft, a A.
static const QString & InterfaceName()
DBus interface name.
static swift::misc::network::CClientList getClients(int number)
Get clients.
Definition testing.cpp:114
static swift::misc::aviation::CAirportList getAirports(int number)
Get airports.
Definition testing.cpp:100
QDBusPendingReply< swift::misc::aviation::CAircraftLights > pingAircraftLights(const swift::misc::aviation::CAircraftLights &lights)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CTransponder > pingTransponder(const swift::misc::aviation::CTransponder &transponder)
DBus calls.
QDBusPendingReply< swift::misc::simulation::CAircraftModelList > pingAircraftModelList(const swift::misc::simulation::CAircraftModelList &model)
DBus calls.
QDBusPendingReply< swift::misc::simulation::CSimulatorPluginInfo > pingPluginInfo(const swift::misc::simulation::CSimulatorPluginInfo &info)
DBus calls.
QDBusPendingReply< swift::misc::physical_quantities::CSpeed > pingSpeed(const swift::misc::physical_quantities::CSpeed &speed)
DBus calls.
QDBusPendingReply< swift::misc::network::CClientList > pingClientList(const swift::misc::network::CClientList &clientList)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAircraftEngine > pingAircraftEngine(const swift::misc::aviation::CAircraftEngine &engine)
DBus calls.
ITestServiceInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent=nullptr)
Constructor.
QDBusPendingReply< swift::misc::simulation::CSimulatedAircraft > pingSimulatedAircraft(const swift::misc::simulation::CSimulatedAircraft &aircraft)
DBus calls.
QDBusPendingReply< swift::misc::CVariant > pingCVariant(const swift::misc::CVariant &variant)
DBus calls.
QDBusPendingReply< swift::misc::CPropertyIndex > pingPropertyIndex(const swift::misc::CPropertyIndex &index)
DBus calls.
QDBusPendingReply< swift::misc::CPropertyIndexVariantMap > pingIndexVariantMap(const swift::misc::CPropertyIndexVariantMap &indexVariantMap)
DBus calls.
QDBusPendingReply< swift::misc::network::CUser > pingUser(const swift::misc::network::CUser &user)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAtcStationList > pingAtcStationList(const swift::misc::aviation::CAtcStationList &atcStationList)
DBus calls.
QDBusPendingReply< swift::misc::simulation::CAircraftModel > pingAircraftModel(const swift::misc::simulation::CAircraftModel &model)
DBus calls.
static int pingTests(ITestServiceInterface &testServiceInterface, bool verbose)
Ping via DBus, tests object marshalling/unmarshalling.
QDBusPendingReply< swift::misc::aviation::CAircraftIcaoCode > pingAircraftIcaoData(const swift::misc::aviation::CAircraftIcaoCode &icaoData)
DBus calls.
QDBusPendingReply< swift::misc::network::CClient > pingClient(const swift::misc::network::CClient &client)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAirportList > pingAirportList(const swift::misc::aviation::CAirportList &airportList)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CFlightPlan > pingFlightPlan(const aviation::CFlightPlan &flightPlan)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAircraftParts > pingAircraftParts(const swift::misc::aviation::CAircraftParts &parts)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAtcStation > pingAtcStation(const swift::misc::aviation::CAtcStation &station)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAircraftSituation > pingSituation(const swift::misc::aviation::CAircraftSituation &situation)
DBus calls.
Generate data for testing purposes.
Definition testdata.h:45
Free functions in swift::misc.
QDBusConnection connection() const const
QString path() const const
QString service() const const
QObject(QObject *parent)
QObject * parent() const const
QTextStream & endl(QTextStream &stream)