File indexing completed on 2024-05-12 17:08:30

0001 /*
0002  * SPDX-FileCopyrightText: 2018-2019 Daniel Vrátil <dvratil@kde.org>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #include "fakeserver.h"
0008 #include "fakemanager.h"
0009 
0010 #include <QDBusConnection>
0011 #include <QDBusConnectionInterface>
0012 #include <QDBusError>
0013 #include <QDebug>
0014 #include <QEventLoop>
0015 #include <QJsonDocument>
0016 #include <QJsonObject>
0017 #include <QTest>
0018 #include <QTimer>
0019 
0020 namespace
0021 {
0022 static const QString OrgKdeFakebolt = QStringLiteral("org.kde.fakebolt");
0023 
0024 }
0025 
0026 FakeServer::FakeServer(const QString &filename)
0027 {
0028     QFile jsonFile(filename);
0029     if (!jsonFile.open(QIODevice::ReadOnly)) {
0030         qCritical("Failed to open file %s: %s", qUtf8Printable(filename), qUtf8Printable(jsonFile.errorString()));
0031         throw FakeServerException(QStringLiteral("Failed to open file %1: %2").arg(filename, jsonFile.errorString()));
0032     }
0033 
0034     const auto doc = QJsonDocument::fromJson(jsonFile.readAll());
0035 
0036     if (!QDBusConnection::sessionBus().registerService(OrgKdeFakebolt)) {
0037         throw FakeServerException(QStringLiteral("Failed to register org.kde.fakebolt service: %1").arg(QDBusConnection::sessionBus().lastError().message()));
0038     }
0039 
0040     try {
0041         mManager = std::make_unique<FakeManager>(doc.object());
0042     } catch (const FakeManagerException &e) {
0043         throw FakeServerException(e.what());
0044     }
0045 }
0046 
0047 FakeServer::FakeServer()
0048 {
0049     if (!QDBusConnection::sessionBus().registerService(OrgKdeFakebolt)) {
0050         throw FakeServerException(QStringLiteral("Failed to register org.kde.fakebolt service: %1").arg(QDBusConnection::sessionBus().lastError().message()));
0051     }
0052 
0053     try {
0054         mManager = std::make_unique<FakeManager>();
0055     } catch (FakeManagerException &e) {
0056         throw FakeServerException(e.what());
0057     }
0058 }
0059 
0060 FakeServer::~FakeServer()
0061 {
0062 }
0063 
0064 void FakeServer::enableFakeEnv()
0065 {
0066     qputenv("KBOLT_FAKE", "1");
0067 }
0068 
0069 FakeManager *FakeServer::manager() const
0070 {
0071     return mManager.get();
0072 }