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 | |
17 | namespace BluezQt |
18 | { |
19 | extern void bluezqt_initFakeBluezTestRun(); |
20 | } |
21 | |
22 | using namespace BluezQt; |
23 | |
24 | void 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 | |
60 | void GattManagerTest::cleanupTestCase() |
61 | { |
62 | FakeBluez::stop(); |
63 | } |
64 | |
65 | void 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 | |
83 | void 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 | |
96 | QTEST_MAIN(GattManagerTest) |
97 | |
98 | #include "moc_gattmanagertest.cpp" |
99 | |