From 537ffafefd8a3276b51dbde07267a2c8bf398469 Mon Sep 17 00:00:00 2001 From: Felix Geyer Date: Mon, 20 Sep 2010 00:16:30 +0200 Subject: [PATCH] Add unit test TestKeePass2Reader. --- src/format/KeePass2Reader.cpp | 1 + src/keys/PasswordKey.cpp | 9 ++++++ src/keys/PasswordKey.h | 2 ++ tests/CMakeLists.txt | 3 ++ tests/NonAscii.kdbx | Bin 0 -> 2574 bytes tests/TestKeePass2Reader.cpp | 55 ++++++++++++++++++++++++++++++++++ 6 files changed, 70 insertions(+) create mode 100644 tests/NonAscii.kdbx create mode 100644 tests/TestKeePass2Reader.cpp diff --git a/src/format/KeePass2Reader.cpp b/src/format/KeePass2Reader.cpp index 23d99fb35..d38b433e7 100644 --- a/src/format/KeePass2Reader.cpp +++ b/src/format/KeePass2Reader.cpp @@ -74,6 +74,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke if (realStart != m_streamStartBytes) { raiseError("4"); + return 0; } HashedBlockStream hashedStream(&cipherStream); diff --git a/src/keys/PasswordKey.cpp b/src/keys/PasswordKey.cpp index b48e9186a..ce216c216 100644 --- a/src/keys/PasswordKey.cpp +++ b/src/keys/PasswordKey.cpp @@ -19,6 +19,15 @@ #include "crypto/CryptoHash.h" +PasswordKey::PasswordKey() +{ +} + +PasswordKey::PasswordKey(const QString& password) +{ + setPassword(password); +} + QByteArray PasswordKey::rawKey() const { return m_key; diff --git a/src/keys/PasswordKey.h b/src/keys/PasswordKey.h index 259f1c825..6d32d560e 100644 --- a/src/keys/PasswordKey.h +++ b/src/keys/PasswordKey.h @@ -25,6 +25,8 @@ class PasswordKey : public Key { public: + PasswordKey(); + PasswordKey(const QString& password); QByteArray rawKey() const; void setPassword(const QString& password); PasswordKey* clone() const; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cbcdaf38a..41b1e6476 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -71,6 +71,9 @@ target_link_libraries( testgroup keepassx_core ${QT_QTCORE_LIBRARY} ${QT_QTGUI_L add_unit_test( testkeepass2xmlreader TestKeePass2XmlReader.cpp ) target_link_libraries( testkeepass2xmlreader keepassx_core ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTTEST_LIBRARY} ${LIBGCRYPT_LIBS} ) +add_unit_test( testkeepass2reader TestKeePass2Reader.cpp ) +target_link_libraries( testkeepass2reader keepassx_core ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTTEST_LIBRARY} ${LIBGCRYPT_LIBS} ) + add_unit_test( testgroupmodel TestGroupModel.cpp modeltest.cpp ) target_link_libraries( testgroupmodel keepassx_core ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTTEST_LIBRARY} ${LIBGCRYPT_LIBS} ) diff --git a/tests/NonAscii.kdbx b/tests/NonAscii.kdbx new file mode 100644 index 0000000000000000000000000000000000000000..d4e4ec547a9333194007156559cd3d9aafccf6ea GIT binary patch literal 2574 zcmZR+xoB4UZ||)P3``760t|)+KRw%D=p3*wf>kl=Pt<>A76uStQDFH0_~^CF4N2z0 z_omET8*j0ZYiEp7J>PHLc_!kveVG;MoPVwV zHrL*nO4Bb)-^s?oP#_L6j)8$)fZ^@rbr*K==q$T2)#mMjlj__Y3JgVQR~-(nH~E|S zW!vv12e${AI29ObnL>5<$*sRXC0Ltr;^T||PECLJ-&I@RtXwP%Odu;*7%GS?#@dy6}XB$q}VtF`o>f}S8|81B(?{sm7TK2-}EUzBN zeDaF<_kDuk=eKXT&bx|e>h-b~ym|M`#I8Fr(O=*qye)%r`c9(jCW7hjRwSX;GqY@o0r8i_8&w2-j%$~`)s0U-m+h8&Wcba4>vO>mu}ig=zPqu6 z6!3KJ(Oe*O3@NXcHg0%nog!#c9xqu6$^n zhd*|okgZEGvS6(8E%~Qla@|$o-Wm@1x7)?`TkJV;D5ybUpX3M4Mc+=VD@{Mq`1kak zrVkD~9?g1YV=~9!(~As^v#z@}s+{eokQ=EcC~2o^f<%w{-=-KYiEaO-0%*Rt#Ppx_x@V0fumG4z^ zMYf)a_9cm8ynP(N0`b;6U|trOzey4s@?D?KvSxAQIDH?d?wo2T2;H3m$jO)gAN zxYf3Vey!i%pt&a@ufAD1bj$7c!po0H+EwjaJ#)@UMeZxC$u;`_o@5ILZir16cRdzZ ztFC-7?AhUq-5JXox&&@5UsW_=_Ix$w(gedr?0?_S;hi|Y=pXx?Ioqz4o{qbxm-$>> zPebv2%d?~<=8FZl-d4BpHJ&aiKYzw=PD;AK;JL+*=cVu;J&RX2+`lfA z+tL`_KjG5C^4S|KHRl{~VCFNp@oD;2p1T6Ka$3(k-Lw6y$p@F1gnddUdu3Lh*{A>0 z`O2QPcTDP%7PV|PYj$qVlAIs7A#Ks!R+ZJKKmS?2Q(w2a|B_8rl1u`ln8U^w;wEk0 z``>H{eH@)2<9Fl4Li2M4b7mNxSy=l2VA;o|P3J5N?pr#=ZxGs0EOPC~>`m1k!PRBq z9eU>-FP%%y3C~#lkze)6M&64ZqHN)1X=Vy1EoX-8zU%jIzTaW(l^)x~vSvJmRp#P2|o=^KS$#d2%K=bW^#8vGJrC-b%^-Isd*1>Add^QF+YtzH`RE znw+U|9aChCHBx>*>bB|PI3hb;Hurj!$K}}@;-@V+C-VBn+p5-Mp}E{iqAw1+CS2Wi zvo_C(c~{-dMVUH*8rrAo`yXxPUwCZ8Bu}2h)yz7n&-~U~uFo)w*s@)8PTLkqyEU#~ zJRfrzz2J!mZ#S9qw!y5Q`htK{1+BoFJw`8_}`rhRYRkfFc%)S)uU)9mH zK4i}ETkX{giro^I&O90NVTyjC-)rsTX;;ogzBhPge(ym}+uj|Q3w3XEN@*NeP`7?# z!5qdpdFv%!U5hb%@yC^AsomiUvC~FdgyKKhEMj0@&FPbu@yFI|;#a|WGRkr}zNgPk z<#Am1Q!nzA^MyZ$Uwt-9JG3v%@%z<^wWgo{O#93KPzw5(X)zx9+Y z*YE1W{&E_Ja+6!X`SnHV@g6$;C4Ga1kOq&s{H0}r ze@ovS%(&eU7O{Maj&ASgsrSOvGI=hleNr>}EuB>Ks6l?>s|L~ZWwl?Q7$zObU!6VO zY4c|#Z&B>f1lx#EvGYoPNvsWL9eYtR|cv4}GX4k`43J2cpy!J8V`@%}0zdwG; zJ(>Ne_-1#A9%r&v^()CwY)ms|eiz%a@Z|BG9~NaUH{TQ~vp(S0RPz@#9S3BuO>z1YEL|3|KGkd~VCZ2|9*<+-}}|s`2jot=8t(+paUaGy0xl zyz=7ajWp|Dmp�Y)m9`u=nbmy!P6E`!+T=Tw==AdmwBX!@q*N>$&ll(9O3U zj=x-}zq|VHRnyF?v(8*Ha-TLwJifq_>BUUnGnii!FCwcB9y_-46Tyt39w)FnF|@yJXqQ$VID;t#55v za@u7_wnwr^Tw)&Y&hX{+o29T{UlrYlG?c|{sb+WzY$7jLIs-%7JW@8!8!MXIaw7VhAARi8fL(dS$bf9X80 zWgQv4XIC3~Z@S+4e5w3z3l670nd&po_wG4lV!DHc+sAP2x0TJ!UtHD+=$Y_~n~@Q2EkWBrAfrtM*@-n literal 0 HcmV?d00001 diff --git a/tests/TestKeePass2Reader.cpp b/tests/TestKeePass2Reader.cpp new file mode 100644 index 000000000..840817826 --- /dev/null +++ b/tests/TestKeePass2Reader.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2010 Felix Geyer + * + * 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 2 or (at your option) + * version 3 of the License. + * + * 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 . + */ + +#include + +#include "config-keepassx-tests.h" +#include "core/Database.h" +#include "core/Metadata.h" +#include "crypto/Crypto.h" +#include "format/KeePass2Reader.h" +#include "keys/PasswordKey.h" + +class TestKeePass2Reader : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void initTestCase(); + void testNonAscii(); +}; + +void TestKeePass2Reader::initTestCase() +{ + Crypto::init(); +} + +void TestKeePass2Reader::testNonAscii() +{ + QString filename = QString(KEEPASSX_TEST_DIR).append("/NonAscii.kdbx"); + CompositeKey key; + key.addKey(PasswordKey(QString::fromUtf8("\xce\x94\xc3\xb6\xd8\xb6"))); + KeePass2Reader* reader = new KeePass2Reader(); + Database* db = reader->readDatabase(filename, key); + QVERIFY(db); + QVERIFY(!reader->error()); + QCOMPARE(db->metadata()->name(), QString("NonAsciiTest")); +} + +QTEST_MAIN(TestKeePass2Reader); + +#include "TestKeePass2Reader.moc"