From 4a8d782f3e12fb61517d1b0b1fe874c91f7c43e5 Mon Sep 17 00:00:00 2001
From: Eric Cano <Eric.Cano@cern.ch>
Date: Fri, 19 Feb 2016 18:45:41 +0100
Subject: [PATCH] Packaged the unit tests and system tests in RPMs for
 continuous integration.

---
 CMakeLists.txt                                | 17 +++-
 catalogue/CMakeLists.txt                      |  2 +
 common/CMakeLists.txt                         |  2 +
 cta.spec.in                                   | 66 +++++++++++--
 nameserver/CMakeLists.txt                     |  2 +
 objectstore/CMakeLists.txt                    |  1 +
 remotens/CMakeLists.txt                       |  2 +
 scheduler/CMakeLists.txt                      |  7 +-
 tapeserver/CMakeLists.txt                     |  1 +
 tapeserver/castor/exception/CMakeLists.txt    |  2 +
 tapeserver/castor/io/CMakeLists.txt           |  2 +
 tapeserver/castor/legacymsg/CMakeLists.txt    |  1 +
 tapeserver/castor/mediachanger/CMakeLists.txt |  1 +
 tapeserver/castor/messages/CMakeLists.txt     |  2 +
 tapeserver/castor/server/CMakeLists.txt       |  2 +
 tapeserver/castor/server/Semaphores.cpp       |  3 +-
 tapeserver/castor/tape/reactor/CMakeLists.txt |  4 +
 .../tape/tapeserver/SCSI/CMakeLists.txt       |  2 +
 .../tape/tapeserver/daemon/CMakeLists.txt     |  6 +-
 .../tape/tapeserver/drive/CMakeLists.txt      |  2 +
 .../tape/tapeserver/file/CMakeLists.txt       |  3 +
 .../tape/tapeserver/utils/CMakeLists.txt      |  3 +
 tapeserver/castor/utils/CMakeLists.txt        |  2 +
 tapeserver/cta-tapedSystemtests.cpp           |  1 +
 tests/CMakeLists.txt                          | 15 ++-
 tests/Subprocess.cpp                          |  7 +-
 tests/SubprocessSystemTests.cpp               |  5 +
 tests/cta-valgrindUnitTests.sh.in             | 12 +++
 tests/helgrind.suppr                          | 99 +++++++++++++++++++
 29 files changed, 247 insertions(+), 27 deletions(-)
 create mode 100644 tapeserver/cta-tapedSystemtests.cpp
 create mode 100644 tests/cta-valgrindUnitTests.sh.in
 create mode 100644 tests/helgrind.suppr

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 853f85698c..54f625931a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -150,10 +150,17 @@ endif (${COMPILE_PACKAGING} STREQUAL "1")
 #                    COMMENT "Not running the unit tests" VERBATIM)
 
 configure_file(tests/valgrind.suppr tests/valgrind.suppr COPYONLY)
