mirror of
https://git.wownero.com/wownero/wownero.git
synced 2024-08-15 01:03:23 +00:00
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:
parent
cade0da8f1
commit
43477b7dac
6 changed files with 247 additions and 193 deletions
|
@ -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]));
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue