parent
da46d140bb
commit
f8c5415a1b
4 changed files with 332 additions and 2 deletions
@ -0,0 +1,234 @@ |
||||
/* ============================================================
|
||||
* QupZilla - WebKit based browser |
||||
* Copyright (C) 2013 David Rosca <nowrep@gmail.com> |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* ============================================================ */ |
||||
#include "passwordbackendtest.h" |
||||
|
||||
#include <QtTest/QtTest> |
||||
#include <QSqlDatabase> |
||||
#include <QSqlQuery> |
||||
#include <QDebug> |
||||
|
||||
#include "unistd.h" |
||||
|
||||
static bool compareEntries(const PasswordEntry &value, const PasswordEntry &ref) |
||||
{ |
||||
if (ref.host != value.host) { |
||||
qDebug() << "Host mismatch. Value =" << value.host << "Reference =" << ref.host; |
||||
return false; |
||||
} |
||||
|
||||
if (ref.username != value.username) { |
||||
qDebug() << "Username mismatch. Value =" << value.username << "Reference =" << ref.username; |
||||
return false; |
||||
} |
||||
|
||||
if (ref.password != value.password) { |
||||
qDebug() << "Password mismatch. Value =" << value.password << "Reference =" << ref.password; |
||||
return false; |
||||
} |
||||
|
||||
if (ref.data != value.data) { |
||||
qDebug() << "Data mismatch. Value =" << value.data << "Reference =" << ref.data; |
||||
return false; |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
PasswordBackendTest::PasswordBackendTest() |
||||
: QObject() |
||||
, m_backend(0) |
||||
{ |
||||
} |
||||
|
||||
void PasswordBackendTest::initTestCase() |
||||
{ |
||||
init(); |
||||
|
||||
// Backup entries
|
||||
reloadBackend(); |
||||
m_entries = m_backend->getAllEntries(); |
||||
} |
||||
|
||||
void PasswordBackendTest::cleanupTestCase() |
||||
{ |
||||
cleanup(); |
||||
|
||||
reloadBackend(); |
||||
foreach (const PasswordEntry &entry, m_entries) { |
||||
m_backend->addEntry(entry); |
||||
} |
||||
} |
||||
|
||||
void PasswordBackendTest::storeTest() |
||||
{ |
||||
reloadBackend(); |
||||
|
||||
/* Basic password entry */ |
||||
PasswordEntry entry; |
||||
entry.host = "org.qupzilla.google.com"; |
||||
entry.username = "user1"; |
||||
entry.password = "pass1"; |
||||
entry.data = "entry1-data=23&username=user1&password=pass1"; |
||||
|
||||
m_backend->addEntry(entry); |
||||
|
||||
// Check entry that may be stored in cache
|
||||
PasswordEntry stored = m_backend->getEntries(QUrl("org.qupzilla.google.com")).first(); |
||||
QVERIFY(compareEntries(stored, entry) == true); |
||||
|
||||
reloadBackend(); |
||||
|
||||
// Check entry retrieved from backend engine
|
||||
stored = m_backend->getEntries(QUrl("org.qupzilla.google.com")).first(); |
||||
QVERIFY(compareEntries(stored, entry) == true); |
||||
|
||||
|
||||
/* UTF-8 password entry */ |
||||
PasswordEntry entry2; |
||||
entry2.host = "org.qupzilla.qupzilla.com"; |
||||
entry2.username = QString::fromUtf8("+ě ++ éí§`]|~đ11 +!:"); |
||||
entry2.password = QString::fromUtf8("+ěš asn~đ°#&# |€"); |
||||
entry2.data = "use%C2%B6+_nam%C4%8D=%2B%C4%9B+%2B%2B+%C3%A9%C3%AD%C2%A7%60%5D%7C%7E%C4%9111+%2B%21%3A" |
||||
"&pA+%5DsQ+%2Bword=%2B%C4%9B%C5%A1+asn%7E%C4%91%C2%B0%23%26%23+%7C%E2%82%AC"; |
||||
|
||||
m_backend->addEntry(entry2); |
||||
|
||||
// Check entry that may be stored in cache
|
||||
PasswordEntry stored2 = m_backend->getEntries(QUrl("org.qupzilla.qupzilla.com")).first(); |
||||
QVERIFY(compareEntries(stored2, entry2) == true); |
||||
|
||||
reloadBackend(); |
||||
|
||||
// Check entry retrieved from backend engine
|
||||
stored2 = m_backend->getEntries(QUrl("org.qupzilla.qupzilla.com")).first(); |
||||
QVERIFY(compareEntries(stored2, entry2) == true); |
||||
|
||||
/* Cleanup */ |
||||
// Local cleanup
|
||||
m_backend->removeEntry(stored); |
||||
QCOMPARE(m_backend->getEntries(QUrl("org.qupzilla.google.com")).count(), 0); |
||||
|
||||
m_backend->removeEntry(stored2); |
||||
QCOMPARE(m_backend->getEntries(QUrl("org.qupzilla.qupzilla.com")).count(), 0); |
||||
|
||||
reloadBackend(); |
||||
|
||||
// Backend engine cleanup
|
||||
QCOMPARE(m_backend->getEntries(QUrl("org.qupzilla.google.com")).count(), 0); |
||||
QCOMPARE(m_backend->getEntries(QUrl("org.qupzilla.qupzilla.com")).count(), 0); |
||||
} |
||||
|
||||
void PasswordBackendTest::removeAllTest() |
||||
{ |
||||
reloadBackend(); |
||||
|
||||
PasswordEntry entry; |
||||
entry.host = "org.qupzilla.google.com"; |
||||
entry.username = "user1"; |
||||
entry.password = "pass1"; |
||||
entry.data = "entry1-data=23&username=user1&password=pass1"; |
||||
m_backend->addEntry(entry); |
||||
|
||||
entry.username.append("s"); |
||||
m_backend->addEntry(entry); |
||||
|
||||
entry.username.append("s"); |
||||
m_backend->addEntry(entry); |
||||
|
||||
entry.username.append("s"); |
||||
m_backend->addEntry(entry); |
||||
|
||||
entry.username.append("s"); |
||||
m_backend->addEntry(entry); |
||||
|
||||
entry.username.append("s"); |
||||
m_backend->addEntry(entry); |
||||
|
||||
entry.username.append("s"); |
||||
m_backend->addEntry(entry); |
||||
|
||||
QCOMPARE(m_backend->getEntries(QUrl("org.qupzilla.google.com")).count(), 7); |
||||
reloadBackend(); |
||||
QCOMPARE(m_backend->getEntries(QUrl("org.qupzilla.google.com")).count(), 7); |
||||
|
||||
m_backend->removeAll(); |
||||
|
||||
QCOMPARE(m_backend->getAllEntries().count(), 0); |
||||
reloadBackend(); |
||||
QCOMPARE(m_backend->getAllEntries().count(), 0); |
||||
} |
||||
|
||||
void PasswordBackendTest::updateLastUsedTest() |
||||
{ |
||||
reloadBackend(); |
||||
|
||||
PasswordEntry entry; |
||||
entry.host = "org.qupzilla.google.com"; |
||||
entry.username = "user1"; |
||||
entry.password = "pass1"; |
||||
entry.data = "entry1-data=23&username=user1&password=pass1"; |
||||
m_backend->addEntry(entry); |
||||
|
||||
sleep(1); |
||||
|
||||
entry.username.append("s"); |
||||
m_backend->addEntry(entry); |
||||
|
||||
QVERIFY(compareEntries(entry, m_backend->getEntries(QUrl("org.qupzilla.google.com")).first())); |
||||
reloadBackend(); |
||||
QVERIFY(compareEntries(entry, m_backend->getEntries(QUrl("org.qupzilla.google.com")).first())); |
||||
} |
||||
|
||||
|
||||
// DatabasePasswordBackendTest
|
||||
void DatabasePasswordBackendTest::reloadBackend() |
||||
{ |
||||
delete m_backend; |
||||
m_backend = new DatabasePasswordBackend; |
||||
} |
||||
|
||||
void DatabasePasswordBackendTest::init() |
||||
{ |
||||
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); |
||||
db.setDatabaseName(":memory:"); |
||||
db.open(); |
||||
|
||||
db.exec("CREATE TABLE autofill (data TEXT, id INTEGER PRIMARY KEY, password TEXT," |
||||
"server TEXT, username TEXT, last_used NUMERIC)"); |
||||
} |
||||
|
||||
void DatabasePasswordBackendTest::cleanup() |
||||
{ |
||||
QSqlDatabase::removeDatabase(QSqlDatabase::database().databaseName()); |
||||
} |
||||
|
||||
|
||||
// KWalletPassswordBackendTest
|
||||
void KWalletPasswordBackendTest::reloadBackend() |
||||
{ |
||||
delete m_backend; |
||||
m_backend = new KWalletPasswordBackend; |
||||
} |
||||
|
||||
|
||||
// GnomeKeyringPassswordBackendTest
|
||||
void GnomeKeyringPasswordBackendTest::reloadBackend() |
||||
{ |
||||
delete m_backend; |
||||
m_backend = new GnomeKeyringPasswordBackend; |
||||
} |
||||
@ -0,0 +1,83 @@ |
||||
/* ============================================================
|
||||
* QupZilla - WebKit based browser |
||||
* Copyright (C) 2013 David Rosca <nowrep@gmail.com> |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* ============================================================ */ |
||||
#ifndef PASSWORDBACKENDTEST_H |
||||
#define PASSWORDBACKENDTEST_H |
||||
|
||||
#include <QObject> |
||||
#include <QVector> |
||||
|
||||
#include "passwordbackends/passwordbackend.h" |
||||
#include "passwordmanager.h" |
||||
|
||||
class PasswordBackendTest : public QObject |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
explicit PasswordBackendTest(); |
||||
|
||||
private slots: |
||||
void initTestCase(); |
||||
void cleanupTestCase(); |
||||
|
||||
void storeTest(); |
||||
void removeAllTest(); |
||||
void updateLastUsedTest(); |
||||
|
||||
protected: |
||||
virtual void reloadBackend() = 0; |
||||
virtual void init() { } |
||||
virtual void cleanup() { } |
||||
|
||||
PasswordBackend* m_backend; |
||||
QVector<PasswordEntry> m_entries; |
||||
}; |
||||
|
||||
#include "passwordbackends/databasepasswordbackend.h" |
||||
|
||||
class DatabasePasswordBackendTest : public PasswordBackendTest |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
protected: |
||||
void reloadBackend(); |
||||
void init(); |
||||
void cleanup(); |
||||
}; |
||||
|
||||
#include "../../src/plugins/KWalletPasswords/kwalletpasswordbackend.h" |
||||
|
||||
class KWalletPasswordBackendTest : public PasswordBackendTest |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
protected: |
||||
void reloadBackend(); |
||||
}; |
||||
|
||||
#include "../../src/plugins/GnomeKeyringPasswords/gnomekeyringpasswordbackend.h" |
||||
|
||||
class GnomeKeyringPasswordBackendTest : public PasswordBackendTest |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
protected: |
||||
void reloadBackend(); |
||||
}; |
||||
|
||||
#endif // PASSWORDBACKENDTEST_H
|
||||
Loading…
Reference in new issue