Add unit tests
[accounts-sso:libaccountsetup.git] / tests / test.cpp
1 /*
2  * This file is part of libAccountSetup
3  *
4  * Copyright (C) 2011 Nokia Corporation.
5  *
6  * Contact: Alberto Mardegan <alberto.mardegan@nokia.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public License
10  * version 2.1 as published by the Free Software Foundation.
11  *
12  * This library is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20  * 02110-1301 USA
21  */
22
23 #include "test.h"
24
25 #include <AccountSetup/ProviderPluginProxy>
26 #include <Accounts/Account>
27 #include <Accounts/Manager>
28 #include <QEventLoop>
29 #include <QSettings>
30 #include <QSignalSpy>
31 #include <QTimer>
32 #include <QtTest/QtTest>
33
34 using namespace Accounts;
35 using namespace AccountSetup;
36
37 class ProviderPluginProxyTest: public ProviderPluginProxy
38 {
39 public:
40     ProviderPluginProxyTest(QObject *parent):
41         ProviderPluginProxy(parent)
42     {
43     }
44
45     void setDumpFile(const QString &dumpFile)
46     {
47         QStringList parameters;
48         parameters << "--config-file" << dumpFile;
49         setAdditionalParameters(parameters);
50     }
51 };
52
53 void clearDb()
54 {
55     QDir dbroot(QString(getenv("ACCOUNTS")));
56     dbroot.remove(QString("accounts.db"));
57 }
58
59 void Test::initTestCase()
60 {
61     //init
62     setenv("ACCOUNTS", "/tmp/", TRUE);
63     setenv("AG_PROVIDERS", PROVIDERS_DIR, TRUE);
64     //clear database
65     clearDb();
66 }
67
68 void Test::cleanupTestCase()
69 {
70
71 }
72
73 void Test::missingPluginTest()
74 {
75     Manager *manager = new Manager();
76
77     Provider *provider = manager->provider("MissingPlugin");
78     QVERIFY(provider != NULL);
79
80     ProviderPluginProxy *proxy = new ProviderPluginProxy(manager);
81     QSignalSpy spy(proxy, SIGNAL(finished()));
82
83     /* Account creation should fail immediately, because no plugin can be
84      * loaded. */
85     proxy->createAccount(provider, QString());
86
87     QCOMPARE(spy.count(), 1);
88     QCOMPARE(proxy->error(), ProviderPluginProxy::PluginNotFound);
89
90     delete manager;
91 }
92
93 void Test::onFinished()
94 {
95     ProviderPluginProxy *proxy = qobject_cast<ProviderPluginProxy*>(sender());
96     qDebug() << "Error:" << proxy->error();
97     finishedEmitted = true;
98 }
99
100 void Test::pluginStatusTest()
101 {
102     Manager *manager = new Manager();
103
104     Provider *provider = manager->provider("NutProvider");
105     QVERIFY(provider != NULL);
106
107     ProviderPluginProxyTest *proxy = new ProviderPluginProxyTest(manager);
108     QObject::connect(proxy, SIGNAL(finished()),
109                      this, SLOT(onFinished()));
110
111     QEventLoop loop;
112     QObject::connect(proxy, SIGNAL(finished()), &loop, SLOT(quit()));
113     finishedEmitted = false;
114
115     const QString dumpFile("/tmp/testplugin.dump");
116     proxy->setDumpFile(dumpFile);
117
118     const QString serviceType("AnyServiceType");
119     proxy->createAccount(provider, serviceType);
120     QVERIFY(!finishedEmitted);
121     QVERIFY(proxy->isPluginRunning());
122
123     QTimer::singleShot(10*1000, &loop, SLOT(quit()));
124     loop.exec();
125     QVERIFY(finishedEmitted);
126     QVERIFY(!proxy->isPluginRunning());
127
128     /* check the status dump */
129     QSettings status(dumpFile);
130     QCOMPARE(status.value("ping").toString(), QString("pong"));
131     QCOMPARE(status.value("AccountId").toInt(), 0);
132     QCOMPARE(status.value("SetupType").toInt(), (int)CreateNew);
133     QCOMPARE(status.value("ServiceType").toString(), serviceType);
134
135     QCOMPARE(proxy->error(), ProviderPluginProxy::NoError);
136
137     delete manager;
138 }
139
140 QTEST_MAIN(Test)
141