47 using namespace swift::misc::aviation;
48 using namespace swift::misc::network;
49 using namespace swift::config;
50 using namespace swift::core::fsd;
69 void testAtcDataUpdate();
70 void testAuthChallenge();
71 void testAuthResponse();
72 void testClientIdentification();
73 void testClientQuery();
74 void testClientResponse();
76 void testDeletePilot();
77 void testEuroscopeSimData();
78 void testFlightPlan();
79 void testFSDIdentification();
80 void testInterimPilotDataUpdate();
81 void testKillRequest();
83 void testPilotDataUpdate();
84 void testVisualPilotDataUpdate();
85 void testVisualPilotDataToggle();
87 void testPlaneInfoRequest();
88 void testPlaneInformation();
89 void testPlaneInfoRequestFsinn();
90 void testPlaneInformationFsinn();
92 void testServerError();
93 void testTextMessage();
96 void CTestFsdMessages::testAddAtc()
98 const AddAtc message(
"ABCD",
"Jon Doe",
"1234567",
"1234567", AtcRating::Student3, 100);
100 QCOMPARE(message.sender(),
"ABCD");
101 QCOMPARE(message.receiver(),
"SERVER");
102 QCOMPARE(message.cid(),
"1234567");
103 QCOMPARE(message.password(),
"1234567");
104 QCOMPARE(message.rating(), AtcRating::Student3);
105 QCOMPARE(message.protocolRevision(), 100);
106 QCOMPARE(message.realName(),
"Jon Doe");
108 QString stringRef(
"ABCD:SERVER:Jon Doe:1234567:1234567:4:100");
109 QString str = message.toTokens().join(
":");
110 QCOMPARE(str, stringRef);
112 QStringList tokens = QString(
"ABCD:SERVER:Jon Doe:1234567:1234567:4:100").split(
':');
113 const AddAtc messageFromTokens = AddAtc::fromTokens(tokens);
114 QCOMPARE(messageFromTokens, message);
117 void CTestFsdMessages::testAddPilot()
119 const AddPilot message(
"ABCD",
"1234567",
"1234567", PilotRating::Student, 100, SimType::MSFS95,
"Jon Doe");
120 QCOMPARE(message.sender(), QString(
"ABCD"));
121 QCOMPARE(message.receiver(), QString(
"SERVER"));
122 QCOMPARE(message.cid(), QString(
"1234567"));
123 QCOMPARE(message.password(), QString(
"1234567"));
124 QCOMPARE(message.rating(), PilotRating::Student);
125 QCOMPARE(message.protocolVersion(), 100);
126 QCOMPARE(message.realName(), QString(
"Jon Doe"));
127 QCOMPARE(message.simType(), SimType::MSFS95);
129 QString stringRef(
"ABCD:SERVER:1234567:1234567:1:100:1:Jon Doe");
130 QString str = message.toTokens().join(
":");
131 QCOMPARE(str, stringRef);
133 QStringList tokens = QString(
"ABCD:SERVER:1234567:1234567:1:100:1:Jon Doe").split(
':');
134 const AddPilot messageFromTokens = AddPilot::fromTokens(tokens);
135 QCOMPARE(messageFromTokens, message);
138 void CTestFsdMessages::testAtcDataUpdate()
140 const AtcDataUpdate message(
"ABCD", 128200, CFacilityType::APP, 145, AtcRating::Controller1, 48.11028, 8.56972,
142 QCOMPARE(message.sender(), QString(
"ABCD"));
143 QCOMPARE(message.receiver(), QString(
""));
144 QCOMPARE(message.m_frequencykHz, 128200);
145 QCOMPARE(message.m_facility, CFacilityType::APP);
146 QCOMPARE(message.m_visibleRange, 145);
147 QCOMPARE(message.m_rating, AtcRating::Controller1);
148 QCOMPARE(message.m_latitude, 48.11028);
149 QCOMPARE(message.m_longitude, 8.56972);
150 QCOMPARE(message.m_elevation, 100);
152 QString stringRef(
"ABCD:28200:5:145:5:48.11028:8.56972:100");
153 QString str = message.toTokens().join(
":");
154 QCOMPARE(str, stringRef);
156 const AtcDataUpdate reference(
"ABCD", 128200, CFacilityType::APP, 145, AtcRating::Controller1, 48.11028,
159 QStringList tokens = QString(
"ABCD:28200:5:145:5:48.11028:8.56972:100").split(
':');
160 const AtcDataUpdate messageFromTokens = AtcDataUpdate::fromTokens(tokens);
161 QCOMPARE(reference, messageFromTokens);
164 void CTestFsdMessages::testAuthChallenge()
166 const AuthChallenge message(
"ABCD",
"SERVER",
"7a57f2dd9d360d347b");
167 QCOMPARE(message.sender(), QString(
"ABCD"));
168 QCOMPARE(message.receiver(), QString(
"SERVER"));
169 QCOMPARE(QString(
"7a57f2dd9d360d347b"), message.m_challengeKey);
171 const QString stringRef(
"ABCD:SERVER:7a57f2dd9d360d347b");
172 const QString str = message.toTokens().join(
":");
173 QCOMPARE(str, stringRef);
175 const QStringList tokens = QString(
"ABCD:SERVER:7a57f2dd9d360d347b").split(
':');
176 const AuthChallenge messageFromTokens = AuthChallenge::fromTokens(tokens);
177 QCOMPARE(messageFromTokens, message);
180 void CTestFsdMessages::testAuthResponse()
182 const AuthResponse message(
"ABCD",
"SERVER",
"7a57f2dd9d360d347b");
183 QCOMPARE(message.sender(), QString(
"ABCD"));
184 QCOMPARE(message.receiver(), QString(
"SERVER"));
185 QCOMPARE(QString(
"7a57f2dd9d360d347b"), message.m_response);
187 const QString stringRef(
"ABCD:SERVER:7a57f2dd9d360d347b");
188 const QString str = message.toTokens().join(
":");
189 QCOMPARE(str, stringRef);
191 const AuthResponse reference(
"ABCD",
"SERVER",
"7a57f2dd9d360d347b");
193 const QStringList tokens = QString(
"ABCD:SERVER:7a57f2dd9d360d347b").split(
':');
194 const AuthResponse messageFromTokens = AuthResponse::fromTokens(tokens);
195 QCOMPARE(messageFromTokens, message);
198 void CTestFsdMessages::testClientIdentification()
201 "29bbc8b1398eb38e0139");
202 QCOMPARE(message.sender(), QString(
"ABCD"));
203 QCOMPARE(message.receiver(), QString(
"SERVER"));
204 QCOMPARE(0xe410, message.m_clientId);
205 QCOMPARE(
"Client", message.m_clientName);
206 QCOMPARE(1, message.m_clientVersionMajor);
207 QCOMPARE(5, message.m_clientVersionMinor);
208 QCOMPARE(QString(
"1234567"), message.m_userCid);
209 QCOMPARE(QString(
"1108540872"), message.m_sysUid);
210 QCOMPARE(QString(
"29bbc8b1398eb38e0139"), message.m_initialChallenge);
212 QString stringRef(
"ABCD:SERVER:e410:Client:1:5:1234567:1108540872:29bbc8b1398eb38e0139");
213 QString str = message.toTokens().join(
":");
214 QCOMPARE(str, stringRef);
217 "29bbc8b1398eb38e0139");
219 const QStringList tokens =
220 QString(
"ABCD:SERVER:e410:Client:1:5:1234567:1108540872:29bbc8b1398eb38e0139").split(
':');
222 QCOMPARE(messageFromTokens, message);
225 void CTestFsdMessages::testClientQuery()
251 void CTestFsdMessages::testClientResponse()
253 const ClientResponse message(
"ABCD",
"SERVER", ClientQueryType::Capabilities, {
"MODELDESC=1",
"ATCINFO=1" });
254 QCOMPARE(message.sender(), QString(
"ABCD"));
255 QCOMPARE(message.receiver(), QString(
"SERVER"));
256 QCOMPARE(ClientQueryType::Capabilities, message.m_queryType);
257 QStringList reference {
"MODELDESC=1",
"ATCINFO=1" };
258 QCOMPARE(reference, message.m_responseData);
260 QString stringRef(
"ABCD:SERVER:CAPS:MODELDESC=1:ATCINFO=1");
261 auto str = message.toTokens().join(
":");
262 QCOMPARE(str, stringRef);
264 QStringList tokens = QString(
"ABCD:SERVER:CAPS:MODELDESC=1:ATCINFO=1").split(
':');
265 auto messageFromTokens = ClientResponse::fromTokens(tokens);
266 QCOMPARE(messageFromTokens, message);
269 void CTestFsdMessages::testDeleteAtc()
271 const DeleteAtc message(
"ABCD",
"1234567");
273 QCOMPARE(message.sender(), QString(
"ABCD"));
274 QCOMPARE(QString(
""), message.receiver());
275 QCOMPARE(QString(
"1234567"), message.m_cid);
277 QString stringRef(
"ABCD:1234567");
278 QString str = message.toTokens().join(
":");
279 QCOMPARE(str, stringRef);
281 QStringList tokens = QString(
"ABCD:1234567").split(
':');
282 auto messageFromTokens = DeleteAtc::fromTokens(tokens);
283 QCOMPARE(messageFromTokens, message);
286 void CTestFsdMessages::testDeletePilot()
290 QCOMPARE(message.sender(), QString(
"ABCD"));
291 QCOMPARE(QString(
""), message.receiver());
292 QCOMPARE(QString(
"1234567"), message.m_cid);
294 QString stringRef(
"ABCD:1234567");
295 QString str = message.toTokens().join(
":");
296 QCOMPARE(str, stringRef);
298 QStringList tokens = QString(
"ABCD:1234567").split(
':');
299 auto messageFromTokens = DeletePilot::fromTokens(tokens);
300 QCOMPARE(messageFromTokens, message);
303 void CTestFsdMessages::testEuroscopeSimData()
305 const EuroscopeSimData message(
"ABCD",
"A320",
"DLH", 0, 43.1257800, -72.1584100, 12000, 180, 10, -10, 250,
308 QCOMPARE(message.sender(), QString(
"ABCD"));
309 QCOMPARE(QString(
""), message.receiver());
310 QCOMPARE(43.12578, message.m_latitude);
311 QCOMPARE(-72.15841, message.m_longitude);
312 QCOMPARE(12000, message.m_altitude);
313 QCOMPARE(180, message.m_heading);
314 QCOMPARE(10, message.m_bank);
315 QCOMPARE(-10, message.m_pitch);
316 QCOMPARE(250, message.m_groundSpeed);
317 QCOMPARE(
false, message.m_onGround);
318 QCOMPARE(0, message.m_gearPercent);
319 QCOMPARE(50, message.m_thrustPercent);
322 QString stringRef(
":ABCD:A320:DLH:0:43.1257800:-72.1584100:12000.0:180.00:10:-10:250:0:0:50:0:0.0:0");
323 QString str = message.toTokens().join(
":");
324 QCOMPARE(str, stringRef);
327 QString(
":ABCD:A320:DLH:0:43.1257800:-72.1584100:12000:180.00:10:-10:250:0:0:50:0:0.0:0").split(
':');
328 auto messageFromTokens = EuroscopeSimData::fromTokens(tokens);
329 QCOMPARE(QString(
"ABCD"), messageFromTokens.sender());
330 QCOMPARE(QString(
""), messageFromTokens.receiver());
331 QCOMPARE(43.12578, messageFromTokens.m_latitude);
332 QCOMPARE(-72.15841, messageFromTokens.m_longitude);
333 QCOMPARE(12000, messageFromTokens.m_altitude);
334 QCOMPARE(180, messageFromTokens.m_heading);
335 QCOMPARE(10, messageFromTokens.m_bank);
336 QCOMPARE(-10, messageFromTokens.m_pitch);
337 QCOMPARE(250, messageFromTokens.m_groundSpeed);
338 QCOMPARE(
false, messageFromTokens.m_onGround);
339 QCOMPARE(0, messageFromTokens.m_gearPercent);
340 QCOMPARE(50, messageFromTokens.m_thrustPercent);
344 void CTestFsdMessages::testFlightPlan()
346 const FlightPlan message(
"ABCD",
"SERVER", FlightType::VFR,
"B744", 420,
"EGLL", 1530, 1535,
"FL350",
"KORD", 8,
347 15, 9, 30,
"NONE",
"Unit Test",
"EGLL.KORD");
349 QCOMPARE(message.sender(), QString(
"ABCD"));
350 QCOMPARE(message.receiver(), QString(
"SERVER"));
351 QCOMPARE(FlightType::VFR, message.m_flightType);
352 QCOMPARE(QString(
"B744"), message.m_aircraftIcaoType);
353 QCOMPARE(420, message.m_trueCruisingSpeed);
354 QCOMPARE(QString(
"EGLL"), message.m_depAirport);
355 QCOMPARE(1530, message.m_estimatedDepTime);
356 QCOMPARE(1535, message.m_actualDepTime);
357 QCOMPARE(QString(
"FL350"), message.m_cruiseAlt);
358 QCOMPARE(QString(
"KORD"), message.m_destAirport);
359 QCOMPARE(8, message.m_hoursEnroute);
360 QCOMPARE(15, message.m_minutesEnroute);
361 QCOMPARE(9, message.m_fuelAvailHours);
362 QCOMPARE(30, message.m_fuelAvailMinutes);
363 QCOMPARE(QString(
"NONE"), message.m_altAirport);
364 QCOMPARE(QString(
"Unit Test"), message.m_remarks);
365 QCOMPARE(QString(
"EGLL.KORD"), message.m_route);
367 QString stringRef(
"ABCD:SERVER:V:B744:420:EGLL:1530:1535:FL350:KORD:8:15:9:30:NONE:Unit Test:EGLL.KORD");
368 QString str = message.toTokens().join(
":");
369 QCOMPARE(str, stringRef);
372 QString(
"ABCD:SERVER:V:B744:420:EGLL:1530:1535:FL350:KORD:8:15:9:30:NONE:Unit Test:EGLL.KORD").split(
':');
373 auto messageFromTokens = FlightPlan::fromTokens(tokens);
374 QCOMPARE(messageFromTokens, message);
377 void CTestFsdMessages::testFSDIdentification() {}
379 void CTestFsdMessages::testInterimPilotDataUpdate()
383 QCOMPARE(message.sender(), QString(
"ABCD"));
384 QCOMPARE(QString(
"XYZ"), message.receiver());
385 QCOMPARE(43.12578, message.m_latitude);
386 QCOMPARE(-72.15841, message.m_longitude);
387 QCOMPARE(12008, message.m_altitudeTrue);
388 QCOMPARE(400, message.m_groundSpeed);
389 QCOMPARE(-2, message.m_pitch);
390 QCOMPARE(3, message.m_bank);
391 QCOMPARE(280, message.m_heading);
392 QCOMPARE(
true, message.m_onGround);
394 QString stringRef(
"ABCD:XYZ:VI:43.12578:-72.15841:12008:400:25132146");
395 QString str = message.toTokens().join(
":");
396 QCOMPARE(str, stringRef);
398 QStringList tokens = QString(
"ABCD:XYZ:VI:43.12578:-72.15841:12008:400:25132146").split(
':');
399 auto messageFromTokens = InterimPilotDataUpdate::fromTokens(tokens);
400 QCOMPARE(QString(
"ABCD"), messageFromTokens.sender());
401 QCOMPARE(QString(
"XYZ"), messageFromTokens.receiver());
402 QCOMPARE(43.12578, messageFromTokens.m_latitude);
403 QCOMPARE(-72.15841, messageFromTokens.m_longitude);
404 QCOMPARE(12008, messageFromTokens.m_altitudeTrue);
405 QCOMPARE(400, messageFromTokens.m_groundSpeed);
406 QVERIFY(message.m_pitch - messageFromTokens.m_pitch < 1.0);
407 QVERIFY(message.m_bank - messageFromTokens.m_bank < 1.0);
408 QVERIFY(message.m_heading - messageFromTokens.m_heading < 1.0);
409 QCOMPARE(messageFromTokens.m_onGround,
true);
412 void CTestFsdMessages::testKillRequest()
414 const KillRequest message(
"SUP",
"ABCD",
"I don't like you!");
416 QCOMPARE(QString(
"SUP"), message.sender());
417 QCOMPARE(QString(
"ABCD"), message.receiver());
418 QCOMPARE(QString(
"I don't like you!"), message.m_reason);
420 QString stringRef(
"SUP:ABCD:I don't like you!");
421 QString str = message.toTokens().join(
":");
422 QCOMPARE(str, stringRef);
424 QStringList tokens = QString(
"SUP:ABCD:I don't like you!").split(
':');
425 auto messageFromTokens = KillRequest::fromTokens(tokens);
426 QCOMPARE(messageFromTokens, message);
429 void CTestFsdMessages::testPBH()
433 int pitch, bank, heading;
435 QVector<PBH> testData;
436 for (
int pitch = -90; pitch < 90; pitch++) { testData.push_back({ pitch, 0, 0 }); }
437 for (
int bank = -179; bank < 180; bank++) { testData.push_back({ 0, bank, 0 }); }
438 for (
int heading = 0; heading < 360; heading++) { testData.push_back({ 0, 0, heading }); }
439 for (
const auto &input : testData)
441 std::uint32_t pbh = 0;
442 packPBH(input.pitch, input.bank, input.heading,
true, pbh);
447 bool onGround2 =
false;
448 unpackPBH(pbh, pitch2, bank2, heading2, onGround2);
449 QVERIFY(pitch2 >= -90);
450 QVERIFY(pitch2 < 90);
451 QVERIFY(bank2 >= -180);
452 QVERIFY(bank2 < 180);
453 QVERIFY(heading2 >= 0);
454 QVERIFY(heading2 < 360);
455 QCOMPARE(input.pitch, pitch2);
456 QCOMPARE(input.bank, bank2);
457 QCOMPARE(
true, onGround2);
459 if (input.heading < 0) { heading2 -= 360; }
460 QVERIFY(qAbs(input.heading - heading2) < 1);
464 void CTestFsdMessages::testPilotDataUpdate()
466 const PilotDataUpdate message(CTransponder::ModeC,
"ABCD", 7000, PilotRating::Student, 43.12578, -72.15841,
467 12000, 12008, 125, -2, 3, 280,
true);
469 QCOMPARE(message.sender(), QString(
"ABCD"));
470 QCOMPARE(QString(
""), message.receiver());
471 QCOMPARE(CTransponder::ModeC, message.m_transponderMode);
472 QCOMPARE(7000, message.m_transponderCode);
473 QCOMPARE(PilotRating::Student, message.m_rating);
474 QCOMPARE(43.12578, message.m_latitude);
475 QCOMPARE(-72.15841, message.m_longitude);
476 QCOMPARE(12000, message.m_altitudeTrue);
477 QCOMPARE(12008, message.m_altitudePressure);
478 QCOMPARE(125, message.m_groundSpeed);
479 QCOMPARE(-2, message.m_pitch);
480 QCOMPARE(3, message.m_bank);
481 QCOMPARE(280, message.m_heading);
482 QCOMPARE(
true, message.m_onGround);
484 QString stringRef(
"N:ABCD:7000:1:43.12578:-72.15841:12000:125:25132146:8");
485 QString str = message.toTokens().join(
":");
486 QCOMPARE(str, stringRef);
488 QStringList tokens = QString(
"N:ABCD:7000:1:43.12578:-72.15841:12000:125:25132146:8").split(
':');
489 auto messageFromTokens = PilotDataUpdate::fromTokens(tokens);
490 QCOMPARE(QString(
"ABCD"), messageFromTokens.sender());
491 QCOMPARE(QString(
""), messageFromTokens.receiver());
492 QCOMPARE(CTransponder::ModeC, messageFromTokens.m_transponderMode);
493 QCOMPARE(7000, messageFromTokens.m_transponderCode);
494 QCOMPARE(PilotRating::Student, messageFromTokens.m_rating);
495 QCOMPARE(43.12578, messageFromTokens.m_latitude);
496 QCOMPARE(-72.15841, messageFromTokens.m_longitude);
497 QCOMPARE(12000, messageFromTokens.m_altitudeTrue);
498 QCOMPARE(12008, messageFromTokens.m_altitudePressure);
499 QCOMPARE(125, messageFromTokens.m_groundSpeed);
500 QVERIFY(message.m_pitch - messageFromTokens.m_pitch < 1.0);
501 QVERIFY(message.m_bank - messageFromTokens.m_bank < 1.0);
502 QVERIFY(message.m_heading - messageFromTokens.m_heading < 1.0);
503 QCOMPARE(messageFromTokens.m_onGround,
true);
506 void CTestFsdMessages::testVisualPilotDataUpdate()
508 const VisualPilotDataUpdate message(
"ABCD", 43.1257891, -72.1584142, 12000.12, 1404.00, -2, 3, 280, -1.0001,
509 2.0001, 3.0001, -0.0349, 0.0524, 0.0175);
511 QCOMPARE(QString(
"ABCD"), message.sender());
512 QCOMPARE(43.1257891, message.m_latitude);
513 QCOMPARE(-72.1584142, message.m_longitude);
514 QCOMPARE(12000.12, message.m_altitudeTrue);
515 QCOMPARE(1404.00, message.m_heightAgl);
516 QCOMPARE(-2, message.m_pitch);
517 QCOMPARE(3, message.m_bank);
518 QCOMPARE(280, message.m_heading);
519 QCOMPARE(-1.0001, message.m_xVelocity);
520 QCOMPARE(2.0001, message.m_yVelocity);
521 QCOMPARE(3.0001, message.m_zVelocity);
522 QCOMPARE(-0.0349, message.m_pitchRadPerSec);
523 QCOMPARE(0.0524, message.m_bankRadPerSec);
524 QCOMPARE(0.0175, message.m_headingRadPerSec);
525 QCOMPARE(0.0, message.m_noseGearAngle);
528 "ABCD:43.1257891:-72.1584142:12000.12:1404.00:25132144:-1.0001:2.0001:3.0001:-0.0349:0.0175:0.0524:0.00");
529 QString str = message.toTokens().join(
":");
530 QCOMPARE(str, stringRef);
532 QStringList tokens = QString(
"ABCD:43.1257891:-72.1584142:12000.12:1404.00:25132144:-1.0001:2.0001:3.0001:-0."
533 "0349:0.0175:0.0524:0.00")
535 auto messageFromTokens = VisualPilotDataUpdate::fromTokens(tokens);
536 QCOMPARE(QString(
"ABCD"), messageFromTokens.sender());
537 QCOMPARE(43.1257891, messageFromTokens.m_latitude);
538 QCOMPARE(-72.1584142, messageFromTokens.m_longitude);
539 QCOMPARE(12000.12, messageFromTokens.m_altitudeTrue);
540 QCOMPARE(1404.00, messageFromTokens.m_heightAgl);
541 QVERIFY(message.m_pitch - messageFromTokens.m_pitch < 1.0);
542 QVERIFY(message.m_bank - messageFromTokens.m_bank < 1.0);
543 QVERIFY(message.m_heading - messageFromTokens.m_heading < 1.0);
544 QCOMPARE(-1.0001, messageFromTokens.m_xVelocity);
545 QCOMPARE(2.0001, messageFromTokens.m_yVelocity);
546 QCOMPARE(3.0001, messageFromTokens.m_zVelocity);
547 QCOMPARE(-0.0349, messageFromTokens.m_pitchRadPerSec);
548 QCOMPARE(0.0524, messageFromTokens.m_bankRadPerSec);
549 QCOMPARE(0.0175, messageFromTokens.m_headingRadPerSec);
550 QCOMPARE(0.0, messageFromTokens.m_noseGearAngle);
553 void CTestFsdMessages::testVisualPilotDataToggle()
557 QCOMPARE(QString(
"SERVER"), message.sender());
558 QCOMPARE(QString(
"ABCD"), message.m_client);
559 QCOMPARE(
true, message.m_active);
561 QString stringRef(
"SERVER:ABCD:1");
562 QString str = message.toTokens().join(
":");
563 QCOMPARE(str, stringRef);
565 QStringList tokens = QString(
"SERVER:ABCD:1").split(
':');
566 auto messageFromTokens = VisualPilotDataToggle::fromTokens(tokens);
567 QCOMPARE(QString(
"SERVER"), messageFromTokens.sender());
568 QCOMPARE(QString(
"ABCD"), messageFromTokens.m_client);
569 QCOMPARE(
true, messageFromTokens.m_active);
572 void CTestFsdMessages::testPing()
574 const Ping message(
"ABCD",
"SERVER",
"85275222");
575 QCOMPARE(message.sender(), QString(
"ABCD"));
576 QCOMPARE(message.receiver(), QString(
"SERVER"));
577 QCOMPARE(
"85275222", message.m_timestamp);
579 QString stringRef(
"ABCD:SERVER:85275222");
580 QString str = message.toTokens().join(
":");
581 QCOMPARE(str, stringRef);
583 QStringList tokens = QString(
"ABCD:SERVER:85275222").split(
':');
584 auto messageFromTokens = Ping::fromTokens(tokens);
585 QCOMPARE(messageFromTokens, message);
588 void CTestFsdMessages::testPlaneInfoRequest()
591 QCOMPARE(message.sender(), QString(
"ABCD"));
592 QCOMPARE(QString(
"XYZ"), message.receiver());
594 QString stringRef(
"ABCD:XYZ:PIR");
595 QString str = message.toTokens().join(
":");
596 QCOMPARE(str, stringRef);
598 QStringList tokens = QString(
"ABCD:XYZ:PIR").split(
':');
599 auto messageFromTokens = PlaneInfoRequest::fromTokens(tokens);
600 QCOMPARE(messageFromTokens, message);
603 void CTestFsdMessages::testPlaneInformation()
606 QCOMPARE(message.sender(), QString(
"ABCD"));
607 QCOMPARE(QString(
"XYZ"), message.receiver());
608 QCOMPARE(QString(
"B744"), message.m_aircraft);
609 QCOMPARE(QString(
"BAW"), message.m_airline);
610 QCOMPARE(QString(
"UNION"), message.m_livery);
613 QString stringRef1(
"ABCD:XYZ:PI:GEN:EQUIPMENT=B744");
614 QString str1 = message1.toTokens().join(
":");
615 QCOMPARE(str1, stringRef1);
618 QString stringRef2(
"ABCD:XYZ:PI:GEN:EQUIPMENT=B744:AIRLINE=BAW");
619 QString str2 = message2.toTokens().join(
":");
620 QCOMPARE(str2, stringRef2);
623 QString stringRef3(
"ABCD:XYZ:PI:GEN:EQUIPMENT=B744:AIRLINE=BAW:LIVERY=UNION");
624 QString str3 = message3.toTokens().join(
":");
625 QCOMPARE(str3, stringRef3);
629 QStringList tokens1 = QString(
"ABCD:XYZ:PI:GEN:EQUIPMENT=B744").split(
':');
630 auto messageFromTokens1 = PlaneInformation::fromTokens(tokens1);
631 QCOMPARE(reference1, messageFromTokens1);
635 QStringList tokens2 = QString(
"ABCD:XYZ:PI:GEN:EQUIPMENT=B744:AIRLINE=BAW").split(
':');
636 auto messageFromTokens2 = PlaneInformation::fromTokens(tokens2);
637 QCOMPARE(reference2, messageFromTokens2);
641 QStringList tokens3 = QString(
"ABCD:XYZ:PI:GEN:EQUIPMENT=B744:AIRLINE=BAW:LIVERY=UNION").split(
':');
642 auto messageFromTokens3 = PlaneInformation::fromTokens(tokens3);
643 QCOMPARE(reference3, messageFromTokens3);
646 void CTestFsdMessages::testPlaneInfoRequestFsinn()
648 const PlaneInfoRequestFsinn message(
"ABCD",
"XYZ",
"DLH",
"A320",
"L2J",
"FLIGHTFACTOR A320 LUFTHANSA D-AIPC");
649 QCOMPARE(message.sender(), QString(
"ABCD"));
650 QCOMPARE(QString(
"XYZ"), message.receiver());
651 QCOMPARE(QString(
"DLH"), message.m_airlineIcao);
652 QCOMPARE(QString(
"A320"), message.m_aircraftIcao);
653 QCOMPARE(QString(
"L2J"), message.m_aircraftIcaoCombinedType);
654 QCOMPARE(QString(
"FLIGHTFACTOR A320 LUFTHANSA D-AIPC"), message.m_sendMModelString);
656 QString stringRef(
"ABCD:XYZ:FSIPIR:0:DLH:A320:::::L2J:FLIGHTFACTOR A320 LUFTHANSA D-AIPC");
657 QString str = message.toTokens().join(
":");
658 QCOMPARE(str, stringRef);
661 void CTestFsdMessages::testPlaneInformationFsinn()
663 const PlaneInformationFsinn message(
"ABCD",
"XYZ",
"DLH",
"A320",
"L2J",
"FLIGHTFACTOR A320 LUFTHANSA D-AIPC");
664 QCOMPARE(message.sender(), QString(
"ABCD"));
665 QCOMPARE(QString(
"XYZ"), message.receiver());
666 QCOMPARE(QString(
"DLH"), message.m_airlineIcao);
667 QCOMPARE(QString(
"A320"), message.m_aircraftIcao);
668 QCOMPARE(QString(
"L2J"), message.m_aircraftIcaoCombinedType);
669 QCOMPARE(QString(
"FLIGHTFACTOR A320 LUFTHANSA D-AIPC"), message.m_sendMModelString);
671 QString stringRef(
"ABCD:XYZ:FSIPI:0:DLH:A320:::::L2J:FLIGHTFACTOR A320 LUFTHANSA D-AIPC");
672 QString str = message.toTokens().join(
":");
673 QCOMPARE(str, stringRef);
676 void CTestFsdMessages::testPong()
678 const Pong message(
"ABCD",
"SERVER",
"85275222");
679 QCOMPARE(message.sender(), QString(
"ABCD"));
680 QCOMPARE(message.receiver(), QString(
"SERVER"));
681 QCOMPARE(
"85275222", message.m_timestamp);
683 QString stringRef(
"ABCD:SERVER:85275222");
684 QString str = message.toTokens().join(
":");
685 QCOMPARE(str, stringRef);
687 const Pong reference(
"ABCD",
"SERVER",
"85275222");
689 QStringList tokens = QString(
"ABCD:SERVER:85275222").split(
':');
690 auto messageFromTokens = Pong::fromTokens(tokens);
691 QCOMPARE(messageFromTokens, message);
694 void CTestFsdMessages::testServerError()
696 const ServerError message(
"SERVER",
"ABCD", ServerErrorCode::NoWeatherProfile,
"EGLL",
697 "No such weather profile");
698 QCOMPARE(QString(
"SERVER"), message.sender());
699 QCOMPARE(QString(
"ABCD"), message.receiver());
700 QCOMPARE(ServerErrorCode::NoWeatherProfile, message.m_errorNumber);
701 QCOMPARE(
"EGLL", message.m_causingParameter);
702 QCOMPARE(
"No such weather profile", message.m_description);
704 QString stringRef(
"SERVER:ABCD:9:EGLL:No such weather profile");
705 QString str = message.toTokens().join(
":");
706 QCOMPARE(str, stringRef);
708 QStringList tokens = QString(
"SERVER:ABCD:009:EGLL:No such weather profile").split(
':');
709 auto messageFromTokens = ServerError::fromTokens(tokens);
710 QCOMPARE(messageFromTokens, message);
713 void CTestFsdMessages::testTextMessage() {}
719 #include "testfsdmessages.moc"
CTestFsdMessages(QObject *parent=nullptr)
Constructor.
virtual ~CTestFsdMessages()
Destructor.
FSD Message: ATC data update.
FSD Message: auth challenge.
Responds to an authentication challenge. The protocol for formulating and responding to auth challeng...
This packet is sent by any client that supports the VATSIM client authentication protocol,...
This packet is used to respond to a client data request.
Used to notify the server of the intention to close the connection. If a client receives this packet ...
Pilot data update broadcast by Euroscope Simulator every second.
Interim pilot data update sent to specific receivers faster than the standard broadcast update.
Kill request initiated from the server or supervisor. Client needs to disconnect immediatly upon rece...
Pilot data update broadcasted to all clients in range every 5 seconds.
Ping. Needs to be answered with a pong.
FSinn specific version of plane information request.
Request to send plane information. Shall be answered by a PlaneInformation message.
Sent or received as reply to a ping.
FSD Message Server Error.
Message from server to start or stop sending visual pilot data updates.
Pilot data update broadcasted to pilots in range every 0.2 seconds.
Value object encapsulating information about aircraft's lights.
void unpackPBH(quint32 pbh, double &pitch, double &bank, double &heading, bool &onGround)
Unpack pitch, bank, heading and onGround from 32 bit integer.
void packPBH(double pitch, double bank, double heading, bool onGround, quint32 &pbh)
Pack pitch, bank, heading and onGround into 32 bit integer.
SWIFTTEST_APPLESS_MAIN(MiscTest::CTestFsdMessages)
main
Pitch bank heading union.