Skip to content

Commit

Permalink
Merge 7813891 into 2f23925
Browse files Browse the repository at this point in the history
  • Loading branch information
rodoufu committed Jan 18, 2020
2 parents 2f23925 + 7813891 commit 25b3fd8
Show file tree
Hide file tree
Showing 26 changed files with 193 additions and 152 deletions.
24 changes: 16 additions & 8 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ language: cpp
# # This flag may limit the parallel build of jobs
# - MAKEFLAGS="-j 4"
cache:
# ccache: true
# ccache: true
directories:
- ${TRAVIS_BUILD_DIR}/lcov-1.14
- ${TRAVIS_BUILD_DIR}/grpc
Expand Down Expand Up @@ -40,6 +40,7 @@ install:
- sh ${TRAVIS_BUILD_DIR}/script/install_protobuf.sh ${TRAVIS_BUILD_DIR}/
# gRPC
- sh ${TRAVIS_BUILD_DIR}/script/install_grpc.sh ${TRAVIS_BUILD_DIR}/
- pip install --user cpp-coveralls

before_script:
- cd ${TRAVIS_BUILD_DIR}
Expand All @@ -55,7 +56,7 @@ jobs:
- cd ${TRAVIS_BUILD_DIR}/spec/cpp
- mkdir build
- cd build
- cmake -Dtest=ON ..
- cmake -Dtest=ON -DCOVERAGE=1 ..
- make
- GTEST_COLOR=1 ctest --extra-verbose

Expand All @@ -69,12 +70,19 @@ jobs:
# - GTEST_COLOR=1 ctest --extra-verbose

after_success:
- cd ${TRAVIS_BUILD_DIR}
- lcov --directory . --capture --output-file coverage.info # capture coverage info
- lcov --remove coverage.info 'tests/*' '/usr/*' 'test-library*' --output-file coverage.info # filter out system and test code
- lcov --list coverage.info # debug before upload
- coveralls-lcov --repo-token ${COVERALLS_TOKEN} coverage.info # uploads to coveralls.. for a private repo using a token
- coveralls-lcov coverage.info #for open source
- cd ${TRAVIS_BUILD_DIR}/spec/cpp/build
- rm -rf tests/libgtest/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.gcda
- rm -rf tests/libgtest/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.gcda
# capture coverage info
- lcov --directory . --capture --output-file coverage.info
# filter out system and test code
- lcov --remove coverage.info '*/cpp/tests/*' '/usr/*' --output-file coverage.info
# debug before upload
- lcov --list coverage.info
# uploads to coveralls.. for a private repo using a token
# - coveralls-lcov --repo-token ${COVERALLS_TOKEN} coverage.info
# for open source
- coveralls-lcov coverage.info

notifications:
email: false
6 changes: 2 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,12 @@
<a href="https://github.com/NeoResearch/libbft/releases">
<img src="https://badge.fury.io/gh/NeoResearch%2Flibbft.svg" alt="Current neo version.">
</a>
<!--
<a href='https://coveralls.io/github/NeoResearch/libbft'>
<img src='https://coveralls.io/repos/github/NeoResearch/libbft/badge.svg' alt='Coverage Status' />
</a>
-->
<a href="https://github.com/NeoResearch/libbft">
<img src="https://tokei.rs/b1/github/NeoResearch/libbft?category=lines" alt="Current total lines.">
</a>
<img src="https://tokei.rs/b1/github/NeoResearch/libbft?category=lines" alt="Current total lines.">
</a>
<a href="https://github.com/NeoResearch/libbft/blob/master/LICENSE">
<img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License.">
</a>
Expand Down
87 changes: 66 additions & 21 deletions spec/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,42 +8,50 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build")
project(${PROJECT_NAME} VERSION ${PROJECT_VERSION})

# https://developers.redhat.com/blog/2018/03/21/compiler-and-linker-flags-gcc/
# https://caiorss.github.io/C-Cpp-Notes/compiler-flags-options.html
add_definitions(-std=c++17)
#add_definitions(-fconcepts)
add_definitions(-fpermissive)
add_definitions(-Wall)
add_definitions(-fasynchronous-unwind-tables)

