##// END OF EJS Templates
Fixed untimely update of the range to be displayed in the variable widget
Fixed untimely update of the range to be displayed in the variable widget

File last commit:

r586:4e5df98215ef
r611:aff19a50babf
Show More
TestAmdaAcquisition.cpp
197 lines | 6.7 KiB | text/x-c | CppLexer
/ plugins / amda / tests / TestAmdaAcquisition.cpp
#include "AmdaProvider.h"
#include "AmdaResultParser.h"
#include "SqpApplication.h"
#include <Data/DataSeries.h>
#include <Data/IDataSeries.h>
#include <Data/ScalarSeries.h>
#include <Time/TimeController.h>
#include <Variable/Variable.h>
#include <Variable/VariableController.h>
#include <QObject>
#include <QtTest>
#include <memory>
// TEST with REF:
// AmdaData-2012-01-01-12-00-00_2012-01-03-12-00-00
// imf(0) - Type : Local Parameter @ CDPP/AMDA -
// Name : bx_gse - Units : nT - Size : 1 -
// Frame : GSE - Mission : ACE -
// Instrument : MFI - Dataset : mfi_final-prelim
// REFERENCE DOWNLOAD FILE =
// http://amda.irap.omp.eu/php/rest/getParameter.php?startTime=2012-01-01T12:00:00&stopTime=2012-01-03T12:00:00&parameterID=imf(0)&outputFormat=ASCII&timeFormat=ISO8601&gzip=0
namespace {
/// Path for the tests
const auto TESTS_RESOURCES_PATH
= QFileInfo{QString{AMDA_TESTS_RESOURCES_DIR}, "TestAmdaAcquisition"}.absoluteFilePath();
const auto TESTS_AMDA_REF_FILE = QString{"AmdaData-2012-01-01-12-00-00_2012-01-03-12-00-00.txt"};
template <typename T>
bool compareDataSeries(std::shared_ptr<IDataSeries> candidate, SqpRange candidateCacheRange,
std::shared_ptr<IDataSeries> reference)
{
auto compareLambda = [](const auto &it1, const auto &it2) {
return (it1.x() == it2.x()) && (it1.value() == it2.value());
};
auto candidateDS = std::dynamic_pointer_cast<T>(candidate);
auto referenceDS = std::dynamic_pointer_cast<T>(reference);
if (candidateDS && referenceDS) {
auto itRefs
= referenceDS->xAxisRange(candidateCacheRange.m_TStart, candidateCacheRange.m_TEnd);
qDebug() << " DISTANCE" << std::distance(candidateDS->cbegin(), candidateDS->cend())
<< std::distance(itRefs.first, itRefs.second);
// auto xcValue = candidateDS->valuesData()->data();
// auto dist = std::distance(itRefs.first, itRefs.second);
// auto it = itRefs.first;
// for (auto i = 0; i < dist - 1; ++i) {
// ++it;
// qInfo() << "END:" << it->value();
// }
// qDebug() << "END:" << it->value() << xcValue.last();
return std::equal(candidateDS->cbegin(), candidateDS->cend(), itRefs.first, itRefs.second,
compareLambda);
}
else {
return false;
}
}
}
class TestAmdaAcquisition : public QObject {
Q_OBJECT
private slots:
void testAcquisition();
};
void TestAmdaAcquisition::testAcquisition()
{
// READ the ref file:
auto filePath = QFileInfo{TESTS_RESOURCES_PATH, TESTS_AMDA_REF_FILE}.absoluteFilePath();
auto results = AmdaResultParser::readTxt(filePath, AmdaResultParser::ValueType::SCALAR);
auto provider = std::make_shared<AmdaProvider>();
auto timeController = std::make_unique<TimeController>();
auto varRS = QDateTime{QDate{2012, 01, 02}, QTime{2, 3, 0, 0}};
auto varRE = QDateTime{QDate{2012, 01, 02}, QTime{2, 4, 0, 0}};
auto sqpR = SqpRange{DateUtils::secondsSinceEpoch(varRS), DateUtils::secondsSinceEpoch(varRE)};
timeController->onTimeToUpdate(sqpR);
QVariantHash metaData;
metaData.insert("dataType", "scalar");
metaData.insert("xml:id", "imf(0)");
VariableController vc;
vc.setTimeController(timeController.get());
auto var = vc.createVariable("bx_gse", metaData, provider);
// 1 : Variable creation
QCOMPARE(var->range().m_TStart, sqpR.m_TStart);
QCOMPARE(var->range().m_TEnd, sqpR.m_TEnd);
qDebug() << " 1: TIMECONTROLLER" << timeController->dateTime();
qDebug() << " 1: RANGE " << var->range();
qDebug() << " 1: CACHERANGE" << var->cacheRange();
// wait for 10 sec before asking next request toi permit asynchrone process to finish.
auto timeToWaitMs = 10000;
QEventLoop loop;
QTimer::singleShot(timeToWaitMs, &loop, &QEventLoop::quit);
loop.exec();
// Tests on acquisition operation
int count = 1;
auto requestDataLoading = [&vc, var, timeToWaitMs, results, &count](auto tStart, auto tEnd) {
++count;
auto nextSqpR
= SqpRange{DateUtils::secondsSinceEpoch(tStart), DateUtils::secondsSinceEpoch(tEnd)};
vc.onRequestDataLoading(QVector<std::shared_ptr<Variable> >{} << var, nextSqpR,
var->range(), true);
QEventLoop loop;
QTimer::singleShot(timeToWaitMs, &loop, &QEventLoop::quit);
loop.exec();
qInfo() << count << "RANGE " << var->range();
qInfo() << count << "CACHERANGE" << var->cacheRange();
QCOMPARE(var->range().m_TStart, nextSqpR.m_TStart);
QCOMPARE(var->range().m_TEnd, nextSqpR.m_TEnd);
// Verify dataserie
QVERIFY(compareDataSeries<ScalarSeries>(var->dataSeries(), var->cacheRange(), results));
};
// 2 : pan (jump) left for one hour
auto nextVarRS = QDateTime{QDate{2012, 01, 02}, QTime{2, 1, 0, 0}};
auto nextVarRE = QDateTime{QDate{2012, 01, 02}, QTime{2, 2, 0, 0}};
requestDataLoading(nextVarRS, nextVarRE);
// 3 : pan (jump) right for one hour
nextVarRS = QDateTime{QDate{2012, 01, 02}, QTime{2, 5, 0, 0}};
nextVarRE = QDateTime{QDate{2012, 01, 02}, QTime{2, 6, 0, 0}};
requestDataLoading(nextVarRS, nextVarRE);
// 4 : pan (overlay) right for 30 min
nextVarRS = QDateTime{QDate{2012, 01, 02}, QTime{2, 5, 30, 0}};
nextVarRE = QDateTime{QDate{2012, 01, 02}, QTime{2, 6, 30, 0}};
// requestDataLoading(nextVarRS, nextVarRE);
// 5 : pan (overlay) left for 30 min
nextVarRS = QDateTime{QDate{2012, 01, 02}, QTime{2, 5, 0, 0}};
nextVarRE = QDateTime{QDate{2012, 01, 02}, QTime{2, 6, 0, 0}};
// requestDataLoading(nextVarRS, nextVarRE);
// 6 : pan (overlay) left for 30 min - BIS
nextVarRS = QDateTime{QDate{2012, 01, 02}, QTime{2, 4, 30, 0}};
nextVarRE = QDateTime{QDate{2012, 01, 02}, QTime{2, 5, 30, 0}};
// requestDataLoading(nextVarRS, nextVarRE);
// 7 : Zoom in Inside 20 min range
nextVarRS = QDateTime{QDate{2012, 01, 02}, QTime{2, 4, 50, 0}};
nextVarRE = QDateTime{QDate{2012, 01, 02}, QTime{2, 5, 10, 0}};
// requestDataLoading(nextVarRS, nextVarRE);
// 8 : Zoom out Inside 2 hours range
nextVarRS = QDateTime{QDate{2012, 01, 02}, QTime{2, 4, 0, 0}};
nextVarRE = QDateTime{QDate{2012, 01, 02}, QTime{2, 6, 0, 0}};
// requestDataLoading(nextVarRS, nextVarRE);
// Close the app after 10 sec
QTimer::singleShot(timeToWaitMs, &loop, &QEventLoop::quit);
loop.exec();
}
int main(int argc, char *argv[])
{
SqpApplication app(argc, argv);
app.setAttribute(Qt::AA_Use96Dpi, true);
TestAmdaAcquisition tc;
QTEST_SET_MAIN_SOURCE_PATH
return QTest::qExec(&tc, argc, argv);
}
// QTEST_MAIN(TestAmdaAcquisition)
#include "TestAmdaAcquisition.moc"