Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CYB-416 Added test for fullnodes over fullnodes #19

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 21 additions & 4 deletions simulator/include/simulator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
using namespace std;
using namespace fc::crypto;

enum class node_type {BP, FN};

static ostream& operator<<(ostream& os, const block_id_type& block) {
os << block.str().substr(16, 4);
return os;
Expand Down Expand Up @@ -217,9 +219,14 @@ class TestRunner {
delay_matrix[i][j] = delay_matrix[j][i] = delay;
}
}
assert(delay_matrix.size() == nodetypes.size());
count_dist_matrix();
}

void load_nodetypes(const vector<node_type>& tnodes) {
nodetypes = tnodes;
}

void load_graph_from_file(const char* filename) {
int instances;
int from, to, delay;
Expand Down Expand Up @@ -276,12 +283,19 @@ class TestRunner {
}

vector<int> get_ordering() {
vector<int> permutation(get_instances());
iota(permutation.begin(), permutation.end(), 0);
vector<int> permutation(get_bp_list());
random_shuffle(permutation.begin(), permutation.end(), [](size_t n) { return rand() % n; });
return permutation;
}

vector<int> get_bp_list() {
vector<int> bp_list;
for(int i = 0; i<nodetypes.size(); ++i)
if(nodetypes[i] == node_type::BP)
bp_list.push_back(i);
return bp_list;
}

void add_schedule_task(uint32_t at) {
Task task{RUNNER_ID, RUNNER_ID, at,
[&](NodePtr n) { schedule_producers(); }
Expand Down Expand Up @@ -335,7 +349,7 @@ class TestRunner {
}
cout << "]" << endl;
auto now = clock.now();
auto instances = get_instances();
int instances = ordering.size();

for (int i = 0; i < instances; i++) {
schedule_producer(now + i * get_slot_ms(), ordering[i]);
Expand Down Expand Up @@ -403,7 +417,8 @@ class TestRunner {
void run() {
init_nodes<TNode>(get_instances());
init_connections();
add_schedule_task(schedule_time);
if (get_bp_list().size() != 0)
add_schedule_task(schedule_time);
run_loop();
}

Expand Down Expand Up @@ -525,6 +540,7 @@ class TestRunner {
}

void init_runner_data(int instances) {
nodetypes.resize(instances, node_type::BP);
delay_matrix.resize(instances);

for (int i = 0; i < instances; i++) {
Expand Down Expand Up @@ -556,6 +572,7 @@ class TestRunner {
}
}

vector<node_type> nodetypes;
vector<NodePtr> nodes;
matrix_type delay_matrix;
matrix_type dist_matrix;
Expand Down
45 changes: 45 additions & 0 deletions simulator/tests/randpa_finality_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,51 @@ using namespace std;
using std::string;


TEST(randpa_finality, two_full_nodes) {
auto runner = TestRunner(2);
vector<node_type> nodetypes {node_type::FN, node_type::FN};
runner.load_nodetypes(nodetypes);
vector<pair<int, int> > v0{{1, 10}};
graph_type g;
g.push_back(v0);
runner.load_graph(g);
runner.add_stop_task(2 * runner.get_slot_ms());
runner.run<RandpaNode>();
EXPECT_EQ(get_block_height(runner.get_db(0).last_irreversible_block_id()), 0);
EXPECT_EQ(get_block_height(runner.get_db(1).last_irreversible_block_id()), 0);
}

TEST(randpa_finality, fullnodes_over_fullnodes) {
auto runner = TestRunner(9);
vector<node_type> nodetypes {node_type::FN, node_type::FN, node_type::BP, node_type::BP, node_type::BP, node_type::FN, node_type::FN, node_type::FN, node_type::FN};
runner.load_nodetypes(nodetypes);
vector<pair<int, int> > v0{{1, 10}};
vector<pair<int, int> > v1{{2, 10}};
vector<pair<int, int> > v2{{3, 20}, {4, 20}};
vector<pair<int, int> > v3{{4, 20}, {5, 30}};
vector<pair<int, int> > v4{{7, 10}};
vector<pair<int, int> > v5{{6, 30}};
vector<pair<int, int> > v7{{8, 10}};
graph_type g(9);
g[0] = v0;
g[1] = v1;
g[2] = v2;
g[3] = v3;
g[4] = v4;
g[5] = v5;
g[7] = v7;
runner.load_graph(g);
runner.add_stop_task(8 * runner.get_slot_ms());
runner.run<RandpaNode>();
EXPECT_EQ(get_block_height(runner.get_db(0).last_irreversible_block_id()), 7);
EXPECT_EQ(get_block_height(runner.get_db(1).last_irreversible_block_id()), 7);
EXPECT_EQ(get_block_height(runner.get_db(2).last_irreversible_block_id()), 7);
EXPECT_EQ(get_block_height(runner.get_db(3).last_irreversible_block_id()), 7);
EXPECT_EQ(get_block_height(runner.get_db(4).last_irreversible_block_id()), 7);
EXPECT_EQ(get_block_height(runner.get_db(5).last_irreversible_block_id()), 7);
EXPECT_EQ(get_block_height(runner.get_db(7).last_irreversible_block_id()), 7);
}

TEST(randpa_finality, three_nodes) {
auto runner = TestRunner(3);
vector<pair<int, int> > v0{{1, 2}, {2, 10}};
Expand Down