diff --git a/server-sdk b/server-sdk index b643f25..3640c0d 160000 --- a/server-sdk +++ b/server-sdk @@ -1 +1 @@ -Subproject commit b643f25421757703b930d48a3c0175b7e9de1c72 +Subproject commit 3640c0db5d1e24b314b00cc2b0dd61915080381b diff --git a/src/colnod/colnodapi.cpp b/src/colnod/colnodapi.cpp index 728b868..da0b7a6 100644 --- a/src/colnod/colnodapi.cpp +++ b/src/colnod/colnodapi.cpp @@ -20,11 +20,16 @@ ColnodAPI::ColnodAPI(serversdk::RequestManager* reqMan, const bool &dryMode, QSt * @return signal with nullptr when something went wrong * @return signal with data when valid data returned */ -void ColnodAPI::downloadData(const qint64 &time) +bool ColnodAPI::downloadData(const qint64 &time) { // Have to get Login auto login = requestLogin(); Q_ASSERT(login); + if (login->networkReply() == nullptr) { + qCCritical(colnod) << "Not possible to create login request"; + return false; + } + connect(login.get(), &serversdk::Request::finished, this, [=](){ // Get login token if (login->status() != 200) { @@ -48,23 +53,8 @@ void ColnodAPI::downloadData(const qint64 &time) } - - // NOTE: why? -// auto errorHandler = [=](const std::shared_ptr& request){ -// if (!checkRequest(request)) { -// qWarning(colnod) << "ERROR during calling" << request->url() << ", request unsuccessful"; -// mValid = false; -// emit downloadDataFinished(nullptr); // TODO: think about it, will the other if passed? -// } -// else if (!checkResponse(request->responseData())) { -// qWarning(colnod) << "Data from" << request->url() << "are invalid"; -// mValid = false; -// } -// }; - - // if I have all data emit downloadDataFinished - connect(this, &ColnodAPI::partOfDataReady, this, &ColnodAPI::areDataReady); + //connect(this, &ColnodAPI::partOfDataReady, this, &ColnodAPI::areDataReady); Timestamp timestamp; timestamp.setTimestamp(time); @@ -74,6 +64,17 @@ void ColnodAPI::downloadData(const qint64 &time) auto checkData = [&dataCount, &data, this]() { qDebug() << "check data" << dataCount; + // FIX: Problem with ASSERT: "dataCount < 5" -> datacount sometime -> 32677 ( bad memory allocation ) + // Not possible to pinpoint memory problem. + // Possible sources: + // 0) Bad code -> dataCount -> &dataCount -> ++ what it does. Increase dataCount or increment address? + // - have to double check this problem + // 1) ColnodAPI + // 2) RequestManager ( serversdk ) + // 3) Problem with testing QtTest logic + // - try to change stack allocation to heap ( std::unique_ptr ) + // - reason: Does not make sence but something else could appear + // 4) Lambda slots if (dataCount > 5) { qCCritical(colnod) << "check data cannnot be higher then 4"; } @@ -82,56 +83,52 @@ void ColnodAPI::downloadData(const qint64 &time) emit downloadDataFinished(data); }; + // Getting tokens from ColnodAPI auto tokensRequest = getTokensUpdated(timestamp); -// connect(tokensRequest.get(), &serversdk::Request::finished, errorHandler); - connect(tokensRequest.get(), &serversdk::Request::finished, [=, &dataCount](){ + connect(tokensRequest.get(), &serversdk::Request::finished, [=](){ qDebug(colnod) << "tokens finished"; + + // false when not possible to load request data if (!saveUpdatedTokens(data, tokensRequest->responseData())) { emit downloadDataFinished(nullptr); return; } - ++dataCount; + checkData(); - //saveUpdatedTokens(data, tokensRequest->responseData()); - //emit partOfDataReady(data); }); auto deletedTokensRequest = getTokensDeleted(timestamp); -// connect(deletedTokensRequest.get(), &serversdk::Request::finished, errorHandler); - connect(deletedTokensRequest.get(), &serversdk::Request::finished, [=, &dataCount](){ + connect(deletedTokensRequest.get(), &serversdk::Request::finished, [=](){ qDebug(colnod) << "tokens finished"; if (!saveDeletedTokens(data, deletedTokensRequest->responseData())) { emit downloadDataFinished(nullptr); return; } - ++dataCount; checkData(); - - //emit partOfDataReady(data); }); auto subjectsRequest = getSubjectsUpdated(timestamp); -// connect(subjectsRequest.get(), &serversdk::Request::finished, errorHandler); - connect(subjectsRequest.get(), &serversdk::Request::finished, [=, &dataCount](){ + connect(subjectsRequest.get(), &serversdk::Request::finished, [=](){ qDebug(colnod) << "tokens finished"; if (!saveUpdatedSubjects(data, subjectsRequest->responseData())) { emit downloadDataFinished(nullptr); return; } - ++dataCount; checkData(); }); auto deletedSubjectsRequest = getSubjectsDeleted(timestamp); -// connect(deletedSubjectsRequest.get(), &serversdk::Request::finished, errorHandler); - connect(deletedSubjectsRequest.get(), &serversdk::Request::finished, [=, &dataCount](){ + connect(deletedSubjectsRequest.get(), &serversdk::Request::finished, [=](){ qDebug(colnod) << "tokens finished"; - saveDeletedSubjects(data, deletedSubjectsRequest->responseData()); - ++dataCount; + if (!saveDeletedSubjects(data, deletedSubjectsRequest->responseData())) { + emit downloadDataFinished(nullptr); + return; + } checkData(); -// emit partOfDataReady(data); }); }); + + return true; } void ColnodAPI::processData(const std::shared_ptr &data) diff --git a/src/colnod/colnodapi.h b/src/colnod/colnodapi.h index fc5a0b1..0907987 100644 --- a/src/colnod/colnodapi.h +++ b/src/colnod/colnodapi.h @@ -41,10 +41,10 @@ class ColnodAPI: public QObject Q_OBJECT friend class ColnodTest; public: - ColnodAPI() = default; +// ColnodAPI() = default; ColnodAPI(serversdk::RequestManager* reqManconst, const bool &dryMode = false, QString userName = "spaceti", QString password = "spaceti1"); - void downloadData(const qint64 &time); + bool downloadData(const qint64 &time); void processData(const std::shared_ptr &data); // New approach @@ -91,7 +91,7 @@ private: signals: void downloadDataFinished(std::shared_ptr = std::shared_ptr()); - void partOfDataReady(std::shared_ptr = std::shared_ptr()); +// void partOfDataReady(std::shared_ptr = std::shared_ptr()); void partOfDataProcessFinished(); void dataProcessFinished(); diff --git a/test/auto/colnod/tst_colnodapi.cpp b/test/auto/colnod/tst_colnodapi.cpp index 3124576..d6cebb9 100644 --- a/test/auto/colnod/tst_colnodapi.cpp +++ b/test/auto/colnod/tst_colnodapi.cpp @@ -69,7 +69,7 @@ void ColnodTest::download_test() QSignalSpy spy(&colnod, &ColnodAPI::downloadDataFinished); QVERIFY(spy.isValid()); - colnod.downloadData(1570190399259); + QVERIFY(colnod.downloadData(1570190399259)); QVERIFY(spy.wait()); QVERIFY(colnod.amountData == 0);