diff --git a/.github/workflows/failover.yml b/.github/workflows/failover.yml index 09f7f36f7..c6b976469 100644 --- a/.github/workflows/failover.yml +++ b/.github/workflows/failover.yml @@ -57,7 +57,7 @@ jobs: working-directory: ./scripts if: steps.cache-static-aws-sdk.outputs.cache-hit != 'true' run: | - .\build_aws_sdk_win.ps1 x64 ${{ env.WINDOWS_BUILD_TYPE}} OFF "${{env.CMAKE_GENERATOR}}" + .\build_aws_sdk_win.ps1 x64 ${{ env.WINDOWS_BUILD_TYPE}} ON "${{env.CMAKE_GENERATOR}}" - name: Create build environment shell: bash @@ -83,7 +83,9 @@ jobs: if: always() working-directory: ${{ github.workspace }}/build/unit_testing shell: bash - run: ctest -C $WINDOWS_BUILD_TYPE --output-on-failure + run: | + set PATH=${{ github.workspace }}/build/lib/${{env.WINDOWS_BUILD_TYPE}};%PATH% + ctest -C $WINDOWS_BUILD_TYPE --output-on-failure - name: Check memory leaks if: always() diff --git a/docs/testing-the-aws-driver/TestingTheAwsDriver.md b/docs/testing-the-aws-driver/TestingTheAwsDriver.md index 17caa4b69..25db004c8 100644 --- a/docs/testing-the-aws-driver/TestingTheAwsDriver.md +++ b/docs/testing-the-aws-driver/TestingTheAwsDriver.md @@ -33,7 +33,9 @@ cmake -S . -B build -G "Unix Makefiles" -DMYSQLCLIENT_STATIC_LINKING=true -DWITH_UNIXODBC=1 -DENABLE_UNIT_TESTS=TRUE cmake --build build --config Release ``` -2. There are two options to run the unit tests: +2. To run the unit test, AWS SDK dynamic link libraries path needs to be added to system environment `path` firstly for Windows. The AWS SDK dynamic link libraries could be found under `/build/lib` or `/build/lib/`. + + There are two options to run the unit tests: - Run `ctest` directly from the `build/unit_testing` directory. - Navigate to `unit_testing/bin/Release` and run `unit_testing.exe`. To specify a particular test or test suite, include `--gtest_filter` in the command. diff --git a/driver/CMakeLists.txt b/driver/CMakeLists.txt index 3968e7904..b3bc1cd53 100644 --- a/driver/CMakeLists.txt +++ b/driver/CMakeLists.txt @@ -55,6 +55,7 @@ WHILE(${DRIVER_INDEX} LESS ${DRIVERS_COUNT}) LIST(GET CONNECTOR_DRIVER_TYPE_LIST ${DRIVER_INDEX} DRIVER_TYPE) SET(DRIVER_NAME "awsmysqlodbc${CONNECTOR_DRIVER_TYPE_SHORT}") + SET(DRIVER_NAME_STATIC "awsmysqlodbc${CONNECTOR_DRIVER_TYPE_SHORT}-static") SET(DRIVER_SRCS aws_sdk_helper.cc @@ -151,12 +152,8 @@ WHILE(${DRIVER_INDEX} LESS ${DRIVERS_COUNT}) # but a dynamic module that will be loaded by ODBC manager. One # consequence of this is that on Windows import libraries will not # be generated nor installed. - IF(WIN32) - ADD_LIBRARY(${DRIVER_NAME}-static STATIC ${DRIVER_SRCS} ${AWSSDK_LIB_DIR}) - ADD_LIBRARY(${DRIVER_NAME} SHARED ${DRIVER_SRCS} ${AWSSDK_LIB_DIR}) - ELSE(WIN32) - ADD_LIBRARY(${DRIVER_NAME} SHARED ${DRIVER_SRCS} ${AWSSDK_LIB_DIR}) - ENDIF(WIN32) + ADD_LIBRARY(${DRIVER_NAME_STATIC} STATIC ${DRIVER_SRCS} ${AWSSDK_LIB_DIR}) + ADD_LIBRARY(${DRIVER_NAME} SHARED ${DRIVER_SRCS} ${AWSSDK_LIB_DIR}) ADD_COVERAGE(${DRIVER_NAME}) @@ -169,34 +166,38 @@ WHILE(${DRIVER_INDEX} LESS ${DRIVERS_COUNT}) CONFIGURATIONS Debug DESTINATION "${LIB_SUBDIR}/debug") - INSTALL(TARGETS ${DRIVER_NAME}-static + INSTALL(TARGETS ${DRIVER_NAME_STATIC} CONFIGURATIONS Release RelWithDebInfo DESTINATION ${LIB_SUBDIR}) - INSTALL(TARGETS ${DRIVER_NAME}-static + INSTALL(TARGETS ${DRIVER_NAME_STATIC} CONFIGURATIONS Debug DESTINATION "${LIB_SUBDIR}/debug") ELSE() INSTALL(TARGETS ${DRIVER_NAME} DESTINATION ${LIB_SUBDIR}) + INSTALL(TARGETS ${DRIVER_NAME_STATIC} DESTINATION ${LIB_SUBDIR}) ENDIF() IF(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") SET_TARGET_PROPERTIES(${DRIVER_NAME} PROPERTIES LINK_FLAGS "${MYSQLODBCCONN_LINK_FLAGS_ENV} ${MYSQL_LINK_FLAGS}" PREFIX "") - SET_TARGET_PROPERTIES(${DRIVER_NAME}-static PROPERTIES + SET_TARGET_PROPERTIES(${DRIVER_NAME_STATIC} PROPERTIES LINK_FLAGS "${MYSQLODBCCONN_LINK_FLAGS_ENV} ${MYSQL_LINK_FLAGS}" PREFIX "") ELSE(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") SET_TARGET_PROPERTIES(${DRIVER_NAME} PROPERTIES LINK_FLAGS "${MYSQLODBCCONN_LINK_FLAGS_ENV} ${MYSQL_LINK_FLAGS}" PREFIX "") # -flto + SET_TARGET_PROPERTIES(${DRIVER_NAME_STATIC} PROPERTIES + LINK_FLAGS "${MYSQLODBCCONN_LINK_FLAGS_ENV} ${MYSQL_LINK_FLAGS}" + PREFIX "") # -flto ENDIF() IF(UNICODE) SET_TARGET_PROPERTIES(${DRIVER_NAME} PROPERTIES COMPILE_DEFINITIONS MYODBC_UNICODEDRIVER) - SET_TARGET_PROPERTIES(${DRIVER_NAME}-static PROPERTIES + SET_TARGET_PROPERTIES(${DRIVER_NAME_STATIC} PROPERTIES COMPILE_DEFINITIONS MYODBC_UNICODEDRIVER) ENDIF(UNICODE) @@ -214,26 +215,21 @@ WHILE(${DRIVER_INDEX} LESS ${DRIVERS_COUNT}) LINK_FLAGS_DEBUG "/NODEFAULTLIB:${WITH_NODEFAULTLIB}" LINK_FLAGS_RELWITHDEBINFO "/NODEFAULTLIB:${WITH_NODEFAULTLIB}" LINK_FLAGS_RELEASE "/NODEFAULTLIB:${WITH_NODEFAULTLIB}") - SET_TARGET_PROPERTIES(${DRIVER_NAME}-static PROPERTIES + SET_TARGET_PROPERTIES(${DRIVER_NAME_STATIC} PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB:${WITH_NODEFAULTLIB}" LINK_FLAGS_RELWITHDEBINFO "/NODEFAULTLIB:${WITH_NODEFAULTLIB}" LINK_FLAGS_RELEASE "/NODEFAULTLIB:${WITH_NODEFAULTLIB}") ENDIF () IF(MYSQL8) - TARGET_LINK_LIBRARIES(${DRIVER_NAME} myodbc-util - ${MYSQL_CLIENT_LIBS} ws2_32 ${ODBCINSTLIB} ${SECURE32_LIB} legacy_stdio_definitions.lib) - TARGET_LINK_LIBRARIES(${DRIVER_NAME}-static myodbc-util - ${MYSQL_CLIENT_LIBS} ws2_32 ${ODBCINSTLIB} ${SECURE32_LIB} legacy_stdio_definitions.lib) - ELSE(MYSQL8) - TARGET_LINK_LIBRARIES(${DRIVER_NAME}-static myodbc-util - ${MYSQL_CLIENT_LIBS} ws2_32 ${ODBCINSTLIB} ${SECURE32_LIB}) - TARGET_LINK_LIBRARIES(${DRIVER_NAME} myodbc-util - ${MYSQL_CLIENT_LIBS} ws2_32 ${ODBCINSTLIB} ${SECURE32_LIB}) + TARGET_LINK_LIBRARIES(${DRIVER_NAME} legacy_stdio_definitions.lib) + TARGET_LINK_LIBRARIES(${DRIVER_NAME_STATIC} legacy_stdio_definitions.lib) ENDIF(MYSQL8) - TARGET_LINK_LIBRARIES(${DRIVER_NAME} Dnsapi) - TARGET_LINK_LIBRARIES(${DRIVER_NAME}-static Dnsapi) + TARGET_LINK_LIBRARIES(${DRIVER_NAME} myodbc-util + ${MYSQL_CLIENT_LIBS} ws2_32 ${ODBCINSTLIB} ${SECURE32_LIB} Dnsapi) + TARGET_LINK_LIBRARIES(${DRIVER_NAME_STATIC} myodbc-util + ${MYSQL_CLIENT_LIBS} ws2_32 ${ODBCINSTLIB} ${SECURE32_LIB} Dnsapi) ELSE(WIN32) @@ -245,11 +241,13 @@ WHILE(${DRIVER_INDEX} LESS ${DRIVERS_COUNT}) SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${ODBC_DRIVER_LINK_FLAGS}") TARGET_LINK_LIBRARIES(${DRIVER_NAME} - ${MYSQL_CLIENT_LIBS} ${CMAKE_THREAD_LIBS_INIT} m) - TARGET_LINK_LIBRARIES(${DRIVER_NAME} myodbc-util) + ${MYSQL_CLIENT_LIBS} ${CMAKE_THREAD_LIBS_INIT} m myodbc-util) + TARGET_LINK_LIBRARIES(${DRIVER_NAME_STATIC} + ${MYSQL_CLIENT_LIBS} ${CMAKE_THREAD_LIBS_INIT} m myodbc-util) IF(NOT ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") TARGET_LINK_LIBRARIES(${DRIVER_NAME} resolv) + TARGET_LINK_LIBRARIES(${DRIVER_NAME_STATIC} resolv) ENDIF(NOT ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") @@ -261,13 +259,13 @@ WHILE(${DRIVER_INDEX} LESS ${DRIVERS_COUNT}) SET_TARGET_PROPERTIES(${DRIVER_NAME} PROPERTIES LINKER_LANGUAGE CXX COMPILE_FLAGS "${MYSQLODBCCONN_COMPILE_FLAGS_ENV} ${MYSQL_CXXFLAGS}") - SET_TARGET_PROPERTIES(${DRIVER_NAME}-static PROPERTIES + SET_TARGET_PROPERTIES(${DRIVER_NAME_STATIC} PROPERTIES LINKER_LANGUAGE CXX COMPILE_FLAGS "${MYSQLODBCCONN_COMPILE_FLAGS_ENV} ${MYSQL_CXXFLAGS}") ENDIF (MYSQL_CXX_LINKAGE) set_property(TARGET ${DRIVER_NAME} PROPERTY BUILD_WITH_INSTALL_RPATH ON) - set_property(TARGET ${DRIVER_NAME}-static PROPERTY BUILD_WITH_INSTALL_RPATH ON) + set_property(TARGET ${DRIVER_NAME_STATIC} PROPERTY BUILD_WITH_INSTALL_RPATH ON) if(APPLE) set_property(TARGET ${DRIVER_NAME} APPEND PROPERTY INSTALL_RPATH "@loader_path") @@ -288,6 +286,7 @@ WHILE(${DRIVER_INDEX} LESS ${DRIVERS_COUNT}) #------------AWS SDK------------------ LIST(APPEND SERVICE_LIST rds secretsmanager) + MESSAGE(STATUS "CMAKE_BUILD_TYPE is ${CMAKE_BUILD_TYPE}") IF(MSVC) MESSAGE(STATUS "Copying AWS SDK libraries to ${LIBRARY_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}") AWSSDK_CPY_DYN_LIBS(SERVICE_LIST "" ${LIBRARY_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}) @@ -295,8 +294,8 @@ WHILE(${DRIVER_INDEX} LESS ${DRIVERS_COUNT}) TARGET_INCLUDE_DIRECTORIES(${DRIVER_NAME} PUBLIC ${AWSSDK_INCLUDE_DIR}) TARGET_LINK_LIBRARIES(${DRIVER_NAME} ${AWSSDK_LINK_LIBRARIES}) - TARGET_INCLUDE_DIRECTORIES(${DRIVER_NAME}-static PUBLIC ${AWSSDK_INCLUDE_DIR}) - TARGET_LINK_LIBRARIES(${DRIVER_NAME}-static ${AWSSDK_LINK_LIBRARIES}) + TARGET_INCLUDE_DIRECTORIES(${DRIVER_NAME_STATIC} PUBLIC ${AWSSDK_INCLUDE_DIR}) + TARGET_LINK_LIBRARIES(${DRIVER_NAME_STATIC} ${AWSSDK_LINK_LIBRARIES}) #------------------------------ ENDWHILE(${DRIVER_INDEX} LESS ${DRIVERS_COUNT}) diff --git a/unit_testing/CMakeLists.txt b/unit_testing/CMakeLists.txt index 65d764713..5a361483f 100644 --- a/unit_testing/CMakeLists.txt +++ b/unit_testing/CMakeLists.txt @@ -77,8 +77,7 @@ target_link_libraries( awsmysqlodbca-static ) -include(GoogleTest) -#gtest_discover_tests(unit_testing PROPERTIES DISCOVERY_TIMEOUT 30) - set_target_properties(unit_testing PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) + +add_test(NAME unit_testing COMMAND unit_testing) diff --git a/unit_testing/efm_proxy_test.cc b/unit_testing/efm_proxy_test.cc index ee159d056..2b2a4d7a2 100644 --- a/unit_testing/efm_proxy_test.cc +++ b/unit_testing/efm_proxy_test.cc @@ -96,11 +96,12 @@ TEST_F(EFMProxyTest, FailureDetectionEnabled) { EXPECT_CALL(*mock_monitor_service, start_monitoring(_, _, _, _, _, _, _, _, _)).WillOnce(Return(mock_context)); EXPECT_CALL(*mock_monitor_service, stop_monitoring(mock_context)).Times(1); - EXPECT_CALL(*mock_connection_proxy, query("")); + const char *q = nullptr; + EXPECT_CALL(*mock_connection_proxy, query(q)); EXPECT_CALL(*mock_connection_proxy, mock_connection_proxy_destructor()); EFM_PROXY efm_proxy(dbc, ds, mock_connection_proxy, mock_monitor_service); - efm_proxy.query(""); + efm_proxy.query(q); } TEST_F(EFMProxyTest, DoesNotNeedMonitoring) {