1/*
2 * SPDX-FileCopyrightText: 2019 Manuel Weichselbaumer <mincequi@web.de>
3 *
4 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5 */
6
7#include "gattmanagertest.h"
8#include "autotests.h"
9#include "gattmanager.h"
10#include "gattservice.h"
11#include "initmanagerjob.h"
12#include "manager.h"
13#include "pendingcall.h"
14
15#include <QDBusObjectPath>
16
17namespace BluezQt
18{
19extern void bluezqt_initFakeBluezTestRun();
20}
21
22using namespace BluezQt;
23
24void GattManagerTest::initTestCase()
25{
26 bluezqt_initFakeBluezTestRun();
27 FakeBluez::start();
28 FakeBluez::runTest(QStringLiteral("bluez-standard"));
29
30 // Create adapter
31 QString adapter = QStringLiteral("/org/bluez/hci0");
32 QVariantMap adapterProps;
33 adapterProps[QStringLiteral("Path")] = QVariant::fromValue(QDBusObjectPath(adapter));
34 adapterProps[QStringLiteral("Address")] = QStringLiteral("1C:E5:C3:BC:94:7E");
35 adapterProps[QStringLiteral("Name")] = QStringLiteral("TestAdapter");
36 FakeBluez::runAction(QStringLiteral("devicemanager"), QStringLiteral("create-adapter"), adapterProps);
37
38 Manager *manager = new Manager(this);
39 InitManagerJob *initJob = manager->init();
40 initJob->exec();
41 QVERIFY(!initJob->error());
42 QCOMPARE(manager->adapters().count(), 1);
43
44 m_adapter = manager->adapters().at(0);
45 QVERIFY(m_adapter->gattManager());
46
47 m_application = new GattApplication(QStringLiteral("/org/kde/bluezqt"), this);
48 auto service = new GattService(QStringLiteral("ad100000-d901-11e8-9f8b-f2801f1b9fd1"), true, m_application);
49 m_characteristic = new GattCharacteristic(QStringLiteral("ad10e100-d901-11e8-9f8b-f2801f1b9fd1"), service);
50 m_adapter->gattManager()->registerApplication(m_application)->waitForFinished();
51
52 // Let FakeBluez read local characteristic
53 QVariantMap params;
54 params.insert(QStringLiteral("AdapterPath"), QVariant::fromValue(QDBusObjectPath(m_adapter->ubi())));
55 FakeBluez::runAction(QStringLiteral("devicemanager"), QStringLiteral("adapter-gattmanager:get-objects"), params);
56 // Process events to let getManagedObjects call from FakeBluez be finished
57 QTest::qWait(0);
58}
59
60void GattManagerTest::cleanupTestCase()
61{
62 FakeBluez::stop();
63}
64
65void GattManagerTest::readCharcTest()
66{
67 QCOMPARE(m_characteristic->readValue(), QByteArray());
68
69 bool readCallbackCalled = false;
70 m_characteristic->setReadCallback([&readCallbackCalled]() {
71 readCallbackCalled = true;
72 return QByteArray("1234");
73 });
74 QVariantMap params;
75 params.insert(QStringLiteral("AdapterPath"), QVariant::fromValue(QDBusObjectPath(m_adapter->ubi())));
76 params.insert(QStringLiteral("Options"), QVariant::fromValue(QVariantMap()));
77 FakeBluez::runAction(QStringLiteral("devicemanager"), QStringLiteral("adapter-gattmanager:read-charc"), params);
78
79 QTRY_COMPARE(readCallbackCalled, true);
80 QTRY_COMPARE(m_characteristic->readValue(), QByteArray("1234"));
81}
82
83void GattManagerTest::writeCharcTest()
84{
85 m_characteristic->setReadCallback(nullptr);
86
87 QVariantMap params;
88 params.insert(QStringLiteral("AdapterPath"), QVariant::fromValue(QDBusObjectPath(m_adapter->ubi())));
89 params.insert(QStringLiteral("Value"), QVariant::fromValue(QByteArray("4321")));
90 params.insert(QStringLiteral("Options"), QVariant::fromValue(QVariantMap()));
91 FakeBluez::runAction(QStringLiteral("devicemanager"), QStringLiteral("adapter-gattmanager:write-charc"), params);
92
93 QTRY_COMPARE(m_characteristic->readValue(), QByteArray("4321"));
94}
95
96QTEST_MAIN(GattManagerTest)
97
98#include "moc_gattmanagertest.cpp"
99

source code of bluez-qt/autotests/gattmanagertest.cpp