1 /* -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of signon
5 * Copyright (C) 2009-2010 Nokia Corporation.
7 * Contact: Aurel Popirtac <ext-aurel.popirtac@nokia.com>
8 * Contact: Alberto Mardegan <alberto.mardegan@nokia.com>
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public License
12 * version 2.1 as published by the Free Software Foundation.
14 * This library is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25 #include <QtTest/QtTest>
27 #include "passwordplugin.h"
28 #include "passwordplugin.cpp"
30 #include "passwordplugintest.h"
32 using namespace PasswordPluginNS;
34 #define TEST_START qDebug("\n\n\n\n ----------------- %s ----------------\n\n", __func__);
36 #define TEST_DONE qDebug("\n\n ----------------- %s DONE ----------------\n\n", __func__);
38 void PasswordPluginTest::initTestCase()
41 qRegisterMetaType<SignOn::SessionData>();
42 qRegisterMetaType<SignOn::UiSessionData>();
47 void PasswordPluginTest::cleanupTestCase()
54 //prepare each test by creating new plugin
55 void PasswordPluginTest::init()
57 m_testPlugin = new PasswordPlugin();
58 m_testPlugin->setupForUnitTests();
61 //finnish each test by deleting plugin
62 void PasswordPluginTest::cleanup()
68 //slot for receiving result
69 void PasswordPluginTest::result(const SignOn::SessionData& data)
71 qDebug() << "got result";
76 //slot for receiving error
77 void PasswordPluginTest::pluginError(const SignOn::Error &err)
79 qDebug() << "got error" << err.type() << ": " << err.message();
84 //slot for receiving result
85 void PasswordPluginTest::uiRequest(const SignOn::UiSessionData& data)
87 qDebug() << "got ui request";
93 void PasswordPluginTest::testPlugin()
97 qDebug() << "Checking plugin integrity.";
98 QVERIFY(m_testPlugin);
103 void PasswordPluginTest::testPluginType()
107 qDebug() << "Checking plugin type.";
108 QCOMPARE(m_testPlugin->type(), QString("password"));
113 void PasswordPluginTest::testPluginMechanisms()
117 qDebug() << "Checking plugin mechanisms.";
118 QStringList mechs = m_testPlugin->mechanisms();
119 QVERIFY(!mechs.isEmpty());
120 QVERIFY(mechs.contains(QString("password")));
126 void PasswordPluginTest::testPluginCancel()
129 //no cancel functionality
133 void PasswordPluginTest::testPluginProcess()
137 SignOn::SessionData info;
138 SignOn::SessionData info2;
140 QObject::connect(m_testPlugin, SIGNAL(result(const SignOn::SessionData&)),
141 this, SLOT(result(const SignOn::SessionData&)),Qt::QueuedConnection);
142 QObject::connect(m_testPlugin, SIGNAL(error(const SignOn::Error & )),
143 this, SLOT(pluginError(const SignOn::Error & )),Qt::QueuedConnection);
144 QObject::connect(m_testPlugin, SIGNAL(userActionRequired(const SignOn::UiSessionData&)),
145 this, SLOT(uiRequest(const SignOn::UiSessionData&)),Qt::QueuedConnection);
146 QTimer::singleShot(10*1000, &m_loop, SLOT(quit()));
149 info.setSecret(QString("pass"));
151 m_testPlugin->process(info);
153 QVERIFY(m_response.Secret() == QString("pass"));
154 QVERIFY(m_response.UserName().isEmpty());
157 info.setUserName(QString("user"));
159 m_testPlugin->process(info);
161 QVERIFY(m_response.Secret() == QString("pass"));
162 QVERIFY(m_response.UserName() == QString("user"));
164 //try without params to open ui
165 m_testPlugin->process(info2);
167 QVERIFY(m_uiResponse.QueryUserName() );
168 QVERIFY(m_uiResponse.QueryPassword() );
170 //try without password to open ui
171 info2.setUserName(QString("user"));
173 m_testPlugin->process(info2);
175 QVERIFY(!m_uiResponse.QueryUserName() );
176 QVERIFY(m_uiResponse.QueryPassword() );
181 void PasswordPluginTest::testPluginUserActionFinished()
183 // QSKIP("Plugin can not emit anything if it in not in processing mode", SkipSingle);
187 SignOn::UiSessionData info;
189 QObject::connect(m_testPlugin, SIGNAL(result(const SignOn::SessionData&)),
190 this, SLOT(result(const SignOn::SessionData&)),Qt::QueuedConnection);
191 QObject::connect(m_testPlugin, SIGNAL(error(const SignOn::Error & )),
192 this, SLOT(pluginError(const SignOn::Error & )),Qt::QueuedConnection);
193 QObject::connect(m_testPlugin, SIGNAL(userActionRequired(const SignOn::UiSessionData&)),
194 this, SLOT(uiRequest(const SignOn::UiSessionData&)),Qt::QueuedConnection);
195 QTimer::singleShot(10*1000, &m_loop, SLOT(quit()));
198 m_testPlugin->userActionFinished(info);
200 //fails because of ui error 0 is returned if not defined
201 // QVERIFY(m_error == PLUGIN_ERROR_USER_INTERACTION);
204 info.setQueryErrorCode(QUERY_ERROR_NONE);
205 info.setUserName(QString("user") );
206 info.setSecret(QString("pass") );
207 m_testPlugin->userActionFinished(info);
209 QVERIFY(m_response.UserName() == QString("user") );
210 QVERIFY(m_response.Secret() == QString("pass") );
213 info.setQueryErrorCode(QUERY_ERROR_CANCELED);
214 m_testPlugin->userActionFinished(info);
216 QVERIFY(m_error == Error::SessionCanceled);
218 //error in ui request
219 info.setQueryErrorCode(QUERY_ERROR_GENERAL);
220 m_testPlugin->userActionFinished(info);
222 QVERIFY(m_error == Error::UserInteraction);
227 void PasswordPluginTest::testPluginRefresh()
230 SignOn::UiSessionData info;
232 QObject::connect(m_testPlugin, SIGNAL(error(const SignOn::Error & )),
233 this, SLOT(pluginError(const SignOn::Error & )),Qt::QueuedConnection);
234 QObject::connect(m_testPlugin, SIGNAL(refreshed(const SignOn::UiSessionData&)),
235 this, SLOT(uiRequest(const SignOn::UiSessionData&)),Qt::QueuedConnection);
236 QTimer::singleShot(10*1000, &m_loop, SLOT(quit()));
238 m_testPlugin->refresh(info);
246 QTEST_MAIN(PasswordPluginTest)