# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

cmake_minimum_required(VERSION 3.10)
project(nativeclient.tests.cppcache LANGUAGES CXX)

add_library(test-cppcache-utils STATIC
  fw_dunit.cpp
  BBNamingContext.cpp
  CacheHelper.cpp
  CacheableWrapper.cpp
)
target_link_libraries(test-cppcache-utils
  PRIVATE
    ACE::ACE
    _WarningsAsError
  PUBLIC
    apache-geode
    framework
)
set_target_properties(test-cppcache-utils PROPERTIES
  CXX_VISIBILITY_PRESET hidden
  VISIBILITY_INLINES_HIDDEN ON
	FOLDER cpp/test/integration
)
target_compile_definitions(test-cppcache-utils
  PRIVATE
    $<MAKE_C_IDENTIFIER:test-cppcache-utils>_static=1
)
target_include_directories(test-cppcache-utils
  PRIVATE
    $<TARGET_PROPERTY:apache-geode,SOURCE_DIR>/../src
)
add_clangformat(test-cppcache-utils)


add_library(unit_test_callbacks SHARED LibraryCallbacks.cpp)
target_link_libraries(unit_test_callbacks
  PRIVATE
    ACE::ACE
    _WarningsAsError
  PUBLIC
    apache-geode
)
target_include_directories(unit_test_callbacks
  PRIVATE
    $<TARGET_PROPERTY:apache-geode,SOURCE_DIR>/../src
)

set_target_properties(unit_test_callbacks PROPERTIES FOLDER cpp/test/integration)

add_clangformat(unit_test_callbacks)


enable_testing()

# Function to resolve both config and generate stage variables.
macro(generate_config INPUT TEMP OUTPUT)
    configure_file(${INPUT} ${TEMP})
    file(GENERATE OUTPUT ${OUTPUT}
      INPUT ${TEMP}
      CONDITION 1
    )
endmacro()

# Add lazy loaded shared library paths to test environment
foreach( lib SQLite::sqlite3 )
  get_target_property(library_path ${lib} INTERFACE_LIBRARY_DIR)
  set(LD_LIBRARY_PATH ${LD_LIBRARY_PATH} ${library_path})
  get_target_property(runtime_path ${lib} INTERFACE_RUNTIME_DIR)
  set(PATH ${PATH} ${runtime_path})
endforeach()

set (PORT 20000)

file(GLOB SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "test*.cpp")
foreach(FILE ${SOURCES})
  string(REGEX REPLACE "\\.cpp" "" TEST ${FILE})
  set(TESTS ${TESTS} ${TEST})
  add_dependencies(integration-tests ${TEST})
  add_executable(${TEST} ${FILE})
  set_target_properties(${TEST} PROPERTIES
    CXX_VISIBILITY_PRESET hidden
    VISIBILITY_INLINES_HIDDEN ON
    FOLDER cpp/test/integration/legacy
  )

  target_link_libraries(${TEST}
    PRIVATE
      ACE::ACE
      test-cppcache-utils
      _WarningsAsError
      _CppCodeCoverage
      internal
    PUBLIC
      apache-geode
      testobject
      framework
  )
  target_include_directories(${TEST} PRIVATE
    $<TARGET_PROPERTY:apache-geode,SOURCE_DIR>/../src
  )

  if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
    target_compile_options(${TEST} PRIVATE
        -Wno-unused-function
    )
  elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    target_compile_options(${TEST} PRIVATE
        -Wno-unused-member-function
    )
  endif()

  # Some tests depend on these library
  add_dependencies(${TEST} securityImpl cryptoImpl SqLiteImpl)

  add_clangformat(${TEST})

  set(TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/.tests/${TEST})

  math(EXPR PORT "${PORT} + 1")

  if (WIN32)
    set (TEST_SCRIPT_SUFFIX .bat)
    generate_config(${CMAKE_CURRENT_SOURCE_DIR}/test.bat.in ${CMAKE_CURRENT_BINARY_DIR}/.${TEST}.bat.in $<TARGET_FILE:${TEST}>${TEST_SCRIPT_SUFFIX})

    set(TEST_COMMAND $<TARGET_FILE:${TEST}>${TEST_SCRIPT_SUFFIX})

  else()
    set (TEST_SCRIPT_SUFFIX .sh)
    generate_config(${CMAKE_CURRENT_SOURCE_DIR}/test.sh.in ${CMAKE_CURRENT_BINARY_DIR}/.${TEST}.sh.in $<TARGET_FILE:${TEST}>${TEST_SCRIPT_SUFFIX})

    # TODO fix file permissions on .sh
    set(TEST_COMMAND bash $<TARGET_FILE:${TEST}>${TEST_SCRIPT_SUFFIX})

  endif()

  add_test(NAME ${TEST}
      COMMAND ${TEST_COMMAND}
  )

  set_property(TEST ${TEST} PROPERTY LABELS STABLE)
