changeset 221:6a664378c5c4

Hash: add unit tests
author David Demelier <markand@malikania.fr>
date Thu, 08 May 2014 23:15:21 +0200
parents 82510454e772
children 5a99711d52f9
files C++/Hash.h C++/Tests/Hash/CMakeLists.txt C++/Tests/Hash/TestHash.cpp C++/Tests/Hash/TestHash.h CMakeLists.txt
diffstat 5 files changed, 145 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- /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 <markand@malikania.fr>
+#
+# 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
--- /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 <markand@malikania.fr>
+ *
+ * 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 <cppunit/TextTestRunner.h>
+
+#include <Hash.h>
+
+#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
--- /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 <markand@malikania.fr>
+ *
+ * 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 <cppunit/extensions/HelperMacros.h>
+#include <cppunit/TestFixture.h>
+
+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
--- 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 ()