diff --git a/CMakeLists.txt b/CMakeLists.txt
index 62e7398d..fcb1f744 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -134,5 +134,6 @@ add_subdirectory(Sources/Plasma)
add_subdirectory(Sources/Tools)
if(PLASMA_BUILD_TESTS)
- add_subdirectory(Sources/Tests)
+ enable_testing()
+ add_subdirectory(Sources/Tests EXCLUDE_FROM_ALL)
endif(PLASMA_BUILD_TESTS)
diff --git a/Sources/Tests/CMakeLists.txt b/Sources/Tests/CMakeLists.txt
index 3959ffcc..6a92d56b 100644
--- a/Sources/Tests/CMakeLists.txt
+++ b/Sources/Tests/CMakeLists.txt
@@ -1,5 +1,10 @@
if( MSVC ) # VS2012 doesn't support correctly the tuples yet and gtest doesn't compile without this
- add_definitions( /D _VARIADIC_MAX=10 )
- endif()
+ add_definitions( /D _VARIADIC_MAX=10 )
+endif()
+
add_subdirectory(gtest-1.6.0)
-add_subdirectory(CoreLibTests)
\ No newline at end of file
+
+add_subdirectory(CoreLibTests)
+#add_subdirectory(FeatureTests)
+add_subdirectory(NucleusTests)
+#add_subdirectory(PubUtilTests)
diff --git a/Sources/Tests/CoreLibTests/CMakeLists.txt b/Sources/Tests/CoreLibTests/CMakeLists.txt
index c71cc0e0..c4c92b2d 100644
--- a/Sources/Tests/CoreLibTests/CMakeLists.txt
+++ b/Sources/Tests/CoreLibTests/CMakeLists.txt
@@ -1,6 +1,5 @@
project(CoreLibTests)
-enable_testing()
include_directories(${GTEST_INCLUDE_DIR})
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
include_directories(../../Plasma/CoreLib)
@@ -14,4 +13,4 @@ target_link_libraries(plStringTest gtest gtest_main CoreLib)
add_test(
NAME plStringTest
COMMAND plStringTest
-)
\ No newline at end of file
+)
diff --git a/Sources/Tests/NucleusTests/CMakeLists.txt b/Sources/Tests/NucleusTests/CMakeLists.txt
new file mode 100644
index 00000000..56df15ee
--- /dev/null
+++ b/Sources/Tests/NucleusTests/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory(pnEncryptionTest)
diff --git a/Sources/Tests/NucleusTests/pnEncryptionTest/CMakeLists.txt b/Sources/Tests/NucleusTests/pnEncryptionTest/CMakeLists.txt
new file mode 100644
index 00000000..faa48c64
--- /dev/null
+++ b/Sources/Tests/NucleusTests/pnEncryptionTest/CMakeLists.txt
@@ -0,0 +1,17 @@
+include_directories(${GTEST_INCLUDE_DIR})
+include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
+include_directories(../../../Plasma/CoreLib)
+include_directories(../../../Plasma/NucleusLib)
+include_directories(${OPENSSL_INCLUDE_DIR})
+
+add_executable(test_plMD5Checksum test_plMD5Checksum.cpp)
+target_link_libraries(test_plMD5Checksum gtest gtest_main)
+target_link_libraries(test_plMD5Checksum ${OPENSSL_LIBRARIES})
+target_link_libraries(test_plMD5Checksum CoreLib pnEncryption)
+add_test(NAME test_plMD5Checksum COMMAND test_plMD5Checksum)
+
+add_executable(test_plSHA1Checksum test_plSHA1Checksum.cpp)
+target_link_libraries(test_plSHA1Checksum gtest gtest_main)
+target_link_libraries(test_plSHA1Checksum ${OPENSSL_LIBRARIES})
+target_link_libraries(test_plSHA1Checksum CoreLib pnEncryption)
+add_test(NAME test_plSHA1Checksum COMMAND test_plSHA1Checksum)
diff --git a/Sources/Tests/NucleusTests/pnEncryptionTest/test_plMD5Checksum.cpp b/Sources/Tests/NucleusTests/pnEncryptionTest/test_plMD5Checksum.cpp
new file mode 100644
index 00000000..5d2995e1
--- /dev/null
+++ b/Sources/Tests/NucleusTests/pnEncryptionTest/test_plMD5Checksum.cpp
@@ -0,0 +1,60 @@
+/*==LICENSE==*
+
+CyanWorlds.com Engine - MMOG client, server and tools
+Copyright (C) 2011 Cyan Worlds, Inc.
+
+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 3 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, see .
+
+Additional permissions under GNU GPL version 3 section 7
+
+If you modify this Program, or any covered work, by linking or
+combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
+NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
+JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
+(or a modified version of those libraries),
+containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
+PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
+JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
+licensors of this Program grant you additional
+permission to convey the resulting work. Corresponding Source for a
+non-source form of such a combination shall include the source code for
+the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
+work.
+
+You can contact Cyan Worlds, Inc. by email legal@cyan.com
+ or by snail mail at:
+ Cyan Worlds, Inc.
+ 14617 N Newport Hwy
+ Mead, WA 99021
+
+*==LICENSE==*/
+
+#include
+#include
+#include "pnEncryption/plChecksum.h"
+
+TEST(plMD5Checksum, ctor_with_buffer)
+{
+ const char* buffer = "Hello World";
+ const char* hexStr = "b10a8db164e0754105b7a99be72e3fe5";
+ const uint8_t value[16] = {0xb1, 0x0a, 0x8d, 0xb1, 0x64, 0xe0, 0x75, 0x41,
+ 0x05, 0xb7, 0xa9, 0x9b, 0xe7, 0x2e, 0x3f, 0xe5};
+
+ plMD5Checksum sum(strlen(buffer), (uint8_t*)buffer);
+
+ EXPECT_EQ(sum.GetSize(), sizeof(value));
+ EXPECT_EQ(memcmp(sum.GetValue(), value, 16), 0);
+ EXPECT_STREQ(sum.GetAsHexString(), hexStr);
+}
+
diff --git a/Sources/Tests/NucleusTests/pnEncryptionTest/test_plSHA1Checksum.cpp b/Sources/Tests/NucleusTests/pnEncryptionTest/test_plSHA1Checksum.cpp
new file mode 100644
index 00000000..2b9a2b2e
--- /dev/null
+++ b/Sources/Tests/NucleusTests/pnEncryptionTest/test_plSHA1Checksum.cpp
@@ -0,0 +1,62 @@
+/*==LICENSE==*
+
+CyanWorlds.com Engine - MMOG client, server and tools
+Copyright (C) 2011 Cyan Worlds, Inc.
+
+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 3 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, see .
+
+Additional permissions under GNU GPL version 3 section 7
+
+If you modify this Program, or any covered work, by linking or
+combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
+NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
+JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
+(or a modified version of those libraries),
+containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
+PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
+JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
+licensors of this Program grant you additional
+permission to convey the resulting work. Corresponding Source for a
+non-source form of such a combination shall include the source code for
+the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
+work.
+
+You can contact Cyan Worlds, Inc. by email legal@cyan.com
+ or by snail mail at:
+ Cyan Worlds, Inc.
+ 14617 N Newport Hwy
+ Mead, WA 99021
+
+*==LICENSE==*/
+
+#include
+#include
+#include "pnEncryption/plChecksum.h"
+
+TEST(plSHA1Checksum, ctor_with_buffer)
+{
+ const char* buffer = "Hello World";
+ const char* hexStr = "0a4d55a8d778e5022fab701977c5d840bbc486d0";
+ const ShaDigest value = {0x0a, 0x4d, 0x55, 0xa8,
+ 0xd7, 0x78, 0xe5, 0x02,
+ 0x2f, 0xab, 0x70, 0x19,
+ 0x77, 0xc5, 0xd8, 0x40,
+ 0xbb, 0xc4, 0x86, 0xd0};
+
+ plSHA1Checksum sum(strlen(buffer), (uint8_t*)buffer);
+
+ EXPECT_EQ(sum.GetSize(), sizeof(value));
+ EXPECT_EQ(memcmp(sum.GetValue(), value, 20), 0);
+ EXPECT_STREQ(sum.GetAsHexString(), hexStr);
+}