Merge pull request #71 from QuasarApp/task_60

Added implementation for method checkSign.
This commit is contained in:
Igor loschinin 2021-06-11 21:05:54 +03:00 committed by GitHub
commit ca8693e5ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 330 additions and 14 deletions

View File

@ -16,35 +16,35 @@ bool IFileManager::isSupport(const Extension &curExt) const {
Extension IFileManager::toExtension(const QString &curExt) const {
if (".cpp" == curExt) {
if ("cpp" == curExt) {
return Extension::CPP;
}
if (".hpp" == curExt) {
if ("hpp" == curExt) {
return Extension::HPP;
}
if (".h" == curExt) {
if ("h" == curExt) {
return Extension::H;
}
if (".cc" == curExt) {
if ("cc" == curExt) {
return Extension::CC;
}
if (".qml" == curExt) {
if ("qml" == curExt) {
return Extension::QML;
}
if (".pro" == curExt) {
if ("pro" == curExt) {
return Extension::PRO;
}
if (".txt" == curExt) {
if ("txt" == curExt) {
return Extension::TXT;
}
if (".py" == curExt) {
if ("py" == curExt) {
return Extension::PY;
}

View File

@ -5,27 +5,151 @@
//# of this license document, but changing it is not allowed.
//#
#include <time.h>
#include "signer.h"
#include "CopyrighFixer/ifilemanager.h"
#include <QDir>
#include <quasarapp.h>
namespace CopyrighFixer {
Signer::Signer() {
}
bool Signer::checkSign(const Config &objConf) {
bool Signer::processSign(const QString &pathToFile, const Config &objConf) const {
QDir currentFolder(pathToFile);
currentFolder.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
QFileInfoList folderItems(currentFolder.entryInfoList());
for (auto i_file: folderItems) {
if (i_file.isDir()) {
processSign(i_file.filePath(), objConf);
} else {
IFileManager *currFM = searchFileByExt(i_file.suffix());
Signature signFromFile;
Signature resultSign;
if (currFM == nullptr) {
QuasarAppUtils::Params::log(
QString("The CFixer tool are not support files with sufix: %1").arg(i_file.suffix()),
QuasarAppUtils::VerboseLvl::Error);
return false;
}
if (!currFM->read(i_file.filePath(), signFromFile)) {
QuasarAppUtils::Params::log(QString("Failed to load file - %1").arg(i_file.fileName()),
QuasarAppUtils::VerboseLvl::Error);
return false;
}
resultSign = mergeSign(objConf.getSignVal(), signFromFile);
if (!currFM->write(i_file.filePath(), resultSign)) {
QuasarAppUtils::Params::log(QString("Failed to write signature in file - %1").arg(i_file.fileName()),
QuasarAppUtils::VerboseLvl::Error);
return false;
}
}
}
return true;
}
IFileManager *Signer::searchFileByExt(const QString &extension) {
bool Signer::checkSign(const Config &objConf) {
if (!processSign(objConf.getSrcDir(), objConf)) {
return false;
}
return true;
}
const Signature Signer::upgradeOwner(const Signature &signConf, const Signature &fileSign) const {
int unixTime = time(0);
Signature signForSing = fileSign;
QMap<int, CopyrighFixer::Owner> mapOwnersFile = signForSing.getMapOwn();
CopyrighFixer::Owner newOwner = mapOwnersFile.take(fileSign.getMapOwn().cbegin().key());
newOwner.setName(signConf.getMapOwn().cbegin().value().getOwnerName());
newOwner.setTimePoint(unixTime);
mapOwnersFile.insert(unixTime, newOwner);
signForSing.setMapOwners(mapOwnersFile);
return signForSing;
}
const Signature Signer::appendOwner(const Signature &signConf, const Signature &fileSign) const {
int unixTime = time(0);
Signature signForSing = fileSign;
QMap<int, CopyrighFixer::Owner> mapOwnersFile = signForSing.getMapOwn();
CopyrighFixer::Owner newOwners;
newOwners.setName(signConf.getMapOwn().cbegin().value().getOwnerName());
newOwners.setTimePoint(unixTime);
mapOwnersFile.insert(unixTime, newOwners);
signForSing.setMapOwners(mapOwnersFile);
return signForSing;
}
const Signature Signer::mergeSign(const Signature &userSign, const Signature &fileSign) const {
bool fLastOwnerEqual = userSign.getMapOwn().cbegin().value().getOwnerName() != fileSign.getMapOwn().cbegin().value().getOwnerName();
bool fLastOwnerDiff = userSign.getMapOwn().cbegin().value().getOwnerName() == fileSign.getMapOwn().cbegin().value().getOwnerName();
bool fNumOwnsMore = userSign.getMapOwn().size() > 1;
bool fEqualLicTitle = userSign.getLicenseTitle() != fileSign.getLicenseTitle();
if (!fileSign.isValid()) {
return userSign;
}
if (fEqualLicTitle) {
QuasarAppUtils::Params::log("The signature in the file is different from the config signature.",
QuasarAppUtils::VerboseLvl::Warning);
return fileSign;
}
if (fNumOwnsMore) {
QuasarAppUtils::Params::log("Config signature contains more owners.",
QuasarAppUtils::VerboseLvl::Warning);
if (fLastOwnerEqual) {
return appendOwner(userSign, fileSign);
}
}
if (fLastOwnerDiff) {
return upgradeOwner(userSign, fileSign);
}
if (fLastOwnerEqual) {
return appendOwner(userSign, fileSign);
}
return fileSign;
}
IFileManager *Signer::searchFileByExt(const QString &extension) const {
for (auto itemFM: _fileManager) {
if (itemFM && itemFM->isSupport(itemFM->toExtension(extension))) {
return itemFM;
}
}
return nullptr;
}

View File

@ -10,6 +10,7 @@
#include "CopyrighFixer_global.h"
#include "config.h"
#include <QFileInfo>
namespace CopyrighFixer {
@ -22,22 +23,47 @@ class CopyrighFixer_EXPORT Signer {
public:
Signer();
bool processSign(const QString &pathToFile, const Config &objConf) const;
/**
* @brief checkSign The method that add copyright to all sources files.
* @param objConf This is a configuration object.
*/
bool checkSign(const Config &objConf);
/**
* @brief mergeSign The method compares two signatures and merges into one.
* @param userSign The signature that is pulled from the configuration.
* @param fileSign The signature that is read from the file.
* @return Returns the signature for signing a filereturn false;.
*/
const Signature mergeSign(const Signature &userSign, const Signature &fileSign) const;
/**
* @brief searchFileByExt The method that searches for files with the desired extension.
* @param extension This is the file extension to search.
* @return Returns a pointer to the FileManager of the found extension, or nullptr if the file extension was not found.
*/
IFileManager *searchFileByExt(const QString &extension);
IFileManager *searchFileByExt(const QString &extension) const;
private:
QList<IFileManager*> _fileManager;
/**
* @brief upgradeOwner
* @param signConf The signature that is pulled from the configuration.
* @param fileSign The signature that is read from the file.
* @return Returns a signature with the last owner updated.
*/
const Signature upgradeOwner(const Signature &signConf, const Signature &fileSign) const;
/**
* @brief appendOwner
* @param signConf The signature that is pulled from the configuration.
* @param fileSign The signature that is read from the file.
* @return Returns a signature with the most recently updated owner list.
*/
const Signature appendOwner(const Signature &signConf, const Signature &fileSign) const;
};
}

View File

@ -8,6 +8,7 @@
#include <QtTest>
#include "cfixertest.h"
#include "signtest.h"
#include "signertest.h"
#include "configparsertest.h"
// Use This macros for initialize your own test classes.
@ -34,6 +35,7 @@ private slots:
// BEGIN TESTS CASES
TestCase(exampleTest, ExampleTest);
TestCase(signTest, SignTest);
TestCase(signerTest, SignerTest);
TestCase(configParserTest, ConfigParserTest)
// END TEST CASES

View File

@ -5,6 +5,7 @@
//# of this license document, but changing it is not allowed.
//#
#include <time.h>
#include "signertest.h"
#include <QDebug>
@ -20,7 +21,150 @@ void SignerTest::test() {
testSigner();
}
void SignerTest::testSigner() {
CopyrighFixer::Signature SignerTest::genSign(const QString licen,
const QString nOwn,
int tP) const {
CopyrighFixer::Owner ownerObj;
ownerObj.setName(nOwn);
ownerObj.setTimePoint(tP);
QMap<int, CopyrighFixer::Owner> OwnerMap;
OwnerMap.insert(tP, ownerObj);
CopyrighFixer::Signature signTest;
signTest.setLicenseTitle(licen);
signTest.setMessage("Distributed under the lgplv3 software license, see the accompany.");
signTest.setMapOwners(OwnerMap);
return signTest;
}
CopyrighFixer::Signature SignerTest::genSign(QList<SignerTest::dataOwns> numOwns, const QString licen) const {
QMap<int, CopyrighFixer::Owner> OwnerMap;
for (auto itemOwn: numOwns) {
CopyrighFixer::Owner ownerObj;
ownerObj.setName(itemOwn.name);
ownerObj.setTimePoint(itemOwn.timePoint);
OwnerMap.insert(itemOwn.timePoint, ownerObj);
}
CopyrighFixer::Signature signTest;
signTest.setLicenseTitle(licen);
signTest.setMessage("Distributed under the lgplv3 software license, see the accompany.");
signTest.setMapOwners(OwnerMap);
return signTest;
}
QList<SignerTest::Signers> SignerTest::lstSing() const {
int unixTime = time(0);
// 1
// The case when the signatures in the config and the file match.
SignerTest::Signers equalSign;
equalSign.signFormConf = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", 1622657022);
equalSign.signFormFile = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", 1622657022);
equalSign.signAfterMerge = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", unixTime);
// 2
// The Different licenses.
SignerTest::Signers signDiffLic;
signDiffLic.signFormConf = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", 1622657022);
signDiffLic.signFormFile = genSign("MIT License Copyright (C) 2019-2020 QuasarApp.", "QuasarApp", 1622657022);
signDiffLic.signAfterMerge = genSign("MIT License Copyright (C) 2019-2020 QuasarApp.", "QuasarApp", 1622657022);
// 3
// The Different owners.
SignerTest::Signers signDiffOwn;
signDiffOwn.signFormConf = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", 1700000000);
signDiffOwn.signFormFile = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarAppSdfdf", 1622657022);
signDiffOwn.signAfterMerge = genSign({{"QuasarAppSdfdf", 1622657022},
{"QuasarApp", unixTime}},
"MIT License Copyright (C) 2020-2021 QuasarApp.");
// 4
// The equal owners.
SignerTest::Signers signEqualOwn;
signEqualOwn.signFormConf = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", 1700000000);
signEqualOwn.signFormFile = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", 1622657022);
signEqualOwn.signAfterMerge = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", unixTime);
// 5
// The signature is missing from the file.
SignerTest::Signers signMissingInFile;
signMissingInFile.signFormConf = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", 1622657022);
signMissingInFile.signFormFile = genSign();
signMissingInFile.signAfterMerge = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", 1622657022);
// 6
// Here are no owners in the file.
SignerTest::Signers signMissOwnInFile;
signMissOwnInFile.signFormConf = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", 1622657022);
signMissOwnInFile.signFormFile = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.");
signMissOwnInFile.signAfterMerge = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", 1622657022);
// 7
// Generating multiple owners config.
QList<SignerTest::dataOwns> lstOwnsForConf = {
{"QuasarApp", unixTime},
{"QuasarApp1", unixTime+1},
{"QuasarApp2", unixTime+2}
};
// The number of owners differs.
SignerTest::Signers signDiffNumOwnConf;
signDiffNumOwnConf.signFormConf = genSign(lstOwnsForConf, "MIT License Copyright (C) 2020-2021 QuasarApp.");
signDiffNumOwnConf.signFormFile = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", 1700000000);
signDiffNumOwnConf.signAfterMerge = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", unixTime);
// 8
// Generating multiple owners file.
QList<SignerTest::dataOwns> lstOwnsForFile = {
{"QuasarApp", unixTime},
{"QuasarApp1", unixTime+1},
{"QuasarApp2", unixTime+2},
{"QuasarApp3", unixTime+3}
};
// The number of owners differs.
SignerTest::Signers signDiffNumOwnFile;
signDiffNumOwnFile.signFormConf = genSign("MIT License Copyright (C) 2020-2021 QuasarApp.", "QuasarApp", 1700000000);
signDiffNumOwnFile.signFormFile = genSign(lstOwnsForFile, "MIT License Copyright (C) 2020-2021 QuasarApp.");
signDiffNumOwnFile.signAfterMerge = genSign(lstOwnsForFile, "MIT License Copyright (C) 2020-2021 QuasarApp.");
return {equalSign, signDiffLic, signDiffOwn, signEqualOwn, signMissingInFile, signMissOwnInFile, signDiffNumOwnConf};
}
void SignerTest::testMergeSign() const {
QList<SignerTest::Signers> dfd = lstSing();
for (auto itemSign: lstSing()) {
CopyrighFixer::Signer resSign;
CopyrighFixer::Signature mergeSignUF = resSign.mergeSign(itemSign.signFormConf,
itemSign.signFormFile);
QVERIFY(mergeSignUF == itemSign.signAfterMerge);
}
}
void SignerTest::testCheckSign() const {
qWarning() << "The SignerTest class is not implemented";
QVERIFY(true);
}
void SignerTest::testSigner() {
testMergeSign();
testCheckSign();
}

View File

@ -19,6 +19,26 @@ public:
~SignerTest();
void test();
struct dataOwns{
QString name;
int timePoint;
};
struct Signers {
CopyrighFixer::Signature signFormConf;
CopyrighFixer::Signature signFormFile;
CopyrighFixer::Signature signAfterMerge;
};
CopyrighFixer::Signature genSign(const QString licen = "",
const QString nOwn = "",
int tP = 0) const;
CopyrighFixer::Signature genSign(QList<dataOwns> numOwns, const QString licen = "") const;
QList<Signers> lstSing() const;
void testMergeSign() const;
void testCheckSign() const;
void testSigner();
};