mirror of
https://gitlab.com/spaceti-app/integrations/acs/colnod-connector.git
synced 2026-07-12 12:00:37 +02:00
Add complex test, upgrade code mostly in reqeustManager
This commit is contained in:
parent
3de57f1c35
commit
f4cc641b79
@ -12,14 +12,14 @@ void ColnodAPI::downloadData()
|
|||||||
{
|
{
|
||||||
Response* resp0 = reqMan->getSubjects();
|
Response* resp0 = reqMan->getSubjects();
|
||||||
connect(resp0, &Response::ready, [=](){
|
connect(resp0, &Response::ready, [=](){
|
||||||
dataMan->localSaveSubjects(resp0->reply->readAll());
|
dataMan->localSaveSubjects(resp0->getJson());
|
||||||
areDataReady();
|
areDataReady();
|
||||||
resp0->deleteLater();
|
resp0->deleteLater();
|
||||||
});
|
});
|
||||||
|
|
||||||
Response* resp1 = reqMan->getTokens();
|
Response* resp1 = reqMan->getTokens();
|
||||||
connect(resp1, &Response::ready, [=](){
|
connect(resp1, &Response::ready, [=](){
|
||||||
dataMan->localSaveTokens(resp1->reply->readAll());
|
dataMan->localSaveTokens(resp1->getJson());
|
||||||
areDataReady();
|
areDataReady();
|
||||||
resp1->deleteLater();
|
resp1->deleteLater();
|
||||||
});
|
});
|
||||||
|
|||||||
@ -16,8 +16,9 @@ RequestManager::RequestManager()
|
|||||||
QObject::connect(manager, &QNetworkAccessManager::sslErrors, this, &RequestManager::onSSLError);
|
QObject::connect(manager, &QNetworkAccessManager::sslErrors, this, &RequestManager::onSSLError);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RequestManager::login(QString host, QString username, QString password)
|
Response* RequestManager::login()
|
||||||
{
|
{
|
||||||
|
loginResponse = new Response;
|
||||||
QNetworkRequest request;
|
QNetworkRequest request;
|
||||||
QString hash = encryptedPassword(this->password);
|
QString hash = encryptedPassword(this->password);
|
||||||
authHeader = getLoginHeader(this->user, hash);
|
authHeader = getLoginHeader(this->user, hash);
|
||||||
@ -25,9 +26,6 @@ void RequestManager::login(QString host, QString username, QString password)
|
|||||||
{"password", hash},
|
{"password", hash},
|
||||||
{"username", this->user}
|
{"username", this->user}
|
||||||
};
|
};
|
||||||
//this->host = host;
|
|
||||||
|
|
||||||
|
|
||||||
request.setUrl(this->host + "/AaaManager/authSession");
|
request.setUrl(this->host + "/AaaManager/authSession");
|
||||||
request.setRawHeader("Authorization", authHeader.toLocal8Bit());
|
request.setRawHeader("Authorization", authHeader.toLocal8Bit());
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8");
|
||||||
@ -35,6 +33,7 @@ void RequestManager::login(QString host, QString username, QString password)
|
|||||||
QJsonDocument jsonDocument;
|
QJsonDocument jsonDocument;
|
||||||
jsonDocument.setObject(reqBody);
|
jsonDocument.setObject(reqBody);
|
||||||
QNetworkReply* reply = manager->post(request, jsonDocument.toJson());
|
QNetworkReply* reply = manager->post(request, jsonDocument.toJson());
|
||||||
|
loginResponse->setReply(reply);
|
||||||
QObject::connect(reply, &QNetworkReply::finished, [=]() {
|
QObject::connect(reply, &QNetworkReply::finished, [=]() {
|
||||||
if (reply->error())
|
if (reply->error())
|
||||||
{
|
{
|
||||||
@ -43,36 +42,14 @@ void RequestManager::login(QString host, QString username, QString password)
|
|||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
jsonResponse = reply->readAll();
|
|
||||||
prepareAuthHeader();
|
|
||||||
if (loginStatus)
|
|
||||||
return;
|
|
||||||
qDebug() << "Logged in successfully.";
|
qDebug() << "Logged in successfully.";
|
||||||
loginStatus = true;
|
loginStatus = true;
|
||||||
emit successLogin();
|
emit successLogin();
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
});
|
});
|
||||||
}
|
connect(this, &RequestManager::successLogin, loginResponse, &Response::ready);
|
||||||
|
connect(this, &RequestManager::successLogin, this, &RequestManager::prepareAuthHeader);
|
||||||
QNetworkReply* RequestManager::getRequest(QString endpoint)
|
return loginResponse;
|
||||||
{
|
|
||||||
QNetworkRequest request;
|
|
||||||
request.setUrl(host + endpoint);
|
|
||||||
request.setRawHeader("Authorization", authHeader.toLocal8Bit());
|
|
||||||
QNetworkReply* reply = manager->post(request, QByteArray());
|
|
||||||
QObject::connect(reply, &QNetworkReply::finished, [=]() {
|
|
||||||
if (reply->error())
|
|
||||||
{
|
|
||||||
qDebug() << reply->errorString();
|
|
||||||
loginStatus = false;
|
|
||||||
reply->deleteLater();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
qDebug() << "Authorized successfully, response ready.";
|
|
||||||
emit responseReady();
|
|
||||||
reply->deleteLater();
|
|
||||||
});
|
|
||||||
return reply;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply* RequestManager::postRequest(QString endpoint, QByteArray json)
|
QNetworkReply* RequestManager::postRequest(QString endpoint, QByteArray json)
|
||||||
@ -97,41 +74,36 @@ QNetworkReply* RequestManager::postRequest(QString endpoint, QByteArray json)
|
|||||||
return reply;
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
Response* RequestManager::getRequestReturnLogic(QString endpoint)
|
|
||||||
{
|
|
||||||
Response* response = new Response;
|
|
||||||
if (!loginStatus){
|
|
||||||
login(host, user, password);
|
|
||||||
connect(this, &RequestManager::successLogin, [=](){
|
|
||||||
response->reply = getRequest(endpoint);
|
|
||||||
connect(response->reply, &QNetworkReply::finished, response, &Response::ready);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
response->reply = getRequest(endpoint);
|
|
||||||
connect(response->reply, &QNetworkReply::finished, response, &Response::ready);
|
|
||||||
}
|
|
||||||
|
|
||||||
return response;
|
Response* RequestManager::getLoginResponse() {
|
||||||
|
if (!loginResponse){
|
||||||
|
loginResponse = login();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return loginResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
Response* RequestManager::postRequestReturnLogic(QString endpoint, QByteArray data)
|
Response* RequestManager::postRequestReturnLogic(QString endpoint, QByteArray data)
|
||||||
{
|
{
|
||||||
|
auto loginResponse = getLoginResponse();
|
||||||
|
// This will ensure login is called only once
|
||||||
|
|
||||||
|
Q_ASSERT(loginResponse);
|
||||||
Response* response = new Response;
|
Response* response = new Response;
|
||||||
|
|
||||||
if (!loginStatus){
|
if (!loginStatus){
|
||||||
login(host, user, password);
|
|
||||||
connect(this, &RequestManager::successLogin, [=](){
|
connect(this, &RequestManager::successLogin, [=](){
|
||||||
response->reply = postRequest(endpoint, data);
|
response->setReply(postRequest(endpoint, data));
|
||||||
connect(response->reply, &QNetworkReply::finished, response, &Response::ready);
|
connect(response->getReply(), &QNetworkReply::finished, response, &Response::ready);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
response->reply = postRequest(endpoint, data);
|
response->setReply(postRequest(endpoint, data));
|
||||||
connect(response->reply, &QNetworkReply::finished, response, &Response::ready);
|
connect(response->getReply(), &QNetworkReply::finished, response, &Response::ready);
|
||||||
}
|
}
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,6 +131,7 @@ QString RequestManager::getLoginHeader(QString username, QString hash)
|
|||||||
|
|
||||||
void RequestManager::prepareAuthHeader()
|
void RequestManager::prepareAuthHeader()
|
||||||
{
|
{
|
||||||
|
jsonResponse = loginResponse->getJson();
|
||||||
token = getFromJson(jsonResponse, "id");
|
token = getFromJson(jsonResponse, "id");
|
||||||
QString authValue = token + ":";
|
QString authValue = token + ":";
|
||||||
authHeader = "Basic " + authValue.toLocal8Bit().toBase64();
|
authHeader = "Basic " + authValue.toLocal8Bit().toBase64();
|
||||||
@ -166,12 +139,12 @@ void RequestManager::prepareAuthHeader()
|
|||||||
|
|
||||||
void RequestManager::onSSLError(QNetworkReply *reply, const QList<QSslError> &errors)
|
void RequestManager::onSSLError(QNetworkReply *reply, const QList<QSslError> &errors)
|
||||||
{
|
{
|
||||||
qDebug() << "Network SSL errors";
|
//qDebug() << "Network SSL errors";
|
||||||
for (const auto &error : errors)
|
for (const auto &error : errors)
|
||||||
{
|
{
|
||||||
if (error.error() == QSslError::SelfSignedCertificate)
|
if (error.error() == QSslError::SelfSignedCertificate)
|
||||||
reply->ignoreSslErrors(errors);
|
reply->ignoreSslErrors(errors);
|
||||||
qDebug() << error.errorString();
|
//qDebug() << error.errorString();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -229,17 +202,17 @@ QByteArray RequestManager::makeIdsJson(QList<QString> ids)
|
|||||||
|
|
||||||
Response* RequestManager::getSubjects()
|
Response* RequestManager::getSubjects()
|
||||||
{
|
{
|
||||||
return getRequestReturnLogic("/SubjectManager/getSubjects");
|
return postRequestReturnLogic("/SubjectManager/getSubjects");
|
||||||
}
|
}
|
||||||
|
|
||||||
Response* RequestManager::getTokens()
|
Response* RequestManager::getTokens()
|
||||||
{
|
{
|
||||||
return getRequestReturnLogic("/TokenManager/getTokens");
|
return postRequestReturnLogic("/TokenManager/getTokens");
|
||||||
}
|
}
|
||||||
|
|
||||||
Response* RequestManager::getTokenSubject()
|
Response* RequestManager::getTokenSubject()
|
||||||
{
|
{
|
||||||
return getRequestReturnLogic("/OpenManager/getTokenSubject");
|
return postRequestReturnLogic("/OpenManager/getTokenSubject");
|
||||||
}
|
}
|
||||||
|
|
||||||
Response* RequestManager::getSubjectsUpdated(uint64_t time)
|
Response* RequestManager::getSubjectsUpdated(uint64_t time)
|
||||||
@ -264,7 +237,7 @@ Response* RequestManager::getTokensDeleted(uint64_t time)
|
|||||||
|
|
||||||
Response* RequestManager::getAccessGroups()
|
Response* RequestManager::getAccessGroups()
|
||||||
{
|
{
|
||||||
return getRequestReturnLogic("/AccessManager/getAccessGroups");
|
return postRequestReturnLogic("/AccessManager/getAccessGroups");
|
||||||
}
|
}
|
||||||
|
|
||||||
Response* RequestManager::getAccessGroupsUpdated(uint64_t time)
|
Response* RequestManager::getAccessGroupsUpdated(uint64_t time)
|
||||||
@ -279,7 +252,7 @@ Response* RequestManager::getAccessGroupsDeleted(uint64_t time)
|
|||||||
|
|
||||||
Response* RequestManager::getAccessGroupMembership()
|
Response* RequestManager::getAccessGroupMembership()
|
||||||
{
|
{
|
||||||
return getRequestReturnLogic("/AccessManager/getAccessGroupMembership");
|
return postRequestReturnLogic("/AccessManager/getAccessGroupMembership");
|
||||||
}
|
}
|
||||||
|
|
||||||
Response* RequestManager::getAccessGroupMembershipUpdated(uint64_t time)
|
Response* RequestManager::getAccessGroupMembershipUpdated(uint64_t time)
|
||||||
@ -301,15 +274,3 @@ Response* RequestManager::deleteTokens(QList<QString> ids)
|
|||||||
{
|
{
|
||||||
return postRequestReturnLogic("/TokenManager/deleteTokens", makeIdsJson(ids));
|
return postRequestReturnLogic("/TokenManager/deleteTokens", makeIdsJson(ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -52,27 +52,26 @@ public:
|
|||||||
Response* setTokens(QList<QPointer<Token>> tokens);
|
Response* setTokens(QList<QPointer<Token>> tokens);
|
||||||
Response* deleteTokens(QList<QString> ids);
|
Response* deleteTokens(QList<QString> ids);
|
||||||
|
|
||||||
void login(QString endpoint, QString username, QString password); //I want it private, but unittest???
|
Response* login(); //I want it private, but unittest???
|
||||||
|
|
||||||
const QJsonDocument &getConfig() const {return config;}
|
const QJsonDocument &getConfig() const {return config;}
|
||||||
const QString &getResponse() const {return jsonResponse;}
|
const QString &getResponse() const {return jsonResponse;}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QNetworkReply* getRequest(QString endpoint);
|
QNetworkReply* postRequest(QString endpoint, QByteArray json = QByteArray());
|
||||||
QNetworkReply* postRequest(QString endpoints, QByteArray json);
|
Response* postRequestReturnLogic(QString endpoint, QByteArray data = QByteArray());
|
||||||
Response* getRequestReturnLogic(QString endpoint);
|
|
||||||
Response* postRequestReturnLogic(QString endpoint, QByteArray data);
|
|
||||||
QString getFromJson(QString json, const QString &member);
|
QString getFromJson(QString json, const QString &member);
|
||||||
QString encryptedPassword(QString password);
|
QString encryptedPassword(QString password);
|
||||||
QString getLoginHeader(QString username, QString hash);
|
QString getLoginHeader(QString username, QString hash);
|
||||||
void prepareAuthHeader();
|
|
||||||
QByteArray makeTimeStampJson(uint64_t time);
|
QByteArray makeTimeStampJson(uint64_t time);
|
||||||
QByteArray makeTokensJson(QList<QPointer<Token>> tokens);
|
QByteArray makeTokensJson(QList<QPointer<Token>> tokens);
|
||||||
QByteArray makeIdsJson(QList<QString> ids);
|
QByteArray makeIdsJson(QList<QString> ids);
|
||||||
|
Response* getLoginResponse();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onSSLError(QNetworkReply *reply, const QList<QSslError> &errors);
|
void onSSLError(QNetworkReply *reply, const QList<QSslError> &errors);
|
||||||
|
void prepareAuthHeader();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void successLogin();
|
void successLogin();
|
||||||
@ -81,6 +80,7 @@ signals:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QNetworkAccessManager* manager = nullptr;
|
QNetworkAccessManager* manager = nullptr;
|
||||||
|
Response* loginResponse = nullptr;
|
||||||
QJsonDocument config;
|
QJsonDocument config;
|
||||||
QString authHeader;
|
QString authHeader;
|
||||||
QString host = "https://192.168.1.3:8443";
|
QString host = "https://192.168.1.3:8443";
|
||||||
|
|||||||
@ -2,5 +2,10 @@
|
|||||||
|
|
||||||
Response::Response()
|
Response::Response()
|
||||||
{
|
{
|
||||||
|
connect(this, &Response::ready, this, &Response::setJson);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Response::getStatusCode()
|
||||||
|
{
|
||||||
|
return reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,18 +8,28 @@ class Response : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Response();
|
Response();
|
||||||
|
|
||||||
|
int getStatusCode();
|
||||||
|
QString getJson() {return json;}
|
||||||
|
void setReply(QNetworkReply* rpl) {reply = rpl;}
|
||||||
|
QNetworkReply* getReply() {return reply;}
|
||||||
public:
|
public:
|
||||||
QNetworkReply *reply = nullptr;
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void ready();
|
|
||||||
|
|
||||||
public slots:
|
void ready();
|
||||||
|
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void setJson() {json = reply->readAll();}
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QString json;
|
||||||
|
QNetworkReply *reply = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RESPONSE_H
|
#endif // RESPONSE_H
|
||||||
|
|||||||
@ -1,13 +1,19 @@
|
|||||||
#include "unittest.h"
|
#include "unittest.h"
|
||||||
|
|
||||||
|
void UnitTest::initTestCase()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void UnitTest::loginSuccessfully()
|
void UnitTest::loginSuccessfully()
|
||||||
{
|
{
|
||||||
RequestManager* testAccess = new RequestManager();
|
RequestManager* testAccess = new RequestManager();
|
||||||
QJsonDocument config = testAccess->getConfig();
|
QJsonDocument config = testAccess->getConfig();
|
||||||
QSignalSpy spy(testAccess, SIGNAL(successLogin()));
|
QSignalSpy spy(testAccess, SIGNAL(successLogin()));
|
||||||
testAccess->login(host, email, password);
|
|
||||||
spy.wait(15000);
|
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
|
testAccess->login();
|
||||||
|
spy.wait(15000);
|
||||||
|
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = testAccess->getResponse();
|
QString json = testAccess->getResponse();
|
||||||
qDebug() << json;
|
qDebug() << json;
|
||||||
@ -20,11 +26,15 @@ void UnitTest::getSubjects()
|
|||||||
{
|
{
|
||||||
RequestManager* testAccess = new RequestManager();
|
RequestManager* testAccess = new RequestManager();
|
||||||
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
||||||
Response* response = testAccess->getSubjects();
|
|
||||||
spy.wait(15000);
|
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
|
Response* response = testAccess->getSubjects();
|
||||||
|
QSignalSpy spy1(response, &Response::ready);
|
||||||
|
|
||||||
|
spy.wait(15000);
|
||||||
|
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QCOMPARE(spy1.count(), 1);
|
||||||
|
QString json = response->getJson();
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
||||||
QVERIFY(doc.isObject());
|
QVERIFY(doc.isObject());
|
||||||
QVERIFY2(doc.object().value("items").isArray(), "No parameter 'id' in response");
|
QVERIFY2(doc.object().value("items").isArray(), "No parameter 'id' in response");
|
||||||
@ -42,7 +52,7 @@ void UnitTest::getTokens()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
||||||
QVERIFY(doc.isObject());
|
QVERIFY(doc.isObject());
|
||||||
QVERIFY2(doc.object().value("items").isArray(), "No parameter 'id' in response");
|
QVERIFY2(doc.object().value("items").isArray(), "No parameter 'id' in response");
|
||||||
@ -59,7 +69,7 @@ void UnitTest::getTokenSubject()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,7 +82,7 @@ void UnitTest::getSubjectsUpdated()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +95,7 @@ void UnitTest::getSubjectsDeleted()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +108,7 @@ void UnitTest::getTokensUpdated()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,7 +121,7 @@ void UnitTest::getTokensDeleted()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,7 +134,7 @@ void UnitTest::getAccessGroups()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +147,7 @@ void UnitTest::getAccessGroupsUpdated()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,7 +160,7 @@ void UnitTest::getAccessGroupsDeleted()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,7 +173,7 @@ void UnitTest::getAccessGroupMembership()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,7 +186,7 @@ void UnitTest::getAccessGroupMembershipUpdated()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +199,7 @@ void UnitTest::getAccessGroupMembershipDeleted()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,12 +207,7 @@ void UnitTest::setTokens()
|
|||||||
{
|
{
|
||||||
QFile jsonData(QDir::current().filePath("tokens.json"));
|
QFile jsonData(QDir::current().filePath("tokens.json"));
|
||||||
|
|
||||||
if (!jsonData.open(QIODevice::ReadOnly)) {
|
QVERIFY2(jsonData.open(QIODevice::ReadOnly), "Couldn't open config file tokens.json");
|
||||||
qCritical() << "Couldn't open config file config.json" << QDir::current().filePath("tokens.json");
|
|
||||||
QCoreApplication::exit(-1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(jsonData.readAll());
|
QJsonDocument doc = QJsonDocument::fromJson(jsonData.readAll());
|
||||||
QJsonObject obj = doc.object();
|
QJsonObject obj = doc.object();
|
||||||
QJsonArray arr = obj["items"].toArray();
|
QJsonArray arr = obj["items"].toArray();
|
||||||
@ -222,7 +227,7 @@ void UnitTest::setTokens()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,7 +243,7 @@ void UnitTest::deleteTokens()
|
|||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QVERIFY(!json.isEmpty());
|
QVERIFY(!json.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +266,7 @@ void UnitTest::subjectJSONParser()
|
|||||||
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
||||||
Response* response = testAccess->getSubjects();
|
Response* response = testAccess->getSubjects();
|
||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
||||||
QJsonArray arr = doc.object()["items"].toArray();
|
QJsonArray arr = doc.object()["items"].toArray();
|
||||||
auto testSubject = new Subject();
|
auto testSubject = new Subject();
|
||||||
@ -276,7 +281,7 @@ void UnitTest::tokenJSONParser()
|
|||||||
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
||||||
Response* response = testAccess->getTokens();
|
Response* response = testAccess->getTokens();
|
||||||
spy.wait(15000);
|
spy.wait(15000);
|
||||||
QString json = response->reply->readAll();
|
QString json = response->getJson();
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
||||||
QJsonArray arr = doc.object()["items"].toArray();
|
QJsonArray arr = doc.object()["items"].toArray();
|
||||||
auto testToken = new Token();
|
auto testToken = new Token();
|
||||||
@ -351,4 +356,5 @@ void UnitTest::getUuid()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QTEST_MAIN(UnitTest)
|
|
||||||
|
//QTEST_MAIN(UnitTest)
|
||||||
|
|||||||
137
test/unitTests/complextest.cpp
Normal file
137
test/unitTests/complextest.cpp
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
#include "complextest.h"
|
||||||
|
|
||||||
|
void ComplexTest::initTestCase()
|
||||||
|
{
|
||||||
|
reqMan = new RequestManager;
|
||||||
|
start = QDateTime::currentMSecsSinceEpoch()-1000;
|
||||||
|
qDebug() << start;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComplexTest::complexTest()
|
||||||
|
{
|
||||||
|
// LOGIN_BEGIN
|
||||||
|
QSignalSpy loginSpy(reqMan, &RequestManager::successLogin);
|
||||||
|
Response* loginResp = reqMan->login();
|
||||||
|
QSignalSpy loginRespSpy(loginResp, &Response::ready);
|
||||||
|
QCOMPARE(loginSpy.count(), 0);
|
||||||
|
QCOMPARE(loginRespSpy.count(), 0);
|
||||||
|
loginSpy.wait(10000);
|
||||||
|
QCOMPARE(loginResp->getStatusCode(), 200); // HTTP status code check
|
||||||
|
QCOMPARE(loginSpy.count(), 1); // Checking multiple calls
|
||||||
|
QCOMPARE(loginRespSpy.count(), 1);
|
||||||
|
auto doc0 = getJsonDoc(loginResp->getJson());
|
||||||
|
QVERIFY(doc0.object()["id"].isString());
|
||||||
|
// LOGIN_END
|
||||||
|
|
||||||
|
// NUMBER_OF_SUBJECTS_AND_TOKENS_BEGIN
|
||||||
|
int numOfSubjects = getNumOfSubjects();
|
||||||
|
QCOMPARE(numOfSubjects, 2893); // should be still the same, if false db has been changed
|
||||||
|
int numOfTokens = getNumOfTokens();
|
||||||
|
QCOMPARE(numOfTokens, 2881); // should be still the same, if false db has been changed, or deleteTokens didnt work in previous test
|
||||||
|
// NUMBER_OF_SUBJECTS_AND_TOKENS_END
|
||||||
|
|
||||||
|
|
||||||
|
// ADD_TOKENS_CHECK_BEGIN
|
||||||
|
QList<QPointer<Token>> tokens;
|
||||||
|
tokens.append(getTestToken());
|
||||||
|
Response* setTokensResp = reqMan->setTokens(tokens);
|
||||||
|
QSignalSpy setTokensRespSpy(setTokensResp, &Response::ready);
|
||||||
|
QCOMPARE(setTokensRespSpy.count(), 0);
|
||||||
|
setTokensRespSpy.wait(10000);
|
||||||
|
QCOMPARE(setTokensRespSpy.count(), 1);
|
||||||
|
QCOMPARE(setTokensResp->getStatusCode(), 200);
|
||||||
|
QCOMPARE(getNumOfTokens(), numOfTokens + 1);
|
||||||
|
// ADD_TOKENS_CHEK_END
|
||||||
|
|
||||||
|
// CHECK_UPDATED_TOKENS_BEGIN
|
||||||
|
Response* getTokensUpdatedResp = reqMan->getTokensUpdated(start);
|
||||||
|
//start = QDateTime::currentMSecsSinceEpoch();
|
||||||
|
QSignalSpy getTokensUpdatedRespSpy(getTokensUpdatedResp, &Response::ready);
|
||||||
|
QCOMPARE(getTokensUpdatedRespSpy.count(), 0);
|
||||||
|
getTokensUpdatedRespSpy.wait(10000);
|
||||||
|
QCOMPARE(getTokensUpdatedResp->getStatusCode(), 200);
|
||||||
|
QCOMPARE(getTokensUpdatedRespSpy.count(), 1);
|
||||||
|
auto doc1 = getJsonDoc(getTokensUpdatedResp->getJson());
|
||||||
|
QCOMPARE(doc1.object()["items"].toArray().size(), 1);
|
||||||
|
// CHECK_UPDATED_TOKENS_END
|
||||||
|
|
||||||
|
// DELETE_TOKENS_CHECK_BEGIN
|
||||||
|
QList<QString> ids;
|
||||||
|
ids.append("582c982d-6fd7-4856-8548-7ce542791c7a");
|
||||||
|
Response* deleteTokensResp = reqMan->deleteTokens(ids);
|
||||||
|
QSignalSpy deleteTokensRespSpy(deleteTokensResp, &Response::ready);
|
||||||
|
QCOMPARE(deleteTokensRespSpy.count(), 0);
|
||||||
|
deleteTokensRespSpy.wait(10000);
|
||||||
|
QCOMPARE(deleteTokensRespSpy.count(), 1);
|
||||||
|
QCOMPARE(deleteTokensResp->getStatusCode(), 200);
|
||||||
|
// DELETE_TOKENS_CHECK_END
|
||||||
|
|
||||||
|
// CHECK_DELETED_TOKENS_BEGIN
|
||||||
|
Response* getTokensDeletedResp = reqMan->getTokensDeleted(start);
|
||||||
|
start = QDateTime::currentMSecsSinceEpoch();
|
||||||
|
QSignalSpy getTokensDeletedRespSpy(getTokensDeletedResp, &Response::ready);
|
||||||
|
QCOMPARE(getTokensDeletedRespSpy.count(), 0);
|
||||||
|
getTokensDeletedRespSpy.wait(10000);
|
||||||
|
QCOMPARE(getTokensDeletedResp->getStatusCode(), 200);
|
||||||
|
QCOMPARE(getTokensDeletedRespSpy.count(), 1);
|
||||||
|
auto doc2 = getJsonDoc(getTokensDeletedResp->getJson());
|
||||||
|
QCOMPARE(doc2.object()["items"].toArray().size(), 1);
|
||||||
|
QVERIFY(doc2.object()["items"].toArray().contains("582c982d-6fd7-4856-8548-7ce542791c7a"));
|
||||||
|
// CHECK_DELETED_TOKENS_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// LAST_TESTS (for sure)
|
||||||
|
QCOMPARE(loginSpy.count(), 1); // Checking multiple calls
|
||||||
|
QCOMPARE(loginRespSpy.count(), 1);
|
||||||
|
QCOMPARE(getNumOfSubjects(), numOfSubjects);
|
||||||
|
QCOMPARE(getNumOfTokens(), numOfTokens);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// HELPFUL_FUNCTIONS
|
||||||
|
int ComplexTest::getNumOfSubjects()
|
||||||
|
{
|
||||||
|
Response* subjectsResp = reqMan->getSubjects();
|
||||||
|
QSignalSpy subjectsRespSpy(subjectsResp, &Response::ready);
|
||||||
|
subjectsRespSpy.wait(10000);
|
||||||
|
auto doc = getJsonDoc(subjectsResp->getJson());
|
||||||
|
return doc.object()["items"].toArray().size();
|
||||||
|
}
|
||||||
|
|
||||||
|
int ComplexTest::getNumOfTokens()
|
||||||
|
{
|
||||||
|
Response* tokensResp = reqMan->getTokens();
|
||||||
|
QSignalSpy tokensRespSpy(tokensResp, &Response::ready);
|
||||||
|
tokensRespSpy.wait(10000);
|
||||||
|
auto doc = getJsonDoc(tokensResp->getJson());
|
||||||
|
return doc.object()["items"].toArray().size();
|
||||||
|
}
|
||||||
|
|
||||||
|
QJsonDocument ComplexTest::getJsonDoc(QString json)
|
||||||
|
{
|
||||||
|
return QJsonDocument::fromJson(json.toUtf8());
|
||||||
|
}
|
||||||
|
|
||||||
|
Token* ComplexTest::getTestToken()
|
||||||
|
{
|
||||||
|
QJsonObject jsonToken;
|
||||||
|
jsonToken.insert("id", "582c982d-6fd7-4856-8548-7ce542791c7a");
|
||||||
|
jsonToken.insert("name", "test");
|
||||||
|
jsonToken.insert("description", "mobile");
|
||||||
|
jsonToken.insert("tokenType", "Token");
|
||||||
|
jsonToken.insert("tokenBits", 32);
|
||||||
|
jsonToken.insert("tokenData", "7B9D32");
|
||||||
|
jsonToken.insert("timeToLive", 255);
|
||||||
|
jsonToken.insert("authErrors", 255);
|
||||||
|
QJsonArray flags;
|
||||||
|
flags.push_back("Enabled");
|
||||||
|
flags.push_back("NoValidity");
|
||||||
|
jsonToken.insert("flags", flags);
|
||||||
|
jsonToken.insert("subjectId", "72b37f7e-5761-4e6c-8e87-20c0bed0d904");
|
||||||
|
Token* token = new Token;
|
||||||
|
token->fromJSON(jsonToken);
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTEST_MAIN(ComplexTest)
|
||||||
33
test/unitTests/complextest.h
Normal file
33
test/unitTests/complextest.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QtTest/QtTest>
|
||||||
|
#include "response.h"
|
||||||
|
#include "requestmanager.h"
|
||||||
|
|
||||||
|
class ComplexTest : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void initTestCase();
|
||||||
|
void complexTest();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// FUNCTIONS
|
||||||
|
int getNumOfSubjects();
|
||||||
|
int getNumOfTokens();
|
||||||
|
QJsonDocument getJsonDoc(QString json);
|
||||||
|
Token* getTestToken();
|
||||||
|
|
||||||
|
|
||||||
|
// VARIABLES
|
||||||
|
QString host = "https://192.168.1.3";
|
||||||
|
QString user = "spaceti";
|
||||||
|
QString password = "spaceti1";
|
||||||
|
RequestManager* reqMan = nullptr;
|
||||||
|
uint64_t start = 0;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
@ -1,15 +1,17 @@
|
|||||||
QT -= gui
|
QT -= gui
|
||||||
QT += core sql network testlib
|
QT += core sql network testlib
|
||||||
CONFIG += testcase # neccesary to have posibility to run: make check UnitTest
|
CONFIG += testcase # neccesary to have posibility to run: make check UnitTest
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
unittest.h
|
complextest.h \
|
||||||
SOURCES += \
|
unittest.h
|
||||||
unittest.cpp
|
SOURCES += \
|
||||||
|
complextest.cpp \
|
||||||
include(../../src/colnod/colnod.pri)
|
unittest.cpp
|
||||||
|
|
||||||
# Default rules for deployment.
|
include(../../src/colnod/colnod.pri)
|
||||||
qnx: target.path = /tmp/$${TARGET}/bin
|
|
||||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
# Default rules for deployment.
|
||||||
!isEmpty(target.path): INSTALLS += target
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
||||||
|
|||||||
@ -17,6 +17,8 @@ class UnitTest : public QObject
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
|
void initTestCase();
|
||||||
|
|
||||||
void loginSuccessfully(); // /AaaManager/authSession
|
void loginSuccessfully(); // /AaaManager/authSession
|
||||||
void getSubjects(); // /SubjectManager/getSubjects
|
void getSubjects(); // /SubjectManager/getSubjects
|
||||||
void getTokens(); // /TokenManager/getTokens
|
void getTokens(); // /TokenManager/getTokens
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user