file(
  GLOB_RECURSE UCACHE_TEST_SOURCES
  LIST_DIRECTORIES false
  *.h *.cpp)

add_executable(${CMAKE_PROJECT_NAME}_ucache_plugin_ut EXCLUDE_FROM_ALL
               ${UCACHE_TEST_SOURCES})

set_target_properties(${CMAKE_PROJECT_NAME}_ucache_plugin_ut
                      PROPERTIES LINK_FLAGS "-Wl,--as-needed")

target_compile_options(
  ${CMAKE_PROJECT_NAME}_ucache_plugin_ut
  PRIVATE -fPIC
          -w
          -g
          -Wno-all
          -Wno-error
          -Wno-non-template-friend
          -Wno-template-id-mismatch
          -Wno-invalid-offsetof
          -fno-access-control)

target_include_directories(
  ${CMAKE_PROJECT_NAME}_ucache_plugin_ut BEFORE
  PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${PROJECT_SOURCE_DIR}/deps/mockcpp/include
    ${PROJECT_SOURCE_DIR}/deps/mockcpp/include/mockcpp
    ${PROJECT_SOURCE_DIR}/src/include
    ${PROJECT_SOURCE_DIR}/deps/rapidjson/include
    ${PROJECT_SOURCE_DIR}/deps/rapidjson/include/rapidjson
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/include
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/addons/ucache
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/addons/ucache/include
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/addons/ucache/common
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/addons/ucache/common/util
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/addons/ucache/ucache_agent
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/addons/ucache/ucache_agent/agent_task_processor
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/addons/ucache/ucache_master
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/addons/ucache/ucache_master/bottleneck_strategy
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/addons/ucache/ucache_master/data_collect
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/addons/ucache/ucache_master/master_task_controller
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/addons/ucache/ucache_master/node_fault_handler
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/addons/ucache/ucache_master/rack_msg
)

target_link_options(${CMAKE_PROJECT_NAME}_ucache_plugin_ut PRIVATE
                    --coverage -rdynamic -Wl,--as-needed)

target_compile_definitions(
  ${CMAKE_PROJECT_NAME}_ucache_plugin_ut PRIVATE UB_ENVIRONMENT ENABLE_COV=OFF)

target_link_libraries(
  ${CMAKE_PROJECT_NAME}_ucache_plugin_ut
  PUBLIC test_exclusive_main ucache_plugin_static rapidjson GTest::gmock_main mockcpp
         boundscheck ubse_log)

add_independent_exec_ut(${CMAKE_PROJECT_NAME}_ucache_plugin_ut)