diff --git a/src/colnod/colnodapi.cpp b/src/colnod/colnodapi.cpp index c3279ab..975e247 100644 --- a/src/colnod/colnodapi.cpp +++ b/src/colnod/colnodapi.cpp @@ -15,10 +15,9 @@ ColnodAPI::ColnodAPI(serversdk::RequestManager* reqMan, const bool &dryMode, QSt /** * @brief Downloads new data from Colnod -> emits downloadDataFinished signal - * @param time + * @param time - timestamp -> ms from 1970 * - * @return signal with nullptr when something went wrong - * @return signal with data when valid data returned + * @return emits signal with data when ok, or nullptr, when error */ bool ColnodAPI::downloadData(const qint64 &time) { @@ -34,14 +33,14 @@ bool ColnodAPI::downloadData(const qint64 &time) // Get login token if (login->status() != 200) { emit downloadDataFinished(nullptr); - return; + return false; } AuthToken token; auto responseData = login->responseData(); if (responseData.isEmpty()) { qCWarning(colnod) << "empty response data when logging in"; emit downloadDataFinished(nullptr); - return; + return false; } token.fromJson(responseData); @@ -49,7 +48,7 @@ bool ColnodAPI::downloadData(const qint64 &time) if (authToken.isEmpty()) { qCCritical(colnod) << "Token uuid is empty"; emit downloadDataFinished(nullptr); - return; + return false; } @@ -64,7 +63,9 @@ bool ColnodAPI::downloadData(const qint64 &time) auto checkData = [=]() { qDebug() << "check data" << dataCount; - // FIX: Problem with ASSERT: "dataCount < 5" -> datacount sometime -> 32677 ( bad memory allocation ) + // VALIDATE: problem was in unitest getTokens + // -> no tests -> destroying QNetworkRequest when QNetworkReply was running + // FIXME: 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? @@ -126,6 +127,7 @@ bool ColnodAPI::downloadData(const qint64 &time) } checkData(); }); + return true; }); return true; @@ -182,6 +184,11 @@ std::shared_ptr ColnodAPI::requestLogin() return loginRequest; } +/** + * @return sucess : + * @return fail : + * @return no data : + */ std::shared_ptr ColnodAPI::getTokensUpdated(const Timestamp &time) { auto request = composeRequest("/TokenManager/getTokensUpdated", time.jsonData()); @@ -190,6 +197,11 @@ std::shared_ptr ColnodAPI::getTokensUpdated(const Timestamp return request; } +/** + * @return sucess : + * @return fail : + * @return no data : + */ std::shared_ptr ColnodAPI::getTokensDeleted(const Timestamp &time) { auto request = composeRequest("/TokenManager/getTokensDeleted", time.jsonData()); @@ -198,6 +210,11 @@ std::shared_ptr ColnodAPI::getTokensDeleted(const Timestamp return request; } +/** + * @return sucess : + * @return fail : + * @return no data : + */ std::shared_ptr ColnodAPI::getSubjectsUpdated(const Timestamp &time) { auto request = composeRequest("/SubjectManager/getSubjectsUpdated", time.jsonData()); @@ -206,6 +223,11 @@ std::shared_ptr ColnodAPI::getSubjectsUpdated(const Timestam return request; } +/** + * @return sucess : + * @return fail : + * @return no data : + */ std::shared_ptr ColnodAPI::getSubjectsDeleted(const Timestamp &time) { auto request = composeRequest("/SubjectManager/getSubjectsDeleted", time.jsonData()); @@ -214,6 +236,10 @@ std::shared_ptr ColnodAPI::getSubjectsDeleted(const Timestam return request; } +/** + * @return sucess : + * @return fail : + */ std::shared_ptr ColnodAPI::setTokens(const QHash> &tokens) { auto request = composeRequest("/TokenManager/setTokens", Token::tokensToColnodJson(tokens)); diff --git a/src/colnod/databaseapi.cpp b/src/colnod/databaseapi.cpp index 549332d..82a5e3f 100644 --- a/src/colnod/databaseapi.cpp +++ b/src/colnod/databaseapi.cpp @@ -46,9 +46,6 @@ std::shared_ptr DatabaseAPI::downloadData() } return composeData(updatedQuery, deletedQuery); - // TODO: why emiting signal?? - // this can return Strucutre - //emit downloadDataFinished(composeData(updatedQuery, deletedQuery)); } bool DatabaseAPI::processData(const std::shared_ptr &data) diff --git a/src/colnod/syncmanager.cpp b/src/colnod/syncmanager.cpp index 8557671..e999918 100644 --- a/src/colnod/syncmanager.cpp +++ b/src/colnod/syncmanager.cpp @@ -264,8 +264,6 @@ std::unique_ptr SyncManager::prepareDataUsindOld(const std::shared Q_ASSERT(colnodData); Q_ASSERT(databaseData); - - // TODO: why copy data? std::shared_ptr cloneColnodDataToProcess = std::make_shared(*colnodData); std::shared_ptr cloneDatabaseDataToProcess = std::make_shared(*databaseData); diff --git a/test/auto/colnod/tst_colnodapi.cpp b/test/auto/colnod/tst_colnodapi.cpp index d6cebb9..2807528 100644 --- a/test/auto/colnod/tst_colnodapi.cpp +++ b/test/auto/colnod/tst_colnodapi.cpp @@ -18,12 +18,12 @@ public: qRegisterMetaType>("std::shared_ptr"); } -private slots: +private : + Q_SLOT void getTokens(); + Q_SLOT void download_test(); + Q_SLOT void download_data_test_now(); + Q_SLOT void download_data_fail_test(); void login(); - void getTokens(); - void download_test(); - void download_data_test_now(); - void download_data_fail_test(); private: QString getLoginToken(ColnodAPI &colnod); @@ -34,26 +34,42 @@ void ColnodTest::login() serversdk::RequestManager reqMan; ColnodAPI colnod(&reqMan); auto login = colnod.requestLogin(); + QVERIFY(login); + QVERIFY(login->networkReply()); QSignalSpy spy(login.get(), &serversdk::Request::finished); QCOMPARE(spy.count(), 0); QVERIFY(spy.wait()); QCOMPARE(spy.count(), 1); QVERIFY(login->responseData().contains("id")); + } + void ColnodTest::getTokens() { + // FIXME: finish this -> must be valid test testing something + // FIXME: Was not testing anything only causing bug serversdk::RequestManager reqMan; ColnodAPI colnod(&reqMan); // get login token + // FIXME: calling login request two times auto login = colnod.requestLogin(); QSignalSpy spy(login.get(), &serversdk::Request::finished); - spy.wait(); - QString token = getLoginToken(colnod); + QVERIFY(spy.isValid()); + QVERIFY(spy.wait()); + //login->responseData().mid(7,36); + // NOTE: second calling of loging request + //QString token = getLoginToken(colnod); Timestamp time; time.setTimestamp(QDateTime::currentMSecsSinceEpoch()); - colnod.getTokensUpdated(time); + auto request = colnod.getTokensUpdated(time); + + // FIXING BUG: creating request not waiting for it immediatelly destroying request + // immediatelly reqMan goes out of scope destroying QNetworkRequestManager with QNetworkReply running. + QSignalSpy requestSpy(request.get(), &serversdk::Request::finished); + QVERIFY(requestSpy.wait()); // <-- have to wait here for request!!!! + // FIXME: check request and finish test!! } void ColnodTest::download_test() @@ -95,6 +111,7 @@ void ColnodTest::download_data_test_now() QVERIFY(data->updatedTokens.isEmpty()); } + void ColnodTest::download_data_fail_test() { serversdk::RequestManager reqMan; @@ -105,6 +122,7 @@ void ColnodTest::download_data_fail_test() QVERIFY(spy.wait()); + // FIXME: problem with returning data auto data = qvariant_cast>(spy.at(0).at(0)); QVERIFY(!data); diff --git a/test/auto/database/tst_databaseapi.cpp b/test/auto/database/tst_databaseapi.cpp index b919249..3283c3b 100644 --- a/test/auto/database/tst_databaseapi.cpp +++ b/test/auto/database/tst_databaseapi.cpp @@ -23,12 +23,6 @@ void DatabaseTest::open_database_test() serversdk::DatabaseManager dbManager; DatabaseAPI db(&dbManager, false); QVERIFY(db.open()); - - // TODO: fix -> databaseAPI must be able to add credentials to check for wrong one or test wrong IP - //db.open(user, password, url, etc ); - // then test with wrong credentials - // QVERIFY(!db.open(worng usernae)); - // QVERIFY(!db.open(worng ip)); } void DatabaseTest::open_database_ip_fail_test()