aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/security/digest/md5Test.cpp229
-rw-r--r--tests/security/digest/sha1Test.cpp119
-rw-r--r--tests/testRunner.cpp31
-rw-r--r--tests/testUtils.hpp11
-rw-r--r--tests/utility/md5Test.cpp98
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
-