-add_custom_target(unittests
-  tests/unitTests
-  COMMAND valgrind --track-fds=yes --leak-check=full --demangle=yes --gen-suppressions=all --show-reachable=yes --error-exitcode=1 --suppressions=tests/valgrind.suppr tests/unitTests
-  COMMAND valgrind --tool=helgrind -v --demangle=no --conflict-cache-size=30000000 --error-exitcode=1 tests/unitTests 
+configure_file(tests/helgrind.suppr tests/helgrind.suppr COPYONLY)
+add_custom_target(fullunittests
+  tests/cta-unitTests
+  COMMAND valgrind --track-fds=yes --leak-check=full --demangle=yes --gen-suppressions=all --show-reachable=yes --error-exitcode=1 --suppressions=tests/valgrind.suppr tests/cta-unitTests
+  COMMAND valgrind --tool=helgrind -v --demangle=yes --gen-suppressions=all --conflict-cache-size=30000000 --error-exitcode=1 --suppressions=tests/helgrind.suppr tests/cta-unitTests
+  
+  DEPENDS tests/cta-unitTests tests/valgrind.suppr tests/helgrind.suppr
+  COMMENT "Running unit tests with memory leak and race conditions detection" VERBATIM)
 
-  DEPENDS tests/unittests tests/valgrind.suppr
+add_custom_target(shortunittests
+  tests/cta-unitTests
+  
+  DEPENDS tests/cta-unitTests
   COMMENT "Running unit tests" VERBATIM)
diff --git a/catalogue/CMakeLists.txt b/catalogue/CMakeLists.txt
index e5d3a2ee82..6b697726a1 100644
--- a/catalogue/CMakeLists.txt
+++ b/catalogue/CMakeLists.txt
@@ -27,3 +27,5 @@ add_library (ctacatalogueunittests SHARED
   ${CATALOGUE_UNIT_TESTS_LIB_SRC_FILES})
 
 target_link_libraries (ctacatalogueunittests ctacatalogue)
+
+install(TARGETS ctacatalogueunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index c48a13d9d8..389633b910 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -113,3 +113,5 @@ set (COMMON_UNIT_TESTS_LIB_SRC_FILES
 
 add_library (ctacommonunittests SHARED
   ${COMMON_UNIT_TESTS_LIB_SRC_FILES})
+
+install(TARGETS ctacommonunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
\ No newline at end of file
diff --git a/cta.spec.in b/cta.spec.in
index 686e4d400f..ce75b04c09 100644
--- a/cta.spec.in
+++ b/cta.spec.in
@@ -26,7 +26,7 @@ Source: %{name}-%{ctaVersion}-%{ctaRelease}.tar.gz
 License: http://cern.ch/castor/DIST/CONDITIONS
 Group: Application/cta
 BuildRoot: %{_builddir}/%{name}-%{version}-root
-BuildRequires: cmake >= 2.6 redhat-rpm-config spaceMonkey2000-devel
+BuildRequires: cmake >= 2.6 redhat-rpm-config
 # only build debug info if you're building the whole code
 
 %description
@@ -58,25 +58,25 @@ cd build
 %check
 %if "%{skip_unit_tests}" == "0"
 cd build
-%{__make} test
+%{__make} shortunittests
 %endif
 
 # The packages will be cta-tapeserver, cta-frontend, cta-cli
 
-%package -n cta-tapeserver
-Summary: CERN Tape Archive
+%package -n cta-taped
+Summary: CERN Tape Archive: tape daemon
 Group: Application/CTA
 requires: cta-lib
-%description -n cta-tapeserver
+%description -n cta-taped
 CERN Tape Archive:
 The tape server daemon
-%files -n cta-tapeserver
+%files -n cta-taped
 %defattr(-,root,root)
-%attr(0755,root,root) %{_bindir}/cta-tapeserverd
+%attr(0755,root,root) %{_bindir}/cta-taped
 %attr(0755,root,root) %{_libdir}/libctamessages.so
 
 %package -n cta-frontend
-Summary: CERN Tape Archive
+Summary: CERN Tape Archive: Xrootd plugin
 Group: Application/CTA
 requires: cta-lib
 %description -n cta-frontend
@@ -88,7 +88,7 @@ The xroot plugin
 %attr(0644,root,root) %config(noreplace) %{_sysconfdir}/xrd.cf.cta
 
 %package -n cta-cli
-Summary: CERN Tape Archive
+Summary: CERN Tape Archive: command line interface
 Group: Application/CTA
 %description -n cta-cli
 CERN Tape Archive:
@@ -98,6 +98,7 @@ The xroot plugin
 %attr(0755,root,root) %{_bindir}/cta
 %attr(0755,root,root) %{_bindir}/ctaAddAdminUser
 
+
 %package -n cta-lib
 Summary: CERN Tape Archive
 Group: Application/CTA
@@ -110,4 +111,49 @@ The shared libraries
 %attr(0755,root,root) %{_libdir}/libctanameserver.so
 %attr(0755,root,root) %{_libdir}/libctaremotens.so
 %attr(0755,root,root) %{_libdir}/libctascheduler.so
-%attr(0755,root,root) %{_libdir}/libctaobjectstore.so
\ No newline at end of file
+%attr(0755,root,root) %{_libdir}/libctaobjectstore.so
+%attr(0755,root,root) %{_libdir}/libctamediachangerutils.so
+%attr(0755,root,root) %{_libdir}/libctamessages.so
+%attr(0755,root,root) %{_libdir}/libctamessagesutils.so
+%attr(0755,root,root) %{_libdir}/libctatapereactorutils.so
+%attr(0755,root,root) %{_libdir}/libctatapeserverdaemonutils.so
+
+%package -n cta-unittests
+Summary: CERN Tape Archive: unit tests
+Group: Application/CTA
+%description -n cta-unittests
+CERN Tape Archive:
+unit tests
+%files -n cta-unittests
+%attr(0755,root,root) %{_bindir}/cta-unitTests
+%attr(0755,root,root) %{_bindir}/cta-valgrindUnitTests.sh
+%attr(0755,root,root) %{_libdir}/libctacatalogueunittests.so
+%attr(0755,root,root) %{_libdir}/libctacommonunittests.so
+%attr(0755,root,root) %{_libdir}/libctaexceptionunittests.so
+%attr(0755,root,root) %{_libdir}/libctaiounittests.so
+%attr(0755,root,root) %{_libdir}/libctalegacymsgunittests.so
+%attr(0755,root,root) %{_libdir}/libctamessagesunittests.so
+%attr(0755,root,root) %{_libdir}/libctanameserverunittests.so
+%attr(0755,root,root) %{_libdir}/libctaobjectstoreunittests.so
+%attr(0755,root,root) %{_libdir}/libctaremotensunittests.so
+%attr(0755,root,root) %{_libdir}/libctaschedulerunittests.so
+%attr(0755,root,root) %{_libdir}/libctaserverunittests.so
+%attr(0755,root,root) %{_libdir}/libctatapereactorunittests.so
+%attr(0755,root,root) %{_libdir}/libctatapeserverdaemonunittests.so
+%attr(0755,root,root) %{_libdir}/libctatapeserverdriveunittests.so
+%attr(0755,root,root) %{_libdir}/libctatapeserverfileunittests.so
+%attr(0755,root,root) %{_libdir}/libctatapeserverscsiunittests.so
+%attr(0755,root,root) %{_libdir}/libctatapeserverutilsunittests.so
+%attr(0755,root,root) %{_libdir}/libctautilsunittests.so
+%attr(0644,root,root) %{_datadir}/%{name}-%{ctaVersion}/unittest/*.suppr
+
+
+%package -n cta-systemtests
+Summary: CERN Tape Archive: system tests with virtual tape drives
+Group: Application/CTA
+%description -n cta-systemtests
+CERN Tape Archive:
+system tests with virtual tape drives
+%files -n cta-systemtests
+%attr(0755,root,root) %{_bindir}/cta-systemTests
+%attr(0755,root,root) %{_libdir}/libsystemTestHelperTests.so
diff --git a/nameserver/CMakeLists.txt b/nameserver/CMakeLists.txt
index 23a75ef08e..56320e2e0d 100644
--- a/nameserver/CMakeLists.txt
+++ b/nameserver/CMakeLists.txt
@@ -21,5 +21,7 @@ add_library (ctanameserverunittests SHARED
 target_link_libraries(ctanameserverunittests
   ctanameserver)
 
+install(TARGETS ctanameserverunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
+
 add_executable(makeMockNameServerBasePath mockNS/makeMockNameServerBasePath.cpp)
 target_link_libraries(makeMockNameServerBasePath ctacommon)
\ No newline at end of file
diff --git a/objectstore/CMakeLists.txt b/objectstore/CMakeLists.txt
index 641b6cf527..bd4b3795a1 100644
--- a/objectstore/CMakeLists.txt
+++ b/objectstore/CMakeLists.txt
@@ -65,6 +65,7 @@ set(ObjectStoreUnitTests
 add_library(ctaobjectstoreunittests SHARED ${ObjectStoreUnitTests})
 target_link_libraries(ctaobjectstoreunittests
   protobuf rados ctacommon gtest ctaobjectstore)
+install(TARGETS ctaobjectstoreunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
 
 add_executable(makeMinimalVFS makeMinimalVFS.cpp)
 target_link_libraries(makeMinimalVFS
diff --git a/remotens/CMakeLists.txt b/remotens/CMakeLists.txt
index 3b161a0f54..4fc8ab2d88 100644
--- a/remotens/CMakeLists.txt
+++ b/remotens/CMakeLists.txt
@@ -25,3 +25,5 @@ add_library (ctaremotensunittests SHARED
 target_link_libraries(ctaremotensunittests
   ctaremotens
   ctautils)
+
+install(TARGETS ctaremotensunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
diff --git a/scheduler/CMakeLists.txt b/scheduler/CMakeLists.txt
index 0ecca9dc3d..12658dbe2d 100644
--- a/scheduler/CMakeLists.txt
+++ b/scheduler/CMakeLists.txt
@@ -47,7 +47,8 @@ add_library (ctaschedulerunittests SHARED
   SchedulerDatabaseFactory.cpp
   SchedulerDatabaseTest.cpp)
 
-target_link_libraries (ctaschedulerunittests ${SQLITE3_LIBRARY_RELEASE})
-
-target_link_libraries(ctaschedulerunittests
+target_link_libraries (ctaschedulerunittests 
+  ${SQLITE3_LIBRARY_RELEASE}
   ctascheduler)
+
+install(TARGETS ctaschedulerunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
\ No newline at end of file
diff --git a/tapeserver/CMakeLists.txt b/tapeserver/CMakeLists.txt
index 8984496ca8..aca7a23795 100644
--- a/tapeserver/CMakeLists.txt
+++ b/tapeserver/CMakeLists.txt
@@ -10,3 +10,4 @@ add_subdirectory (daemon)
 add_executable (cta-taped cta-taped.cpp)
 target_link_libraries(cta-taped
   ctatapedaemon ctacommon protobuf)
+install (TARGETS cta-taped DESTINATION usr/bin)
diff --git a/tapeserver/castor/exception/CMakeLists.txt b/tapeserver/castor/exception/CMakeLists.txt
index d7fac43951..4ff3dc9cd6 100644
--- a/tapeserver/castor/exception/CMakeLists.txt
+++ b/tapeserver/castor/exception/CMakeLists.txt
@@ -4,3 +4,5 @@ include_directories(${PROJECT_SOURCE_DIR}/tapeserver)
 
 add_library (ctaexceptionunittests SHARED
   ExceptionTest.cpp)
+
+install(TARGETS ctaexceptionunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
diff --git a/tapeserver/castor/io/CMakeLists.txt b/tapeserver/castor/io/CMakeLists.txt
index e82f41f3e4..c7e73debaa 100644
--- a/tapeserver/castor/io/CMakeLists.txt
+++ b/tapeserver/castor/io/CMakeLists.txt
@@ -11,3 +11,5 @@ add_library (ctaiounittests SHARED
   IoTest.cpp)
 target_link_libraries (ctaiounittests
   ctaio)
+
+install(TARGETS ctaiounittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
diff --git a/tapeserver/castor/legacymsg/CMakeLists.txt b/tapeserver/castor/legacymsg/CMakeLists.txt
index ad70f4b878..95ed008cf9 100644
--- a/tapeserver/castor/legacymsg/CMakeLists.txt
+++ b/tapeserver/castor/legacymsg/CMakeLists.txt
@@ -30,3 +30,4 @@ add_library (ctalegacymsgunittests SHARED
 target_link_libraries (ctalegacymsgunittests
   ctamessages
   ctautils)
+install(TARGETS ctalegacymsgunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
diff --git a/tapeserver/castor/mediachanger/CMakeLists.txt b/tapeserver/castor/mediachanger/CMakeLists.txt
index b49f3bc111..1edd47be29 100644
--- a/tapeserver/castor/mediachanger/CMakeLists.txt
+++ b/tapeserver/castor/mediachanger/CMakeLists.txt
@@ -36,3 +36,4 @@ add_library(ctamediachanger ${MEDIA_CHANGER_LIB_SRC_FILES})
 
 add_library(ctamediachangerutils SHARED
   MmcProxyDummy.cpp)
+install(TARGETS ctamediachangerutils DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
diff --git a/tapeserver/castor/messages/CMakeLists.txt b/tapeserver/castor/messages/CMakeLists.txt
index e41a1a84b9..5cee9e4af6 100644
--- a/tapeserver/castor/messages/CMakeLists.txt
+++ b/tapeserver/castor/messages/CMakeLists.txt
@@ -34,6 +34,7 @@ add_library(ctamessagesprotobuf
 add_library(ctamessagesutils SHARED
   AcsProxyDummy.cpp
   TapeserverProxyDummy.cpp)
+install(TARGETS ctamessagesutils DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
 
 set(CtaMessageSrcs
   AcsProxy.cpp
@@ -70,3 +71,4 @@ add_library(ctamessagesunittests SHARED
   MessagesTest.cpp
   MutexLockerTest.cpp
   MutexTest.cpp)
+install(TARGETS ctamessagesunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
diff --git a/tapeserver/castor/server/CMakeLists.txt b/tapeserver/castor/server/CMakeLists.txt
index a79374d406..1d5c67e172 100644
--- a/tapeserver/castor/server/CMakeLists.txt
+++ b/tapeserver/castor/server/CMakeLists.txt
@@ -24,3 +24,5 @@ add_library (ctaserverunittests SHARED
   ThreadingTests.cpp)
 
 target_link_libraries (ctaserverunittests)
+
+install(TARGETS ctaserverunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
diff --git a/tapeserver/castor/server/Semaphores.cpp b/tapeserver/castor/server/Semaphores.cpp
index 4ad79704b8..d75da972c7 100644
--- a/tapeserver/castor/server/Semaphores.cpp
+++ b/tapeserver/castor/server/Semaphores.cpp
@@ -106,7 +106,8 @@ castor::server::CondVarSemaphore::~CondVarSemaphore() {
       pthread_mutex_lock(&m_mutex);
       pthread_mutex_unlock(&m_mutex);
       /* Cleanup */
-      pthread_cond_destroy(&m_cond);
+      int rc=pthread_cond_destroy(&m_cond);
+      rc=rc;
       pthread_mutex_destroy(&m_mutex);
     }
 //------------------------------------------------------------------------------
diff --git a/tapeserver/castor/tape/reactor/CMakeLists.txt b/tapeserver/castor/tape/reactor/CMakeLists.txt
index 35e995351e..68b65765a9 100644
--- a/tapeserver/castor/tape/reactor/CMakeLists.txt
+++ b/tapeserver/castor/tape/reactor/CMakeLists.txt
@@ -38,10 +38,14 @@ add_library (ctatapereactorutils SHARED
   DummyPollReactor.cpp
   DummyZMQReactor.cpp)
 
+install(TARGETS ctatapereactorutils DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
+
 add_library (ctatapereactorunittests SHARED
   PollReactorImplTest.cpp
   ZMQReactorTest.cpp)
 
+install(TARGETS ctatapereactorunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
+
 target_link_libraries (ctatapereactorunittests
   ctatapereactor
   ctatapereactorutils)
diff --git a/tapeserver/castor/tape/tapeserver/SCSI/CMakeLists.txt b/tapeserver/castor/tape/tapeserver/SCSI/CMakeLists.txt
index 7320b7986c..7744792294 100644
--- a/tapeserver/castor/tape/tapeserver/SCSI/CMakeLists.txt
+++ b/tapeserver/castor/tape/tapeserver/SCSI/CMakeLists.txt
@@ -37,3 +37,5 @@ add_library(SCSI Device.cpp Structures.cpp Constants.cpp Exception.cpp)
 add_library(ctatapeserverscsiunittests SHARED
   DeviceTest.cpp
   StructuresTest.cpp)
+
+install(TARGETS ctatapeserverscsiunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
diff --git a/tapeserver/castor/tape/tapeserver/daemon/CMakeLists.txt b/tapeserver/castor/tape/tapeserver/daemon/CMakeLists.txt
index 8b2064bf20..1572dfc458 100644
--- a/tapeserver/castor/tape/tapeserver/daemon/CMakeLists.txt
+++ b/tapeserver/castor/tape/tapeserver/daemon/CMakeLists.txt
@@ -101,11 +101,13 @@ add_executable(cta-tapeserverd TapeDaemon.cpp)
 target_link_libraries(cta-tapeserverd ctaTapeServerDaemon SCSI System Utils 
   File TapeDrive ctacommon ctatapereactor ${LIBCAP_LIB} ${ZLIB_LIBRARIES} 
   ctamessages zmq ctaio ctautils ctaserverutils)
-install (TARGETS cta-tapeserverd DESTINATION usr/bin)
+#install (TARGETS cta-tapeserverd DESTINATION usr/bin)
 
 add_library(ctatapeserverdaemonutils SHARED
   ProcessForkerProxyDummy.cpp)
 
+install(TARGETS ctatapeserverdaemonutils DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
+
 add_library(ctatapeserverdaemonunittests SHARED
   CatalogueDriveStateTest.cpp
   CatalogueTest.cpp
@@ -129,3 +131,5 @@ target_link_libraries(ctatapeserverdaemonunittests
   ctaserverutils
   ctatapeserverdaemonutils)
   #ctaschedulerutils
+
+install(TARGETS ctatapeserverdaemonunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
diff --git a/tapeserver/castor/tape/tapeserver/drive/CMakeLists.txt b/tapeserver/castor/tape/tapeserver/drive/CMakeLists.txt
index 790f962451..10e04c4249 100644
--- a/tapeserver/castor/tape/tapeserver/drive/CMakeLists.txt
+++ b/tapeserver/castor/tape/tapeserver/drive/CMakeLists.txt
@@ -73,3 +73,5 @@ target_link_libraries(ctatapeserverdriveunittests
   System
   TapeDrive
   ctautils)
+
+install(TARGETS ctatapeserverdriveunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
diff --git a/tapeserver/castor/tape/tapeserver/file/CMakeLists.txt b/tapeserver/castor/tape/tapeserver/file/CMakeLists.txt
index cc9fddf859..f968eb00f4 100644
--- a/tapeserver/castor/tape/tapeserver/file/CMakeLists.txt
+++ b/tapeserver/castor/tape/tapeserver/file/CMakeLists.txt
@@ -59,3 +59,6 @@ add_library(ctatapeserverfileunittests SHARED
 
 target_link_libraries(ctatapeserverfileunittests
   File)
+
+install(TARGETS ctatapeserverfileunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
+
diff --git a/tapeserver/castor/tape/tapeserver/utils/CMakeLists.txt b/tapeserver/castor/tape/tapeserver/utils/CMakeLists.txt
index b2b2786070..8326f0c87a 100644
--- a/tapeserver/castor/tape/tapeserver/utils/CMakeLists.txt
+++ b/tapeserver/castor/tape/tapeserver/utils/CMakeLists.txt
@@ -27,3 +27,6 @@ add_library (ctatapeserverutilsunittests SHARED
 
 target_link_libraries (ctatapeserverutilsunittests
   Utils)
+
+install(TARGETS ctatapeserverutilsunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
+
diff --git a/tapeserver/castor/utils/CMakeLists.txt b/tapeserver/castor/utils/CMakeLists.txt
index 81ed0cd412..2e20482227 100644
--- a/tapeserver/castor/utils/CMakeLists.txt
+++ b/tapeserver/castor/utils/CMakeLists.txt
@@ -51,3 +51,5 @@ add_library (ctautilsunittests SHARED
   SmartArrayPtrTest.cpp
   SmartFdTest.cpp
   UtilsTest.cpp)
+
+install(TARGETS ctautilsunittests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
diff --git a/tapeserver/cta-tapedSystemtests.cpp b/tapeserver/cta-tapedSystemtests.cpp
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/tapeserver/cta-tapedSystemtests.cpp
@@ -0,0 +1 @@
+
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 523ff5d01e..27fbd0c8c4 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -17,11 +17,11 @@ cmake_minimum_required (VERSION 2.6)
 
 find_package(gmock REQUIRED)
 
-add_executable(unitTests
+add_executable(cta-unitTests
   unit_tests.cpp
   ${GMOCK_SRC})
 
-target_link_libraries(unitTests
+target_link_libraries(cta-unitTests
   ctacatalogueunittests
   ctaexceptionunittests
   ctaiounittests
@@ -57,14 +57,21 @@ target_link_libraries(systemTestHelperTests
   systemTestHelper
   ctacommon)
 
-add_executable(systemTests
+add_executable(cta-systemTests
   system_tests.cpp
   ${GMOCK_SRC})
 
-target_link_libraries(systemTests
+target_link_libraries(cta-systemTests
   systemTestHelper
   systemTestHelperTests
   gtest
   pthread)
 
+install(TARGETS cta-unitTests cta-systemTests DESTINATION usr/bin)
 
+install(TARGETS systemTestHelperTests DESTINATION usr/${CMAKE_INSTALL_LIBDIR})
+
+configure_file(cta-valgrindUnitTests.sh.in ${CMAKE_CURRENT_BINARY_DIR}/cta-valgrindUnitTests.sh)
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cta-valgrindUnitTests.sh DESTINATION usr/bin)
+install(FILES valgrind.suppr helgrind.suppr DESTINATION usr/share/cta-${CTA_VERSION}/unittest/)
diff --git a/tests/Subprocess.cpp b/tests/Subprocess.cpp
index 3b2851a037..00d9c9ce33 100644
--- a/tests/Subprocess.cpp
+++ b/tests/Subprocess.cpp
@@ -72,7 +72,8 @@ Subprocess::Subprocess(const std::string & executable, const std::list<std::stri
       }
       cargv[argv.size()] = NULL;
       cta::exception::Errnum::throwOnMinusOne(
-          execvp(executable.c_str(), cargv));
+          execvp(executable.c_str(), cargv),
+          "In Subprocess::Subprocess execv failed: ");
       // We should never get here.
       throw cta::exception::Exception(
           "In Subprocess::Subprocess execv failed without returning -1!");
@@ -81,7 +82,7 @@ Subprocess::Subprocess(const std::string & executable, const std::list<std::stri
       exit(EXIT_FAILURE);
     }
   }
-  }
+}
 
 void Subprocess::kill(int signal) {
   ::kill(m_child, signal);
@@ -128,4 +129,4 @@ Subprocess::~Subprocess() {
 }
 
 
-}
\ No newline at end of file
+} // namespace systemTests
\ No newline at end of file
diff --git a/tests/SubprocessSystemTests.cpp b/tests/SubprocessSystemTests.cpp
index 6c1cb26f28..77916e6c37 100644
--- a/tests/SubprocessSystemTests.cpp
+++ b/tests/SubprocessSystemTests.cpp
@@ -32,5 +32,10 @@ TEST(SuprocessHelper, basicTests) {
   ASSERT_EQ("", sp2.stdout());
   ASSERT_NE(std::string::npos, sp2.stderr().find("/no/such/file"));
   ASSERT_EQ(1, sp2.exitValue());
+  Subprocess sp3("/no/such/file", std::list<std::string>({"/no/such/file"}));
+  sp3.wait();
+  ASSERT_EQ("", sp3.stdout());
+  ASSERT_NE(std::string::npos, sp3.stderr().find("In Subprocess::Subprocess execv failed"));
+  ASSERT_EQ(1, sp3.exitValue());
 }
 }
\ No newline at end of file
diff --git a/tests/cta-valgrindUnitTests.sh.in b/tests/cta-valgrindUnitTests.sh.in
new file mode 100644
index 0000000000..64f644db47
--- /dev/null
+++ b/tests/cta-valgrindUnitTests.sh.in
@@ -0,0 +1,12 @@
+#!/bin/bash
+# exit from the script on any error.
+set -e
+/usr/bin/cta-unitTests --gtest_color=yes
+
+valgrind --track-fds=yes --leak-check=full --demangle=yes --gen-suppressions=all --show-reachable=yes \
+  --error-exitcode=1 --suppressions=/usr/share/cta-@CTA_VERSION@/unittest/valgrind.suppr              \
+  /usr/bin/cta-unitTests --gtest_color=yes 
+
+valgrind --tool=helgrind -v --demangle=yes --gen-suppressions=all --conflict-cache-size=30000000      \
+  --error-exitcode=1 --suppressions=/usr/share/cta-@CTA_VERSION@/unittest/helgrind.suppr              \
+  /usr/bin/cta-unitTests --gtest_color=yes
diff --git a/tests/helgrind.suppr b/tests/helgrind.suppr
new file mode 100644
index 0000000000..e38e428bb9
--- /dev/null
+++ b/tests/helgrind.suppr
@@ -0,0 +1,99 @@
+{
+   liblttnq1
+   Helgrind:Race
+   fun:lttng_ust_init
+   obj:/usr/lib64/liblttng-ust.so.0.0.0
+   obj:/usr/lib64/liblttng-ust.so.0.0.0
+}
+
+{
+   pthread_tests1
+   Helgrind:Misc
+   fun:pthread_mutex_*
+   ...
+   fun:*unitTests*castor_tape_threading*
+   fun:_ZN7testing4Test3RunEv
+   fun:_ZN7testing8internal12TestInfoImpl3RunEv
+   fun:_ZN7testing8TestCase3RunEv
+   fun:_ZN7testing8internal12UnitTestImpl11RunAllTestsEv
+   fun:main
+}
+
+{
+   pthread_tests2
+   Helgrind:UnlockUnlocked
+   fun:pthread_mutex_*
+   ...
+   fun:*unitTests*castor_tape_threading*
+   fun:_ZN7testing4Test3RunEv
+   fun:_ZN7testing8internal12TestInfoImpl3RunEv
+   fun:_ZN7testing8TestCase3RunEv
+   fun:_ZN7testing8internal12UnitTestImpl11RunAllTestsEv
+   fun:main
+}
+
+{
+   pthread_tests3
+   Helgrind:PthAPIerror
+   fun:pthread_mutex_*
+   ...
+   fun:*unitTests*castor_tape_threading*
+   fun:_ZN7testing4Test3RunEv
+   fun:_ZN7testing8internal12TestInfoImpl3RunEv
+   fun:_ZN7testing8TestCase3RunEv
+   fun:_ZN7testing8internal12UnitTestImpl11RunAllTestsEv
+   fun:main
+}
+
+{
+   pthread_tests4
+   Helgrind:Misc
+   fun:pthread_mutex_*
+   ...
+   fun:*unitTests*castor_messages_Mutex*
+   fun:_ZN7testing4Test3RunEv
+   fun:_ZN7testing8internal12TestInfoImpl3RunEv
+   fun:_ZN7testing8TestCase3RunEv
+   fun:_ZN7testing8internal12UnitTestImpl11RunAllTestsEv
+   fun:main
+}
+
+{
+   pthread_tests5
+   Helgrind:PthAPIerror
+   fun:pthread_mutex_*
+   ...
+   fun:*unitTests*castor_messages_Mutex*
+   fun:_ZN7testing4Test3RunEv
+   fun:_ZN7testing8internal12TestInfoImpl3RunEv
+   fun:_ZN7testing8TestCase3RunEv
+   fun:_ZN7testing8internal12UnitTestImpl11RunAllTestsEv
+   fun:main
+}
+
+{
+   pthread_tests6
+   Helgrind:UnlockUnlocked
+   fun:pthread_mutex_*
+   ...
+   fun:*unitTests*castor_messages_Mutex*
+   fun:_ZN7testing4Test3RunEv
+   fun:_ZN7testing8internal12TestInfoImpl3RunEv
+   fun:_ZN7testing8TestCase3RunEv
+   fun:_ZN7testing8internal12UnitTestImpl11RunAllTestsEv
+   fun:main
+}
+
+{
+   pthread_test7
+   Helgrind:Misc
+   fun:pthread_cond_*
+   ...
+   fun:_ZN9unitTests*castor_tape_threading_*
+   fun:_ZN7testing4Test3RunEv
+   fun:_ZN7testing8internal12TestInfoImpl3RunEv
+   fun:_ZN7testing8TestCase3RunEv
+   fun:_ZN7testing8internal12UnitTestImpl11RunAllTestsEv
+   fun:main
+}
+
-- 
GitLab