#add_definitions(-fno-rtti)
add_definitions(-pedantic-errors)
add_definitions(-pipe)
add_definitions(-Werror=format-security)
add_definitions(-Werror=implicit-function-declaration)
# https://caiorss.github.io/C-Cpp-Notes/compiler-flags-options.html
add_definitions(-Wpedantic)

add_definitions(-W)
add_definitions(-Wall)
add_definitions(-Wconversion)
add_definitions(-Wcast-align)
add_definitions(-Wunused)
add_definitions(-Wunused-variable)
add_definitions(-Wshadow)
add_definitions(-Wold-style-cast)
add_definitions(-Wpointer-arith)
add_definitions(-Wcast-qual)
add_definitions(-Wno-missing-braces)

add_definitions(-Ofast)
add_definitions(-Wall)
add_definitions(-Wextra)
#add_definitions(-Werror)
add_definitions(-Werror=format-security)
add_definitions(-Werror=implicit-function-declaration)
add_definitions(-Wpedantic)
add_definitions(-Wno-long-long)
add_definitions(-Wno-unused-parameter)
add_definitions(-Wno-switch)
add_definitions(-Wno-missing-braces)
add_definitions(-Wno-parentheses)
add_definitions(-Wno-switch)
add_definitions(-Wno-unused-parameter)
add_definitions(-Wold-style-cast)
add_definitions(-Wpointer-arith)
add_definitions(-Wshadow)
#add_definitions(-Wswitch-default)
#add_definitions(-Wswitch-enum)
add_definitions(-Wcast-qual)
#add_definitions(-Wundef)
add_definitions(-Wunused)
add_definitions(-Wunreachable-code)
add_definitions(-Wunused-function)

#add_definitions(-Werror)
add_definitions(-pedantic-errors)
#add_definitions(-fno-rtti)
add_definitions(-Wunused-variable)
add_definitions(-Wwrite-strings)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-prototypes")

#set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS "${CMAKE_CXX_SOURCE_FILE_EXTENSIONS};hpp;HPP")
#message(STATUS "Ignoring extensios ${CMAKE_CXX_IGNORE_EXTENSIONS}")
#list(REMOVE_ITEM CMAKE_CXX_IGNORE_EXTENSIONS HPP hpp)
#message(STATUS "Ignoring extensios ${CMAKE_CXX_IGNORE_EXTENSIONS}")

string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type)
if (build_type STREQUAL "debug")
message(STATUS "--- Debug build ---")
Expand All @@ -56,9 +64,41 @@ if (build_type STREQUAL "debug")
add_definitions(-ggdb)
add_definitions(-O0)
add_definitions(-fstack-protector-all)

add_definitions(-fsanitize=address)
add_definitions(-fsanitize=alignment)
add_definitions(-fsanitize=bool)
add_definitions(-fsanitize=bounds)
add_definitions(-fsanitize=bounds-strict)
add_definitions(-fsanitize=builtin)
add_definitions(-fsanitize=enum)
add_definitions(-fsanitize=float-divide-by-zero)
add_definitions(-fsanitize=float-cast-overflow)
add_definitions(-fsanitize=integer-divide-by-zero)
add_definitions(-fsanitize=leak)
# add_definitions(-fsanitize=kernel-address)
add_definitions(-fsanitize=nonnull-attribute)
add_definitions(-fsanitize=null)
add_definitions(-fsanitize=object-size)
add_definitions(-fsanitize=pointer-compare)
add_definitions(-fsanitize=pointer-overflow)
add_definitions(-fsanitize=pointer-subtract)
add_definitions(-fsanitize=return)
add_definitions(-fsanitize=returns-nonnull-attribute)
add_definitions(-fsanitize=signed-integer-overflow)
add_definitions(-fsanitize=shift)
add_definitions(-fsanitize=shift-base)
add_definitions(-fsanitize=shift-exponent)
# add_definitions(-fsanitize=thread)
add_definitions(-fsanitize=undefined)
add_definitions(-fsanitize=unreachable)
add_definitions(-fsanitize=vla-bound)
add_definitions(-fsanitize=vptr)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
else ()
message(STATUS "--- Release build ---")
add_definitions(-O3)
# add_definitions(-Ofast)
add_definitions(-finline-functions)
add_definitions(-funroll-loops)

