aboutsummaryrefslogtreecommitdiff
path: root/tests/unit_tests/BlockchainDB.cpp
diff options
context:
space:
mode:
authorThomas Winget <tewinget@gmail.com>2015-03-16 09:14:51 -0400
committerThomas Winget <tewinget@gmail.com>2015-03-16 09:14:51 -0400
commit43477b7dac861a83ade364ebb5a5c3da8228b3e4 (patch)
tree8ac746edc7275924353fc8ffbe1556d615b2ccfe /tests/unit_tests/BlockchainDB.cpp
parentCMake wiring, minor cleanup, minor test addition (diff)
downloadmonero-43477b7dac861a83ade364ebb5a5c3da8228b3e4.tar.xz
BerkeleyDB Blockchain building, not working yet
Everything except actually *using* BlockchainBDB is wired up, but the db itself is not yet working. Some error about user mem not large enough. I think I know what this error means, but I can't determine the cause. Notes: BerkeleyDB does not allow 0-indexing in its recno type databases, so block numbers *in the database* will be 1-indexed. Modifications to indexing have been made as needed.
Diffstat (limited to 'tests/unit_tests/BlockchainDB.cpp')
-rw-r--r--tests/unit_tests/BlockchainDB.cpp28
1 files changed, 23 insertions, 5 deletions
diff --git a/tests/unit_tests/BlockchainDB.cpp b/tests/unit_tests/BlockchainDB.cpp
index bbe8582f9..b6e311daf 100644
--- a/tests/unit_tests/BlockchainDB.cpp
+++ b/tests/unit_tests/BlockchainDB.cpp
@@ -30,6 +30,8 @@
#include <boost/algorithm/string/predicate.hpp>
#include <cstdio>
#include <iostream>
+#include <chrono>
+#include <thread>
#include "gtest/gtest.h"
@@ -88,6 +90,7 @@ bool compare_blocks(const block& a, const block& b)
return hash_a == hash_b;
}
+/*
void print_block(const block& blk, const std::string& prefix = "")
{
std::cerr << prefix << ": " << std::endl
@@ -106,6 +109,7 @@ bool compare_txs(const transaction& a, const transaction& b)
return ab == bb;
}
+*/
// convert hex string to string that has values based on that hex
// thankfully should automatically ignore null-terminator.
@@ -173,20 +177,29 @@ protected:
}
~BlockchainDBTest() {
- auto files = m_db->get_filenames();
delete m_db;
- remove_files(files);
+ remove_files();
}
BlockchainDB* m_db;
std::string m_prefix;
std::vector<block> m_blocks;
std::vector<std::vector<transaction> > m_txs;
+ std::vector<std::string> m_filenames;
- void remove_files(const std::vector<std::string>& files)
+ void get_filenames()
+ {
+ m_filenames = m_db->get_filenames();
+ for (auto& f : m_filenames)
+ {
+ std::cerr << "File created by test: " << f << std::endl;
+ }
+ }
+
+ void remove_files()
{
// remove each file the db created, making sure it starts with fname.
- for (auto& f : files)
+ for (auto& f : m_filenames)
{
if (boost::starts_with(f, m_prefix))
{
@@ -199,7 +212,7 @@ protected:
}
// remove directory if it still exists
- boost::filesystem::remove(m_prefix);
+ boost::filesystem::remove_all(m_prefix);
}
void set_prefix(const std::string& prefix)
@@ -222,6 +235,7 @@ TYPED_TEST(BlockchainDBTest, OpenAndClose)
// make sure open does not throw
ASSERT_NO_THROW(this->m_db->open(fname));
+ this->get_filenames();
// make sure open when already open DOES throw
ASSERT_THROW(this->m_db->open(fname), DB_OPEN_FAILURE);
@@ -232,9 +246,11 @@ TYPED_TEST(BlockchainDBTest, OpenAndClose)
TYPED_TEST(BlockchainDBTest, AddBlock)
{
std::string fname(tmpnam(NULL));
+ this->set_prefix(fname);
// make sure open does not throw
ASSERT_NO_THROW(this->m_db->open(fname));
+ this->get_filenames();
// adding a block with no parent in the blockchain should throw.
// note: this shouldn't be possible, but is a good (and cheap) failsafe.
@@ -273,9 +289,11 @@ TYPED_TEST(BlockchainDBTest, AddBlock)
TYPED_TEST(BlockchainDBTest, RetrieveBlockData)
{
std::string fname(tmpnam(NULL));
+ this->set_prefix(fname);
// make sure open does not throw
ASSERT_NO_THROW(this->m_db->open(fname));
+ this->get_filenames();
ASSERT_NO_THROW(this->m_db->add_block(this->m_blocks[0], t_sizes[0], t_diffs[0], t_coins[0], this->m_txs[0]));