summaryrefslogtreecommitdiffstats
path: root/tests/dummyresourcebenchmark.cpp
blob: 01d9ca4d9a0e7cf53985136047ad03a082156323 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <QtTest>

#include <QString>

#include "dummyresource/resourcefactory.h"
#include "clientapi.h"
#include "commands.h"
#include "entitybuffer.h"

static void removeFromDisk(const QString &name)
{
    Akonadi2::Storage store(Akonadi2::Store::storageLocation(), name, Akonadi2::Storage::ReadWrite);
    store.removeFromDisk();
}

class DummyResourceBenchmark : public QObject
{
    Q_OBJECT
private Q_SLOTS:
    void initTestCase()
    {
        auto factory = Akonadi2::ResourceFactory::load("org.kde.dummy");
        QVERIFY(factory);
        removeFromDisk("org.kde.dummy");
        removeFromDisk("org.kde.dummy.userqueue");
        removeFromDisk("org.kde.dummy.synchronizerqueue");
        removeFromDisk("org.kde.dummy.index.uid");
    }

    void cleanup()
    {
        removeFromDisk("org.kde.dummy");
        removeFromDisk("org.kde.dummy.userqueue");
        removeFromDisk("org.kde.dummy.synchronizerqueue");
        removeFromDisk("org.kde.dummy.index.uid");
    }

    void testWriteToFacadeAndQueryByUid()
    {
        QTime time;
        time.start();
        int num = 10000;
        for (int i = 0; i < num; i++) {
            Akonadi2::Domain::Event event;
            event.setProperty("uid", "testuid");
            QCOMPARE(event.getProperty("uid").toByteArray(), QByteArray("testuid"));
            event.setProperty("summary", "summaryValue");
            Akonadi2::Store::create<Akonadi2::Domain::Event>(event, "org.kde.dummy");
        }
        auto appendTime = time.elapsed();

        //Ensure everything is processed
        {
            Akonadi2::Query query;
            query.resources << "org.kde.dummy";
            query.syncOnDemand = false;
            query.processAll = true;

            query.propertyFilter.insert("uid", "nonexistantuid");
            async::SyncListResult<Akonadi2::Domain::Event::Ptr> result(Akonadi2::Store::load<Akonadi2::Domain::Event>(query));
            result.exec();
        }
        auto allProcessedTime = time.elapsed();

        //Measure query
        {
            time.start();
            Akonadi2::Query query;
            query.resources << "org.kde.dummy";
            query.syncOnDemand = false;
            query.processAll = false;

            query.propertyFilter.insert("uid", "testuid");
            async::SyncListResult<Akonadi2::Domain::Event::Ptr> result(Akonadi2::Store::load<Akonadi2::Domain::Event>(query));
            result.exec();
            QCOMPARE(result.size(), num);
        }
        qDebug() << "Append to messagequeue " << appendTime;
        qDebug() << "All processed: " << allProcessedTime << "/sec " << num*1000/allProcessedTime;
        qDebug() << "Query Time: " << time.elapsed() << "/sec " << num*1000/time.elapsed();
    }
};

QTEST_MAIN(DummyResourceBenchmark)
#include "dummyresourcebenchmark.moc"