Skip to content
Snippets Groups Projects
Commit 45580319 authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Added the necessary changes to add:

  * test code with google tests
  * memory checks with valgrind
  * code coverage of test
Solved a bug in the CMutex class destructor.
parent 24f1d00b
No related branches found
No related tags found
No related merge requests found
......@@ -24,11 +24,21 @@ IF (NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE "DEBUG")
ENDIF (NOT CMAKE_BUILD_TYPE)
SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall")
SET(CMAKE_CXX_FLAGS_RELEASE "-O3")
SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -D_REENTRANT")
SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -D_REENTRANT -O0 --coverage -fprofile-arcs")
SET(CMAKE_LINK_FLAGS_DEBUG "--coverage -fprofile-arcs")
#
# Add ctest
#
INCLUDE(CTest)
ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(test/gtest)
ADD_SUBDIRECTORY(test)
FIND_PACKAGE(Doxygen)
FIND_PATH(IRI_DOC_DIR doxygen.conf ${CMAKE_SOURCE_DIR}/doc/iri_doc/)
......
......@@ -76,6 +76,8 @@ CMutex::~CMutex()
{
int error=0;
this->try_enter();
this->exit();
if((error=pthread_mutex_destroy(&this->access))!=0)
{
/* handle exception */
......
include_directories(${GTEST_INCLUDE_DIRS})
include_directories(${GMOCK_INCLUDE_DIRS})
include_directories(${PROJECT_SOURCE_DIR}/src/mutex)
set(CTEST_CUSTOM_COVERAGE_EXCLUDE *)
add_executable(mutex_tests mutex/mutex_test.cpp)
add_dependencies(mutex_tests googletest)
target_link_libraries(mutex_tests ${PROJECT_SOURCE_DIR}/lib/libiriutils.so)
target_link_libraries(mutex_tests ${GTEST_LIBS_DIR}/libgtest.a ${GTEST_LIBS_DIR}/libgtest_main.a)
target_link_libraries(mutex_tests ${GMOCK_LIBS_DIR}/libgmock.a ${GMOCK_LIBS_DIR}/libgmock_main.a)
target_link_libraries(mutex_tests pthread)
add_test(NAME Mutex_Test COMMAND mutex_tests)
cmake_minimum_required(VERSION 2.8.8)
project(gtest_builder C CXX)
include(ExternalProject)
ExternalProject_Add(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
-DCMAKE_CXX_FLAGS=${MSVC_COMPILER_DEFS}
-Dgtest_force_shared_crt=ON
-DBUILD_GTEST=ON
PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
# Disable install step
INSTALL_COMMAND ""
)
# Specify include dir
ExternalProject_Get_Property(googletest source_dir)
set(GTEST_INCLUDE_DIRS ${source_dir}/googletest/include PARENT_SCOPE)
set(GMOCK_INCLUDE_DIRS ${source_dir}/googlemock/include PARENT_SCOPE)
# Specify MainTest's link libraries
ExternalProject_Get_Property(googletest binary_dir)
set(GTEST_LIBS_DIR ${binary_dir}/googlemock/gtest PARENT_SCOPE)
set(GMOCK_LIBS_DIR ${binary_dir}/googlemock PARENT_SCOPE)
// tests.cpp
#include "mutex.h"
#include <gtest/gtest.h>
TEST(mutexTest, try_enterSuccess) {
CMutex mutex;
ASSERT_TRUE(mutex.try_enter());
mutex.exit();
ASSERT_TRUE(mutex.try_enter());
}
TEST(mutexTest, try_enterFailure) {
CMutex mutex;
mutex.enter();
ASSERT_FALSE(mutex.try_enter());
}
int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment