File indexing completed on 2024-04-14 14:17:18

0001 /*
0002  * SPDX-FileCopyrightText: 2019 Manuel Weichselbaumer <mincequi@web.de>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 
0007 #include "gattmanagertest.h"
0008 #include "autotests.h"
0009 #include "gattmanager.h"
0010 #include "gattservice.h"
0011 #include "initmanagerjob.h"
0012 #include "manager.h"
0013 #include "pendingcall.h"
0014 
0015 #include <QDBusObjectPath>
0016 
0017 namespace BluezQt
0018 {
0019 extern void bluezqt_initFakeBluezTestRun();
0020 }
0021 
0022 using namespace BluezQt;
0023 
0024 void GattManagerTest::initTestCase()
0025 {
0026     bluezqt_initFakeBluezTestRun();
0027     FakeBluez::start();
0028     FakeBluez::runTest(QStringLiteral("bluez-standard"));
0029 
0030     // Create adapter
0031     QString adapter = QStringLiteral("/org/bluez/hci0");
0032     QVariantMap adapterProps;
0033     adapterProps[QStringLiteral("Path")] = QVariant::fromValue(QDBusObjectPath(adapter));
0034     adapterProps[QStringLiteral("Address")] = QStringLiteral("1C:E5:C3:BC:94:7E");
0035     adapterProps[QStringLiteral("Name")] = QStringLiteral("TestAdapter");
0036     FakeBluez::runAction(QStringLiteral("devicemanager"), QStringLiteral("create-adapter"), adapterProps);
0037 
0038     Manager *manager = new Manager(this);
0039     InitManagerJob *initJob = manager->init();
0040     initJob->exec();
0041     QVERIFY(!initJob->error());
0042     QCOMPARE(manager->adapters().count(), 1);
0043 
0044     m_adapter = manager->adapters().at(0);
0045     QVERIFY(m_adapter->gattManager());
0046 
0047     m_application = new GattApplication(QStringLiteral("/org/kde/bluezqt"), this);
0048     auto service = new GattService(QStringLiteral("ad100000-d901-11e8-9f8b-f2801f1b9fd1"), true, m_application);
0049     m_characteristic = new GattCharacteristic(QStringLiteral("ad10e100-d901-11e8-9f8b-f2801f1b9fd1"), service);
0050     m_adapter->gattManager()->registerApplication(m_application)->waitForFinished();
0051 
0052     // Let FakeBluez read local characteristic
0053     QVariantMap params;
0054     params.insert(QStringLiteral("AdapterPath"), QVariant::fromValue(QDBusObjectPath(m_adapter->ubi())));
0055     FakeBluez::runAction(QStringLiteral("devicemanager"), QStringLiteral("adapter-gattmanager:get-objects"), params);
0056     // Process events to let getManagedObjects call from FakeBluez be finished
0057     QTest::qWait(0);
0058 }
0059 
0060 void GattManagerTest::cleanupTestCase()
0061 {
0062     FakeBluez::stop();
0063 }
0064 
0065 void GattManagerTest::readCharcTest()
0066 {
0067     QCOMPARE(m_characteristic->readValue(), QByteArray());
0068 
0069     bool readCallbackCalled = false;
0070     m_characteristic->setReadCallback([&readCallbackCalled]() {
0071         readCallbackCalled = true;
0072         return QByteArray("1234");
0073     });
0074     QVariantMap params;
0075     params.insert(QStringLiteral("AdapterPath"), QVariant::fromValue(QDBusObjectPath(m_adapter->ubi())));
0076     params.insert(QStringLiteral("Options"), QVariant::fromValue(QVariantMap()));
0077     FakeBluez::runAction(QStringLiteral("devicemanager"), QStringLiteral("adapter-gattmanager:read-charc"), params);
0078 
0079     QTRY_COMPARE(readCallbackCalled, true);
0080     QTRY_COMPARE(m_characteristic->readValue(), QByteArray("1234"));
0081 }
0082 
0083 void GattManagerTest::writeCharcTest()
0084 {
0085     m_characteristic->setReadCallback(nullptr);
0086 
0087     QVariantMap params;
0088     params.insert(QStringLiteral("AdapterPath"), QVariant::fromValue(QDBusObjectPath(m_adapter->ubi())));
0089     params.insert(QStringLiteral("Value"), QVariant::fromValue(QByteArray("4321")));
0090     params.insert(QStringLiteral("Options"), QVariant::fromValue(QVariantMap()));
0091     FakeBluez::runAction(QStringLiteral("devicemanager"), QStringLiteral("adapter-gattmanager:write-charc"), params);
0092 
0093     QTRY_COMPARE(m_characteristic->readValue(), QByteArray("4321"));
0094 }
0095 
0096 QTEST_MAIN(GattManagerTest)
0097 
0098 #include "moc_gattmanagertest.cpp"