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 
31 
32  int ITestServiceInterface::pingTests(ITestServiceInterface &testServiceInterface, bool verbose)
33  {
34  int errors = 0;
35  bool ok = false;
36  QTextStream out(stdout);
37 
38  const CPropertyIndex pi({ 1000, 2000, 3000, 4000, 5000 }); // numbers >= global index
39  const CPropertyIndex piPing = testServiceInterface.pingPropertyIndex(pi);
40  ok = pingCompare(pi, piPing, out, verbose, errors);
41  if (verbose) { out << "Pinged property index via interface" << errorInfo(ok) << Qt::endl; }
42 
44  const CPropertyIndexVariantMap ivmPing = testServiceInterface.pingIndexVariantMap(ivm);
45  ok = pingCompare(ivm, ivmPing, out, verbose, errors);
46  if (verbose) { out << "Pinged variant map via interface" << errorInfo(ok) << Qt::endl; }
47 
48  const CSimulatorPluginInfo pluginInfo("fsx", "FSX Simulator", "FSX", "Flight Simulator X", true);
49  const CSimulatorPluginInfo pluginInfoPing = testServiceInterface.pingPluginInfo(pluginInfo);
50  ok = pingCompare(pluginInfo, pluginInfoPing, out, verbose, errors);
51  if (verbose) { out << "Pinged info via interface" << errorInfo(ok) << Qt::endl; }
52 
53  const CSpeed speedNotNull(22, CSpeedUnit::m_s());
54  const CSpeed speedNull = CSpeed(0, CSpeedUnit::nullUnit());
55 
56  const CSpeed speedNotNullPing = testServiceInterface.pingSpeed(speedNotNull);
57  ok = pingCompare(speedNotNull, speedNotNullPing, out, verbose, errors);
58  if (verbose) { out << "Pinged not null speed via interface" << errorInfo(ok) << Qt::endl; }
59 
60  const CSpeed speedNullPing = testServiceInterface.pingSpeed(speedNull);
61  ok = pingCompare(speedNull, speedNullPing, out, verbose, errors);
62  if (verbose) { out << "Pinged null speed via interface" << errorInfo(ok) << Qt::endl; }
63 
65  const CAtcStation stationPing = testServiceInterface.pingAtcStation(station);
66  ok = pingCompare(station, stationPing, out, verbose, errors);
67  if (verbose) { out << "Pinged ATC station via interface" << errorInfo(ok) << Qt::endl; }
68 
70  const CAircraftIcaoCode icaoDataPing = testServiceInterface.pingAircraftIcaoData(icaoData);
71  ok = pingCompare(icaoData, icaoDataPing, out, verbose, errors);
72  if (verbose) { out << "Pinged ICAO data via interface" << errorInfo(ok) << Qt::endl; }
73 
74  const CUser user = CTestData::getRandomPilot();
75  const CUser userPing = testServiceInterface.pingUser(user);
76  ok = pingCompare(user, userPing, out, verbose, errors);
77  if (verbose) { out << "Pinged user via interface" << errorInfo(ok) << Qt::endl; }
78 
80  const CAircraftSituation situationPing = testServiceInterface.pingSituation(situation);
81  ok = pingCompare(situation, situationPing, out, verbose, errors);
82  if (verbose) { out << "Pinged situation via interface" << errorInfo(ok) << Qt::endl; }
83 
84  const CTransponder transponder(1234, "C");
85  const CTransponder transponderPing = testServiceInterface.pingTransponder(transponder);
86  ok = pingCompare(transponder, transponderPing, out, verbose, errors);
87  if (verbose) { out << "Pinged transponder via interface" << errorInfo(ok) << Qt::endl; }
88 
89  const CAircraftLights lights(true, false, true, false, true, false);
90  const CAircraftLights lightsPing = testServiceInterface.pingAircraftLights(lights);
91  ok = pingCompare(lights, lightsPing, out, verbose, errors);
92  if (verbose) { out << "Pinged lights via interface" << errorInfo(ok) << Qt::endl; }
93 
94  const CAircraftEngine engine(2, false);
95  const CAircraftEngine enginePing = testServiceInterface.pingAircraftEngine(engine);
96  ok = pingCompare(engine, enginePing, out, verbose, errors);
97  if (verbose) { out << "Pinged engine via interface" << errorInfo(ok) << Qt::endl; }
98 
99  const CAircraftEngineList engines({ engine });
100  const CAircraftParts parts(lights, true, 11, true, engines, true);
101  const CAircraftParts partsPing = testServiceInterface.pingAircraftParts(parts);
102  ok = pingCompare(parts, partsPing, out, verbose, errors);
103  if (verbose) { out << "Pinged engine via interface" << errorInfo(ok) << Qt::endl; }
104 
106  const CAircraftModel modelPing = testServiceInterface.pingAircraftModel(model);
107  ok = pingCompare(model, modelPing, out, verbose, errors);
108  if (verbose) { out << "Pinged model via interface" << errorInfo(ok) << Qt::endl; }
109 
111  const CAircraftModelList modelsPing = testServiceInterface.pingAircraftModelList(models);
112  ok = pingCompare(models, modelsPing, out, verbose, errors);
113  if (verbose) { out << "Pinged model list via interface" << errorInfo(ok) << Qt::endl; }
114 
116  const CSimulatedAircraft aircraftPing = testServiceInterface.pingSimulatedAircraft(aircraft);
117  ok = pingCompare(aircraft, aircraftPing, out, verbose, errors);
118  if (verbose) { out << "Pinged simulated aircraft via interface" << errorInfo(ok) << Qt::endl; }
119 
120  const CAtcStationList atcStationList = CTestData::getAtcStations();
121  const CAtcStationList atcStationListPing = testServiceInterface.pingAtcStationList(atcStationList);
122  ok = pingCompare(atcStationList, atcStationListPing, out, verbose, errors);
123  if (verbose) { out << "Pinged ATC station list via interface" << errorInfo(ok) << Qt::endl; }
124 
125  const CAirportList airportList = CTesting::getAirports(10);
126  const CAirportList airportListPing = testServiceInterface.pingAirportList(airportList);
127  ok = pingCompare(airportList, airportListPing, out, verbose, errors);
128  if (verbose) { out << "Pinged airports list via interface" << errorInfo(ok) << Qt::endl; }
129 
130  const CClientList clients = CTesting::getClients(10);
131  const CClient client = clients.front();
132  const CClient clientPing = testServiceInterface.pingClient(client);
133  ok = pingCompare(client, clientPing, out, verbose, errors);
134  if (verbose) { out << "Pinged client list via interface" << errorInfo(ok) << Qt::endl; }
135 
136  const CClientList clientsPing = testServiceInterface.pingClientList(clients);
137  ok = pingCompare(clients, clientsPing, out, verbose, errors);
138  if (verbose) { out << "Pinged client list via interface" << errorInfo(ok) << Qt::endl; }
139 
140  CFlightPlan flightPlan;
141  flightPlan.setEnrouteTime(CTime(4, CTimeUnit::h()));
142  flightPlan.setFuelTime(CTime(5, CTimeUnit::h()));
143  flightPlan.setCruiseAltitude(CAltitude(10, CAltitude::FlightLevel, CLengthUnit::km()));
144  flightPlan.setCruiseTrueAirspeed(CSpeed(500, CSpeedUnit::km_h()));
145  const CFlightPlan flightPlanPing = testServiceInterface.pingFlightPlan(flightPlan);
146  ok = pingCompare(flightPlan, flightPlanPing, out, verbose, errors);
147  if (verbose) { out << "Pinged flight plan via interface" << errorInfo(ok) << Qt::endl; }
148 
149  const CVariant cv = CVariant::fromValue(clients);
150  const CVariant cvPing = testServiceInterface.pingCVariant(cv);
151  ok = pingCompare(cv.value<CClientList>(), cvPing.value<CClientList>(), out, verbose, errors);
152  if (verbose) { out << "Pinged CVariant(clients) list via interface" << errorInfo(ok) << Qt::endl; }
153 
154  const CVariant cv2 = CVariant::fromValue(aircraft);
155  const CVariant cv2Ping = testServiceInterface.pingCVariant(cv2);
156  ok = pingCompare(cv2.value<CSimulatedAircraft>(), cv2Ping.value<CSimulatedAircraft>(), out, verbose, errors);
157  if (verbose) { out << "Pinged CVariant(aircraft) list via interface" << errorInfo(ok) << Qt::endl; }
158 
159  // end
160  return errors;
161  }
162 
163  const char *ITestServiceInterface::InterfaceName()
164  {
165  static const QByteArray in(CTestService::InterfaceName().toLatin1());
166  return in.constData();
167  }
168 
169  const QString &ITestServiceInterface::errorInfo(bool ok)
170  {
171  static const QString sOk(": ok");
172  static const QString sError(": !! ERROR !!");
173  return ok ? sOk : sError;
174  }
175 } // 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:139
T value() const
Return the value converted to the type T.
Definition: variant.h:169
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.