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.
This commit is contained in:
@@ -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]));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user