swift
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 
9 #include "misc/test/testdata.h"
10 #include "misc/test/testing.h"
11 #include "misc/test/testservice.h"
12 
13 class QDBusConnection;
14 
15 using namespace swift::misc;
16 using namespace swift::misc::aviation;
17 using namespace swift::misc::simulation;
18 using namespace swift::misc::geo;
19 using namespace swift::misc::network;
20 using namespace swift::misc::test;
21 using namespace swift::misc::physical_quantities;
22 
23 namespace swift::misc::test
24 {
25  ITestServiceInterface::ITestServiceInterface(const QString &service, const QString &path,
26  const QDBusConnection &connection, QObject *parent)
27  : QDBusAbstractInterface(service, path, ITestServiceInterface::InterfaceName(), connection, parent)
28  {}
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) { out << "Pinged property index via interface" << errorInfo(ok) << Qt::endl; }
40 
42  const CPropertyIndexVariantMap ivmPing = testServiceInterface.pingIndexVariantMap(ivm);
43  ok = pingCompare(ivm, ivmPing, out, verbose, errors);
44  if (verbose) { out << "Pinged variant map via interface" << errorInfo(ok) << Qt::endl; }
45 
46  const CSimulatorPluginInfo pluginInfo("fsx", "FSX Simulator", "FSX", "Flight Simulator X", true);
47  const CSimulatorPluginInfo pluginInfoPing = testServiceInterface.pingPluginInfo(pluginInfo);
48  ok = pingCompare(pluginInfo, pluginInfoPing, out, verbose, errors);
49  if (verbose) { out << "Pinged info via interface" << errorInfo(ok) << Qt::endl; }
50 
51  const CSpeed speedNotNull(22, CSpeedUnit::m_s());
52  const CSpeed speedNull = CSpeed(0, CSpeedUnit::nullUnit());
53 
54  const CSpeed speedNotNullPing = testServiceInterface.pingSpeed(speedNotNull);
55  ok = pingCompare(speedNotNull, speedNotNullPing, out, verbose, errors);
56  if (verbose) { out << "Pinged not null speed via interface" << errorInfo(ok) << Qt::endl; }
57 
58  const CSpeed speedNullPing = testServiceInterface.pingSpeed(speedNull);
59  ok = pingCompare(speedNull, speedNullPing, out, verbose, errors);
60  if (verbose) { out << "Pinged null speed via interface" << errorInfo(ok) << Qt::endl; }
61 
63  const CAtcStation stationPing = testServiceInterface.pingAtcStation(station);
64  ok = pingCompare(station, stationPing, out, verbose, errors);
65  if (verbose) { out << "Pinged ATC station via interface" << errorInfo(ok) << Qt::endl; }
66 
68  const CAircraftIcaoCode icaoDataPing = testServiceInterface.pingAircraftIcaoData(icaoData);
69  ok = pingCompare(icaoData, icaoDataPing, out, verbose, errors);
70  if (verbose) { out << "Pinged ICAO data via interface" << errorInfo(ok) << Qt::endl; }
71 
72  const CUser user = CTestData::getRandomPilot();
73  const CUser userPing = testServiceInterface.pingUser(user);
74  ok = pingCompare(user, userPing, out, verbose, errors);
75  if (verbose) { out << "Pinged user via interface" << errorInfo(ok) << Qt::endl; }
76 
78  const CAircraftSituation situationPing = testServiceInterface.pingSituation(situation);
79  ok = pingCompare(situation, situationPing, out, verbose, errors);
80  if (verbose) { out << "Pinged situation via interface" << errorInfo(ok) << Qt::endl; }
81 
82  const CTransponder transponder(1234, "C");
83  const CTransponder transponderPing = testServiceInterface.pingTransponder(transponder);
84  ok = pingCompare(transponder, transponderPing, out, verbose, errors);
85  if (verbose) { out << "Pinged transponder via interface" << errorInfo(ok) << Qt::endl; }
86 
87  const CAircraftLights lights(true, false, true, false, true, false);
88  const CAircraftLights lightsPing = testServiceInterface.pingAircraftLights(lights);
89  ok = pingCompare(lights, lightsPing, out, verbose, errors);
90  if (verbose) { out << "Pinged lights via interface" << errorInfo(ok) << Qt::endl; }
91 
92  const CAircraftEngine engine(2, false);
93  const CAircraftEngine enginePing = testServiceInterface.pingAircraftEngine(engine);
94  ok = pingCompare(engine, enginePing, out, verbose, errors);
95  if (verbose) { out << "Pinged engine via interface" << errorInfo(ok) << Qt::endl; }
96 
97  const CAircraftEngineList engines({ engine });
98  const CAircraftParts parts(lights, true, 11, true, engines, true);
99  const CAircraftParts partsPing = testServiceInterface.pingAircraftParts(parts);
100  ok = pingCompare(parts, partsPing, out, verbose, errors);
101  if (verbose) { out << "Pinged engine via interface" << errorInfo(ok) << Qt::endl; }
102 
104  const CAircraftModel modelPing = testServiceInterface.pingAircraftModel(model);
105  ok = pingCompare(model, modelPing, out, verbose, errors);
106  if (verbose) { out << "Pinged model via interface" << errorInfo(ok) << Qt::endl; }
107 
109  const CAircraftModelList modelsPing = testServiceInterface.pingAircraftModelList(models);
110  ok = pingCompare(models, modelsPing, out, verbose, errors);
111  if (verbose) { out << "Pinged model list via interface" << errorInfo(ok) << Qt::endl; }
112 
114  const CSimulatedAircraft aircraftPing = testServiceInterface.pingSimulatedAircraft(aircraft);
115  ok = pingCompare(aircraft, aircraftPing, out, verbose, errors);
116  if (verbose) { out << "Pinged simulated aircraft via interface" << errorInfo(ok) << Qt::endl; }
117 
118  const CAtcStationList atcStationList = CTestData::getAtcStations();
119  const CAtcStationList atcStationListPing = testServiceInterface.pingAtcStationList(atcStationList);
120  ok = pingCompare(atcStationList, atcStationListPing, out, verbose, errors);
121  if (verbose) { out << "Pinged ATC station list via interface" << errorInfo(ok) << Qt::endl; }
122 
123  const CAirportList airportList = CTesting::getAirports(10);
124  const CAirportList airportListPing = testServiceInterface.pingAirportList(airportList);
125  ok = pingCompare(airportList, airportListPing, out, verbose, errors);
126  if (verbose) { out << "Pinged airports list via interface" << errorInfo(ok) << Qt::endl; }
127 
128  const CClientList clients = CTesting::getClients(10);
129  const CClient client = clients.front();
130  const CClient clientPing = testServiceInterface.pingClient(client);
131  ok = pingCompare(client, clientPing, out, verbose, errors);
132  if (verbose) { out << "Pinged client list via interface" << errorInfo(ok) << Qt::endl; }
133 
134  const CClientList clientsPing = testServiceInterface.pingClientList(clients);
135  ok = pingCompare(clients, clientsPing, out, verbose, errors);
136  if (verbose) { out << "Pinged client list via interface" << errorInfo(ok) << Qt::endl; }
137 
138  CFlightPlan flightPlan;
139  flightPlan.setEnrouteTime(CTime(4, CTimeUnit::h()));
140  flightPlan.setFuelTime(CTime(5, CTimeUnit::h()));
141  flightPlan.setCruiseAltitude(CAltitude(10, CAltitude::FlightLevel, CLengthUnit::km()));
142  flightPlan.setCruiseTrueAirspeed(CSpeed(500, CSpeedUnit::km_h()));
143  const CFlightPlan flightPlanPing = testServiceInterface.pingFlightPlan(flightPlan);
144  ok = pingCompare(flightPlan, flightPlanPing, out, verbose, errors);
145  if (verbose) { out << "Pinged flight plan via interface" << errorInfo(ok) << Qt::endl; }
146 
147  const CVariant cv = CVariant::fromValue(clients);
148  const CVariant cvPing = testServiceInterface.pingCVariant(cv);
149  ok = pingCompare(cv.value<CClientList>(), cvPing.value<CClientList>(), out, verbose, errors);
150  if (verbose) { out << "Pinged CVariant(clients) list via interface" << errorInfo(ok) << Qt::endl; }
151 
152  const CVariant cv2 = CVariant::fromValue(aircraft);
153  const CVariant cv2Ping = testServiceInterface.pingCVariant(cv2);
154  ok = pingCompare(cv2.value<CSimulatedAircraft>(), cv2Ping.value<CSimulatedAircraft>(), out, verbose, errors);
155  if (verbose) { out << "Pinged CVariant(aircraft) list via interface" << errorInfo(ok) << Qt::endl; }
156 
157  // end
158  return errors;
159  }
160 
161  const char *ITestServiceInterface::InterfaceName()
162  {
163  static const QByteArray in(CTestService::InterfaceName().toLatin1());
164  return in.constData();
165  }
166 
167  const QString &ITestServiceInterface::errorInfo(bool ok)
168  {
169  static const QString sOk(": ok");
170  static const QString sError(": !! ERROR !!");
171  return ok ? sOk : sError;
172  }
173 } // 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:66
static CVariant fromValue(T &&value)
Construct a variant from a value.
Definition: variant.h:136
T value() const
Return the value converted to the type T.
Definition: variant.h:166
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.
Definition: aircraftparts.h:26
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
Aircraft model (used by another pilot, my models on disk)
Definition: aircraftmodel.h:71
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::network::CUser & getRandomPilot()
Get a random pilot user.
static const swift::misc::CPropertyIndexVariantMap & getCPropertyIndexVariantMap()
Get a variant map.
static const swift::misc::aviation::CAircraftSituation & getAircraftSituationAboveMunichTower()
Aircraft situation (Munich)
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::simulation::CAircraftModel & getDbAircraftModelFsxAerosoftA320()
FSX aircraft model, an Airbus A320.
static const swift::misc::simulation::CSimulatedAircraft & getA320Aircraft()
A320 simulated aircraft, a A.
static const QString & InterfaceName()
DBus interface name.
Definition: testservice.cpp:45
static swift::misc::network::CClientList getClients(int number)
Get clients.
Definition: testing.cpp:111
static swift::misc::aviation::CAirportList getAirports(int number)
Get airports.
Definition: testing.cpp:97
Proxy class for swift::misc::Test::CTestService. This part is the caller.
QDBusPendingReply< swift::misc::aviation::CFlightPlan > pingFlightPlan(const aviation::CFlightPlan &flightPlan)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CTransponder > pingTransponder(const swift::misc::aviation::CTransponder &transponder)
DBus calls.
QDBusPendingReply< swift::misc::network::CClientList > pingClientList(const swift::misc::network::CClientList &clientList)
DBus calls.
QDBusPendingReply< swift::misc::simulation::CAircraftModel > pingAircraftModel(const swift::misc::simulation::CAircraftModel &model)
DBus calls.
QDBusPendingReply< swift::misc::CPropertyIndexVariantMap > pingIndexVariantMap(const swift::misc::CPropertyIndexVariantMap &indexVariantMap)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAircraftIcaoCode > pingAircraftIcaoData(const swift::misc::aviation::CAircraftIcaoCode &icaoData)
DBus calls.
QDBusPendingReply< swift::misc::network::CUser > pingUser(const swift::misc::network::CUser &user)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAtcStation > pingAtcStation(const swift::misc::aviation::CAtcStation &station)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAirportList > pingAirportList(const swift::misc::aviation::CAirportList &airportList)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAircraftLights > pingAircraftLights(const swift::misc::aviation::CAircraftLights &lights)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAtcStationList > pingAtcStationList(const swift::misc::aviation::CAtcStationList &atcStationList)
DBus calls.
QDBusPendingReply< swift::misc::simulation::CAircraftModelList > pingAircraftModelList(const swift::misc::simulation::CAircraftModelList &model)
DBus calls.
QDBusPendingReply< swift::misc::CPropertyIndex > pingPropertyIndex(const swift::misc::CPropertyIndex &index)
DBus calls.
QDBusPendingReply< swift::misc::CVariant > pingCVariant(const swift::misc::CVariant &variant)
DBus calls.
static int pingTests(ITestServiceInterface &testServiceInterface, bool verbose)
Ping via DBus, tests object marshalling/unmarshalling.
QDBusPendingReply< swift::misc::network::CClient > pingClient(const swift::misc::network::CClient &client)
DBus calls.
QDBusPendingReply< swift::misc::simulation::CSimulatorPluginInfo > pingPluginInfo(const swift::misc::simulation::CSimulatorPluginInfo &info)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAircraftSituation > pingSituation(const swift::misc::aviation::CAircraftSituation &situation)
DBus calls.
QDBusPendingReply< swift::misc::physical_quantities::CSpeed > pingSpeed(const swift::misc::physical_quantities::CSpeed &speed)
DBus calls.
QDBusPendingReply< swift::misc::simulation::CSimulatedAircraft > pingSimulatedAircraft(const swift::misc::simulation::CSimulatedAircraft &aircraft)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAircraftParts > pingAircraftParts(const swift::misc::aviation::CAircraftParts &parts)
DBus calls.
QDBusPendingReply< swift::misc::aviation::CAircraftEngine > pingAircraftEngine(const swift::misc::aviation::CAircraftEngine &engine)
DBus calls.
Generate data for testing purposes.
Definition: testdata.h:45
Free functions in swift::misc.
QTextStream & endl(QTextStream &stream)