diff options
Diffstat (limited to '')
-rw-r--r-- | tests/security/digest/md5Test.cpp | 229 | ||||
-rw-r--r-- | tests/security/digest/sha1Test.cpp | 119 | ||||
-rw-r--r-- | tests/testRunner.cpp | 31 | ||||
-rw-r--r-- | tests/testUtils.hpp | 11 | ||||
-rw-r--r-- | tests/utility/md5Test.cpp | 98 |
5 files changed, 386 insertions, 102 deletions
diff --git a/tests/security/digest/md5Test.cpp b/tests/security/digest/md5Test.cpp new file mode 100644 index 00000000..88c5490d --- /dev/null +++ b/tests/security/digest/md5Test.cpp @@ -0,0 +1,229 @@ +// +// VMime library (http://www.vmime.org) +// Copyright (C) 2002-2005 Vincent Richard <[email protected]> +// +// 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 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, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// + +#include "tests/testUtils.hpp" + +#include "vmime/security/digest/messageDigestFactory.hpp" + + +#define VMIME_TEST_SUITE md5Test +#define VMIME_TEST_SUITE_MODULE "Security/Digest" + + +#define INIT_DIGEST(var, algo) \ + vmime::ref <vmime::security::digest::messageDigest> var = \ + vmime::security::digest::messageDigestFactory::getInstance()->create(algo) + + + +VMIME_TEST_SUITE_BEGIN + + VMIME_TEST_LIST_BEGIN + VMIME_TEST(testRFC1321_1) + VMIME_TEST(testRFC1321_2) + VMIME_TEST(testRFC1321_3) + VMIME_TEST(testRFC1321_4) + VMIME_TEST(testRFC1321_5) + VMIME_TEST(testRFC1321_6) + VMIME_TEST(testRFC1321_7) + VMIME_TEST(testUpdate1) + VMIME_TEST(testUpdate2) + VMIME_TEST(testUpdate3) + VMIME_TEST(testUpdate4) + VMIME_TEST(testUpdate5) + VMIME_TEST(testUpdate6) + VMIME_TEST(testUpdate7) + VMIME_TEST_LIST_END + + + // Test suites from RFC #1321 + + void testRFC1321_1() + { + INIT_DIGEST(algo, "md5"); + + algo->update(""); + algo->finalize(); + + VASSERT_EQ("*", "d41d8cd98f00b204e9800998ecf8427e", algo->getHexDigest()); + } + + void testRFC1321_2() + { + INIT_DIGEST(algo, "md5"); + + algo->update("a"); + algo->finalize(); + + VASSERT_EQ("*", "0cc175b9c0f1b6a831c399e269772661", algo->getHexDigest()); + } + + void testRFC1321_3() + { + INIT_DIGEST(algo, "md5"); + + algo->update("abc"); + algo->finalize(); + + VASSERT_EQ("*", "900150983cd24fb0d6963f7d28e17f72", algo->getHexDigest()); + } + + void testRFC1321_4() + { + INIT_DIGEST(algo, "md5"); + + algo->update("message digest"); + algo->finalize(); + + VASSERT_EQ("*", "f96b697d7cb7938d525a2f31aaf161d0", algo->getHexDigest()); + } + + void testRFC1321_5() + { + INIT_DIGEST(algo, "md5"); + + algo->update("abcdefghijklmnopqrstuvwxyz"); + algo->finalize(); + + VASSERT_EQ("*", "c3fcd3d76192e4007dfb496cca67e13b", algo->getHexDigest()); + } + + void testRFC1321_6() + { + INIT_DIGEST(algo, "md5"); + + algo->update("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); + algo->finalize(); + + VASSERT_EQ("*", "d174ab98d277d9f5a5611c2c9f419d9f", algo->getHexDigest()); + } + + void testRFC1321_7() + { + INIT_DIGEST(algo, "md5"); + + algo->update("12345678901234567890123456789012345678901234567890123456789012345678901234567890"); + algo->finalize(); + + VASSERT_EQ("*", "57edf4a22be3c955ac49da2e2107b67a", algo->getHexDigest()); + } + + void testReset() + { + INIT_DIGEST(algo, "md5"); + + algo->update("foo"); + algo->update("bar"); + algo->finalize(); + + algo->reset(); + algo->finalize(); + + VASSERT_EQ("*", "d41d8cd98f00b204e9800998ecf8427e", algo->getHexDigest()); // empty string + } + + void testUpdate1() + { + INIT_DIGEST(algo, "md5"); + + algo->update(""); + algo->finalize(); + + VASSERT_EQ("*", "d41d8cd98f00b204e9800998ecf8427e", algo->getHexDigest()); + } + + void testUpdate2() + { + INIT_DIGEST(algo, "md5"); + + algo->update("a"); + algo->update(""); + algo->finalize(); + + VASSERT_EQ("2", "0cc175b9c0f1b6a831c399e269772661", algo->getHexDigest()); + } + + void testUpdate3() + { + INIT_DIGEST(algo, "md5"); + + algo->update("ab"); + algo->update("c"); + algo->finalize(); + + VASSERT_EQ("3", "900150983cd24fb0d6963f7d28e17f72", algo->getHexDigest()); + } + + void testUpdate4() + { + INIT_DIGEST(algo, "md5"); + + algo->update(""); + algo->update("message"); + algo->update(" "); + algo->update("digest"); + algo->finalize(); + + VASSERT_EQ("4", "f96b697d7cb7938d525a2f31aaf161d0", algo->getHexDigest()); + } + + void testUpdate5() + { + INIT_DIGEST(algo, "md5"); + + algo->update("abcd"); + algo->update(""); + algo->update("efghijklmnop"); + algo->update("qrstuvwx"); + algo->update("yz"); + algo->finalize(); + + VASSERT_EQ("5", "c3fcd3d76192e4007dfb496cca67e13b", algo->getHexDigest()); + } + + void testUpdate6() + { + INIT_DIGEST(algo, "md5"); + + algo->update("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012"); + algo->update("345"); + algo->update("6"); + algo->update("7"); + algo->update("89"); + algo->finalize(); + + VASSERT_EQ("6", "d174ab98d277d9f5a5611c2c9f419d9f", algo->getHexDigest()); + } + + void testUpdate7() + { + INIT_DIGEST(algo, "md5"); + + algo->update("12345678901234567890123456789"); + algo->update("01234567890123456789012345678901"); + algo->update("234567890123456789"); + algo->update(""); + algo->update("0"); + algo->finalize(); + + VASSERT_EQ("7", "57edf4a22be3c955ac49da2e2107b67a", algo->getHexDigest()); + } + +VMIME_TEST_SUITE_END + diff --git a/tests/security/digest/sha1Test.cpp b/tests/security/digest/sha1Test.cpp new file mode 100644 index 00000000..88bd494b --- /dev/null +++ b/tests/security/digest/sha1Test.cpp @@ -0,0 +1,119 @@ +// +// VMime library (http://www.vmime.org) +// Copyright (C) 2002-2005 Vincent Richard <[email protected]> +// +// 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 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, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// + +#include "tests/testUtils.hpp" + +#include "vmime/security/digest/messageDigestFactory.hpp" + + +#define VMIME_TEST_SUITE sha1Test +#define VMIME_TEST_SUITE_MODULE "Security/Digest" + + +#define INIT_DIGEST(var, algo) \ + vmime::ref <vmime::security::digest::messageDigest> var = \ + vmime::security::digest::messageDigestFactory::getInstance()->create(algo) + + + +VMIME_TEST_SUITE_BEGIN + + VMIME_TEST_LIST_BEGIN + VMIME_TEST(testFIPS180_1) + VMIME_TEST(testFIPS180_2) + VMIME_TEST(testFIPS180_3) + VMIME_TEST(testReset) + VMIME_TEST(testUpdate) + VMIME_TEST_LIST_END + + + // Test suites from FIPS PUB 180-1 + // http://www.itl.nist.gov/fipspubs/fip180-1.htm + + void testFIPS180_1() + { + INIT_DIGEST(algo, "sha1"); + + algo->update("abc"); + algo->finalize(); + + VASSERT_EQ("*", "a9993e364706816aba3e25717850c26c9cd0d89d", algo->getHexDigest()); + } + + void testFIPS180_2() + { + INIT_DIGEST(algo, "sha1"); + + algo->update("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"); + algo->finalize(); + + VASSERT_EQ("*", "84983e441c3bd26ebaae4aa1f95129e5e54670f1", algo->getHexDigest()); + } + + void testFIPS180_3() + { + INIT_DIGEST(algo, "sha1"); + + vmime::byte* buffer = new vmime::byte[1000000]; + + for (int i = 0 ; i < 1000000 ; ++i) + buffer[i] = 'a'; + + algo->update(buffer, 1000000); + algo->finalize(); + + delete [] buffer; + + VASSERT_EQ("*", "34aa973cd4c4daa4f61eeb2bdbad27316534016f", algo->getHexDigest()); + } + + void testReset() + { + INIT_DIGEST(algo, "sha1"); + + algo->update("ab"); + algo->update("c"); + algo->finalize(); + + algo->reset(); + algo->finalize(); + + VASSERT_EQ("*", "da39a3ee5e6b4b0d3255bfef95601890afd80709", algo->getHexDigest()); // empty string + } + + void testUpdate() + { + INIT_DIGEST(algo, "sha1"); + + algo->update("a"); + algo->update(""); + algo->update("bcdbcdecdefd"); + algo->update("efgef"); + algo->update("ghfghighijhijkijkljklmklmnlmnomnopnop"); + algo->update(""); + algo->update("q"); + algo->update(""); + algo->update(""); + algo->finalize(); + + VASSERT_EQ("*", "84983e441c3bd26ebaae4aa1f95129e5e54670f1", algo->getHexDigest()); + } + +VMIME_TEST_SUITE_END + diff --git a/tests/testRunner.cpp b/tests/testRunner.cpp index 883869a0..2f4e41ec 100644 --- a/tests/testRunner.cpp +++ b/tests/testRunner.cpp @@ -21,6 +21,8 @@ #include <time.h> #include <iostream> +#include <vector> +#include <algorithm> #include <cppunit/XmlOutputter.h> #include <cppunit/extensions/TestFactoryRegistry.h> @@ -165,6 +167,26 @@ private: }; + +// see testUtils.hpp + +std::vector <std::string>& getTestModules() +{ + static std::vector <std::string> allModules; + return allModules; +} + + +void registerTestModule(const char* name_) +{ + std::vector <std::string>& testModules = getTestModules(); + std::string name(name_); + + if (std::find(testModules.begin(), testModules.end(), name) == testModules.end()) + testModules.push_back(name); +} + + int main(int argc, char* argv[]) { // VMime initialization @@ -186,9 +208,12 @@ int main(int argc, char* argv[]) { // Get the test suites from the registry and add them to the list of test to run CppUnit::TestRunner runner; - runner.addTest(CppUnit::TestFactoryRegistry::getRegistry("Parser").makeTest()); - runner.addTest(CppUnit::TestFactoryRegistry::getRegistry("Utility").makeTest()); - runner.addTest(CppUnit::TestFactoryRegistry::getRegistry("Misc").makeTest()); + + for (unsigned int i = 0 ; i < getTestModules().size() ; ++i) + { + runner.addTest(CppUnit::TestFactoryRegistry:: + getRegistry(getTestModules()[i]).makeTest()); + } std::auto_ptr <XmlTestListener> xmlListener(new XmlTestListener); diff --git a/tests/testUtils.hpp b/tests/testUtils.hpp index cb4549e0..572f4602 100644 --- a/tests/testUtils.hpp +++ b/tests/testUtils.hpp @@ -21,6 +21,7 @@ #include <iostream> #include <sstream> #include <vector> +#include <string> // VMime @@ -53,7 +54,15 @@ }; \ \ static CppUnit::AutoRegisterSuite <VMIME_TEST_SUITE>(autoRegisterRegistry1); \ - static CppUnit::AutoRegisterSuite <VMIME_TEST_SUITE>(autoRegisterRegistry2)(VMIME_TEST_SUITE_MODULE); + static CppUnit::AutoRegisterSuite <VMIME_TEST_SUITE>(autoRegisterRegistry2)(VMIME_TEST_SUITE_MODULE); \ + extern void registerTestModule(const char* name); \ + template <typename T> \ + struct AutoRegisterModule { \ + AutoRegisterModule() { \ + registerTestModule(VMIME_TEST_SUITE_MODULE); \ + } \ + }; \ + static AutoRegisterModule <VMIME_TEST_SUITE> autoRegisterModule; #define VMIME_TEST_LIST_BEGIN CPPUNIT_TEST_SUITE(VMIME_TEST_SUITE); #define VMIME_TEST_LIST_END CPPUNIT_TEST_SUITE_END(); diff --git a/tests/utility/md5Test.cpp b/tests/utility/md5Test.cpp deleted file mode 100644 index a55fddf7..00000000 --- a/tests/utility/md5Test.cpp +++ /dev/null @@ -1,98 +0,0 @@ -// -// VMime library (http://www.vmime.org) -// Copyright (C) 2002-2005 Vincent Richard <[email protected]> -// -// 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 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, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -// - -#include "tests/testUtils.hpp" - -#include "vmime/utility/md5.hpp" - - -#define VMIME_TEST_SUITE md5Test -#define VMIME_TEST_SUITE_MODULE "Utility" - - -VMIME_TEST_SUITE_BEGIN - - VMIME_TEST_LIST_BEGIN - VMIME_TEST(testString) - VMIME_TEST(testUpdate) - VMIME_TEST_LIST_END - - - void testString() - { - // Test suites from RFC #1321 - VASSERT_EQ("1", "d41d8cd98f00b204e9800998ecf8427e", vmime::utility::md5("").hex()); - VASSERT_EQ("2", "0cc175b9c0f1b6a831c399e269772661", vmime::utility::md5("a").hex()); - VASSERT_EQ("3", "900150983cd24fb0d6963f7d28e17f72", vmime::utility::md5("abc").hex()); - VASSERT_EQ("4", "f96b697d7cb7938d525a2f31aaf161d0", vmime::utility::md5("message digest").hex()); - VASSERT_EQ("5", "c3fcd3d76192e4007dfb496cca67e13b", vmime::utility::md5("abcdefghijklmnopqrstuvwxyz").hex()); - VASSERT_EQ("6", "d174ab98d277d9f5a5611c2c9f419d9f", vmime::utility::md5("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789").hex()); - VASSERT_EQ("7", "57edf4a22be3c955ac49da2e2107b67a", vmime::utility::md5("12345678901234567890123456789012345678901234567890123456789012345678901234567890").hex()); - } - - void testUpdate() - { - vmime::utility::md5 m1; - m1.update(""); - VASSERT_EQ("1", "d41d8cd98f00b204e9800998ecf8427e", m1.hex()); - - vmime::utility::md5 m2; - m2.update("a"); - m2.update(""); - VASSERT_EQ("2", "0cc175b9c0f1b6a831c399e269772661", m2.hex()); - - vmime::utility::md5 m3; - m3.update("ab"); - m3.update("c"); - VASSERT_EQ("3", "900150983cd24fb0d6963f7d28e17f72", m3.hex()); - - vmime::utility::md5 m4; - m4.update(""); - m4.update("message"); - m4.update(" "); - m4.update("digest"); - VASSERT_EQ("4", "f96b697d7cb7938d525a2f31aaf161d0", m4.hex()); - - vmime::utility::md5 m5; - m5.update("abcd"); - m5.update(""); - m5.update("efghijklmnop"); - m5.update("qrstuvwx"); - m5.update("yz"); - VASSERT_EQ("5", "c3fcd3d76192e4007dfb496cca67e13b", m5.hex()); - - vmime::utility::md5 m6; - m6.update("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012"); - m6.update("345"); - m6.update("6"); - m6.update("7"); - m6.update("89"); - VASSERT_EQ("6", "d174ab98d277d9f5a5611c2c9f419d9f", m6.hex()); - - vmime::utility::md5 m7; - m7.update("12345678901234567890123456789"); - m7.update("01234567890123456789012345678901"); - m7.update("234567890123456789"); - m7.update(""); - m7.update("0"); - VASSERT_EQ("7", "57edf4a22be3c955ac49da2e2107b67a", m7.hex()); - } - -VMIME_TEST_SUITE_END - |