File indexing completed on 2024-04-21 03:51:51

0001 /*
0002  * SPDX-FileCopyrightText: 2014-2015 David Rosca <nowrep@gmail.com>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 
0007 #include "fakebluez.h"
0008 #include "agentmanager.h"
0009 #include "devicemanager.h"
0010 #include "obexagentmanager.h"
0011 #include "obexclient.h"
0012 #include "objectmanager.h"
0013 #include "profilemanager.h"
0014 #include "testinterface.h"
0015 
0016 #include <QDBusConnection>
0017 #include <QDebug>
0018 #include <QTimer>
0019 
0020 // ObexObject
0021 class ObexObject : public QObject
0022 {
0023 public:
0024     explicit ObexObject(QObject *parent = nullptr)
0025         : QObject(parent)
0026     {
0027         QDBusConnection::sessionBus().registerObject(QStringLiteral("/org/bluez/obex"), this);
0028     }
0029 };
0030 
0031 // FakeBluez
0032 FakeBluez::FakeBluez(QObject *parent)
0033     : QObject(parent)
0034     , m_testInterface(new TestInterface(this))
0035     , m_objectManager(nullptr)
0036     , m_agentManager(nullptr)
0037     , m_profileManager(nullptr)
0038     , m_deviceManager(nullptr)
0039     , m_obexObject(nullptr)
0040     , m_obexAgentManager(nullptr)
0041     , m_obexClient(nullptr)
0042 {
0043     QDBusConnection::sessionBus().registerObject(QStringLiteral("/"), this);
0044 }
0045 
0046 void FakeBluez::runTest(const QString &testName)
0047 {
0048     if (testName == QLatin1String("bluez-not-exporting-interfaces")) {
0049         runBluezNotExportingInterfacesTest();
0050     } else if (testName == QLatin1String("bluez-empty-managed-objects")) {
0051         runBluezEmptyManagedObjectsTest();
0052     } else if (testName == QLatin1String("bluez-no-adapters")) {
0053         runBluezNoAdaptersTest();
0054     } else if (testName == QLatin1String("bluez-standard")) {
0055         runBluezStandardTest();
0056     }
0057 
0058     if (testName == QLatin1String("obex-not-exporting-interfaces")) {
0059         runObexNotExportingInterfacesTest();
0060     } else if (testName == QLatin1String("obex-empty-managed-objects")) {
0061         runObexEmptyManagedObjectsTest();
0062     } else if (testName == QLatin1String("obex-no-client")) {
0063         runObexNoClientTest();
0064     } else if (testName == QLatin1String("obex-no-agentmanager")) {
0065         runObexNoAgentManagerTest();
0066     } else if (testName == QLatin1String("obex-standard")) {
0067         runObexStandardTest();
0068     }
0069 
0070     if (!QDBusConnection::sessionBus().registerService(QStringLiteral("org.kde.bluezqt.fakebluez"))) {
0071         qWarning() << "Cannot register org.kde.bluezqt.fakebluez service!";
0072     }
0073 }
0074 
0075 void FakeBluez::runAction(const QString &object, const QString &actionName, const QVariantMap &properties)
0076 {
0077     m_actionObject = object;
0078     m_actionName = actionName;
0079     m_actionProperties = properties;
0080 
0081     QTimer::singleShot(0, this, SLOT(doRunAction()));
0082 }
0083 
0084 void FakeBluez::doRunAction()
0085 {
0086     if (m_actionObject == QLatin1String("agentmanager")) {
0087         m_agentManager->runAction(m_actionName, m_actionProperties);
0088     } else if (m_actionObject == QLatin1String("devicemanager")) {
0089         m_deviceManager->runAction(m_actionName, m_actionProperties);
0090     }
0091 
0092     QTimer::singleShot(0, m_testInterface, SLOT(emitActionFinished()));
0093 }
0094 
0095 void FakeBluez::clear()
0096 {
0097     // Everything is parented to ObjectManager
0098     delete m_objectManager;
0099     m_objectManager = nullptr;
0100 }
0101 
0102 void FakeBluez::createObjectManager()
0103 {
0104     m_objectManager = new ObjectManager(this);
0105 }
0106 
0107 void FakeBluez::createAgentManager()
0108 {
0109     m_agentManager = new AgentManager(m_objectManager);
0110     m_objectManager->addObject(m_agentManager);
0111 }
0112 
0113 void FakeBluez::createProfileManager()
0114 {
0115     m_profileManager = new ProfileManager(m_objectManager);
0116     m_objectManager->addObject(m_profileManager);
0117 }
0118 
0119 void FakeBluez::createDeviceManager()
0120 {
0121     m_deviceManager = new DeviceManager(m_objectManager);
0122 }
0123 
0124 void FakeBluez::createObexObjectManager()
0125 {
0126     createObjectManager();
0127     m_obexObject = new ObexObject(this);
0128     m_objectManager->addAutoDeleteObject(m_obexObject);
0129 }
0130 
0131 void FakeBluez::createObexAgentManager()
0132 {
0133     m_obexAgentManager = new ObexAgentManager(m_obexObject);
0134     m_objectManager->addObject(m_obexAgentManager);
0135 }
0136 
0137 void FakeBluez::createObexClient()
0138 {
0139     m_obexClient = new ObexClient(m_obexObject);
0140     m_objectManager->addObject(m_obexClient);
0141 }
0142 
0143 void FakeBluez::runBluezNotExportingInterfacesTest()
0144 {
0145     clear();
0146 }
0147 
0148 void FakeBluez::runBluezEmptyManagedObjectsTest()
0149 {
0150     clear();
0151     createObjectManager();
0152 }
0153 
0154 void FakeBluez::runBluezNoAdaptersTest()
0155 {
0156     clear();
0157     createObjectManager();
0158     createAgentManager();
0159     createProfileManager();
0160 }
0161 
0162 void FakeBluez::runBluezStandardTest()
0163 {
0164     clear();
0165     createObjectManager();
0166     createDeviceManager();
0167     createAgentManager();
0168     createProfileManager();
0169 }
0170 
0171 void FakeBluez::runObexNotExportingInterfacesTest()
0172 {
0173     clear();
0174 }
0175 
0176 void FakeBluez::runObexEmptyManagedObjectsTest()
0177 {
0178     clear();
0179     createObexObjectManager();
0180 }
0181 
0182 void FakeBluez::runObexNoClientTest()
0183 {
0184     clear();
0185     createObexObjectManager();
0186     createObexAgentManager();
0187 }
0188 
0189 void FakeBluez::runObexNoAgentManagerTest()
0190 {
0191     clear();
0192     createObexObjectManager();
0193     createObexClient();
0194 }
0195 
0196 void FakeBluez::runObexStandardTest()
0197 {
0198     clear();
0199     createObexObjectManager();
0200     createObexClient();
0201     createObexAgentManager();
0202 }
0203 
0204 #include "moc_fakebluez.cpp"