2019-04-26 18:27:27 +03:00
|
|
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
# Licensed under the Apache 2.0 License.
|
|
|
|
cmake_minimum_required(VERSION 3.11)
|
|
|
|
|
|
|
|
set(CCF_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
include(${CCF_DIR}/cmake/preproject.cmake)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
project(
|
|
|
|
ccf
|
2020-02-11 20:49:10 +03:00
|
|
|
VERSION 0.7.1
|
2020-01-28 21:09:42 +03:00
|
|
|
LANGUAGES C CXX
|
|
|
|
)
|
2019-04-26 18:27:27 +03:00
|
|
|
|
2019-12-16 14:55:33 +03:00
|
|
|
set(TESTS_SUFFIX $ENV{TESTS_SUFFIX})
|
|
|
|
message(STATUS "Setting TESTS_SUFFIX on performance tests to '${TESTS_SUFFIX}'")
|
2019-04-26 18:27:27 +03:00
|
|
|
set(ENV{BETTER_EXCEPTIONS} 1)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
# Set the default install prefix for CCF. Users may override this value with the
|
|
|
|
# cmake command. For example:
|
2020-01-21 18:14:27 +03:00
|
|
|
#
|
2020-01-28 21:09:42 +03:00
|
|
|
# $ cmake -DCMAKE_INSTALL_PREFIX=/opt/myplace ..
|
2020-01-21 18:14:27 +03:00
|
|
|
#
|
2020-01-28 21:09:42 +03:00
|
|
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
2020-01-21 18:14:27 +03:00
|
|
|
set(CMAKE_INSTALL_PREFIX
|
2020-01-28 21:09:42 +03:00
|
|
|
"/opt/ccf/ccf-${PROJECT_VERSION}"
|
|
|
|
CACHE PATH "Default install prefix" FORCE
|
|
|
|
)
|
2020-01-21 18:14:27 +03:00
|
|
|
endif()
|
|
|
|
|
|
|
|
message(STATUS "CMAKE_INSTALL_PREFIX is '${CMAKE_INSTALL_PREFIX}'")
|
|
|
|
|
2020-01-29 18:09:28 +03:00
|
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/preproject.cmake
|
|
|
|
DESTINATION cmake
|
|
|
|
)
|
|
|
|
|
2019-12-16 14:55:33 +03:00
|
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/common.cmake)
|
|
|
|
|
2019-04-26 18:27:27 +03:00
|
|
|
option(BUILD_TESTS "Build tests" ON)
|
2019-04-30 13:30:59 +03:00
|
|
|
option(BUILD_SMALLBANK "Build SmallBank sample app and clients" ON)
|
|
|
|
|
2020-01-28 17:06:12 +03:00
|
|
|
# Build common library for CCF enclaves
|
|
|
|
add_custom_target(ccf ALL)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if("sgx" IN_LIST TARGET)
|
2020-01-28 17:06:12 +03:00
|
|
|
# enclave version
|
2020-01-28 21:09:42 +03:00
|
|
|
add_library(
|
|
|
|
ccf.enclave STATIC
|
|
|
|
${CCF_DIR}/src/enclave/main.cpp ${CCF_DIR}/src/enclave/thread_local.cpp
|
2020-01-28 17:06:12 +03:00
|
|
|
${CCF_GENERATED_DIR}/ccf_t.cpp
|
|
|
|
)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
target_compile_definitions(
|
|
|
|
ccf.enclave PUBLIC INSIDE_ENCLAVE _LIBCPP_HAS_THREAD_API_PTHREAD
|
2020-01-28 17:06:12 +03:00
|
|
|
)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
target_compile_options(ccf.enclave PUBLIC -nostdinc -nostdinc++)
|
2020-01-28 17:06:12 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
target_include_directories(
|
2020-01-29 18:09:28 +03:00
|
|
|
ccf.enclave SYSTEM
|
|
|
|
PUBLIC
|
|
|
|
$<BUILD_INTERFACE:${EVERCRYPT_INC}>
|
|
|
|
$<BUILD_INTERFACE:${CCF_GENERATED_DIR}>
|
|
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/3rdparty/hacl-star/evercrypt>
|
|
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/3rdparty/hacl-star/evercrypt/kremlin>
|
|
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/3rdparty/hacl-star/evercrypt/kremlin/kremlib>
|
|
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/generated>
|
2020-01-28 17:06:12 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
add_dependencies(ccf.enclave flatbuffers)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if(PBFT)
|
|
|
|
target_link_libraries(ccf.enclave PUBLIC libbyz.enclave)
|
2020-01-28 17:06:12 +03:00
|
|
|
endif()
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
target_link_libraries(
|
|
|
|
ccf.enclave
|
|
|
|
PUBLIC openenclave::oeenclave
|
|
|
|
openenclave::oelibcxx
|
|
|
|
openenclave::oelibc
|
|
|
|
ccfcrypto.enclave
|
|
|
|
evercrypt.enclave
|
|
|
|
http_parser.enclave
|
|
|
|
lua.enclave
|
|
|
|
secp256k1.enclave
|
2020-02-07 12:15:54 +03:00
|
|
|
sss.enclave
|
2020-01-28 17:06:12 +03:00
|
|
|
)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
set_property(TARGET ccf.enclave PROPERTY POSITION_INDEPENDENT_CODE ON)
|
2020-01-28 17:06:12 +03:00
|
|
|
|
|
|
|
enable_quote_code(ccf.enclave)
|
|
|
|
|
2020-01-29 18:09:28 +03:00
|
|
|
install(
|
|
|
|
TARGETS ccf.enclave
|
|
|
|
EXPORT ccf
|
|
|
|
DESTINATION lib
|
|
|
|
)
|
2020-01-28 17:06:12 +03:00
|
|
|
|
|
|
|
add_dependencies(ccf ccf.enclave)
|
|
|
|
endif()
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if("virtual" IN_LIST TARGET)
|
2020-01-28 17:06:12 +03:00
|
|
|
# virtual version
|
2020-01-28 21:09:42 +03:00
|
|
|
add_library(
|
|
|
|
ccf.virtual STATIC ${CCF_DIR}/src/enclave/main.cpp
|
|
|
|
${CCF_DIR}/src/enclave/thread_local.cpp
|
2020-01-28 17:06:12 +03:00
|
|
|
)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
target_compile_definitions(
|
|
|
|
ccf.virtual PUBLIC INSIDE_ENCLAVE VIRTUAL_ENCLAVE
|
|
|
|
_LIBCPP_HAS_THREAD_API_PTHREAD
|
2020-01-28 17:06:12 +03:00
|
|
|
)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
target_compile_options(ccf.virtual PUBLIC -stdlib=libc++)
|
2020-01-28 17:06:12 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
target_include_directories(
|
2020-01-29 18:09:28 +03:00
|
|
|
ccf.virtual SYSTEM
|
|
|
|
PUBLIC
|
|
|
|
$<BUILD_INTERFACE:${EVERCRYPT_INC}>
|
|
|
|
$<BUILD_INTERFACE:${CCF_GENERATED_DIR}>
|
|
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/3rdparty/hacl-star/evercrypt>
|
|
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/3rdparty/hacl-star/evercrypt/kremlin>
|
|
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/3rdparty/hacl-star/evercrypt/kremlin/kremlib>
|
|
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/generated>
|
2020-01-28 17:06:12 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
add_dependencies(ccf.virtual flatbuffers)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if(PBFT)
|
|
|
|
target_link_libraries(ccf.virtual PUBLIC libbyz.host)
|
2020-01-28 17:06:12 +03:00
|
|
|
endif()
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
target_link_libraries(
|
|
|
|
ccf.virtual
|
|
|
|
PUBLIC -stdlib=libc++
|
|
|
|
-lc++
|
|
|
|
-lc++abi
|
|
|
|
ccfcrypto.host
|
|
|
|
evercrypt.host
|
|
|
|
http_parser.host
|
|
|
|
lua.host
|
|
|
|
secp256k1.host
|
2020-02-07 12:15:54 +03:00
|
|
|
sss.host
|
2020-01-28 21:09:42 +03:00
|
|
|
${CMAKE_THREAD_LIBS_INIT}
|
2020-01-28 17:06:12 +03:00
|
|
|
)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
set_property(TARGET ccf.virtual PROPERTY POSITION_INDEPENDENT_CODE ON)
|
2020-01-28 17:06:12 +03:00
|
|
|
|
|
|
|
enable_coverage(ccf.virtual)
|
|
|
|
use_client_mbedtls(ccf.virtual)
|
|
|
|
add_san(ccf.virtual)
|
|
|
|
|
2020-01-29 18:09:28 +03:00
|
|
|
install(
|
|
|
|
TARGETS ccf.virtual
|
|
|
|
EXPORT ccf
|
|
|
|
DESTINATION lib
|
|
|
|
)
|
2020-01-28 17:06:12 +03:00
|
|
|
|
|
|
|
add_dependencies(ccf ccf.virtual)
|
|
|
|
endif()
|
|
|
|
|
2020-01-29 18:09:28 +03:00
|
|
|
install(EXPORT ccf DESTINATION cmake)
|
|
|
|
|
|
|
|
# Install all 3rd-party library includes
|
|
|
|
install(
|
|
|
|
DIRECTORY 3rdparty
|
|
|
|
DESTINATION include
|
|
|
|
FILES_MATCHING
|
|
|
|
PATTERN "*.h"
|
|
|
|
PATTERN "*.hpp"
|
|
|
|
)
|
|
|
|
|
|
|
|
# Install all CCF headers
|
|
|
|
install(
|
|
|
|
DIRECTORY src/
|
|
|
|
DESTINATION include/ccf
|
|
|
|
FILES_MATCHING
|
|
|
|
PATTERN "*.h"
|
|
|
|
PATTERN "*/test*" EXCLUDE
|
|
|
|
)
|
|
|
|
|
|
|
|
# Install CCF Python infrastructure
|
|
|
|
install(
|
|
|
|
DIRECTORY tests/infra/
|
2020-02-07 17:29:02 +03:00
|
|
|
DESTINATION bin/infra
|
2020-01-29 18:09:28 +03:00
|
|
|
FILES_MATCHING
|
|
|
|
PATTERN "*.py"
|
|
|
|
PATTERN "*/__pycache__*" EXCLUDE
|
|
|
|
)
|
|
|
|
|
|
|
|
install(FILES tests/start_network.py DESTINATION bin)
|
2020-02-07 17:29:02 +03:00
|
|
|
install(FILES tests/requirements.txt DESTINATION bin)
|
2020-01-29 18:09:28 +03:00
|
|
|
|
2020-01-21 18:14:27 +03:00
|
|
|
# Create patched alternative of library, to test code version changes
|
|
|
|
function(create_patched_enclave_lib name app_oe_conf_path enclave_sign_key_path)
|
2020-01-28 17:06:12 +03:00
|
|
|
set(enc_name ${name}.enclave)
|
2020-01-28 21:09:42 +03:00
|
|
|
if(TARGET ${enc_name})
|
2020-01-28 17:06:12 +03:00
|
|
|
set(patched_name ${name}.patched.enclave)
|
2020-01-21 18:14:27 +03:00
|
|
|
set(patched_lib_name lib${patched_name}.so)
|
|
|
|
add_custom_command(
|
2020-01-28 21:09:42 +03:00
|
|
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${patched_lib_name}
|
|
|
|
COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/lib${enc_name}.so
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/${patched_lib_name}
|
|
|
|
COMMAND PYTHONPATH=${CCF_DIR}/tests:$ENV{PYTHONPATH} python3
|
|
|
|
patch_binary.py -p ${CMAKE_CURRENT_BINARY_DIR}/${patched_lib_name}
|
|
|
|
WORKING_DIRECTORY ${CCF_DIR}/tests
|
|
|
|
DEPENDS ${enc_name}
|
2020-01-21 18:14:27 +03:00
|
|
|
)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_custom_target(
|
|
|
|
${patched_name} ALL
|
2020-01-21 18:14:27 +03:00
|
|
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${patched_lib_name}
|
|
|
|
)
|
2020-01-28 21:09:42 +03:00
|
|
|
sign_app_library(
|
|
|
|
${patched_name} ${app_oe_conf_path} ${enclave_sign_key_path}
|
|
|
|
)
|
2020-01-21 18:14:27 +03:00
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_ccf_app(
|
|
|
|
logging SRCS src/apps/logging/logging.cpp
|
|
|
|
src/apps/logging/stub_for_code_signing.cpp
|
2020-01-28 17:06:12 +03:00
|
|
|
)
|
2020-01-28 21:09:42 +03:00
|
|
|
sign_app_library(
|
|
|
|
logging.enclave ${CMAKE_CURRENT_SOURCE_DIR}/src/apps/logging/oe_sign.conf
|
2020-01-28 17:06:12 +03:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/apps/sample_key.pem
|
|
|
|
)
|
2020-01-28 21:09:42 +03:00
|
|
|
create_patched_enclave_lib(
|
|
|
|
logging ${CMAKE_CURRENT_SOURCE_DIR}/src/apps/logging/oe_sign.conf
|
2020-01-21 18:14:27 +03:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/apps/sample_key.pem
|
|
|
|
)
|
|
|
|
|
|
|
|
set(OE_SIGN_PATH ${OE_BINDIR}/oesign)
|
2019-04-26 18:27:27 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if(BUILD_TESTS)
|
2019-04-26 18:27:27 +03:00
|
|
|
enable_testing()
|
|
|
|
|
2019-10-15 17:09:54 +03:00
|
|
|
# Unit tests
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(map_test ${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/map_test.cpp)
|
2019-04-26 18:27:27 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(
|
|
|
|
json_schema ${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/json_schema.cpp
|
|
|
|
)
|
Json schema: Take 3 (#113)
* Add a getApi method, listing all installed RPC method names
* Sketch RecordParams struct
* WIP
* Broken WIP
* Partial macro
* Basic examples working
* Partial file separation
* Move, rename, and fix FOR macro
* Use json get
* Build to_json from RequiredJsonFields too
* Remove unneeded pair specialisation
* Add comments, collide required and optional
* REformat
* Use new macros everywhere
* Remove unused template
* Rename getApi to listMethods
* Move frontend-specific calltypes to /rpc
* Specify GetTxHist return type
* Pretty-print client responses by default
* Add a GetSchema RPC
* Other tools demand ugly formatting by default
* mins and maxes for numerics, map of schemas
* Support _FOR_JSON_0
* Fix support for std::optional optional fields
* Test std optionals
* Define schemas for GetCommit
* More definitions for existing RPCs
* Tidy schema generation, including for vectors
* Add proper unit test
* Initial test of schema generation
* Fix failing tests
* Formatting
* Add (currently failing) test of nested structs
* Add misleadingly passing test
* Set correct expected pointers, test currently fails
* Oops - deexpand
* Correctly build pointer path for erroneous array elements
* Demonstrate invalid, not just missing, valeus
* Skeleton of json_bench
* Fix typo
* WIP
* Compare manual json parsers vs macro-defined
* mumble mumble
* Add valijson, +basic test
* Add benchmark of valijson validation
* Benchmark simple and complex structs
* Additional broken schema test
* Include pointer to parse errors
* Restore old basic translator macro
* Restore simpler macro for translators that don't need schema
* Add auto schema for private logging methods
* Add manual schema + validation for PUBLIC logging RPCs
* Match RPC format
* More RPC format fixes
* Correct scenario test target
* Add documentation entry on API schema
* Initial schema retrieval test
* Correct URLs in generated schema
* Send schema to a flat folder
* Remove unnecessary size_t max restriction
* Report non-matching schema
* Add current schemas
* Tidying
* clang-format
* Remove schema generation e2e test
* fmtlib, remove $id from schema
* Fix pointer paths
2019-06-05 12:36:50 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(
|
|
|
|
logger_json_test
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/logger_json_test.cpp
|
|
|
|
)
|
2019-09-04 14:03:33 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(
|
|
|
|
kv_test ${CMAKE_CURRENT_SOURCE_DIR}/src/kv/test/kv_test.cpp
|
2019-04-26 18:27:27 +03:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/kv/test/kv_contention.cpp
|
2020-01-28 21:09:42 +03:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/kv/test/kv_serialisation.cpp
|
|
|
|
)
|
2019-05-15 12:57:04 +03:00
|
|
|
use_client_mbedtls(kv_test)
|
2020-01-28 21:09:42 +03:00
|
|
|
target_link_libraries(
|
|
|
|
kv_test PRIVATE ${CMAKE_THREAD_LIBS_INIT} secp256k1.host
|
|
|
|
)
|
2019-04-26 18:27:27 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(
|
|
|
|
ds_test
|
2019-04-26 18:27:27 +03:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/ringbuffer.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/messaging.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/oversized.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/serializer.cpp
|
2020-01-28 21:09:42 +03:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/hash.cpp
|
|
|
|
)
|
|
|
|
target_link_libraries(ds_test PRIVATE ${CMAKE_THREAD_LIBS_INIT})
|
|
|
|
|
|
|
|
add_unit_test(
|
|
|
|
ledger_test ${CMAKE_CURRENT_SOURCE_DIR}/src/host/test/ledger.cpp
|
|
|
|
)
|
|
|
|
|
|
|
|
if(NOT PBFT)
|
|
|
|
add_unit_test(
|
|
|
|
raft_test ${CMAKE_CURRENT_SOURCE_DIR}/src/consensus/raft/test/main.cpp
|
|
|
|
)
|
|
|
|
target_link_libraries(raft_test PRIVATE ${CRYPTO_LIBRARY})
|
|
|
|
|
|
|
|
add_unit_test(
|
|
|
|
raft_enclave_test
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/consensus/raft/test/enclave.cpp
|
|
|
|
)
|
|
|
|
target_include_directories(raft_enclave_test PRIVATE ${CCFCRYPTO_INC})
|
|
|
|
target_link_libraries(
|
|
|
|
raft_enclave_test PRIVATE ${CRYPTO_LIBRARY} secp256k1.host
|
|
|
|
)
|
2019-10-13 08:58:20 +03:00
|
|
|
endif()
|
2019-04-26 18:27:27 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(
|
|
|
|
crypto_test ${CMAKE_CURRENT_SOURCE_DIR}/src/crypto/test/crypto.cpp
|
|
|
|
)
|
|
|
|
target_include_directories(crypto_test PRIVATE ${CCFCRYPTO_INC})
|
|
|
|
target_link_libraries(crypto_test PRIVATE ${CRYPTO_LIBRARY})
|
|
|
|
|
|
|
|
add_unit_test(
|
|
|
|
history_test ${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/history.cpp
|
|
|
|
)
|
|
|
|
target_include_directories(history_test PRIVATE ${EVERCRYPT_INC})
|
|
|
|
target_link_libraries(
|
|
|
|
history_test PRIVATE ${CRYPTO_LIBRARY} evercrypt.host secp256k1.host
|
|
|
|
)
|
|
|
|
|
|
|
|
add_unit_test(
|
|
|
|
encryptor_test ${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/encryptor.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/crypto/symmkey.cpp
|
|
|
|
)
|
2019-05-15 12:57:04 +03:00
|
|
|
use_client_mbedtls(encryptor_test)
|
2020-01-28 21:09:42 +03:00
|
|
|
target_link_libraries(encryptor_test PRIVATE secp256k1.host)
|
2019-04-26 18:27:27 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(
|
|
|
|
msgpack_serialization_test
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/msgpack_serialization.cpp
|
|
|
|
)
|
2019-07-16 21:44:05 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(tls_test ${CMAKE_CURRENT_SOURCE_DIR}/src/tls/test/main.cpp)
|
|
|
|
target_link_libraries(
|
|
|
|
tls_test PRIVATE ${CMAKE_THREAD_LIBS_INIT} secp256k1.host
|
|
|
|
)
|
2019-04-26 18:27:27 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(
|
|
|
|
keyexchange_test ${CMAKE_CURRENT_SOURCE_DIR}/src/tls/test/keyexchange.cpp
|
|
|
|
)
|
2019-05-15 12:57:04 +03:00
|
|
|
use_client_mbedtls(keyexchange_test)
|
2020-01-28 21:09:42 +03:00
|
|
|
target_link_libraries(keyexchange_test PRIVATE secp256k1.host)
|
2019-04-26 18:27:27 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(
|
|
|
|
channels_test ${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/channels.cpp
|
|
|
|
)
|
2019-05-15 12:57:04 +03:00
|
|
|
use_client_mbedtls(channels_test)
|
2019-04-26 18:27:27 +03:00
|
|
|
target_link_libraries(channels_test PRIVATE secp256k1.host)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(http_test ${CMAKE_CURRENT_SOURCE_DIR}/src/enclave/test/http.cpp)
|
2019-09-30 13:26:31 +03:00
|
|
|
target_link_libraries(http_test PRIVATE http_parser.host)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(
|
|
|
|
frontend_test
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/node/rpc/test/frontend_test.cpp
|
|
|
|
)
|
|
|
|
target_link_libraries(
|
|
|
|
frontend_test PRIVATE ${CMAKE_THREAD_LIBS_INIT} evercrypt.host lua.host
|
|
|
|
secp256k1.host
|
|
|
|
)
|
|
|
|
|
|
|
|
if(NOT PBFT)
|
|
|
|
add_unit_test(
|
|
|
|
membervoting_test
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/node/rpc/test/membervoting_test.cpp
|
|
|
|
)
|
|
|
|
target_link_libraries(
|
|
|
|
membervoting_test PRIVATE ${CMAKE_THREAD_LIBS_INIT} evercrypt.host
|
|
|
|
lua.host secp256k1.host
|
|
|
|
)
|
|
|
|
|
|
|
|
add_unit_test(
|
|
|
|
nodefrontend_test
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/node/rpc/test/nodefrontend_test.cpp
|
|
|
|
)
|
|
|
|
target_link_libraries(
|
|
|
|
nodefrontend_test PRIVATE ${CMAKE_THREAD_LIBS_INIT} evercrypt.host
|
|
|
|
lua.host secp256k1.host
|
2019-12-16 18:10:36 +03:00
|
|
|
)
|
2019-07-19 15:56:29 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if(NOT ENV{RUNTIME_CONFIG_DIR})
|
|
|
|
set_tests_properties(
|
|
|
|
membervoting_test
|
|
|
|
PROPERTIES ENVIRONMENT
|
|
|
|
RUNTIME_CONFIG_DIR=${CMAKE_SOURCE_DIR}/src/runtime_config
|
|
|
|
)
|
2019-07-19 15:56:29 +03:00
|
|
|
endif()
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(
|
|
|
|
luageneric_test
|
2019-12-13 19:47:37 +03:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/apps/luageneric/test/luageneric_test.cpp
|
2020-01-28 21:09:42 +03:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/apps/luageneric/luageneric.cpp
|
|
|
|
)
|
|
|
|
target_include_directories(luageneric_test PRIVATE ${LUA_DIR})
|
|
|
|
target_link_libraries(luageneric_test PRIVATE lua.host secp256k1.host)
|
2019-07-19 15:56:29 +03:00
|
|
|
endif()
|
2019-04-26 18:27:27 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
add_unit_test(
|
|
|
|
lua_test ${CMAKE_CURRENT_SOURCE_DIR}/src/luainterp/test/lua_test.cpp
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/luainterp/test/luakv.cpp
|
2019-10-14 13:23:15 +03:00
|
|
|
)
|
2020-01-28 21:09:42 +03:00
|
|
|
target_include_directories(lua_test PRIVATE ${LUA_DIR})
|
|
|
|
target_link_libraries(lua_test PRIVATE lua.host)
|
|
|
|
|
|
|
|
# Picobench benchmarks
|
|
|
|
add_picobench(map_bench SRCS src/ds/test/map_bench.cpp)
|
|
|
|
add_picobench(logger_bench SRCS src/ds/test/logger_bench.cpp)
|
|
|
|
add_picobench(json_bench SRCS src/ds/test/json_bench.cpp)
|
|
|
|
add_picobench(ringbuffer_bench SRCS src/ds/test/ringbuffer_bench.cpp)
|
|
|
|
add_picobench(
|
|
|
|
tls_bench
|
2019-10-14 13:23:15 +03:00
|
|
|
SRCS src/tls/test/bench.cpp
|
|
|
|
LINK_LIBS secp256k1.host
|
|
|
|
)
|
2020-01-28 21:09:42 +03:00
|
|
|
add_picobench(
|
|
|
|
merkle_bench
|
2019-10-14 13:23:15 +03:00
|
|
|
SRCS src/node/test/merkle_bench.cpp
|
|
|
|
LINK_LIBS ccfcrypto.host evercrypt.host secp256k1.host
|
|
|
|
INCLUDE_DIRS ${EVERCRYPT_INC}
|
|
|
|
)
|
2020-01-28 21:09:42 +03:00
|
|
|
add_picobench(
|
|
|
|
history_bench
|
2019-10-14 13:23:15 +03:00
|
|
|
SRCS src/node/test/history_bench.cpp
|
|
|
|
LINK_LIBS ccfcrypto.host evercrypt.host secp256k1.host
|
|
|
|
INCLUDE_DIRS ${EVERCRYPT_INC}
|
|
|
|
)
|
2020-02-06 16:54:00 +03:00
|
|
|
add_picobench(
|
|
|
|
kv_bench SRCS src/kv/test/kv_bench.cpp src/crypto/symmkey.cpp
|
|
|
|
src/enclave/thread_local.cpp
|
|
|
|
)
|
2019-04-26 18:27:27 +03:00
|
|
|
|
2019-05-13 17:14:17 +03:00
|
|
|
# Merkle Tree memory test
|
|
|
|
add_executable(merkle_mem src/node/test/merkle_mem.cpp)
|
2020-01-28 21:09:42 +03:00
|
|
|
target_link_libraries(
|
|
|
|
merkle_mem PRIVATE ccfcrypto.host evercrypt.host secp256k1.host
|
|
|
|
${CMAKE_THREAD_LIBS_INIT}
|
|
|
|
)
|
Support multiple crypto curves (#243)
* Sketch CurveImpl enum, replace macro definitions with templates
* Replace use of MD_TYPE and HASH macros with templates
* Replace HASH macro
* WIP
* Remove remaining compile-disabled code from keypair.h
* Expose CurveImpl, correct 256k1_bitcoin params
* Test all supported curves
* Add test that wrong curve fails to validate
* verify(vector, vector) should delegate, not reimplement
* Corrupt more, to ensure we affect content not padding
* Rename CURVE_CHOICE options to be LEDGER_CURVE_CHOICE
* LEDGER_CURVE_CHOICE determines default_curve_choice
* Proof-of-concept - factories for virtual implementation
* Virtualise PublicKey
* Re-enable other tests
* Remove templated CurveParameters
* Add labels, test for wrong curve, wrong impl
* Correct comment
* Delegate sign(CBuffer), reducing code duplication
* Remove TODO enum
* tls_bench compares curves for signing
* Extract make_contents
* tls_bench does comparison of all supported curves
* Tidy
* Temporary verbose logging of ecp group ID
* Produce standard (non-recoverable) signatures by default, for compatibility
* Fix curve logging, add tests of key transfer across implementations
* Verify with non-recoverable sigs too
* Log inconsistent failing cases
* Correct implementation substitutability test
* Normalize secp256k1 signatures - they may have come from mbedtls
* Re-order picobench results for readability
* Add some secp256k1 link dependencies
* Unprotect constructors - there are legitimate uses for direct construction
* Verifier curve type is parsed from cert
* history_bench builds
* Reminder TODO comment
* frontend_test builds and passes
* Clients compile
* genesisgenerator compiles
* membervoting_test builds
* Fix sign_hash, sign/verify ack data normally
* Remove unneeded CurveParams entirely
Detect PublicKey type
Simplify construction to minimum
* Correct test with new API
* verify_hash via publickey, test sign_hash and verify_hash
* Include tests
* Update to latest signature
* Ditto
* Update function signatures for people with raw data
* Fix history calls
* When constructing from explicit key, don't pass curve too
* API updates
* Fix nodestate
* inline
* EVERYTHING BUILDS
* Tidy cmake link args
* Remove unnecessary direct use of mbedtls_ecdsa_*
* Remove uint8_t restriction in sig_size
* tls_bench actually compares relevant hash operations
* bitcoin preference doesn't need to be a macro
* Standardise use of use_bitcoin_impl
* clang-format
* Test now uses distinct manual hash operation
CHECK rather than REQUIRE
* Rename LEDGER_curve to SERVICE_IDENTITY_curve
* use fmtlib
* Let mbedtls determine message digest size/function
* Add details to all thrown errors
* Remove parameter packs, document use_bitcoin_impl
* Name magic constant, extract parse_secp256k_bc
2019-07-12 13:12:05 +03:00
|
|
|
use_client_mbedtls(merkle_mem)
|
2020-01-28 21:09:42 +03:00
|
|
|
target_include_directories(merkle_mem PRIVATE ${EVERCRYPT_INC} src)
|
2019-12-06 12:27:55 +03:00
|
|
|
add_dependencies(merkle_mem flatbuffers)
|
2019-05-13 17:14:17 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if(NOT PBFT)
|
2019-07-19 15:56:29 +03:00
|
|
|
# Raft driver and scenario test
|
2020-01-28 21:09:42 +03:00
|
|
|
add_executable(
|
|
|
|
raft_driver
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/consensus/raft/test/driver.cpp
|
|
|
|
)
|
2019-07-19 15:56:29 +03:00
|
|
|
use_client_mbedtls(raft_driver)
|
2020-01-28 21:09:42 +03:00
|
|
|
target_include_directories(raft_driver PRIVATE src/raft)
|
2019-12-06 12:27:55 +03:00
|
|
|
add_dependencies(raft_driver flatbuffers)
|
2019-07-19 15:56:29 +03:00
|
|
|
add_test(
|
|
|
|
NAME raft_scenario_test
|
|
|
|
COMMAND
|
2020-01-28 21:09:42 +03:00
|
|
|
${PYTHON} ${CMAKE_SOURCE_DIR}/tests/raft_scenarios_runner.py
|
|
|
|
./raft_driver ${CMAKE_SOURCE_DIR}/tests/raft_scenarios
|
|
|
|
${CMAKE_SOURCE_DIR}
|
|
|
|
)
|
2019-07-19 15:56:29 +03:00
|
|
|
set_property(TEST raft_scenario_test PROPERTY LABELS raft_scenario)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
# Storing signed votes test
|
2019-12-06 19:56:16 +03:00
|
|
|
add_e2e_test(
|
|
|
|
NAME voting_history_test
|
2020-01-28 21:09:42 +03:00
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/votinghistory.py
|
|
|
|
)
|
2020-01-20 19:15:19 +03:00
|
|
|
|
2020-02-04 16:57:26 +03:00
|
|
|
# Member client end to end tests
|
2019-12-10 17:42:01 +03:00
|
|
|
add_e2e_test(
|
2020-02-04 16:57:26 +03:00
|
|
|
NAME member_client_test
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/memberclient.py
|
2019-12-10 17:42:01 +03:00
|
|
|
)
|
2019-09-30 13:26:31 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
# Lua sample app (tx regulator) end to end test
|
2019-12-10 17:42:01 +03:00
|
|
|
add_e2e_test(
|
|
|
|
NAME lua_txregulator_test
|
2020-01-28 21:09:42 +03:00
|
|
|
PYTHON_SCRIPT
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/samples/apps/txregulator/tests/txregulatorclient.py
|
2019-12-10 17:42:01 +03:00
|
|
|
ADDITIONAL_ARGS
|
2020-01-28 21:09:42 +03:00
|
|
|
--app-script
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/samples/apps/txregulator/app/txregulator.lua
|
|
|
|
--datafile
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/samples/apps/txregulator/dataset/sample_data.csv
|
|
|
|
)
|
2019-11-20 19:38:34 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
# Receipts end to end test
|
2019-12-10 17:42:01 +03:00
|
|
|
add_e2e_test(
|
2020-01-28 21:09:42 +03:00
|
|
|
NAME receipts_test PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/receipts.py
|
2019-12-10 17:42:01 +03:00
|
|
|
)
|
2019-07-19 15:56:29 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if(QUOTES_ENABLED)
|
2019-09-30 13:26:31 +03:00
|
|
|
add_e2e_test(
|
2019-12-10 17:42:01 +03:00
|
|
|
NAME governance_tests
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/governance.py
|
2020-01-28 21:09:42 +03:00
|
|
|
ADDITIONAL_ARGS --oesign ${OE_SIGN_PATH}
|
2019-09-30 13:26:31 +03:00
|
|
|
)
|
2019-12-10 17:42:01 +03:00
|
|
|
endif()
|
2019-07-19 15:56:29 +03:00
|
|
|
|
2019-12-10 17:42:01 +03:00
|
|
|
add_e2e_test(
|
|
|
|
NAME recovery_tests
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/recovery.py
|
2020-01-28 21:09:42 +03:00
|
|
|
ADDITIONAL_ARGS ${RECOVERY_ARGS}
|
2019-12-10 17:42:01 +03:00
|
|
|
)
|
2019-11-08 23:39:11 +03:00
|
|
|
|
2019-12-10 17:42:01 +03:00
|
|
|
add_e2e_test(
|
|
|
|
NAME test_suite
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_suite.py
|
|
|
|
IS_SUITE TRUE
|
2020-01-28 21:09:42 +03:00
|
|
|
ADDITIONAL_ARGS --test-duration 150 --enforce-reqs
|
2019-12-10 17:42:01 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
add_e2e_test(
|
|
|
|
NAME lua_end_to_end_batched
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_batched.py
|
2020-01-28 21:09:42 +03:00
|
|
|
ADDITIONAL_ARGS --app-script
|
|
|
|
${CMAKE_SOURCE_DIR}/src/apps/batched/batched.lua
|
|
|
|
)
|
2019-11-13 12:54:32 +03:00
|
|
|
|
2020-01-22 16:33:09 +03:00
|
|
|
add_e2e_test(
|
|
|
|
NAME js_end_to_end_logging
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_logging.py
|
2020-01-28 21:09:42 +03:00
|
|
|
ADDITIONAL_ARGS --js-app-script
|
|
|
|
${CMAKE_SOURCE_DIR}/src/apps/logging/loggingjs.lua
|
2020-01-22 16:33:09 +03:00
|
|
|
)
|
|
|
|
|
2019-11-13 12:54:32 +03:00
|
|
|
add_e2e_test(
|
|
|
|
NAME lua_end_to_end_logging
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_logging.py
|
2020-01-28 21:09:42 +03:00
|
|
|
ADDITIONAL_ARGS --app-script
|
|
|
|
${CMAKE_SOURCE_DIR}/src/apps/logging/logging.lua
|
2019-11-13 12:54:32 +03:00
|
|
|
)
|
2019-07-19 15:56:29 +03:00
|
|
|
|
2019-11-13 12:54:32 +03:00
|
|
|
add_e2e_test(
|
|
|
|
NAME end_to_end_scenario
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_scenarios.py
|
2020-01-28 21:09:42 +03:00
|
|
|
ADDITIONAL_ARGS --scenario
|
|
|
|
${CMAKE_SOURCE_DIR}/tests/simple_logging_scenario.json
|
2019-11-13 12:54:32 +03:00
|
|
|
)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if(NOT SAN)
|
2019-09-30 13:26:31 +03:00
|
|
|
add_e2e_test(
|
2020-01-28 21:09:42 +03:00
|
|
|
NAME connections PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/connections.py
|
2019-11-13 12:54:32 +03:00
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
add_e2e_test(
|
|
|
|
NAME schema_tests
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/schema.py
|
2020-01-28 21:09:42 +03:00
|
|
|
ADDITIONAL_ARGS -p liblogging --schema-dir
|
|
|
|
${CMAKE_SOURCE_DIR}/sphinx/source/schemas
|
2019-11-13 12:54:32 +03:00
|
|
|
)
|
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if(QUOTES_ENABLED)
|
2019-11-13 12:54:32 +03:00
|
|
|
add_e2e_test(
|
|
|
|
NAME reconfiguration_test
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/reconfiguration.py
|
|
|
|
)
|
|
|
|
|
|
|
|
add_e2e_test(
|
|
|
|
NAME code_update_test
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/code_update.py
|
2020-02-07 14:32:15 +03:00
|
|
|
ADDITIONAL_ARGS --oesign ${OE_SIGN_PATH} --election-timeout 10000
|
2019-07-19 15:56:29 +03:00
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
else()
|
2019-10-29 18:05:58 +03:00
|
|
|
message(STATUS "Using PBFT as consensus")
|
|
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/pbft.cmake)
|
2020-02-15 01:51:30 +03:00
|
|
|
|
|
|
|
add_e2e_test(
|
|
|
|
NAME late_joiners
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/late_joiners.py
|
|
|
|
ADDITIONAL_ARGS --skip-suspension
|
|
|
|
)
|
|
|
|
|
2019-11-25 19:52:04 +03:00
|
|
|
endif()
|
2019-11-07 14:55:23 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if(BUILD_SMALLBANK)
|
2019-12-10 17:42:01 +03:00
|
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/samples/apps/smallbank/smallbank.cmake)
|
|
|
|
endif()
|
2019-11-25 19:52:04 +03:00
|
|
|
|
2020-01-27 16:53:23 +03:00
|
|
|
add_e2e_test(
|
|
|
|
NAME end_to_end_logging
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_logging.py
|
|
|
|
CURL_CLIENT TRUE
|
|
|
|
)
|
|
|
|
|
|
|
|
add_e2e_test(
|
|
|
|
NAME election_tests
|
|
|
|
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/election.py
|
2020-01-28 21:09:42 +03:00
|
|
|
ADDITIONAL_ARGS --election-timeout 2000
|
2020-01-27 16:53:23 +03:00
|
|
|
)
|
2019-12-10 17:42:01 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if(NOT PBFT)
|
2019-12-10 17:42:01 +03:00
|
|
|
# Logging scenario perf test
|
|
|
|
add_perf_test(
|
|
|
|
NAME logging_scenario_perf_test
|
|
|
|
PYTHON_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/tests/perfclient.py
|
|
|
|
CLIENT_BIN ./scenario_perf_client
|
2020-01-08 12:02:41 +03:00
|
|
|
LABEL log_scenario
|
2019-11-25 19:52:04 +03:00
|
|
|
ADDITIONAL_ARGS
|
2020-01-28 21:09:42 +03:00
|
|
|
--package
|
|
|
|
liblogging
|
|
|
|
--scenario-file
|
|
|
|
${CMAKE_CURRENT_LIST_DIR}/tests/perf_logging_scenario_100txs.json
|
|
|
|
--max-writes-ahead
|
|
|
|
1000
|
|
|
|
--repetitions
|
|
|
|
1000
|
2019-11-25 19:52:04 +03:00
|
|
|
)
|
2019-12-09 20:13:27 +03:00
|
|
|
endif()
|
2019-11-25 19:52:04 +03:00
|
|
|
|
2020-01-28 21:09:42 +03:00
|
|
|
if(EXTENSIVE_TESTS)
|
2019-04-26 18:27:27 +03:00
|
|
|
set_tests_properties(recovery_tests PROPERTIES TIMEOUT 2000)
|
|
|
|
endif()
|
|
|
|
endif()
|