Skip to content
Snippets Groups Projects
Commit 10210ba4 authored by Sergey Yakubov's avatar Sergey Yakubov
Browse files

get rid of memory leaks

parent 77d96dac
No related branches found
No related tags found
No related merge requests found
......@@ -17,7 +17,7 @@ if (( coverage < HIDRA2_MINIMUM_COVERAGE )); then
echo
echo "*****"
echo
echo $TARGET coverage is ${coverage}% - less than required ${HIDRA2_MINIMUM_COVERAGE}%
echo ${TARGET} coverage is ${coverage}% - less than required ${HIDRA2_MINIMUM_COVERAGE}%
echo
echo "*****"
echo
......
......@@ -33,16 +33,31 @@ function(gtest target test_source_files test_libraries)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} PARENT_SCOPE)
endif ()
if (MEMORYCHECK_COMMAND)
set(memcheck_args ${MEMORYCHECK_COMMAND_OPTIONS})
separate_arguments(memcheck_args)
add_test(NAME memcheck-${target} COMMAND ${MEMORYCHECK_COMMAND} ${memcheck_args}
${CMAKE_CURRENT_BINARY_DIR}/test-${target})
set_tests_properties(memcheck-${target} PROPERTIES LABELS "memcheck;all")
endif()
add_memory_test(${target} test-${target} "" "" "unit")
endif ()
endfunction()
function(add_memory_test target executable commandargs fixture label)
if (MEMORYCHECK_COMMAND)
set(memcheck_args ${MEMORYCHECK_COMMAND_OPTIONS})
separate_arguments(memcheck_args)
set( args ${commandargs} )
separate_arguments(args)
add_test(NAME memcheck-${target} COMMAND ${MEMORYCHECK_COMMAND} ${memcheck_args}
${CMAKE_CURRENT_BINARY_DIR}/${executable} ${args})
set_tests_properties(memcheck-${target} PROPERTIES
LABELS "memcheck_${label};all"
DEPENDS test-${target}
)
if (NOT ${fixture} STREQUAL "")
set_tests_properties(memcheck-${target} PROPERTIES
FIXTURES_REQUIRED ${fixture}
)
endif()
endif()
endfunction()
function(add_test_setup_cleanup exename)
if (BUILD_TESTS)
......@@ -62,5 +77,8 @@ function(add_integration_test exename testname commandargs)
LABELS "integration;all"
FIXTURES_REQUIRED test-${exename}-fixture
)
add_memory_test(${exename}-${testname} ${exename}
"${commandargs}" test-${exename}-fixture
"integration")
endif ()
endfunction()
......@@ -40,7 +40,7 @@ bool IsDirectory(const struct dirent* entity) {
system_clock::time_point GetTimePointFromFile(const string& fname, IOErrors* err) {
struct stat t_stat;
struct stat t_stat{};
int res = stat(fname.c_str(), &t_stat);
if (res < 0) {
*err = IOErrorFromErrno();
......
......@@ -8,7 +8,7 @@ using hidra2::IOErrors;
void M_AssertEq(const std::string& expected, const std::string& got) {
if (expected.compare(got) != 0) {
if (expected != got) {
std::cerr << "Assert failed:\n"
<< "Expected:\t'" << expected << "'\n"
<< "Obtained:\t'" << got << "'\n";
......@@ -40,6 +40,9 @@ int main(int argc, char* argv[]) {
case IOErrors::PERMISSIONS_DENIED:
result = "noaccess";
break;
default:
result = "";
break;
}
M_AssertEq(expect, result);
......
......@@ -18,6 +18,7 @@ enum class WorkerErrorCode {
class DataBroker {
public:
virtual WorkerErrorCode Connect() = 0;
virtual ~DataBroker() = default; // needed for unique_ptr to delete itself
};
class DataBrokerFactory {
......
......@@ -13,7 +13,7 @@ std::unique_ptr<DataBroker> DataBrokerFactory::Create(const std::string& source_
std::unique_ptr<DataBroker> p = nullptr;
try {
p = (std::unique_ptr<DataBroker>) new FolderDataBroker(source_name);
p.reset(new FolderDataBroker(source_name));
*return_code = WorkerErrorCode::ERR__NO_ERROR;
} catch (...) { // we do not test this part
*return_code = WorkerErrorCode::ERR__MEMORY_ERROR;
......
......@@ -15,6 +15,7 @@ class FolderDataBroker final : public hidra2::DataBroker {
explicit FolderDataBroker(const std::string& source_name);
WorkerErrorCode Connect() override;
std::unique_ptr<hidra2::IO> io__; // modified in testings to mock system calls,otherwise do not touch
private:
std::string base_path_;
std::vector<FileInfo> filelist_;
......
......@@ -21,7 +21,8 @@ namespace {
TEST(FolderDataBroker, SetCorrectIO) {
auto data_broker = new FolderDataBroker("test");
ASSERT_THAT(dynamic_cast<hidra2::SystemIO*>(data_broker->io__.release()), Ne(nullptr));
ASSERT_THAT(dynamic_cast<hidra2::SystemIO*>(data_broker->io__.get()), Ne(nullptr));
delete data_broker;
}
......
......@@ -20,7 +20,7 @@ TEST(DataBrokerFactoryTests, CreateFolderDataSource) {
auto data_broker = DataBrokerFactory::Create("path/to/file", &return_code);
ASSERT_THAT(return_code, Eq(WorkerErrorCode::ERR__NO_ERROR));
ASSERT_THAT(dynamic_cast<FolderDataBroker*>(data_broker.release()), Ne(nullptr));
ASSERT_THAT(dynamic_cast<FolderDataBroker*>(data_broker.get()), Ne(nullptr));
}
TEST(DataBrokerFactoryTests, FailCreateDataSourceWithEmptySource) {
......
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