# HG changeset patch # User David Demelier # Date 1399583721 -7200 # Node ID 6a664378c5c471050b9b9e7d04344379320ce2f7 # Parent 82510454e772b95dc565e53ab51e82a9dbcd7a38 Hash: add unit tests diff -r 82510454e772 -r 6a664378c5c4 C++/Hash.h --- a/C++/Hash.h Thu May 08 22:56:12 2014 +0200 +++ b/C++/Hash.h Thu May 08 23:15:21 2014 +0200 @@ -57,7 +57,7 @@ update(&ctx, input.c_str(), input.length()); finalize(digest, &ctx); - for (int i = 0; i < Length; i++) + for (unsigned long i = 0; i < Length; i++) sprintf(&hash[i * 2], "%02x", (unsigned int)digest[i]); return std::string(hash); diff -r 82510454e772 -r 6a664378c5c4 C++/Tests/Hash/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C++/Tests/Hash/CMakeLists.txt Thu May 08 23:15:21 2014 +0200 @@ -0,0 +1,32 @@ +# +# CMakeLists.txt -- tests for Hash +# +# Copyright (c) 2014 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +find_package(OpenSSL REQUIRED) + +set( + SOURCES + ${code_SOURCE_DIR}/C++/Hash.cpp + ${code_SOURCE_DIR}/C++/Hash.h + TestHash.cpp + TestHash.h +) + +define_test(hash "${SOURCES}") + +target_include_directories(hash PRIVATE ${OPENSSL_INCLUDE_DIR}) +target_link_libraries(hash ${OPENSSL_LIBRARIES}) \ No newline at end of file diff -r 82510454e772 -r 6a664378c5c4 C++/Tests/Hash/TestHash.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C++/Tests/Hash/TestHash.cpp Thu May 08 23:15:21 2014 +0200 @@ -0,0 +1,68 @@ +/* + * TestHash.cpp -- test the hash cryptographic functions + * + * Copyright (c) 2013, 2014 David Demelier + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include + +#include "TestHash.h" + +/* + * We test the "Hello World" message in all cryptographic functions. + */ + +void TestHash::md5() +{ + std::string expected = "b10a8db164e0754105b7a99be72e3fe5"; + std::string output = Hash::md5("Hello World"); + + CPPUNIT_ASSERT_EQUAL(output, expected); +} + +void TestHash::sha1() +{ + std::string expected = "0a4d55a8d778e5022fab701977c5d840bbc486d0"; + std::string output = Hash::sha1("Hello World"); + + CPPUNIT_ASSERT_EQUAL(output, expected); +} + +void TestHash::sha256() +{ + std::string expected = "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e"; + std::string output = Hash::sha256("Hello World"); + + CPPUNIT_ASSERT_EQUAL(output, expected); +} + +void TestHash::sha512() +{ + std::string expected = "2c74fd17edafd80e8447b0d46741ee243b7eb74dd2149a0ab1b9246fb30382f27e853d8585719e0e67cbda0daa8f51671064615d645ae27acb15bfb1447f459b"; + std::string output = Hash::sha512("Hello World"); + + CPPUNIT_ASSERT_EQUAL(output, expected); +} + +int main() +{ + CppUnit::TextTestRunner runnerText; + + runnerText.addTest(TestHash::suite()); + + return runnerText.run("", false) == 1 ? 0 : 1; +} \ No newline at end of file diff -r 82510454e772 -r 6a664378c5c4 C++/Tests/Hash/TestHash.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C++/Tests/Hash/TestHash.h Thu May 08 23:15:21 2014 +0200 @@ -0,0 +1,41 @@ +/* + * TestHash.h -- test the hash cryptographic functions + * + * Copyright (c) 2013, 2014 David Demelier + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _TEST_HASH_H_ +#define _TEST_HASH_H_ + +#include +#include + +class TestHash : public CppUnit::TestFixture { +private: + CPPUNIT_TEST_SUITE(TestHash); + CPPUNIT_TEST(md5); + CPPUNIT_TEST(sha1); + CPPUNIT_TEST(sha256); + CPPUNIT_TEST(sha512); + CPPUNIT_TEST_SUITE_END(); + +public: + void md5(); + void sha1(); + void sha256(); + void sha512(); +}; + +#endif // !_TEST_HASH_H_ \ No newline at end of file diff -r 82510454e772 -r 6a664378c5c4 CMakeLists.txt --- a/CMakeLists.txt Thu May 08 22:56:12 2014 +0200 +++ b/CMakeLists.txt Thu May 08 23:15:21 2014 +0200 @@ -62,6 +62,6 @@ add_subdirectory(C++/Tests/DynLib) endif () - - - +if (WITH_HASH) + add_subdirectory(C++/Tests/Hash) +endif ()