123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- // QT includes
- #include <QResource>
- #include <QDebug>
- // JsonSchema includes
- #include <utils/jsonschema/QJsonFactory.h>
- // hyperion includes
- #include <hyperion/LedString.h>
- #include "HyperionConfig.h"
- bool loadConfig(const QString & configFile, bool correct, bool ignore)
- {
- // make sure the resources are loaded (they may be left out after static linking)
- Q_INIT_RESOURCE(resource);
- ////////////////////////////////////////////////////////////
- // read and set the json schema from the resource
- ////////////////////////////////////////////////////////////
- QJsonObject schemaJson;
- try
- {
- schemaJson = QJsonFactory::readSchema(":/hyperion-schema");
- }
- catch(const std::runtime_error& error)
- {
- throw std::runtime_error(error.what());
- }
- QJsonSchemaChecker schemaChecker;
- schemaChecker.setSchema(schemaJson);
- ////////////////////////////////////////////////////////////
- // read and validate the configuration file from the command line
- ////////////////////////////////////////////////////////////
- QJsonObject jsonConfig = QJsonFactory::readConfig(configFile);
- if (!correct)
- {
- if (!schemaChecker.validate(jsonConfig).first)
- {
- QStringList schemaErrors = schemaChecker.getMessages();
- for (auto & schemaError : schemaErrors)
- {
- qDebug() << "config write validation: " << schemaError;
- }
- qDebug() << "FAILED";
- exit(1);
- return false;
- }
- }
- else
- {
- jsonConfig = schemaChecker.getAutoCorrectedConfig(jsonConfig, ignore); // The second parameter is to ignore the "required" keyword in hyperion schema
- QJsonFactory::writeJson(configFile, jsonConfig);
- }
- return true;
- }
- void usage()
- {
- qDebug() << "Missing required configuration file to test";
- qDebug() << "Usage: test_configfile <option> [configfile]";
- qDebug() << "<option>:";
- qDebug() << "\t--ac - for json auto correction";
- qDebug() << "\t--ac-ignore-required - for json auto correction without paying attention 'required' keyword in hyperion schema";
- }
- int main(int argc, char** argv)
- {
- if (argc < 2)
- {
- usage();
- return 0;
- }
- QString option = argv[1];
- QString configFile;
- if (option == "--ac" || option == "--ac-ignore-required")
- {
- if (argc > 2)
- configFile = argv[2];
- else
- {
- usage();
- return 0;
- }
- }
- else configFile = argv[1];
- qDebug() << "Configuration file selected: " << configFile;
- qDebug() << "Attemp to load...";
- try
- {
- if (loadConfig(configFile, (option == "--ac" || option == "--ac-ignore-required"), option == "--ac-ignore-required"))
- qDebug() << "PASSED";
- return 0;
- }
- catch (std::runtime_error& exception)
- {
- qDebug() << "FAILED";
- qDebug() << exception.what();
- }
- return 1;
- }
|