include(AwsTestHarness)
enable_testing()
include(CTest)

file(GLOB TEST_SRC "*.cpp")
file(GLOB TEST_HDRS "*.h")
file(GLOB TESTS ${TEST_HDRS} ${TEST_SRC})

set(TEST_BINARY_NAME ${PROJECT_NAME}-tests)

add_test_case(ApiMultiCreateDestroy)
add_test_case(ApiMultiDefaultCreateDestroy)
add_test_case(ApiStaticDefaultCreateDestroy)
add_test_case(EventLoopResourceSafety)
add_test_case(ClientBootstrapResourceSafety)
if (NOT BYO_CRYPTO)
    add_net_test_case(MqttClientResourceSafety)
    add_net_test_case(MqttClientNewConnectionUninitializedTlsContext)
    add_net_test_case(TLSContextResourceSafety)
    add_net_test_case(TLSContextUninitializedNewConnectionOptions)
endif ()
add_test_case(Base64RoundTrip)
add_test_case(DateTimeBinding)
add_test_case(BasicJsonParsing)
add_test_case(JsonNullParsing)
add_test_case(JsonNullNestedObject)
add_test_case(JsonExplicitNull)
add_test_case(JsonBoolTest)
add_test_case(SHA256ResourceSafety)
add_test_case(MD5ResourceSafety)
add_test_case(SHA256HMACResourceSafety)
if (NOT BYO_CRYPTO)
    add_net_test_case(HttpDownloadNoBackPressureHTTP1_1)
    add_net_test_case(HttpDownloadNoBackPressureHTTP2)
    add_net_test_case(HttpStreamUnActivated)
    add_net_test_case(HttpCreateConnectionInvalidTlsConnectionOptions)
    add_net_test_case(IotPublishSubscribe)
    add_net_test_case(HttpClientConnectionManagerResourceSafety)
    add_net_test_case(HttpClientConnectionManagerInvalidTlsConnectionOptions)
    add_net_test_case(HttpClientConnectionWithPendingAcquisitions)
    add_net_test_case(HttpClientConnectionWithPendingAcquisitionsAndClosedConnections)
endif ()
add_test_case(DefaultResolution)
add_test_case(OptionalCopySafety)
add_test_case(OptionalMoveSafety)
add_test_case(OptionalCopyAndMoveSemantics)
add_test_case(StreamTestCreateDestroyWrapper)
add_test_case(StreamTestLength)
add_test_case(StreamTestRead)
add_test_case(StreamTestReadEmpty)
add_test_case(StreamTestSeekBegin)
add_test_case(StreamTestSeekEnd)
add_test_case(StreamTestRefcount)
add_test_case(TestCredentialsConstruction)
add_test_case(TestProviderStaticGet)
add_test_case(TestProviderEnvironmentGet)
add_test_case(TestProviderProfileGet)
add_test_case(TestProviderImdsGet)
if (NOT BYO_CRYPTO)
    add_net_test_case(TestProviderDefaultChainGet)
    add_net_test_case(TestProviderDefaultChainManualTlsContextGet)
endif ()
add_test_case(TestProviderDelegateGet)
add_test_case(HttpRequestTestCreateDestroy)
add_test_case(Sigv4SigningTestCreateDestroy)
if (NOT BYO_CRYPTO)
    add_test_case(Sigv4SigningTestSimple)
    add_test_case(Sigv4SigningTestCredentials)
    add_test_case(Sigv4SigningTestUnsignedPayload)
endif ()
add_test_case(UUIDToString)
add_test_case(TestIntArrayListToVector)
add_test_case(TestByteCursorArrayListToVector)
add_test_case(StringViewTest)
add_test_case(TestCreatingImdsClient)
add_test_case(ChannelHandlerInterop)

if (AWS_BUILDING_ON_EC2)
    add_test_case(TestImdsClientGetInstanceInfo)
    add_test_case(TestImdsClientGetCredentials)
endif()

if (ENABLE_PROXY_INTEGRATION_TESTS AND NOT BYO_CRYPTO)
    # connection manager proxy tests
    add_test_case(ConnectionManagerTunnelingProxyHttp)
    add_test_case(ConnectionManagerTunnelingProxyHttps)
    add_test_case(ConnectionManagerTunnelingProxyHttpsInvalidTlsOptions)
    add_test_case(ConnectionManagerForwardingProxy)
    add_test_case(ConnectionManagerTunnelingProxyBasicAuthDeprecated)
    add_test_case(ConnectionManagerTunnelingProxyBasicAuth)

    # direction connection proxy tests
    add_test_case(DirectConnectionTunnelingProxyHttp)
    add_test_case(DirectConnectionTunnelingProxyHttps)
    add_test_case(DirectConnectionTunnelingProxyHttpsInvalidTlsOptions)
    add_test_case(DirectConnectionForwardingProxy)
    add_test_case(DirectConnectionTunnelingProxyBasicAuthDeprecated)
    add_test_case(DirectConnectionTunnelingProxyBasicAuth)

    # x509 provider proxy tests
    add_test_case(X509ProxyHttpGetCredentials)
    add_test_case(X509ProxyHttpsGetCredentials)
    add_test_case(X509ProxyBasicAuthDeprecatedGetCredentials)
    add_test_case(X509ProxyBasicAuthGetCredentials)

    # mqtt-over-websockets proxy tests using x509 credentials
    add_test_case(MqttOverWebsocketsViaHttpProxy)
    add_test_case(MqttOverWebsocketsViaHttpsProxy)
    add_test_case(MqttOverWebsocketsViaHttpProxyBasicAuthDeprecated)
    add_test_case(MqttOverWebsocketsViaHttpProxyBasicAuth)

    # mqtt-via-alpn proxy tests
    add_test_case(MqttViaHttpProxyAlpn)
    add_test_case(MqttViaHttpsProxyAlpn)
    add_test_case(MqttViaHttpProxyAlpnBasicAuthDeprecated)
    add_test_case(MqttViaHttpProxyAlpnBasicAuth)

endif()

generate_cpp_test_driver(${TEST_BINARY_NAME})

add_custom_command(TARGET ${TEST_BINARY_NAME} PRE_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_directory
        ${CMAKE_CURRENT_SOURCE_DIR}/resources $<TARGET_FILE_DIR:${TEST_BINARY_NAME}>)