endforeach()

configure_file(CTestCustom.cmake.in CTestCustom.cmake)

#TODO this is really bad that we include the root of tests
include_directories(${CMAKE_SOURCE_DIR}/tests/cpp)

set_property(TEST testDataOutput PROPERTY LABELS STABLE QUICK)
set_property(TEST testFWHelper PROPERTY LABELS STABLE QUICK)
set_property(TEST testLRUList PROPERTY LABELS STABLE QUICK)
set_property(TEST testSystemProperties PROPERTY LABELS STABLE QUICK)
set_property(TEST testLogger PROPERTY LABELS STABLE QUICK)
set_property(TEST testLinkage PROPERTY LABELS STABLE QUICK)
set_property(TEST testRegionTemplateArgs PROPERTY LABELS STABLE QUICK)
set_property(TEST testRegionMap PROPERTY LABELS STABLE QUICK)
set_property(TEST testXmlCacheCreationWithRefid PROPERTY LABELS STABLE QUICK)
set_property(TEST testRegionAttributesFactory PROPERTY LABELS STABLE QUICK)
set_property(TEST testXmlCacheCreationWithOverFlow PROPERTY LABELS STABLE QUICK)
set_property(TEST testThinClientRemoveAllLocal PROPERTY LABELS STABLE QUICK)
set_property(TEST testDunit PROPERTY LABELS STABLE QUICK)
set_property(TEST testSpinLock PROPERTY LABELS STABLE QUICK)
set_property(TEST testSubRegions PROPERTY LABELS STABLE QUICK)

set_property(TEST testOverflowPutGetSqLite PROPERTY LABELS FLAKY)
set_property(TEST testThinClientAfterRegionLive PROPERTY LABELS FLAKY)
set_property(TEST testThinClientCacheables PROPERTY LABELS FLAKY)
set_property(TEST testThinClientCq PROPERTY LABELS FLAKY)
set_property(TEST testThinClientCqFailover PROPERTY LABELS FLAKY)
set_property(TEST testThinClientCqHAFailover PROPERTY LABELS FLAKY)
set_property(TEST testThinClientDurableConnect PROPERTY LABELS FLAKY)
set_property(TEST testThinClientDurableDisconnectNormal PROPERTY LABELS FLAKY)
set_property(TEST testThinClientDurableDisconnectTimeout PROPERTY LABELS FLAKY)
set_property(TEST testThinClientDurableFailoverClientClosedNoRedundancy PROPERTY LABELS FLAKY)
set_property(TEST testThinClientDurableFailoverClientNotClosedRedundancy PROPERTY LABELS FLAKY)
set_property(TEST testThinClientDurableKeepAliveFalseTimeout PROPERTY LABELS FLAKY)
set_property(TEST testThinClientDurableKeepAliveTrueNormal PROPERTY LABELS FLAKY)
set_property(TEST testThinClientDurableReconnect PROPERTY LABELS FLAKY)
set_property(TEST testThinClientFailover PROPERTY LABELS FLAKY)
set_property(TEST testThinClientFailover2 PROPERTY LABELS FLAKY)
set_property(TEST testThinClientFailoverInterest PROPERTY LABELS FLAKY)
set_property(TEST testThinClientFailoverInterest2 PROPERTY LABELS FLAKY)
set_property(TEST testThinClientFailoverRegex PROPERTY LABELS FLAKY)
set_property(TEST testThinClientFixedPartitionResolver PROPERTY LABELS FLAKY)
set_property(TEST testThinClientHADistOps PROPERTY LABELS FLAKY)
set_property(TEST testThinClientHAEventIDMap PROPERTY LABELS FLAKY)
set_property(TEST testThinClientHAFailover PROPERTY LABELS FLAKY)
set_property(TEST testThinClientHAMixedRedundancy PROPERTY LABELS FLAKY)
set_property(TEST testThinClientHAQueryFailover PROPERTY LABELS FLAKY)
set_property(TEST testThinClientLRUExpiration PROPERTY LABELS FLAKY)
set_property(TEST testThinClientLargePutAllWithCallBackArg PROPERTY LABELS FLAKY)
set_property(TEST testThinClientLocatorFailover PROPERTY LABELS FLAKY)
set_property(TEST testThinClientMultiDS PROPERTY LABELS FLAKY)
set_property(TEST testThinClientPRPutAllFailover PROPERTY LABELS FLAKY)
set_property(TEST testThinClientPartitionResolver PROPERTY LABELS FLAKY)
set_property(TEST testThinClientPdxDeltaWithNotification PROPERTY LABELS FLAKY)
set_property(TEST testThinClientPdxTests PROPERTY LABELS FLAKY)
set_property(TEST testThinClientPoolRedundancy PROPERTY LABELS FLAKY)
set_property(TEST testThinClientPoolServer PROPERTY LABELS FLAKY)
set_property(TEST testThinClientPutAll PROPERTY LABELS FLAKY)
set_property(TEST testThinClientPutAllPRSingleHop PROPERTY LABELS FLAKY)
set_property(TEST testThinClientPutAllWithCallBackArgWithoutConcurrency PROPERTY LABELS FLAKY)
set_property(TEST testThinClientSecurityCQAuthorizationMU PROPERTY LABELS FLAKY)
set_property(TEST testThinClientTXFailover PROPERTY LABELS FLAKY)
set_property(TEST testThinClientTransactionsXA PROPERTY LABELS FLAKY)
set_property(TEST testTimedSemaphore PROPERTY LABELS FLAKY)

