f629de7e60
* Storage takes care of the saving of setting when a new replica is added * Restore replicas at startup * Modify interactive_mg_runner + memgraph to support that data-directory can be configured in CONTEXT * Extend e2e test * Correct typo * Add flag to config to specify when replication should be stored (true by default when starting Memgraph) * Remove un-necessary "--" in yaml file * Make sure Memgraph stops if a replica can't be restored. * Add UT covering the parsing of ReplicaStatus to/from json * Add assert in e2e script to check that a port is free before using it * Add test covering crash on Jepsen * Make sure applciaiton crashes if it starts on corrupted replications' info Starting with a non-reponsive replica is allowed. * Add temporary startup flag: this is needed so jepsen do not automatically restore replica on startup of main. This will be removed in T0835
364 lines
13 KiB
CMake
364 lines
13 KiB
CMake
set(test_prefix memgraph__unit__)
|
|
|
|
find_package(fmt REQUIRED)
|
|
find_package(gflags REQUIRED)
|
|
find_package(Threads REQUIRED)
|
|
|
|
add_custom_target(memgraph__unit)
|
|
|
|
set(memgraph_unit_main main.cpp)
|
|
|
|
function(add_unit_test test_cpp)
|
|
_add_unit_test(${test_cpp} FALSE ${ARGN})
|
|
endfunction(add_unit_test)
|
|
|
|
function(add_unit_test_with_custom_main test_cpp)
|
|
_add_unit_test(${test_cpp} TRUE ${ARGN})
|
|
endfunction(add_unit_test_with_custom_main)
|
|
|
|
function(_add_unit_test test_cpp custom_main)
|
|
# get exec name (remove extension from the abs path)
|
|
get_filename_component(exec_name ${test_cpp} NAME_WE)
|
|
set(target_name ${test_prefix}${exec_name})
|
|
|
|
set(source_files
|
|
${test_cpp}
|
|
${ARGN})
|
|
|
|
if(NOT ${custom_main})
|
|
set(source_files
|
|
${source_files}
|
|
${memgraph_unit_main})
|
|
endif()
|
|
|
|
add_executable(${target_name} ${source_files})
|
|
|
|
# OUTPUT_NAME sets the real name of a target when it is built and can be
|
|
# used to help create two targets of the same name even though CMake
|
|
# requires unique logical target names
|
|
set_target_properties(${target_name} PROPERTIES OUTPUT_NAME ${exec_name})
|
|
target_link_libraries(${target_name} mg-memory mg-utils gtest gmock Threads::Threads dl)
|
|
|
|
# register test
|
|
if(TEST_COVERAGE)
|
|
add_test(${target_name} env LLVM_PROFILE_FILE=${exec_name}.profraw ./${exec_name})
|
|
else()
|
|
add_test(${target_name} ${exec_name})
|
|
endif()
|
|
|
|
# add to memgraph__unit target
|
|
add_dependencies(memgraph__unit ${target_name})
|
|
endfunction(_add_unit_test)
|
|
|
|
# Test utilities
|
|
add_library(storage_test_utils storage_test_utils.cpp)
|
|
target_link_libraries(storage_test_utils mg-storage-v2)
|
|
|
|
# Test integrations-kafka
|
|
add_library(kafka-mock STATIC kafka_mock.cpp)
|
|
target_link_libraries(kafka-mock mg-utils librdkafka++ librdkafka Threads::Threads gtest)
|
|
|
|
# Include directories are intentionally not set, because kafka-mock isn't meant to be used apart from unit tests
|
|
add_unit_test(integrations_kafka_consumer.cpp kafka_mock.cpp)
|
|
target_link_libraries(${test_prefix}integrations_kafka_consumer kafka-mock mg-integrations-kafka)
|
|
|
|
add_unit_test(mgp_kafka_c_api.cpp)
|
|
target_link_libraries(${test_prefix}mgp_kafka_c_api mg-query mg-integrations-kafka)
|
|
|
|
add_unit_test(mgp_trans_c_api.cpp)
|
|
target_link_libraries(${test_prefix}mgp_trans_c_api mg-query)
|
|
|
|
# Test mg-query
|
|
add_unit_test(bfs_single_node.cpp)
|
|
target_link_libraries(${test_prefix}bfs_single_node mg-query)
|
|
|
|
add_unit_test(cypher_main_visitor.cpp)
|
|
target_link_libraries(${test_prefix}cypher_main_visitor mg-query)
|
|
|
|
add_unit_test(interpreter.cpp ${CMAKE_SOURCE_DIR}/src/glue/communication.cpp)
|
|
target_link_libraries(${test_prefix}interpreter mg-communication mg-query)
|
|
|
|
add_unit_test(plan_pretty_print.cpp)
|
|
target_link_libraries(${test_prefix}plan_pretty_print mg-query)
|
|
|
|
add_unit_test(query_cost_estimator.cpp)
|
|
target_link_libraries(${test_prefix}query_cost_estimator mg-query)
|
|
|
|
add_unit_test(query_dump.cpp ${CMAKE_SOURCE_DIR}/src/glue/communication.cpp)
|
|
target_link_libraries(${test_prefix}query_dump mg-communication mg-query)
|
|
|
|
add_unit_test(query_expression_evaluator.cpp)
|
|
target_link_libraries(${test_prefix}query_expression_evaluator mg-query)
|
|
|
|
add_unit_test(query_plan.cpp)
|
|
target_link_libraries(${test_prefix}query_plan mg-query)
|
|
|
|
add_unit_test(query_plan_accumulate_aggregate.cpp)
|
|
target_link_libraries(${test_prefix}query_plan_accumulate_aggregate mg-query)
|
|
|
|
add_unit_test(query_plan_bag_semantics.cpp)
|
|
target_link_libraries(${test_prefix}query_plan_bag_semantics mg-query)
|
|
|
|
add_unit_test(query_plan_create_set_remove_delete.cpp)
|
|
target_link_libraries(${test_prefix}query_plan_create_set_remove_delete mg-query)
|
|
|
|
add_unit_test(query_plan_edge_cases.cpp ${CMAKE_SOURCE_DIR}/src/glue/communication.cpp)
|
|
target_link_libraries(${test_prefix}query_plan_edge_cases mg-communication mg-query)
|
|
|
|
add_unit_test(query_plan_match_filter_return.cpp)
|
|
target_link_libraries(${test_prefix}query_plan_match_filter_return mg-query)
|
|
|
|
add_unit_test(query_plan_read_write_typecheck.cpp
|
|
${CMAKE_SOURCE_DIR}/src/query/plan/read_write_type_checker.cpp)
|
|
target_link_libraries(${test_prefix}query_plan_read_write_typecheck mg-query)
|
|
|
|
add_unit_test(query_plan_v2_create_set_remove_delete.cpp)
|
|
target_link_libraries(${test_prefix}query_plan_v2_create_set_remove_delete mg-query)
|
|
|
|
add_unit_test(query_pretty_print.cpp)
|
|
target_link_libraries(${test_prefix}query_pretty_print mg-query)
|
|
|
|
add_unit_test(query_trigger.cpp)
|
|
target_link_libraries(${test_prefix}query_trigger mg-query)
|
|
|
|
add_unit_test(query_serialization_property_value.cpp)
|
|
target_link_libraries(${test_prefix}query_serialization_property_value mg-query)
|
|
|
|
add_unit_test(query_streams.cpp)
|
|
target_link_libraries(${test_prefix}query_streams mg-query kafka-mock)
|
|
|
|
# Test query functions
|
|
add_unit_test(query_function_mgp_module.cpp)
|
|
target_link_libraries(${test_prefix}query_function_mgp_module mg-query)
|
|
target_include_directories(${test_prefix}query_function_mgp_module PRIVATE ${CMAKE_SOURCE_DIR}/include)
|
|
|
|
# Test query/procedure
|
|
add_unit_test(query_procedure_mgp_type.cpp)
|
|
target_link_libraries(${test_prefix}query_procedure_mgp_type mg-query)
|
|
target_include_directories(${test_prefix}query_procedure_mgp_type PRIVATE ${CMAKE_SOURCE_DIR}/include)
|
|
|
|
add_unit_test(query_procedure_mgp_module.cpp)
|
|
target_link_libraries(${test_prefix}query_procedure_mgp_module mg-query)
|
|
target_include_directories(${test_prefix}query_procedure_mgp_module PRIVATE ${CMAKE_SOURCE_DIR}/include)
|
|
|
|
add_unit_test_with_custom_main(query_procedure_py_module.cpp)
|
|
target_link_libraries(${test_prefix}query_procedure_py_module mg-query)
|
|
target_include_directories(${test_prefix}query_procedure_py_module PRIVATE ${CMAKE_SOURCE_DIR}/include)
|
|
|
|
add_unit_test(query_procedures_mgp_graph.cpp)
|
|
target_link_libraries(${test_prefix}query_procedures_mgp_graph mg-query storage_test_utils)
|
|
target_include_directories(${test_prefix}query_procedures_mgp_graph PRIVATE ${CMAKE_SOURCE_DIR}/include)
|
|
|
|
# END query/procedure
|
|
add_unit_test(query_profile.cpp)
|
|
target_link_libraries(${test_prefix}query_profile mg-query)
|
|
|
|
add_unit_test(query_required_privileges.cpp)
|
|
target_link_libraries(${test_prefix}query_required_privileges mg-query)
|
|
|
|
add_unit_test(query_semantic.cpp)
|
|
target_link_libraries(${test_prefix}query_semantic mg-query)
|
|
|
|
add_unit_test(query_variable_start_planner.cpp)
|
|
target_link_libraries(${test_prefix}query_variable_start_planner mg-query)
|
|
|
|
add_unit_test(stripped.cpp)
|
|
target_link_libraries(${test_prefix}stripped mg-query)
|
|
|
|
add_unit_test(typed_value.cpp)
|
|
target_link_libraries(${test_prefix}typed_value mg-query)
|
|
|
|
# Test mg-communication
|
|
add_unit_test(bolt_chunked_decoder_buffer.cpp)
|
|
target_link_libraries(${test_prefix}bolt_chunked_decoder_buffer mg-communication)
|
|
|
|
add_unit_test(bolt_chunked_encoder_buffer.cpp)
|
|
target_link_libraries(${test_prefix}bolt_chunked_encoder_buffer mg-communication)
|
|
|
|
add_unit_test(bolt_decoder.cpp)
|
|
target_link_libraries(${test_prefix}bolt_decoder mg-communication)
|
|
|
|
add_unit_test(bolt_encoder.cpp ${CMAKE_SOURCE_DIR}/src/glue/communication.cpp)
|
|
target_link_libraries(${test_prefix}bolt_encoder mg-communication mg-query)
|
|
|
|
add_unit_test(bolt_session.cpp)
|
|
target_link_libraries(${test_prefix}bolt_session mg-communication mg-utils)
|
|
|
|
add_unit_test(communication_buffer.cpp)
|
|
target_link_libraries(${test_prefix}communication_buffer mg-communication mg-utils)
|
|
|
|
add_unit_test(network_timeouts.cpp)
|
|
target_link_libraries(${test_prefix}network_timeouts mg-communication)
|
|
|
|
# Test mg-kvstore
|
|
add_unit_test(kvstore.cpp)
|
|
target_link_libraries(${test_prefix}kvstore mg-kvstore mg-utils)
|
|
|
|
# Test data structures
|
|
add_unit_test(ring_buffer.cpp)
|
|
target_link_libraries(${test_prefix}ring_buffer mg-utils)
|
|
|
|
# Test mg-io
|
|
add_unit_test(network_endpoint.cpp)
|
|
target_link_libraries(${test_prefix}network_endpoint mg-io)
|
|
|
|
add_unit_test(network_utils.cpp)
|
|
target_link_libraries(${test_prefix}network_utils mg-io)
|
|
|
|
add_unit_test(socket.cpp)
|
|
target_link_libraries(${test_prefix}socket mg-io)
|
|
|
|
# Test mg-utils
|
|
add_unit_test(utils_algorithm.cpp)
|
|
target_link_libraries(${test_prefix}utils_algorithm mg-utils)
|
|
|
|
add_unit_test(utils_exceptions.cpp)
|
|
target_link_libraries(${test_prefix}utils_exceptions mg-utils)
|
|
|
|
add_unit_test(utils_file.cpp)
|
|
target_link_libraries(${test_prefix}utils_file mg-utils)
|
|
|
|
add_unit_test(utils_math.cpp)
|
|
target_link_libraries(${test_prefix}utils_math mg-utils)
|
|
|
|
add_unit_test(utils_memory.cpp)
|
|
target_link_libraries(${test_prefix}utils_memory mg-utils)
|
|
|
|
add_unit_test(utils_memory_tracker.cpp)
|
|
target_link_libraries(${test_prefix}utils_memory_tracker mg-utils)
|
|
|
|
add_unit_test(utils_on_scope_exit.cpp)
|
|
target_link_libraries(${test_prefix}utils_on_scope_exit mg-utils)
|
|
|
|
add_unit_test(utils_rwlock.cpp)
|
|
target_link_libraries(${test_prefix}utils_rwlock mg-utils)
|
|
|
|
add_unit_test(utils_scheduler.cpp)
|
|
target_link_libraries(${test_prefix}utils_scheduler mg-utils)
|
|
|
|
add_unit_test(utils_signals.cpp)
|
|
target_link_libraries(${test_prefix}utils_signals mg-utils)
|
|
|
|
add_unit_test(utils_string.cpp)
|
|
target_link_libraries(${test_prefix}utils_string mg-utils)
|
|
|
|
add_unit_test(utils_synchronized.cpp)
|
|
target_link_libraries(${test_prefix}utils_synchronized mg-utils)
|
|
|
|
add_unit_test(utils_timestamp.cpp)
|
|
target_link_libraries(${test_prefix}utils_timestamp mg-utils)
|
|
|
|
add_unit_test(skip_list.cpp)
|
|
target_link_libraries(${test_prefix}skip_list mg-utils)
|
|
|
|
add_unit_test(small_vector.cpp)
|
|
target_link_libraries(${test_prefix}small_vector mg-utils)
|
|
|
|
add_unit_test(utils_file_locker.cpp)
|
|
target_link_libraries(${test_prefix}utils_file_locker mg-utils fmt)
|
|
|
|
add_unit_test(utils_thread_pool.cpp)
|
|
target_link_libraries(${test_prefix}utils_thread_pool mg-utils fmt)
|
|
|
|
add_unit_test(utils_csv_parsing.cpp ${CMAKE_SOURCE_DIR}/src/utils/csv_parsing.cpp)
|
|
target_link_libraries(${test_prefix}utils_csv_parsing mg-utils fmt)
|
|
|
|
add_unit_test(utils_async_timer.cpp)
|
|
target_link_libraries(${test_prefix}utils_async_timer mg-utils)
|
|
|
|
add_unit_test(utils_license.cpp)
|
|
target_link_libraries(${test_prefix}utils_license mg-utils mg-license)
|
|
|
|
add_unit_test(utils_settings.cpp)
|
|
target_link_libraries(${test_prefix}utils_settings mg-utils mg-settings)
|
|
|
|
add_unit_test(utils_temporal utils_temporal.cpp)
|
|
target_link_libraries(${test_prefix}utils_temporal mg-utils)
|
|
|
|
# Test mg-storage-v2
|
|
add_unit_test(commit_log_v2.cpp)
|
|
target_link_libraries(${test_prefix}commit_log_v2 gflags mg-utils mg-storage-v2)
|
|
|
|
add_unit_test(property_value_v2.cpp)
|
|
target_link_libraries(${test_prefix}property_value_v2 mg-storage-v2 mg-utils)
|
|
|
|
add_unit_test(storage_v2.cpp)
|
|
target_link_libraries(${test_prefix}storage_v2 mg-storage-v2 storage_test_utils)
|
|
|
|
add_unit_test(storage_v2_constraints.cpp)
|
|
target_link_libraries(${test_prefix}storage_v2_constraints mg-storage-v2)
|
|
|
|
add_unit_test(storage_v2_decoder_encoder.cpp)
|
|
target_link_libraries(${test_prefix}storage_v2_decoder_encoder mg-storage-v2)
|
|
|
|
add_unit_test(storage_v2_durability.cpp)
|
|
target_link_libraries(${test_prefix}storage_v2_durability mg-storage-v2)
|
|
|
|
add_unit_test(storage_v2_edge.cpp)
|
|
target_link_libraries(${test_prefix}storage_v2_edge mg-storage-v2)
|
|
|
|
add_unit_test(storage_v2_gc.cpp)
|
|
target_link_libraries(${test_prefix}storage_v2_gc mg-storage-v2)
|
|
|
|
add_unit_test(storage_v2_indices.cpp)
|
|
target_link_libraries(${test_prefix}storage_v2_indices mg-storage-v2 mg-utils)
|
|
|
|
add_unit_test(storage_v2_name_id_mapper.cpp)
|
|
target_link_libraries(${test_prefix}storage_v2_name_id_mapper mg-storage-v2)
|
|
|
|
add_unit_test(storage_v2_property_store.cpp)
|
|
target_link_libraries(${test_prefix}storage_v2_property_store mg-storage-v2 fmt)
|
|
|
|
add_unit_test(storage_v2_wal_file.cpp)
|
|
target_link_libraries(${test_prefix}storage_v2_wal_file mg-storage-v2 fmt)
|
|
|
|
add_unit_test(storage_v2_replication.cpp)
|
|
target_link_libraries(${test_prefix}storage_v2_replication mg-storage-v2 fmt)
|
|
|
|
add_unit_test(storage_v2_isolation_level.cpp)
|
|
target_link_libraries(${test_prefix}storage_v2_isolation_level mg-storage-v2)
|
|
|
|
add_unit_test(replication_persistence_helper.cpp)
|
|
target_link_libraries(${test_prefix}replication_persistence_helper mg-storage-v2)
|
|
|
|
# Test mg-auth
|
|
if(MG_ENTERPRISE)
|
|
add_unit_test(auth.cpp)
|
|
target_link_libraries(${test_prefix}auth mg-auth mg-license)
|
|
endif()
|
|
|
|
# Test mg-slk
|
|
if(MG_ENTERPRISE)
|
|
add_unit_test(slk_advanced.cpp)
|
|
target_link_libraries(${test_prefix}slk_advanced mg-storage-v2)
|
|
endif()
|
|
|
|
if(MG_ENTERPRISE)
|
|
add_unit_test(slk_core.cpp)
|
|
target_link_libraries(${test_prefix}slk_core mg-slk gflags fmt)
|
|
|
|
add_unit_test(slk_streams.cpp)
|
|
target_link_libraries(${test_prefix}slk_streams mg-slk gflags fmt)
|
|
endif()
|
|
|
|
# Test mg-rpc
|
|
if(MG_ENTERPRISE)
|
|
add_unit_test(rpc.cpp)
|
|
target_link_libraries(${test_prefix}rpc mg-rpc)
|
|
endif()
|
|
|
|
# Test LCP
|
|
add_custom_command(
|
|
OUTPUT test_lcp
|
|
DEPENDS ${lcp_src_files} lcp test_lcp.lisp
|
|
COMMAND sbcl --script ${CMAKE_CURRENT_SOURCE_DIR}/test_lcp.lisp)
|
|
add_custom_target(test_lcp ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/test_lcp)
|
|
add_test(test_lcp ${CMAKE_CURRENT_BINARY_DIR}/test_lcp)
|
|
add_dependencies(memgraph__unit test_lcp)
|
|
|
|
# Test websocket
|
|
find_package(Boost REQUIRED)
|
|
|
|
add_unit_test(websocket.cpp)
|
|
target_link_libraries(${test_prefix}websocket mg-communication Boost::headers)
|