diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 60e326c..6f9d5ef 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,30 +3,75 @@ stages: - build - test +# To clone also submodules +variables: + GIT_SUBMODULE_STRATEGY: recursive + + # ######## # Build ########## -build: # name of task - stage: build # in what stage it will run ( 1. build then test etc ) - tags: # Tags are used to choose correct gitlab-runner - - hw # spaceti-runner server has running runners and one has tag 'hw' - script: # run in bash - - mkdir -p build +build: + stage: build + tags: + - shell + script: + - mkdir -p build - cd build - qmake ../colnod-connector.pro - - make -j8 + - make -j4 cache: paths: - - build/ - + - build # this path will be cached for next stages # ######## # Test ########## -test: # name of task - stage: test # in what stage it will run ( 1. build then test etc ) - tags: # Tags are used to choose correct gitlab-runner - - hw # spaceti-runner server has running runners and one has tag 'hw' - script: # run in bash +test: + stage: test + tags: + - shell + script: - cd build - make check test + +# memory leak check for unittest +valgrind: + stage: test + tags: + - shell + script: + - cd build + - valgrind make check test + +# Quality of code +cppcheck: + stage: test + tags: + - shell + #allow_failure: true # Probably needed to allow failure + script: + - server-sdk/scripts/cppcheck.sh + +# Common checks ( Line endings ) +lineendings: + stage: test + tags: + - shell + script: + - server-sdk/scripts/check.sh + +codecoverage: + stage: test + tags: + - shell + script: + - server-sdk/scripts/codecoverage.sh + coverage: '/^\s+functions..:\s+(\d+\.\d+%).+$/' + +doc: + stage: test + tags: + - shell + script: + - server-sdk/scripts/doc.sh clean # 'clean' better clean before generating documentation diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..33c01ac --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "server-sdk"] + path = server-sdk + url = ../../common/server-sdk diff --git a/colnod-connector.pro b/colnod-connector.pro index 41bdb50..1d3a892 100644 --- a/colnod-connector.pro +++ b/colnod-connector.pro @@ -1,5 +1,13 @@ TEMPLATE = subdirs +CONFIG += ordered + SUBDIRS += \ + server-sdk/src/serversdk/serversdk.pro \ src/app \ test + +OTHER_FILES += \ + doc/* \ + .gitignore \ + .gitlab-ci.yml \ diff --git a/doc/Doxyfile-mcss b/doc/Doxyfile-mcss new file mode 100644 index 0000000..0ef7058 --- /dev/null +++ b/doc/Doxyfile-mcss @@ -0,0 +1,43 @@ +@INCLUDE = ../server-sdk/doc/Doxyfile-init +# Output settings +GENERATE_HTML = NO +GENERATE_XML = YES +GENERATE_LATEX = NO +XML_PROGRAMLISTING = YES + +# Project settings +PROJECT_NAME = example-app +INPUT = ../src \ + pages \ + ../readme.md \ +FILE_PATTERNS += *.md +USE_MDFILE_AS_MAINPAGE = ../readme.md +OUTPUT_DIRECTORY = ../build/doc/ +FULL_PATH_NAMES = NO + +# Attributes settings +RECURSIVE = YES +EXTRACT_PRIVATE = YES +EXTRACT_ALL = YES + +## m.css internal command -> show undocumented +M_SHOW_UNDOCUMENTED = YES + + +## Taken from magnum ( Project from authors of m.css ) +SHOW_USED_FILES = YES +VERBATIM_HEADERS = NO +AUTOLINK_SUPPORT = YES + + +ALIASES += \ + "m_div{1}=@xmlonly@endxmlonly" \ + "m_enddiv=@xmlonly@endxmlonly" \ + "m_span{1}=@xmlonly@endxmlonly" \ + "m_endspan=@xmlonly@endxmlonly" \ + "m_class{1}=@xmlonly@endxmlonly" \ + "m_footernavigation=@xmlonly@endxmlonly" \ + "m_examplenavigation{2}=@xmlonly@endxmlonly" \ + "m_keywords{1}=@xmlonly@endxmlonly" \ + "m_keyword{3}=@xmlonly@endxmlonly" \ + "m_enum_values_as_keywords=@xmlonly@endxmlonly" diff --git a/doc/pages/mainpage.md b/doc/pages/mainpage.md new file mode 100644 index 0000000..73ed06f --- /dev/null +++ b/doc/pages/mainpage.md @@ -0,0 +1 @@ +# Example app documentation diff --git a/server-sdk b/server-sdk new file mode 160000 index 0000000..b6950b9 --- /dev/null +++ b/server-sdk @@ -0,0 +1 @@ +Subproject commit b6950b9bfe35d10d4fc65e42f22086796ac85142 diff --git a/src/app/app.pro b/src/app/app.pro index 619e67b..467b2c4 100644 --- a/src/app/app.pro +++ b/src/app/app.pro @@ -1,8 +1,12 @@ TEMPLATE = app QT += core sql network -CONFIG += debug console +CONFIG += cmdline c++14 +CONFIG += ordered + SOURCES += main.cpp + include(../colnod/colnod.pri) + diff --git a/src/colnod/colnod.pri b/src/colnod/colnod.pri index 23198f5..2929196 100644 --- a/src/colnod/colnod.pri +++ b/src/colnod/colnod.pri @@ -1,6 +1,8 @@ INCLUDEPATH += $$PWD -#SRC_DIR = $$PWD -message($$PWD) + +CONFIG += c++14 + + SOURCES += \ $$PWD/databasemanager.cpp \ $$PWD/datamanager.cpp \ @@ -22,4 +24,5 @@ HEADERS += \ $$PWD/subject.h \ $$PWD/syncmanager.h \ $$PWD/token.h -message($$SOURCES) + +include(../../server-sdk/serversdk.pri) diff --git a/src/colnod/databasemanager.cpp b/src/colnod/databasemanager.cpp index ebc68e9..6e06145 100644 --- a/src/colnod/databasemanager.cpp +++ b/src/colnod/databasemanager.cpp @@ -1,4 +1,6 @@ #include "databasemanager.h" +#include "logger.h" + DatabaseManager::DatabaseManager(const QString& host, const QString& dbName, const QString& user, const QString& password, const bool &dryMode) :dryMode(dryMode) diff --git a/src/colnod/databasemanager.h b/src/colnod/databasemanager.h index 58469ff..f95a9d4 100644 --- a/src/colnod/databasemanager.h +++ b/src/colnod/databasemanager.h @@ -10,7 +10,6 @@ #include "subject.h" #include "token.h" #include -#include "logger.h" class DatabaseManager : public QObject diff --git a/src/colnod/datamanager.cpp b/src/colnod/datamanager.cpp index 5f441c5..3d81721 100644 --- a/src/colnod/datamanager.cpp +++ b/src/colnod/datamanager.cpp @@ -1,16 +1,15 @@ #include "datamanager.h" -DataManager::DataManager(const bool &dryMode) - :dryMode(dryMode) +DataManager::DataManager(const bool &dryMode) : + db(std::make_shared("192.168.1.94", "deloitte", "postgres", "34rjkciea12", dryMode)), + dryMode(dryMode) { - db = std::make_shared("192.168.1.94", "deloitte", "postgres", "34rjkciea12", dryMode); - //db = std::make_shared("localhost", "deloitte", "postgres", "34rjkciea12"); if (db->isOpen()){ Logger::setDBMan(db); nextLastSync = db->getNow(); lastSync = db->getLastSync(); } - connect(db.get(), &DatabaseManager::error, this, &DataManager::error, Qt::QueuedConnection); + connect(db.get(), &DatabaseManager::error, this, &DataManager::error); } // load all tokens from colnod to comparing with working set from DB diff --git a/src/colnod/datamanager.h b/src/colnod/datamanager.h index 5e12e79..d3e94ac 100644 --- a/src/colnod/datamanager.h +++ b/src/colnod/datamanager.h @@ -15,7 +15,7 @@ class DataManager : public QObject Q_OBJECT public: - DataManager(const bool& dryMode = false); + explicit DataManager(const bool& dryMode = false); void fillFullTokensColnod(const QString& jsonResponse); diff --git a/src/colnod/entity.h b/src/colnod/entity.h index bd4f217..5a4a4af 100644 --- a/src/colnod/entity.h +++ b/src/colnod/entity.h @@ -10,6 +10,7 @@ class Entity : public QObject { Q_OBJECT public: + Entity() = default; using QObject::QObject; const QUuid &getId() const; diff --git a/src/colnod/requestmanager.cpp b/src/colnod/requestmanager.cpp index 035a57b..7199e43 100644 --- a/src/colnod/requestmanager.cpp +++ b/src/colnod/requestmanager.cpp @@ -1,8 +1,8 @@ #include "requestmanager.h" RequestManager::RequestManager() + : manager(std::make_unique()) { - manager = std::make_unique(); connect(manager.get(), &QNetworkAccessManager::sslErrors, this, &RequestManager::onSSLError); } diff --git a/src/colnod/subject.h b/src/colnod/subject.h index a0e8ae9..d7e6367 100644 --- a/src/colnod/subject.h +++ b/src/colnod/subject.h @@ -12,7 +12,7 @@ class Subject : public Entity { public: using Entity::Entity; Subject() = default; - Subject(const QString& name); + explicit Subject(const QString& name); QString getEmail() const; diff --git a/src/colnod/syncmanager.cpp b/src/colnod/syncmanager.cpp index 411058c..29dcf07 100644 --- a/src/colnod/syncmanager.cpp +++ b/src/colnod/syncmanager.cpp @@ -1,12 +1,12 @@ #include "syncmanager.h" -SyncManager::SyncManager(bool dryMode) - :dryMode(dryMode) +SyncManager::SyncManager(bool dryMode) : + reqMan(std::make_unique()), + dataMan( std::make_unique(dryMode)), + dryMode(dryMode) { - reqMan = std::make_unique(); - dataMan = std::make_unique(dryMode); - connect(reqMan.get(), &RequestManager::error, this, &SyncManager::error, Qt::QueuedConnection); - connect(dataMan.get(), &DataManager::error, this, &SyncManager::error, Qt::QueuedConnection); + connect(reqMan.get(), &RequestManager::error, this, &SyncManager::error); + connect(dataMan.get(), &DataManager::error, this, &SyncManager::error); } void SyncManager::loadDataFromColnod() diff --git a/src/colnod/syncmanager.h b/src/colnod/syncmanager.h index c5669e3..f39db10 100644 --- a/src/colnod/syncmanager.h +++ b/src/colnod/syncmanager.h @@ -9,8 +9,7 @@ class SyncManager : public QObject Q_OBJECT public: - - SyncManager(bool dryMode = false); + explicit SyncManager(bool dryMode = false); void syncDataFromColnodToDB(); void syncDataFromDBToColnod(); diff --git a/src/colnod/token.h b/src/colnod/token.h index 4292f3b..bce4c69 100644 --- a/src/colnod/token.h +++ b/src/colnod/token.h @@ -13,7 +13,7 @@ public: Token() = default; Token(const QString& name, QString tokenData, const QString& decription = "mobile"); - Token(const QString& name); + explicit Token(const QString& name); ~Token() override; friend bool operator<(const Token &lToken, const Token &rToken){ diff --git a/test/unitTests/unitTests.pro b/test/unitTests/unitTests.pro index 7fb83f9..78dd147 100644 --- a/test/unitTests/unitTests.pro +++ b/test/unitTests/unitTests.pro @@ -10,6 +10,7 @@ SOURCES += \ unittest.cpp include(../../src/colnod/colnod.pri) +include(../../server-sdk/serversdk.pri) # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin