1 /* KStars scheduler operations tests 2 SPDX-FileCopyrightText: 2021 Hy Murveit <hy@murveit.com> 3 4 SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #ifndef TESTEKOSSCHEDULEROPS_H 8 #define TESTEKOSSCHEDULEROPS_H 9 10 #include "config-kstars.h" 11 #include "ekos/scheduler/schedulerjob.h" 12 #include "test_ekos_scheduler_helper.h" 13 14 #if defined(HAVE_INDI) 15 16 #include <QObject> 17 #include <QPushButton> 18 #include <QComboBox> 19 #include <QDoubleSpinBox> 20 #include <QSpinBox> 21 #include <QCheckBox> 22 #include <QtTest> 23 24 namespace Ekos 25 { 26 class Scheduler; 27 class MockFocus; 28 class MockMount; 29 class MockCapture; 30 class MockAlign; 31 class MockGuide; 32 class MockEkos; 33 } 34 class KStarsDateTime; 35 class GeoLocation; 36 37 class TestEkosSchedulerOps : public QObject 38 { 39 Q_OBJECT 40 41 public: 42 explicit TestEkosSchedulerOps(QObject *parent = nullptr); 43 44 private slots: 45 void initTestCase(); 46 void cleanupTestCase(); 47 48 void init(); 49 void cleanup(); 50 51 void testBasics(); 52 void testSimpleJob(); 53 void testTimeZone(); 54 void testDawnShutdown(); 55 void testTwilightStartup(); 56 void testTwilightStartup_data(); 57 void testCulminationStartup(); 58 void testFixedDateStartup(); 59 void testArtificialHorizonConstraints(); 60 void test2ndJobRunsAfter1stHitsAltitudeConstraint(); 61 62 // test data 63 void testCulminationStartup_data(); 64 65 protected: 66 void prepareTestData(QList<QString> locationList, QList<QString> targetList); 67 void runSimpleJob(const GeoLocation &geo, const SkyObject *targetObject, const QDateTime &startUTime, 68 const QDateTime &wakeupTime, bool enforceArtificialHorizon); 69 void runUntilFirstShutdown( 70 const GeoLocation &geo, const QVector<SkyObject*> targetObjects, 71 const QDateTime &startSchedulerUTime, const QDateTime &startJobUTime, const QDateTime &interruptUTime, 72 KStarsDateTime ¤tUTime, int &sleepMs, QTemporaryDir &dir); 73 void parkAndSleep(KStarsDateTime &testUTime, int &sleepMs); 74 void wakeupAndRestart(const QDateTime &restartTime, KStarsDateTime &testUTime, int &sleepMs); 75 76 77 private: 78 bool iterateScheduler(const QString &label, int iterations, int *sleepMs, 79 KStarsDateTime* testUTime, 80 std::function<bool ()> fcn); 81 82 void initScheduler(const GeoLocation &geo, const QDateTime &startUTime, QTemporaryDir *dir, 83 const QVector<QString> &eslContents, const QVector<QString> &esqContents); 84 85 void initJob(const KStarsDateTime &startUTime, const KStarsDateTime &jobStartUTime); 86 87 void startupJobs( 88 const GeoLocation &geo, const QDateTime &startUTime, 89 QTemporaryDir *dir, const QVector<QString> &esls, const QVector<QString> &esqs, 90 const QDateTime &wakeupTime, KStarsDateTime &endTestUTime, int &endSleepMs); 91 void startupJob( 92 const GeoLocation &geo, const QDateTime &startUTime, 93 QTemporaryDir *dir, const QString &esl, const QString &esq, 94 const QDateTime &wakeupTime, KStarsDateTime &endTestUTime, int &endSleepMs); 95 void startModules(KStarsDateTime &testUTime, int &sleepMs); 96 97 void disableSkyMap(); 98 int timeTolerance(int seconds); 99 bool checkLastSlew(const SkyObject* targetObject); 100 void printJobs(const QString &label); 101 102 QSharedPointer<Ekos::Scheduler> scheduler; 103 QSharedPointer<Ekos::MockFocus> focuser; 104 QSharedPointer<Ekos::MockMount> mount; 105 QSharedPointer<Ekos::MockCapture> capture; 106 QSharedPointer<Ekos::MockAlign> align; 107 QSharedPointer<Ekos::MockGuide> guider; 108 QSharedPointer<Ekos::MockEkos> ekos; 109 110 TestEkosSchedulerHelper::StartupCondition m_startupCondition; 111 QElapsedTimer testTimer; 112 }; 113 114 #endif // HAVE_INDI 115 #endif // TESTEKOSSCHEDULEROPS_H 116