Check if running within valgrind before doing death tests (#2145)

This commit is contained in:
Wesley Shillingford 2019-07-12 12:23:32 +01:00 committed by GitHub
commit 243fa1c988
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 7 deletions

View file

@ -1,3 +1,4 @@
#include <nano/lib/config.hpp>
#include <nano/lib/numbers.hpp> #include <nano/lib/numbers.hpp>
#include <gtest/gtest.h> #include <gtest/gtest.h>
@ -27,8 +28,12 @@ TEST (difficulty, multipliers)
uint64_t difficulty_nil = 0; uint64_t difficulty_nil = 0;
double multiplier_nil = 0.; double multiplier_nil = 0.;
#ifndef NDEBUG #ifndef NDEBUG
// Causes valgrind to be noisy
if (!nano::running_within_valgrind ())
{
ASSERT_DEATH_IF_SUPPORTED (nano::difficulty::to_multiplier (difficulty_nil, base), ""); ASSERT_DEATH_IF_SUPPORTED (nano::difficulty::to_multiplier (difficulty_nil, base), "");
ASSERT_DEATH_IF_SUPPORTED (nano::difficulty::from_multiplier (multiplier_nil, base), ""); ASSERT_DEATH_IF_SUPPORTED (nano::difficulty::from_multiplier (multiplier_nil, base), "");
}
#endif #endif
} }
} }

View file

@ -1,9 +1,16 @@
#include <nano/lib/config.hpp> #include <nano/lib/config.hpp>
#include <valgrind/valgrind.h>
namespace nano namespace nano
{ {
void force_nano_test_network () void force_nano_test_network ()
{ {
nano::network_constants::set_active_network (nano::nano_networks::nano_test_network); nano::network_constants::set_active_network (nano::nano_networks::nano_test_network);
} }
bool running_within_valgrind ()
{
return (RUNNING_ON_VALGRIND > 0);
}
} }

View file

@ -156,4 +156,7 @@ inline boost::filesystem::path get_rpc_config_path (boost::filesystem::path cons
/** Called by gtest_main to enforce test network */ /** Called by gtest_main to enforce test network */
void force_nano_test_network (); void force_nano_test_network ();
/** Checks if we are running inside a valgrind instance */
bool running_within_valgrind ();
} }

View file

@ -9,8 +9,6 @@
#include <queue> #include <queue>
#include <valgrind/valgrind.h>
nano::mdb_env::mdb_env (bool & error_a, boost::filesystem::path const & path_a, int max_dbs_a, bool use_no_mem_init_a, size_t map_size_a) nano::mdb_env::mdb_env (bool & error_a, boost::filesystem::path const & path_a, int max_dbs_a, bool use_no_mem_init_a, size_t map_size_a)
{ {
boost::system::error_code error_mkdir, error_chmod; boost::system::error_code error_mkdir, error_chmod;
@ -24,10 +22,9 @@ nano::mdb_env::mdb_env (bool & error_a, boost::filesystem::path const & path_a,
release_assert (status1 == 0); release_assert (status1 == 0);
auto status2 (mdb_env_set_maxdbs (environment, max_dbs_a)); auto status2 (mdb_env_set_maxdbs (environment, max_dbs_a));
release_assert (status2 == 0); release_assert (status2 == 0);
auto running_within_valgrind = (RUNNING_ON_VALGRIND > 0);
auto map_size = map_size_a; auto map_size = map_size_a;
auto max_valgrind_map_size = 16 * 1024 * 1024; auto max_valgrind_map_size = 16 * 1024 * 1024;
if (running_within_valgrind && map_size_a > max_valgrind_map_size) if (running_within_valgrind () && map_size_a > max_valgrind_map_size)
{ {
// In order to run LMDB under Valgrind, the maximum map size must be smaller than half your available RAM // In order to run LMDB under Valgrind, the maximum map size must be smaller than half your available RAM
map_size = max_valgrind_map_size; map_size = max_valgrind_map_size;
@ -39,7 +36,7 @@ nano::mdb_env::mdb_env (bool & error_a, boost::filesystem::path const & path_a,
// MDB_NORDAHEAD will allow platforms that support it to load the DB in memory as needed. // MDB_NORDAHEAD will allow platforms that support it to load the DB in memory as needed.
// MDB_NOMEMINIT prevents zeroing malloc'ed pages. Can provide improvement for non-sensitive data but may make memory checkers noisy (e.g valgrind). // MDB_NOMEMINIT prevents zeroing malloc'ed pages. Can provide improvement for non-sensitive data but may make memory checkers noisy (e.g valgrind).
auto environment_flags = MDB_NOSUBDIR | MDB_NOTLS | MDB_NORDAHEAD; auto environment_flags = MDB_NOSUBDIR | MDB_NOTLS | MDB_NORDAHEAD;
if (!running_within_valgrind && use_no_mem_init_a) if (!running_within_valgrind () && use_no_mem_init_a)
{ {
environment_flags |= MDB_NOMEMINIT; environment_flags |= MDB_NOMEMINIT;
} }