Expand All @@ -76,6 +116,11 @@ include_directories(src)
add_subdirectory(src)
if (test)
enable_testing()
SET(COVERAGE OFF CACHE BOOL "Coverage")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
add_definitions(--coverage)
add_definitions(-fprofile-arcs)
add_definitions(-ftest-coverage)
#find_package(GTest REQUIRED)
#include_directories(${GTEST_INCLUDE_DIRS})
add_subdirectory(tests)
Expand Down
4 changes: 4 additions & 0 deletions spec/cpp/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
cmake -Dtest=ON -DCOVERAGE=1 ..
make VERBOSE=1
GTEST_COLOR=1 ctest --extra-verbose
6 changes: 6 additions & 0 deletions spec/cpp/cov.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env bash
lcov -d . -c -o coverage.info
lcov --remove coverage.info '*/cpp/tests/*' '/usr/*' --output-file coverage.info
debug before upload
lcov --list coverage.info
genhtml coverage.info --output-directory out
22 changes: 15 additions & 7 deletions spec/cpp/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,20 @@ list(FILTER project_sources INCLUDE REGEX "pp$")
set(lib_name "${PROJECT_NAME}_${PROJECT_VERSION}")
message(STATUS "${lib_name} - ${project_sources}")
add_library(${lib_name} ${project_sources})
#set_source_files_properties(${project_sources} PROPERTIES LANGUAGE CXX)
set_target_properties(${lib_name} PROPERTIES LINKER_LANGUAGE CXX)

add_executable(app_test main.cpp ${project_sources})
target_link_libraries(app_test ${lib_name})

target_link_libraries(app_test protobuf)
target_link_libraries(app_test grpc++)
target_link_libraries(app_test grpc++_reflection)
target_link_libraries(app_test dl)
target_link_libraries(app_test pthread)

target_link_libraries(
app_test
${lib_name}
protobuf
grpc++
grpc++_reflection
dl
pthread
)

add_subdirectory(bftevents-grpc)

Expand All @@ -36,3 +39,8 @@ target_link_libraries(
grpc++_reflection
dl
)

if (build_type STREQUAL "debug")
target_link_libraries(app_test asan)
target_link_libraries(app_RPCtest asan)
endif()
18 changes: 7 additions & 11 deletions spec/cpp/src/dbft2/dBFT2Machine.hpp
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
#include <utility>

#include <utility>

#include <utility>

#pragma once
#ifndef LIBBFT_SRC_CPP_DBFT2_DBFT2MACHINE_HPP
#define LIBBFT_SRC_CPP_DBFT2_DBFT2MACHINE_HPP

// system includes
#include <memory>
#include <sstream>
#include <vector>
// simulate non-deterministic nature
Expand All @@ -32,9 +27,9 @@ class dBFT2Machine : public ReplicatedSTSM<dBFT2Context>
int f;

