CCF/CMakeLists.txt

932 строки
26 KiB
CMake
Исходник Обычный вид История

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-06-25 13:45:58 +03:00
include(${CCF_DIR}/cmake/version.cmake)
2019-04-26 18:27:27 +03:00
2020-01-28 21:09:42 +03:00
project(
ccf
2020-06-25 13:45:58 +03:00
VERSION ${CCF_RELEASE_VERSION}
2020-01-28 21:09:42 +03:00
LANGUAGES C CXX
)
2019-04-26 18:27:27 +03:00
set(ENV{BETTER_EXCEPTIONS} 1)
2020-06-25 13:45:58 +03:00
message(STATUS "CCF version=${CCF_VERSION}")
message(STATUS "CCF release version=${CCF_RELEASE_VERSION}")
include(${CCF_DIR}/cmake/cpack_settings.cmake)
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-28 21:09:42 +03:00
# $ cmake -DCMAKE_INSTALL_PREFIX=/opt/myplace ..
#
2020-01-28 21:09:42 +03:00
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX
2020-06-30 17:46:23 +03:00
"/opt/${CCF_VERSION}"
2020-01-28 21:09:42 +03:00
CACHE PATH "Default install prefix" FORCE
)
endif()
message(STATUS "CMAKE_INSTALL_PREFIX is '${CMAKE_INSTALL_PREFIX}'")
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/preproject.cmake
DESTINATION cmake
)
include(GNUInstallDirs)
2019-12-16 14:55:33 +03:00
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/common.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/aft.cmake)
2020-03-06 14:52:17 +03:00
2020-06-25 13:45:58 +03:00
configure_file(
${CCF_DIR}/src/host/version.h.in ${CCF_GENERATED_DIR}/version.h @ONLY
)
configure_file(${CCF_DIR}/python/setup.py.in ${CCF_DIR}/python/setup.py @ONLY)
2020-06-25 13:45:58 +03:00
2021-03-26 19:49:12 +03:00
if(ENABLE_BFT)
set(CONSENSUSES cft bft)
else()
set(CONSENSUSES cft)
endif()
2019-12-16 14:55:33 +03:00
2019-04-26 18:27:27 +03:00
option(BUILD_TESTS "Build tests" ON)
2020-03-26 18:30:06 +03:00
option(BUILD_UNIT_TESTS "Build unit tests" ON)
2020-04-07 13:05:24 +03:00
option(TLS_TEST "TLS Test using https://github.com/drwetter/testssl.sh" OFF)
2020-12-10 13:56:04 +03:00
option(ZAP_TEST
"ZAP fuzz test using https://www.zaproxy.org/docs/docker/api-scan/" OFF
)
2019-04-30 13:30:59 +03:00
option(BUILD_SMALLBANK "Build SmallBank sample app and clients" ON)
2021-03-23 18:55:34 +03:00
option(BUILD_TPCC "Build TPPC sample app and clients" ON)
2019-04-30 13:30:59 +03:00
# Build common library for CCF enclaves
add_custom_target(ccf ALL)
set(CCF_IMPL_SOURCE
${CCF_DIR}/src/enclave/main.cpp ${CCF_DIR}/src/enclave/thread_local.cpp
${CCF_DIR}/src/js/wrap.cpp
)
if("sgx" IN_LIST COMPILE_TARGETS)
# enclave version
2020-01-28 21:09:42 +03:00
add_library(
ccf.enclave STATIC ${CCF_IMPL_SOURCE} ${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 21:09:42 +03:00
target_compile_options(ccf.enclave PUBLIC -nostdinc -nostdinc++)
add_warning_checks(ccf.enclave)
2020-01-28 21:09:42 +03:00
target_include_directories(
ccf.enclave SYSTEM
PUBLIC
$<BUILD_INTERFACE:${CCF_GENERATED_DIR}>
$<INSTALL_INTERFACE:include/ccf/> #< This contains the private headers
#< which are currently under src, and
#< should be removed or renamed
$<INSTALL_INTERFACE:include/>
$<INSTALL_INTERFACE:include/3rdparty/>
)
2020-01-28 21:09:42 +03:00
target_link_libraries(
ccf.enclave
2020-07-28 13:56:45 +03:00
PUBLIC ${OE_TARGET_ENCLAVE_AND_STD}
2020-05-06 16:03:17 +03:00
-lgcc
2021-03-18 12:01:12 +03:00
quickjs.enclave
2020-01-28 21:09:42 +03:00
ccfcrypto.enclave
http_parser.enclave
lua.enclave
aft.enclave
sss.enclave
ccf_endpoints.enclave
)
2020-01-28 21:09:42 +03:00
set_property(TARGET ccf.enclave PROPERTY POSITION_INDEPENDENT_CODE ON)
enable_quote_code(ccf.enclave)
2020-07-28 13:56:45 +03:00
add_lvi_mitigations(ccf.enclave)
install(
TARGETS ccf.enclave
EXPORT ccf
DESTINATION lib
)
add_dependencies(ccf ccf.enclave)
endif()
if("virtual" IN_LIST COMPILE_TARGETS)
# virtual version
add_library(ccf.virtual STATIC ${CCF_IMPL_SOURCE})
2020-01-28 21:09:42 +03:00
target_compile_definitions(
ccf.virtual PUBLIC INSIDE_ENCLAVE VIRTUAL_ENCLAVE
_LIBCPP_HAS_THREAD_API_PTHREAD
)
target_compile_options(ccf.virtual PUBLIC ${COMPILE_LIBCXX})
add_warning_checks(ccf.virtual)
2020-01-28 21:09:42 +03:00
target_include_directories(
ccf.virtual SYSTEM
PUBLIC
$<BUILD_INTERFACE:${CCF_GENERATED_DIR}>
$<INSTALL_INTERFACE:include/ccf/> #< This contains the private headers
#< which are currently under src, and
#< should be removed or renamed
$<INSTALL_INTERFACE:include/>
$<INSTALL_INTERFACE:include/3rdparty/>
)
2020-01-28 21:09:42 +03:00
target_link_libraries(
ccf.virtual
2020-05-28 11:39:05 +03:00
PUBLIC ${LINK_LIBCXX}
2020-05-06 16:03:17 +03:00
-lgcc
2020-01-28 21:09:42 +03:00
ccfcrypto.host
http_parser.host
lua.host
2021-03-18 12:01:12 +03:00
quickjs.host
aft.virtual
sss.host
ccf_endpoints.host
2021-02-23 21:58:30 +03:00
openenclave::oehost
2020-01-28 21:09:42 +03:00
${CMAKE_THREAD_LIBS_INIT}
)
2020-01-28 21:09:42 +03:00
set_property(TARGET ccf.virtual PROPERTY POSITION_INDEPENDENT_CODE ON)
add_san(ccf.virtual)
install(
TARGETS ccf.virtual
EXPORT ccf
DESTINATION lib
)
add_dependencies(ccf ccf.virtual)
endif()
install(
EXPORT ccf
DESTINATION cmake
FILE ccf-targets.cmake
)
# Install selected 3rd-party library includes
function(install_3rdparty name)
install(
DIRECTORY 3rdparty/${name}
DESTINATION include/3rdparty
FILES_MATCHING
PATTERN "*.h"
PATTERN "*.hpp"
)
endfunction()
install_3rdparty(backward-cpp)
install_3rdparty(fmt)
install_3rdparty(llhttp)
install_3rdparty(merklecpp)
install_3rdparty(msgpack)
install_3rdparty(nlohmann)
install_3rdparty(quickjs)
install_3rdparty(small_vector)
install_3rdparty(snmalloc)
install_3rdparty(sss)
# Install all CCF headers
install(
DIRECTORY src/
DESTINATION include/ccf
FILES_MATCHING
PATTERN "*.h"
PATTERN "*/test*" EXCLUDE
)
2021-03-01 23:27:07 +03:00
# Install all public CCF headers
install(
DIRECTORY include/
DESTINATION include
FILES_MATCHING
PATTERN "*.h"
)
# Install CCF Python infrastructure
install(
DIRECTORY tests/infra/
2020-02-07 17:29:02 +03:00
DESTINATION bin/infra
FILES_MATCHING
PATTERN "*.py"
PATTERN "*/__pycache__*" EXCLUDE
)
2020-10-05 13:00:31 +03:00
install(PROGRAMS tests/sandbox/sandbox.sh DESTINATION bin)
install(FILES tests/sandbox/sandbox_gov.lua DESTINATION bin)
2021-03-22 22:21:44 +03:00
install(FILES tests/sandbox/sandbox_constitution.js DESTINATION bin)
install(FILES tests/start_network.py DESTINATION bin)
2020-02-07 17:29:02 +03:00
install(FILES tests/requirements.txt DESTINATION bin)
2020-11-25 13:55:12 +03:00
# Generate an ephemeral signing key
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/signing_key.pem
COMMAND openssl genrsa -out ${CMAKE_CURRENT_BINARY_DIR}/signing_key.pem -3
3072
)
add_custom_target(
signing_key ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/signing_key.pem
)
# Add Logging app. Rebuilt/redefined here, rather than via add_subdirectory
add_ccf_app(logging SRCS samples/apps/logging/logging.cpp)
2020-01-28 21:09:42 +03:00
sign_app_library(
2020-11-27 11:53:09 +03:00
logging.enclave ${CMAKE_CURRENT_SOURCE_DIR}/samples/apps/logging/oe_sign.conf
2020-11-25 13:55:12 +03:00
${CMAKE_CURRENT_BINARY_DIR}/signing_key.pem
)
# Add NoBuiltins app
add_subdirectory(${CCF_DIR}/samples/apps/nobuiltins)
2020-01-28 21:09:42 +03:00
if(BUILD_TESTS)
2019-04-26 18:27:27 +03:00
enable_testing()
# Unit tests
2020-03-26 18:30:06 +03:00
if(BUILD_UNIT_TESTS)
add_unit_test(map_test ${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/map_test.cpp)
2019-04-26 18:27:27 +03:00
2020-03-26 18:30:06 +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
add_unit_test(
openapi_test ${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/openapi.cpp
)
target_link_libraries(openapi_test PRIVATE http_parser.host)
2020-03-26 18:30:06 +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-03-26 18:30:06 +03:00
add_unit_test(
2020-06-29 17:07:27 +03:00
kv_test
${CMAKE_CURRENT_SOURCE_DIR}/src/kv/test/kv_test.cpp
2020-03-26 18:30:06 +03:00
${CMAKE_CURRENT_SOURCE_DIR}/src/kv/test/kv_contention.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/kv/test/kv_serialisation.cpp
2020-06-29 17:07:27 +03:00
${CMAKE_CURRENT_SOURCE_DIR}/src/kv/test/kv_snapshot.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/kv/test/kv_dynamic_tables.cpp
2020-03-26 18:30:06 +03:00
)
target_link_libraries(
kv_test PRIVATE ${CMAKE_THREAD_LIBS_INIT} http_parser.host
2020-03-26 18:30:06 +03:00
)
2019-04-26 18:27:27 +03:00
2020-03-26 18:30:06 +03:00
add_unit_test(
ds_test
${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/ring_buffer.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/typed_messages.cpp
2020-03-26 18:30:06 +03:00
${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/serializer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/hash.cpp
2020-07-27 22:29:24 +03:00
${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/thread_messaging.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/lru.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/ds/test/hex.cpp
2020-03-26 18:30:06 +03:00
)
target_link_libraries(ds_test PRIVATE ${CMAKE_THREAD_LIBS_INIT})
2020-01-28 21:09:42 +03:00
2020-03-26 18:30:06 +03:00
add_unit_test(
ledger_test ${CMAKE_CURRENT_SOURCE_DIR}/src/host/test/ledger.cpp
)
2020-01-28 21:09:42 +03:00
2020-03-26 18:30:06 +03:00
add_unit_test(
raft_test ${CMAKE_CURRENT_SOURCE_DIR}/src/consensus/aft/test/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/consensus/aft/test/view_history.cpp
2020-03-26 18:30:06 +03:00
)
target_link_libraries(raft_test PRIVATE ccfcrypto.host)
2020-01-28 21:09:42 +03:00
2020-03-26 18:30:06 +03:00
add_unit_test(
raft_enclave_test
${CMAKE_CURRENT_SOURCE_DIR}/src/consensus/aft/test/enclave.cpp
2020-03-26 18:30:06 +03:00
)
target_include_directories(raft_enclave_test PRIVATE ${CCFCRYPTO_INC})
target_link_libraries(raft_enclave_test PRIVATE ccfcrypto.host)
2019-04-26 18:27:27 +03:00
2020-03-26 18:30:06 +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 ccfcrypto.host)
2020-01-28 21:09:42 +03:00
2020-03-26 18:30:06 +03:00
add_unit_test(
history_test ${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/history.cpp
)
target_link_libraries(history_test PRIVATE ccfcrypto.host http_parser.host)
2020-01-28 21:09:42 +03:00
add_unit_test(
progress_tracker_test
${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/progress_tracker.cpp
)
target_link_libraries(progress_tracker_test PRIVATE ccfcrypto.host)
2020-03-26 18:30:06 +03:00
add_unit_test(
secret_sharing_test
${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/secret_share.cpp
)
target_link_libraries(secret_sharing_test PRIVATE sss.host)
2020-03-26 18:30:06 +03:00
add_unit_test(
encryptor_test ${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/encryptor.cpp
)
target_link_libraries(encryptor_test PRIVATE ccfcrypto.host)
2019-04-26 18:27:27 +03:00
add_unit_test(
2020-06-15 17:58:45 +03:00
historical_queries_test
${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/historical_queries.cpp
)
target_link_libraries(
historical_queries_test PRIVATE http_parser.host sss.host
)
add_unit_test(
snapshot_test ${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/snapshot.cpp
)
target_link_libraries(snapshot_test PRIVATE)
add_unit_test(
snapshotter_test
${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/snapshotter.cpp
)
target_link_libraries(snapshotter_test PRIVATE)
2020-03-26 18:30:06 +03:00
add_unit_test(
msgpack_serialization_test
${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/msgpack_serialization.cpp
)
2020-03-26 18:30:06 +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})
2019-04-26 18:27:27 +03:00
add_test_bin(cert_test ${CMAKE_CURRENT_SOURCE_DIR}/src/tls/test/cert.cpp)
target_link_libraries(cert_test PRIVATE ${CMAKE_THREAD_LIBS_INIT})
2020-03-26 18:30:06 +03:00
add_unit_test(
key_exchange_test
${CMAKE_CURRENT_SOURCE_DIR}/src/tls/test/key_exchange.cpp
)
target_link_libraries(key_exchange_test PRIVATE)
2019-04-26 18:27:27 +03:00
2020-03-26 18:30:06 +03:00
add_unit_test(
channels_test ${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/channels.cpp
)
target_link_libraries(channels_test PRIVATE)
2019-04-26 18:27:27 +03:00
2020-03-26 18:30:06 +03:00
add_unit_test(
http_test ${CMAKE_CURRENT_SOURCE_DIR}/src/http/test/http_test.cpp
)
target_link_libraries(http_test PRIVATE http_parser.host)
2020-03-26 18:30:06 +03:00
add_unit_test(
2021-03-18 12:01:12 +03:00
frontend_test ${CMAKE_CURRENT_SOURCE_DIR}/src/js/wrap.cpp
2020-03-26 18:30:06 +03:00
${CMAKE_CURRENT_SOURCE_DIR}/src/node/rpc/test/frontend_test.cpp
)
target_link_libraries(
frontend_test PRIVATE ${CMAKE_THREAD_LIBS_INIT} lua.host http_parser.host
sss.host ccf_endpoints.host quickjs.host
2020-03-26 18:30:06 +03:00
)
2020-01-28 21:09:42 +03:00
2020-05-01 15:55:20 +03:00
add_unit_test(
tx_status_test
${CMAKE_CURRENT_SOURCE_DIR}/src/node/rpc/test/tx_status_test.cpp
)
2020-03-26 18:30:06 +03:00
add_unit_test(
2021-03-18 12:01:12 +03:00
member_voting_test ${CMAKE_CURRENT_SOURCE_DIR}/src/js/wrap.cpp
2020-03-26 18:30:06 +03:00
${CMAKE_CURRENT_SOURCE_DIR}/src/node/rpc/test/member_voting_test.cpp
)
target_link_libraries(
member_voting_test
PRIVATE ${CMAKE_THREAD_LIBS_INIT} lua.host http_parser.host sss.host
ccf_endpoints.host quickjs.host
)
set_tests_properties(
member_voting_test
PROPERTIES ENVIRONMENT
RUNTIME_CONFIG_DIR=${CMAKE_SOURCE_DIR}/src/runtime_config
)
add_unit_test(
2021-03-18 12:01:12 +03:00
proposal_id_test ${CMAKE_CURRENT_SOURCE_DIR}/src/js/wrap.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/node/rpc/test/proposal_id_test.cpp
)
target_link_libraries(
proposal_id_test
PRIVATE ${CMAKE_THREAD_LIBS_INIT} lua.host http_parser.host sss.host
ccf_endpoints.host quickjs.host
2020-03-26 18:30:06 +03:00
)
2020-01-28 21:09:42 +03:00
2020-03-26 18:30:06 +03:00
add_unit_test(
node_frontend_test
${CMAKE_CURRENT_SOURCE_DIR}/src/node/rpc/test/node_frontend_test.cpp
)
target_link_libraries(
2020-12-15 14:23:14 +03:00
node_frontend_test PRIVATE ${CMAKE_THREAD_LIBS_INIT} lua.host
http_parser.host sss.host ccf_endpoints.host
2020-03-26 18:30:06 +03:00
)
2020-03-26 18:30:06 +03:00
add_unit_test(
lua_test ${CMAKE_CURRENT_SOURCE_DIR}/src/lua_interp/test/lua_test.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/lua_interp/test/lua_kv.cpp
)
target_include_directories(lua_test PRIVATE ${LUA_DIR})
target_link_libraries(lua_test PRIVATE lua.host http_parser.host)
2020-03-26 18:30:06 +03:00
2020-06-11 15:50:24 +03:00
add_unit_test(
merkle_test ${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/merkle_test.cpp
)
2020-03-26 18:30:06 +03:00
# Merkle Tree memory test
add_executable(merkle_mem src/node/test/merkle_mem.cpp)
target_link_libraries(merkle_mem PRIVATE ${CMAKE_THREAD_LIBS_INIT} crypto)
2020-03-26 18:30:06 +03:00
# Raft driver and scenario test
add_executable(
raft_driver ${CMAKE_CURRENT_SOURCE_DIR}/src/consensus/aft/test/driver.cpp
2020-03-26 18:30:06 +03:00
)
target_link_libraries(raft_driver PRIVATE ccfcrypto.host)
target_include_directories(raft_driver PRIVATE src/aft)
2020-03-26 18:30:06 +03:00
add_test(
NAME raft_scenario_test
COMMAND
${PYTHON} ${CMAKE_SOURCE_DIR}/tests/raft_scenarios_runner.py
./raft_driver ${CMAKE_SOURCE_DIR}/tests/raft_scenarios
${CMAKE_SOURCE_DIR}
)
set_property(TEST raft_scenario_test PROPERTY LABELS raft_scenario)
add_test(NAME csr_test COMMAND ${PYTHON} ${CMAKE_SOURCE_DIR}/tests/certs.py
./cert_test
)
set_property(
TEST csr_test
APPEND
PROPERTY LABELS unit_test
)
2020-03-26 18:30:06 +03:00
endif()
2020-01-28 21:09:42 +03:00
# 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)
2020-03-25 19:02:04 +03:00
add_picobench(ring_buffer_bench SRCS src/ds/test/ring_buffer_bench.cpp)
2020-01-28 21:09:42 +03:00
add_picobench(
crypto_bench
SRCS src/crypto/test/bench.cpp
LINK_LIBS
)
add_picobench(merkle_bench SRCS src/node/test/merkle_bench.cpp)
add_picobench(history_bench SRCS src/node/test/history_bench.cpp)
2020-01-28 21:09:42 +03:00
add_picobench(
kv_bench SRCS src/kv/test/kv_bench.cpp src/enclave/thread_local.cpp
2020-02-06 16:54:00 +03:00
)
2020-06-15 17:58:45 +03:00
add_picobench(hash_bench SRCS src/ds/test/hash_bench.cpp)
add_picobench(digest_bench SRCS src/crypto/test/digest_bench.cpp)
2019-04-26 18:27:27 +03:00
2020-03-06 14:52:17 +03:00
# Storing signed governance operations
add_e2e_test(
NAME governance_history_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/governance_history.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
ADDITIONAL_ARGS
# Higher snapshot interval as snapshots trigger new ledger chunks, which
# may result in latest chunk being partially written
--snapshot-tx-interval 10000
2020-03-06 14:52:17 +03:00
)
2020-03-06 14:52:17 +03:00
add_e2e_test(
NAME recovery_test
2020-03-06 14:52:17 +03:00
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/recovery.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
2021-02-04 18:35:33 +03:00
ADDITIONAL_ARGS --recovery 3
)
add_e2e_test(
NAME recovery_test_suite
2020-03-06 14:52:17 +03:00
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_suite.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
2020-04-07 15:59:49 +03:00
LABEL suite
ADDITIONAL_ARGS
--test-duration
150
--enforce-reqs
--test-suite
rekey_recovery
--test-suite
membership_recovery
2020-03-06 14:52:17 +03:00
)
2019-11-08 23:39:11 +03:00
add_e2e_test(
NAME reconfiguration_test_suite
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_suite.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
LABEL suite
ADDITIONAL_ARGS --test-duration 200 --enforce-reqs --test-suite
reconfiguration
)
2020-06-17 16:22:26 +03:00
add_e2e_test(
NAME full_test_suite
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_suite.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
2020-06-17 16:22:26 +03:00
LABEL suite
ADDITIONAL_ARGS
--oe-binary
${OE_BINDIR}
2020-06-17 16:22:26 +03:00
--ledger-recovery-timeout
20
--test-duration
200
--enforce-reqs
--test-suite
all
)
if(LONG_TESTS)
set(ROTATION_TEST_ARGS --rotation-retirements 10 --rotation-suspensions 10)
endif()
2020-09-30 15:16:57 +03:00
add_e2e_test(
NAME rotation_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/rotation.py
CONSENSUS cft
2021-02-05 22:14:18 +03:00
LABEL rotation
ADDITIONAL_ARGS ${ROTATION_TEST_ARGS}
2020-09-30 15:16:57 +03:00
)
add_e2e_test(
NAME committable_suffix_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/committable.py
CONSENSUS cft
ADDITIONAL_ARGS --sig-ms-interval 100
2020-09-30 15:16:57 +03:00
)
2020-03-06 14:52:17 +03:00
add_e2e_test(
2020-11-20 18:17:25 +03:00
NAME js_batched_stress_test
2020-03-17 17:50:19 +03:00
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_batched.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
ADDITIONAL_ARGS
--js-app-bundle
${CMAKE_SOURCE_DIR}/src/apps/batched
--raft-election-timeout-ms
10000 # Larger election timeout as recording large JS applications may
# trigger leadership changes
2020-03-06 14:52:17 +03:00
)
2020-08-07 16:57:49 +03:00
add_e2e_test(
NAME modules_test
2020-11-19 21:47:53 +03:00
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/js-modules/modules.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
ADDITIONAL_ARGS
--raft-election-timeout-ms 10000 # Larger election timeout as recording
# large JS applications may trigger
# leadership changes
2020-08-07 16:57:49 +03:00
)
add_e2e_test(
NAME custom_authorization_test
2020-11-19 21:47:53 +03:00
PYTHON_SCRIPT
${CMAKE_SOURCE_DIR}/tests/js-custom-authorization/custom_authorization.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
2020-11-19 21:47:53 +03:00
ADDITIONAL_ARGS --js-app-bundle
${CMAKE_SOURCE_DIR}/tests/js-custom-authorization
)
2021-02-16 23:07:54 +03:00
add_e2e_test(
NAME js_limits_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/js-limits/limits.py
CONSENSUS cft
ADDITIONAL_ARGS --js-app-bundle ${CMAKE_SOURCE_DIR}/tests/js-limits
)
2020-11-25 16:53:04 +03:00
add_e2e_test(
NAME authentication_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/js-authentication/authentication.py
CONSENSUS cft
ADDITIONAL_ARGS --js-app-bundle ${CMAKE_SOURCE_DIR}/tests/js-authentication
)
2020-09-08 13:21:57 +03:00
add_e2e_test(
NAME content_types_test
2020-11-19 21:47:53 +03:00
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/js-content-types/content_types.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
2020-11-19 21:47:53 +03:00
ADDITIONAL_ARGS --js-app-bundle ${CMAKE_SOURCE_DIR}/tests/js-content-types
2020-09-08 13:21:57 +03:00
)
2020-11-24 16:49:13 +03:00
add_e2e_test(
NAME governance_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/governance.py
CONSENSUS cft
ADDITIONAL_ARGS --oe-binary ${OE_BINDIR} --initial-operator-count 1
)
add_e2e_test(
NAME governance_no_session_auth_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/governance.py
CONSENSUS cft
ADDITIONAL_ARGS --oe-binary ${OE_BINDIR} --initial-operator-count 1
--disable-member-session-auth
)
2020-11-24 16:49:13 +03:00
add_e2e_test(
2020-11-24 19:39:57 +03:00
NAME ca_certs_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/ca_certs.py
2020-11-24 16:49:13 +03:00
CONSENSUS cft
)
add_e2e_test(
NAME jwt_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/jwt_test.py
CONSENSUS cft
)
add_e2e_test(
NAME nobuiltins_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/nobuiltins.py
CONSENSUS cft
ADDITIONAL_ARGS -p
${CMAKE_BINARY_DIR}/samples/apps/nobuiltins/libnobuiltins
)
2020-03-06 14:52:17 +03:00
if(QUOTES_ENABLED)
2019-11-13 12:54:32 +03:00
add_e2e_test(
2020-03-06 14:52:17 +03:00
NAME reconfiguration_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/reconfiguration.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
2019-11-13 12:54:32 +03:00
)
2020-02-15 01:51:30 +03:00
add_e2e_test(
2020-03-06 14:52:17 +03:00
NAME code_update_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/code_update.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
ADDITIONAL_ARGS --oe-binary ${OE_BINDIR} --js-app-bundle
${CMAKE_SOURCE_DIR}/samples/apps/logging/js
2020-02-15 01:51:30 +03:00
)
endif()
2020-01-28 21:09:42 +03:00
if(BUILD_SMALLBANK)
2020-11-27 11:53:09 +03:00
include(${CMAKE_CURRENT_SOURCE_DIR}/src/apps/smallbank/smallbank.cmake)
2019-12-10 17:42:01 +03:00
endif()
2021-03-23 18:55:34 +03:00
if(BUILD_TPCC)
include(${CMAKE_CURRENT_SOURCE_DIR}/src/apps/tpcc/tpcc.cmake)
endif()
2020-04-07 13:05:24 +03:00
if(TLS_TEST)
add_custom_target(
testssl ALL
COMMAND
test -d testssl || git clone https://github.com/drwetter/testssl.sh
${CMAKE_CURRENT_BINARY_DIR}/testssl
)
endif()
add_e2e_test(
NAME js_e2e_logging_raft
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_logging.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
2020-11-27 11:53:09 +03:00
ADDITIONAL_ARGS --js-app-bundle ${CMAKE_SOURCE_DIR}/samples/apps/logging/js
)
2020-04-29 20:19:51 +03:00
add_e2e_test(
NAME e2e_scenario_raft
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_scenarios.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
ADDITIONAL_ARGS --scenario
${CMAKE_SOURCE_DIR}/tests/simple_logging_scenario.json
)
2020-04-29 20:19:51 +03:00
add_e2e_test(
2020-09-09 12:59:57 +03:00
NAME member_client_test_cft
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/memberclient.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
)
2020-04-29 20:19:51 +03:00
2020-11-10 18:34:58 +03:00
add_e2e_test(
NAME membership
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/membership.py
CONSENSUS cft
)
add_e2e_test(
NAME ledger_operation
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/ledger_operation.py
CONSENSUS cft
)
if(NOT SAN)
2020-12-18 12:37:39 +03:00
# Writing new ledger files and generating new snapshots uses more file
# descriptors so disable those for this test
2020-03-20 14:17:50 +03:00
add_e2e_test(
2020-09-09 12:59:57 +03:00
NAME connections_cft
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/connections.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
2020-12-18 12:37:39 +03:00
ADDITIONAL_ARGS --ledger-chunk-bytes 100Mib --snapshot-tx-interval 10000
2020-03-20 14:17:50 +03:00
)
endif()
2020-03-20 14:17:50 +03:00
if(TLS_TEST)
2020-03-17 17:50:19 +03:00
add_e2e_test(
2020-09-09 12:59:57 +03:00
NAME tlstest_cft
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/tlstest.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
LABEL tlstest
2020-03-17 17:50:19 +03:00
)
endif()
2020-03-17 17:50:19 +03:00
2020-12-10 13:56:04 +03:00
if(ZAP_TEST)
configure_file(
${CMAKE_SOURCE_DIR}/tests/zap.config ${CMAKE_BINARY_DIR}/zap.config
COPYONLY
)
add_e2e_test(
NAME zaptest_cft
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/zap.py
CONSENSUS cft
LABEL zaptest
)
endif()
add_e2e_test(
2020-09-09 12:59:57 +03:00
NAME schema_test_cft
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/schema.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
ADDITIONAL_ARGS -p liblogging --schema-dir ${CMAKE_SOURCE_DIR}/doc/schemas
)
add_e2e_test(
NAME tutorial_cft
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_tutorial.py
CONSENSUS cft
LABEL tutorial
CURL_CLIENT TRUE
ADDITIONAL_ARGS
-p liblogging --client-tutorial ${CMAKE_SOURCE_DIR}/python/tutorial.py
--ledger-tutorial ${CMAKE_SOURCE_DIR}/python/ledger_tutorial.py
)
2020-10-28 21:46:35 +03:00
add_e2e_sandbox_test(
NAME forum_app
SCRIPT ${CMAKE_SOURCE_DIR}/samples/apps/forum/ci.sh
CONSENSUS cft
LABEL forum
)
foreach(CONSENSUS ${CONSENSUSES})
2020-03-06 14:52:17 +03:00
add_e2e_test(
NAME cpp_e2e_logging_${CONSENSUS}
2020-03-06 14:52:17 +03:00
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/e2e_logging.py
CONSENSUS ${CONSENSUS}
)
2020-11-02 19:08:16 +03:00
add_e2e_test(
NAME election_test_${CONSENSUS}
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/election.py
CONSENSUS ${CONSENSUS}
)
add_e2e_test(
NAME vegeta_stress_${CONSENSUS}
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/vegeta_stress.py
CONSENSUS ${CONSENSUS}
LABEL vegeta
ADDITIONAL_ARGS -p liblogging
)
add_e2e_test(
NAME vegeta_long_stress_${CONSENSUS}
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/vegeta_stress.py
CONSENSUS ${CONSENSUS}
LABEL vegeta
CONFIGURATIONS long_stress
ADDITIONAL_ARGS -p liblogging --duration 45m
)
2020-03-06 14:52:17 +03:00
endforeach()
add_perf_test(
NAME ls
2020-04-09 17:53:31 +03:00
PYTHON_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/tests/infra/perfclient.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
2020-03-06 14:52:17 +03:00
CLIENT_BIN ./scenario_perf_client
ADDITIONAL_ARGS
--package
liblogging
--scenario-file
${CMAKE_CURRENT_LIST_DIR}/tests/perf_logging_scenario_100txs.json
--max-writes-ahead
1000
--repetitions
2020-12-18 12:37:39 +03:00
10000
2020-12-08 16:43:07 +03:00
--msg-ser-fmt
msgpack
2020-03-06 14:52:17 +03:00
)
2020-05-22 19:48:34 +03:00
add_perf_test(
NAME ls_ws
2020-05-22 19:48:34 +03:00
PYTHON_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/tests/infra/perfclient.py
2020-09-09 12:59:57 +03:00
CONSENSUS cft
2020-05-22 19:48:34 +03:00
CLIENT_BIN ./scenario_perf_client
ADDITIONAL_ARGS
--package
liblogging
--scenario-file
${CMAKE_CURRENT_LIST_DIR}/tests/perf_logging_scenario_100txs.json
--max-writes-ahead
1000
--repetitions
10000
--use-websockets
2020-12-08 16:43:07 +03:00
--msg-ser-fmt
msgpack
)
2021-01-27 02:41:59 +03:00
add_perf_test(
NAME ls_jwt
2021-01-27 02:41:59 +03:00
PYTHON_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/tests/infra/perfclient.py
CONSENSUS cft
CLIENT_BIN ./scenario_perf_client
ADDITIONAL_ARGS
--package
liblogging
--scenario-file
${CMAKE_CURRENT_LIST_DIR}/tests/perf_logging_scenario_100txs.json
--max-writes-ahead
1000
--repetitions
1000
--use-jwt
--msg-ser-fmt
msgpack
)
2020-12-08 16:43:07 +03:00
add_perf_test(
NAME ls_js
2020-12-08 16:43:07 +03:00
PYTHON_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/tests/infra/perfclient.py
CONSENSUS cft
CLIENT_BIN ./scenario_perf_client
ADDITIONAL_ARGS
--js-app-bundle
${CMAKE_SOURCE_DIR}/samples/apps/logging/js
--scenario-file
${CMAKE_CURRENT_LIST_DIR}/tests/perf_logging_scenario_100txs.json
--max-writes-ahead
1000
--repetitions
2020-12-18 12:37:39 +03:00
1000
2020-12-08 16:43:07 +03:00
--msg-ser-fmt
text
2020-05-22 19:48:34 +03:00
)
2021-01-27 02:41:59 +03:00
add_perf_test(
NAME ls_js_jwt
2021-01-27 02:41:59 +03:00
PYTHON_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/tests/infra/perfclient.py
CONSENSUS cft
CLIENT_BIN ./scenario_perf_client
ADDITIONAL_ARGS
--js-app-bundle
${CMAKE_SOURCE_DIR}/samples/apps/logging/js
--scenario-file
${CMAKE_CURRENT_LIST_DIR}/tests/perf_logging_scenario_100txs.json
--max-writes-ahead
1000
--repetitions
700
--use-jwt
--msg-ser-fmt
text
)
2019-04-26 18:27:27 +03:00
endif()
# Generate and install CMake export file for consumers using CMake
include(CMakePackageConfigHelpers)
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/ccf-config.cmake.in
${CMAKE_BINARY_DIR}/cmake/ccf-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake
PATH_VARS CMAKE_INSTALL_LIBDIR CMAKE_INSTALL_BINDIR CMAKE_INSTALL_INCLUDEDIR
)
write_basic_package_version_file(
${CMAKE_BINARY_DIR}/cmake/ccf-config-version.cmake
COMPATIBILITY SameMajorVersion
)
install(FILES ${CMAKE_BINARY_DIR}/cmake/ccf-config.cmake
${CMAKE_BINARY_DIR}/cmake/ccf-config-version.cmake
DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake
)