Use common SetDataDir method to create temp directory in tests.
This commit is contained in:
parent
43ae5ee9e4
commit
075429a482
5 changed files with 42 additions and 29 deletions
|
@ -27,7 +27,7 @@ BOOST_AUTO_TEST_CASE(dbwrapper)
|
||||||
{
|
{
|
||||||
// Perform tests both obfuscated and non-obfuscated.
|
// Perform tests both obfuscated and non-obfuscated.
|
||||||
for (bool obfuscate : {false, true}) {
|
for (bool obfuscate : {false, true}) {
|
||||||
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
fs::path ph = SetDataDir(std::string("dbwrapper").append(obfuscate ? "_true" : "_false"));
|
||||||
CDBWrapper dbw(ph, (1 << 20), true, false, obfuscate);
|
CDBWrapper dbw(ph, (1 << 20), true, false, obfuscate);
|
||||||
char key = 'k';
|
char key = 'k';
|
||||||
uint256 in = InsecureRand256();
|
uint256 in = InsecureRand256();
|
||||||
|
@ -47,7 +47,7 @@ BOOST_AUTO_TEST_CASE(dbwrapper_batch)
|
||||||
{
|
{
|
||||||
// Perform tests both obfuscated and non-obfuscated.
|
// Perform tests both obfuscated and non-obfuscated.
|
||||||
for (bool obfuscate : {false, true}) {
|
for (bool obfuscate : {false, true}) {
|
||||||
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
fs::path ph = SetDataDir(std::string("dbwrapper_batch").append(obfuscate ? "_true" : "_false"));
|
||||||
CDBWrapper dbw(ph, (1 << 20), true, false, obfuscate);
|
CDBWrapper dbw(ph, (1 << 20), true, false, obfuscate);
|
||||||
|
|
||||||
char key = 'i';
|
char key = 'i';
|
||||||
|
@ -83,7 +83,7 @@ BOOST_AUTO_TEST_CASE(dbwrapper_iterator)
|
||||||
{
|
{
|
||||||
// Perform tests both obfuscated and non-obfuscated.
|
// Perform tests both obfuscated and non-obfuscated.
|
||||||
for (bool obfuscate : {false, true}) {
|
for (bool obfuscate : {false, true}) {
|
||||||
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
fs::path ph = SetDataDir(std::string("dbwrapper_iterator").append(obfuscate ? "_true" : "_false"));
|
||||||
CDBWrapper dbw(ph, (1 << 20), true, false, obfuscate);
|
CDBWrapper dbw(ph, (1 << 20), true, false, obfuscate);
|
||||||
|
|
||||||
// The two keys are intentionally chosen for ordering
|
// The two keys are intentionally chosen for ordering
|
||||||
|
@ -123,7 +123,7 @@ BOOST_AUTO_TEST_CASE(dbwrapper_iterator)
|
||||||
BOOST_AUTO_TEST_CASE(existing_data_no_obfuscate)
|
BOOST_AUTO_TEST_CASE(existing_data_no_obfuscate)
|
||||||
{
|
{
|
||||||
// We're going to share this fs::path between two wrappers
|
// We're going to share this fs::path between two wrappers
|
||||||
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
fs::path ph = SetDataDir("existing_data_no_obfuscate");
|
||||||
create_directories(ph);
|
create_directories(ph);
|
||||||
|
|
||||||
// Set up a non-obfuscated wrapper to write some initial data.
|
// Set up a non-obfuscated wrapper to write some initial data.
|
||||||
|
@ -164,7 +164,7 @@ BOOST_AUTO_TEST_CASE(existing_data_no_obfuscate)
|
||||||
BOOST_AUTO_TEST_CASE(existing_data_reindex)
|
BOOST_AUTO_TEST_CASE(existing_data_reindex)
|
||||||
{
|
{
|
||||||
// We're going to share this fs::path between two wrappers
|
// We're going to share this fs::path between two wrappers
|
||||||
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
fs::path ph = SetDataDir("existing_data_reindex");
|
||||||
create_directories(ph);
|
create_directories(ph);
|
||||||
|
|
||||||
// Set up a non-obfuscated wrapper to write some initial data.
|
// Set up a non-obfuscated wrapper to write some initial data.
|
||||||
|
@ -199,7 +199,7 @@ BOOST_AUTO_TEST_CASE(existing_data_reindex)
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(iterator_ordering)
|
BOOST_AUTO_TEST_CASE(iterator_ordering)
|
||||||
{
|
{
|
||||||
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
fs::path ph = SetDataDir("iterator_ordering");
|
||||||
CDBWrapper dbw(ph, (1 << 20), true, false, false);
|
CDBWrapper dbw(ph, (1 << 20), true, false, false);
|
||||||
for (int x=0x00; x<256; ++x) {
|
for (int x=0x00; x<256; ++x) {
|
||||||
uint8_t key = x;
|
uint8_t key = x;
|
||||||
|
@ -277,7 +277,7 @@ BOOST_AUTO_TEST_CASE(iterator_string_ordering)
|
||||||
{
|
{
|
||||||
char buf[10];
|
char buf[10];
|
||||||
|
|
||||||
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
fs::path ph = SetDataDir("iterator_string_ordering");
|
||||||
CDBWrapper dbw(ph, (1 << 20), true, false, false);
|
CDBWrapper dbw(ph, (1 << 20), true, false, false);
|
||||||
for (int x=0x00; x<10; ++x) {
|
for (int x=0x00; x<10; ++x) {
|
||||||
for (int y = 0; y < 10; y++) {
|
for (int y = 0; y < 10; y++) {
|
||||||
|
|
|
@ -46,6 +46,7 @@ std::ostream& operator<<(std::ostream& os, const uint256& num)
|
||||||
}
|
}
|
||||||
|
|
||||||
BasicTestingSetup::BasicTestingSetup(const std::string& chainName)
|
BasicTestingSetup::BasicTestingSetup(const std::string& chainName)
|
||||||
|
: m_path_root(fs::temp_directory_path() / "test_bitcoin" / strprintf("%lu_%i", (unsigned long)GetTime(), (int)(InsecureRandRange(1 << 30))))
|
||||||
{
|
{
|
||||||
SHA256AutoDetect();
|
SHA256AutoDetect();
|
||||||
RandomInit();
|
RandomInit();
|
||||||
|
@ -61,20 +62,27 @@ BasicTestingSetup::BasicTestingSetup(const std::string& chainName)
|
||||||
|
|
||||||
BasicTestingSetup::~BasicTestingSetup()
|
BasicTestingSetup::~BasicTestingSetup()
|
||||||
{
|
{
|
||||||
|
fs::remove_all(m_path_root);
|
||||||
ECC_Stop();
|
ECC_Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fs::path BasicTestingSetup::SetDataDir(const std::string& name)
|
||||||
|
{
|
||||||
|
fs::path ret = m_path_root / name;
|
||||||
|
fs::create_directories(ret);
|
||||||
|
gArgs.ForceSetArg("-datadir", ret.string());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
TestingSetup::TestingSetup(const std::string& chainName) : BasicTestingSetup(chainName)
|
TestingSetup::TestingSetup(const std::string& chainName) : BasicTestingSetup(chainName)
|
||||||
{
|
{
|
||||||
|
SetDataDir("tempdir");
|
||||||
const CChainParams& chainparams = Params();
|
const CChainParams& chainparams = Params();
|
||||||
// Ideally we'd move all the RPC tests to the functional testing framework
|
// Ideally we'd move all the RPC tests to the functional testing framework
|
||||||
// instead of unit tests, but for now we need these here.
|
// instead of unit tests, but for now we need these here.
|
||||||
|
|
||||||
RegisterAllCoreRPCCommands(tableRPC);
|
RegisterAllCoreRPCCommands(tableRPC);
|
||||||
ClearDatadirCache();
|
ClearDatadirCache();
|
||||||
pathTemp = fs::temp_directory_path() / strprintf("test_bitcoin_%lu_%i", (unsigned long)GetTime(), (int)(InsecureRandRange(1 << 30)));
|
|
||||||
fs::create_directories(pathTemp);
|
|
||||||
gArgs.ForceSetArg("-datadir", pathTemp.string());
|
|
||||||
|
|
||||||
// We have to run a scheduler thread to prevent ActivateBestChain
|
// We have to run a scheduler thread to prevent ActivateBestChain
|
||||||
// from blocking due to queue overrun.
|
// from blocking due to queue overrun.
|
||||||
|
@ -114,7 +122,6 @@ TestingSetup::~TestingSetup()
|
||||||
pcoinsTip.reset();
|
pcoinsTip.reset();
|
||||||
pcoinsdbview.reset();
|
pcoinsdbview.reset();
|
||||||
pblocktree.reset();
|
pblocktree.reset();
|
||||||
fs::remove_all(pathTemp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TestChain100Setup::TestChain100Setup() : TestingSetup(CBaseChainParams::REGTEST)
|
TestChain100Setup::TestChain100Setup() : TestingSetup(CBaseChainParams::REGTEST)
|
||||||
|
|
|
@ -45,6 +45,11 @@ struct BasicTestingSetup {
|
||||||
|
|
||||||
explicit BasicTestingSetup(const std::string& chainName = CBaseChainParams::MAIN);
|
explicit BasicTestingSetup(const std::string& chainName = CBaseChainParams::MAIN);
|
||||||
~BasicTestingSetup();
|
~BasicTestingSetup();
|
||||||
|
|
||||||
|
fs::path SetDataDir(const std::string& name);
|
||||||
|
|
||||||
|
private:
|
||||||
|
const fs::path m_path_root;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Testing setup that configures a complete environment.
|
/** Testing setup that configures a complete environment.
|
||||||
|
@ -59,7 +64,6 @@ struct CConnmanTest {
|
||||||
|
|
||||||
class PeerLogicValidation;
|
class PeerLogicValidation;
|
||||||
struct TestingSetup: public BasicTestingSetup {
|
struct TestingSetup: public BasicTestingSetup {
|
||||||
fs::path pathTemp;
|
|
||||||
boost::thread_group threadGroup;
|
boost::thread_group threadGroup;
|
||||||
CConnman* connman;
|
CConnman* connman;
|
||||||
CScheduler scheduler;
|
CScheduler scheduler;
|
||||||
|
|
|
@ -1100,7 +1100,7 @@ static void TestOtherProcess(fs::path dirname, std::string lockname, int fd)
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(test_LockDirectory)
|
BOOST_AUTO_TEST_CASE(test_LockDirectory)
|
||||||
{
|
{
|
||||||
fs::path dirname = fs::temp_directory_path() / fs::unique_path();
|
fs::path dirname = SetDataDir("test_LockDirectory") / fs::unique_path();
|
||||||
const std::string lockname = ".lock";
|
const std::string lockname = ".lock";
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
// Revert SIGCHLD to default, otherwise boost.test will catch and fail on
|
// Revert SIGCHLD to default, otherwise boost.test will catch and fail on
|
||||||
|
@ -1188,12 +1188,12 @@ BOOST_AUTO_TEST_CASE(test_LockDirectory)
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(test_DirIsWritable)
|
BOOST_AUTO_TEST_CASE(test_DirIsWritable)
|
||||||
{
|
{
|
||||||
// Should be able to write to the system tmp dir.
|
// Should be able to write to the data dir.
|
||||||
fs::path tmpdirname = fs::temp_directory_path();
|
fs::path tmpdirname = SetDataDir("test_DirIsWritable");
|
||||||
BOOST_CHECK_EQUAL(DirIsWritable(tmpdirname), true);
|
BOOST_CHECK_EQUAL(DirIsWritable(tmpdirname), true);
|
||||||
|
|
||||||
// Should not be able to write to a non-existent dir.
|
// Should not be able to write to a non-existent dir.
|
||||||
tmpdirname = fs::temp_directory_path() / fs::unique_path();
|
tmpdirname = tmpdirname / fs::unique_path();
|
||||||
BOOST_CHECK_EQUAL(DirIsWritable(tmpdirname), false);
|
BOOST_CHECK_EQUAL(DirIsWritable(tmpdirname), false);
|
||||||
|
|
||||||
fs::create_directory(tmpdirname);
|
fs::create_directory(tmpdirname);
|
||||||
|
|
|
@ -130,6 +130,8 @@ BOOST_FIXTURE_TEST_CASE(importwallet_rescan, TestChain100Setup)
|
||||||
|
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
|
|
||||||
|
std::string backup_file = (SetDataDir("importwallet_rescan") / "wallet.backup").string();
|
||||||
|
|
||||||
// Import key into wallet and call dumpwallet to create backup file.
|
// Import key into wallet and call dumpwallet to create backup file.
|
||||||
{
|
{
|
||||||
std::shared_ptr<CWallet> wallet = std::make_shared<CWallet>("dummy", WalletDatabase::CreateDummy());
|
std::shared_ptr<CWallet> wallet = std::make_shared<CWallet>("dummy", WalletDatabase::CreateDummy());
|
||||||
|
@ -139,7 +141,7 @@ BOOST_FIXTURE_TEST_CASE(importwallet_rescan, TestChain100Setup)
|
||||||
|
|
||||||
JSONRPCRequest request;
|
JSONRPCRequest request;
|
||||||
request.params.setArray();
|
request.params.setArray();
|
||||||
request.params.push_back((pathTemp / "wallet.backup").string());
|
request.params.push_back(backup_file);
|
||||||
AddWallet(wallet);
|
AddWallet(wallet);
|
||||||
::dumpwallet(request);
|
::dumpwallet(request);
|
||||||
RemoveWallet(wallet);
|
RemoveWallet(wallet);
|
||||||
|
@ -152,7 +154,7 @@ BOOST_FIXTURE_TEST_CASE(importwallet_rescan, TestChain100Setup)
|
||||||
|
|
||||||
JSONRPCRequest request;
|
JSONRPCRequest request;
|
||||||
request.params.setArray();
|
request.params.setArray();
|
||||||
request.params.push_back((pathTemp / "wallet.backup").string());
|
request.params.push_back(backup_file);
|
||||||
AddWallet(wallet);
|
AddWallet(wallet);
|
||||||
::importwallet(request);
|
::importwallet(request);
|
||||||
RemoveWallet(wallet);
|
RemoveWallet(wallet);
|
||||||
|
|
Loading…
Reference in a new issue