/** it is recommended to have N = 3f+1 (e.g., f=0 -> N=1; f=1 -> N=4; f=2 -> N=7; ...) */
explicit dBFT2Machine(int _f = 0, int N = 1, Clock* _clock = nullptr, MachineId _me = MachineId(),
explicit dBFT2Machine(int _f = 0, int N = 1, std::unique_ptr<Clock> _clock = nullptr, MachineId _me = MachineId(),
std::string _name = "replicated_dBFT")
: ReplicatedSTSM<dBFT2Context>(_clock, std::move(_me), std::move(_name))
: ReplicatedSTSM<dBFT2Context>(std::move(_clock), std::move(_me), std::move(_name))
, f(_f)
{
assert(f >= 0);
Expand All @@ -47,7 +42,8 @@ class dBFT2Machine : public ReplicatedSTSM<dBFT2Context>
// should never share Timers here, otherwise strange things may happen (TODO: protect from this... unique_ptr?)
for (int i = 0; i < N; i++) {
this->machines[i] = new SingleTimerStateMachine<MultiContext<dBFT2Context>>(
new Timer("C", this->clock), MachineId(i), this->clock, "dBFT");
std::unique_ptr<Timer>(new Timer("C", std::unique_ptr<Clock>(new Clock(*this->clock)))), MachineId(i),
std::unique_ptr<Clock>(new Clock(*this->clock)), "dBFT");
}

// fill states and transitions on each machine
Expand All @@ -66,8 +62,8 @@ class dBFT2Machine : public ReplicatedSTSM<dBFT2Context>
* @param _name
*/
dBFT2Machine(int _f, std::vector<SingleTimerStateMachine<MultiContext<dBFT2Context>>*> _machines,
Clock* _clock = nullptr, int _me = 0, std::string _name = "replicated_dBFT")
: ReplicatedSTSM<dBFT2Context>(_clock, MachineId(_me), _name)
std::unique_ptr<Clock> _clock = nullptr, int _me = 0, std::string _name = "replicated_dBFT")
: ReplicatedSTSM<dBFT2Context>(std::move(_clock), MachineId(_me), _name)
, f(_f)
{
this->machines = std::move(_machines);
Expand Down
9 changes: 5 additions & 4 deletions spec/cpp/src/dbft2/dBFT2RPCMachine.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#include <utility>

#pragma once
#ifndef LIBBFT_SRC_CPP_DBFT2_DBFT2_RPC_MACHINE_HPP
#define LIBBFT_SRC_CPP_DBFT2_DBFT2_RPC_MACHINE_HPP
Expand All @@ -11,6 +9,7 @@
#include <algorithm>
#include <cassert>
#include <random>
#include <thread>

// standard Transition
//#include "replicated/ReplicatedSTSM.hpp"
Expand Down Expand Up @@ -46,8 +45,10 @@ class dBFT2RPCMachine : public SingleTimerStateMachine<RPCMachineContext<dBFT2Co
/** it is recommended to have N = 3f+1 (e.g., f=0 -> N=1; f=1 -> N=4; f=2 -> N=7; ...) */
explicit dBFT2RPCMachine(int _f = 0, int N = 1, MachineId _me = MachineId(),
RPCMachineContext<dBFT2Context>* myCtx = nullptr, std::string _name = "dBFT2_RPC_machine",
std::string dbft_type = "Commit1", Clock* _clock = nullptr)
: SingleTimerStateMachine<RPCMachineContext<dBFT2Context>>(new Timer("C", _clock), _me, _clock, std::move(_name))
std::string dbft_type = "Commit1", std::unique_ptr<Clock> _clock = nullptr)
: SingleTimerStateMachine<RPCMachineContext<dBFT2Context>>(
std::unique_ptr<Timer>(new Timer("C", std::move(_clock))), _me, std::move(_clock), std::move(_name)
)
, f(_f)
, eventsServer(_me.id, myCtx)
//Timer* t = nullptr, int me = 0, Clock* _clock = nullptr, string name = "STSM"
Expand Down
13 changes: 2 additions & 11 deletions spec/cpp/src/events/Event.hpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,3 @@
#include <utility>

#include <utility>

#include <utility>

#include <utility>

#pragma once
#ifndef LIBBFT_SRC_CPP_EVENT_HPP
#define LIBBFT_SRC_CPP_EVENT_HPP
Expand Down Expand Up @@ -150,19 +142,18 @@ class TimedEvent : public Event
{
protected:
/** Timer sent in countdown mode */
Timer* timer;
std::unique_ptr<Timer> timer;

public:
TimedEvent(double countdown, std::string _name, MachineId _from = MachineId(-1),
std::vector<std::string> _parameters = std::vector<std::string>(0))
: Event(std::move(_name), std::move(_from), std::move(_parameters))
{
timer = (new Timer())->init(countdown);
timer = std::unique_ptr<Timer>((new Timer())->init(countdown));
}

virtual ~TimedEvent()
{
delete timer;
}

bool isActivated(std::string _name, std::vector<std::string> pattern) const override
Expand Down
4 changes: 0 additions & 4 deletions spec/cpp/src/events/ScheduledEvent.hpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
#include <utility>

#include <utility>

#pragma once
#ifndef LIBBFT_SRC_CPP_SCHEDULED_EVENT_HPP
#define LIBBFT_SRC_CPP_SCHEDULED_EVENT_HPP
Expand Down
2 changes: 0 additions & 2 deletions spec/cpp/src/machine/MachineId.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#include <utility>

#pragma once
#ifndef LIBBFT_SRC_CPP_MACHINEID_HPP
#define LIBBFT_SRC_CPP_MACHINEID_HPP
Expand Down
Loading

0 comments on commit 25b3fd8

Please sign in to comment.