set_property(TEST testFwPerf PROPERTY LABELS OMITTED)
set_property(TEST testThinClientCqDurable PROPERTY LABELS OMITTED)
set_property(TEST testThinClientGatewayTest PROPERTY LABELS OMITTED)
set_property(TEST testThinClientHAFailoverRegex PROPERTY LABELS OMITTED)
set_property(TEST testThinClientPRSingleHop PROPERTY LABELS OMITTED)
set_property(TEST testThinClientPoolAttrTest PROPERTY LABELS OMITTED)
set_property(TEST testThinClientPoolLocator PROPERTY LABELS OMITTED)
set_property(TEST testThinClientPutWithDelta PROPERTY LABELS OMITTED)
set_property(TEST testThinClientRemoteQueryTimeout PROPERTY LABELS OMITTED)
set_property(TEST testThinClientRemoveOps PROPERTY LABELS OMITTED)
set_property(TEST testThinClientSecurityAuthentication PROPERTY LABELS OMITTED)
set_property(TEST testThinClientSecurityAuthenticationMU PROPERTY LABELS OMITTED)
set_property(TEST testThinClientSecurityAuthorization PROPERTY LABELS OMITTED)
set_property(TEST testThinClientSecurityAuthorizationMU PROPERTY LABELS OMITTED)
set_property(TEST testThinClientSecurityDurableCQAuthorizationMU PROPERTY LABELS OMITTED)
set_property(TEST testThinClientSecurityPostAuthorization PROPERTY LABELS OMITTED)
set_property(TEST testThinClientTicket303 PROPERTY LABELS OMITTED)
set_property(TEST testThinClientTicket304 PROPERTY LABELS OMITTED)
set_property(TEST testThinClientTracking PROPERTY LABELS OMITTED)
set_property(TEST testThinClientWriterException PROPERTY LABELS OMITTED)

add_custom_target(run-stable-cppcache-integration-tests
  COMMAND ctest -C $<CONFIGURATION> -L STABLE
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  USES_TERMINAL)
add_dependencies(run-integration-tests run-stable-cppcache-integration-tests)
set_target_properties(run-stable-cppcache-integration-tests PROPERTIES
    EXCLUDE_FROM_ALL TRUE
    EXCLUDE_FROM_DEFAULT_BUILD TRUE
	FOLDER cpp/test/integration
)

add_custom_target(run-quick-cppcache-integration-tests
  COMMAND ctest -C $<CONFIGURATION> -L QUICK -j 4
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  USES_TERMINAL)
set_target_properties(run-quick-cppcache-integration-tests PROPERTIES
    EXCLUDE_FROM_ALL TRUE
    EXCLUDE_FROM_DEFAULT_BUILD TRUE
	FOLDER cpp/test/integration
)
