include(CTest)
include(AwsTestHarness)
enable_testing()

file(GLOB TEST_HDRS "mqtt_mock_structs.h")
set(TEST_SRC iotdevice_tests.c metrics_tests.c secure_tunneling_tests.c secure_tunnel_tests.c)
file(GLOB TESTS ${TEST_HDRS} ${TEST_SRC})

add_test_case(library_init)
add_test_case(devicedefender_task_unsupported_report_format)

# Network metrics are only implemented for Linux so far
if (UNIX AND NOT APPLE)
    add_test_case(devicedefender_get_system_network_total)
    add_test_case(devicedefender_get_network_connections)
    add_test_case(devicedefender_success_test)
    add_test_case(devicedefender_custom_metrics_success_test)
    add_test_case(devicedefender_stop_while_running_test)
    add_test_case(devicedefender_publish_failure_callback_invoked)
endif()

# Secure Tunnel Tets
add_net_test_case(secure_tunneling_functionality_connect_test)
add_net_test_case(secure_tunneling_functionality_client_token_test)
add_net_test_case(secure_tunneling_fail_and_retry_connection_test)
add_net_test_case(secure_tunneling_store_service_ids_test)
add_net_test_case(secure_tunneling_receive_stream_start_test)
add_net_test_case(secure_tunneling_rejected_service_id_stream_start_test)
add_net_test_case(secure_tunneling_close_stream_on_stream_reset_test)
add_net_test_case(secure_tunneling_ignore_stream_reset_for_inactive_stream_test)
add_net_test_case(secure_tunneling_session_reset_test)
add_net_test_case(secure_tunneling_serializer_data_message_test)
add_net_test_case(secure_tunneling_max_payload_test)
add_net_test_case(secure_tunneling_max_payload_exceed_test)
add_net_test_case(secure_tunneling_subsequent_writes)
add_net_test_case(secure_tunneling_receive_connection_start_test)
add_net_test_case(secure_tunneling_ignore_inactive_stream_message_test)
add_net_test_case(secure_tunneling_ignore_inactive_connection_id_message_test)
add_net_test_case(secure_tunneling_v1_to_v2_stream_start_test)
add_net_test_case(secure_tunneling_v1_to_v3_stream_start_test)
add_net_test_case(secure_tunneling_v2_to_v1_stream_start_test)
add_net_test_case(secure_tunneling_v3_to_v1_stream_start_test)
add_net_test_case(secure_tunneling_v1_stream_start_v3_message_reset_test)
add_net_test_case(secure_tunneling_v2_stream_start_connection_start_reset_test)
add_net_test_case(secure_tunneling_close_stream_on_connection_reset_test)
add_net_test_case(secure_tunneling_existing_connection_start_send_reset_test)
add_net_test_case(secure_tunneling_send_v2_data_message_on_v1_connection_test)
add_net_test_case(secure_tunneling_send_v3_data_message_on_v1_connection_test)
add_net_test_case(secure_tunneling_send_v1_data_message_on_v2_connection_test)
add_net_test_case(secure_tunneling_send_v3_data_message_on_v2_connection_test)
add_net_test_case(secure_tunneling_send_v1_data_message_on_v3_connection_test)
add_net_test_case(secure_tunneling_send_v2_data_message_on_v3_connection_test)
add_net_test_case(secure_tunneling_send_v2_data_message_on_incorrect_v2_connection_test)
add_net_test_case(secure_tunneling_send_v3_data_message_on_incorrect_v3_connection_test)
add_net_test_case(secure_tunneling_send_v1_data_message_with_no_active_connection_test)
add_net_test_case(secure_tunneling_send_v3_stream_start_message_test)
add_net_test_case(secure_tunneling_send_v3_stream_start_message_with_reset_test)
add_net_test_case(secure_tunneling_send_v3_connection_start_message_test)

generate_test_driver(${PROJECT_NAME}-tests)

set(TEST_DD_CLIENT_BINARY_NAME ${PROJECT_NAME}-devicedefender-client)

add_executable(${TEST_DD_CLIENT_BINARY_NAME} "aws_iot_devicedefender_client_test.c")
target_link_libraries(${TEST_DD_CLIENT_BINARY_NAME} PRIVATE ${PROJECT_NAME})
aws_set_common_properties(${TEST_DD_CLIENT_BINARY_NAME} NO_WEXTRA NO_PEDANTIC)
aws_add_sanitizers(${TEST_DD_CLIENT_BINARY_NAME} ${${PROJECT_NAME}_SANITIZERS})
target_compile_definitions(${TEST_DD_CLIENT_BINARY_NAME} PRIVATE AWS_UNSTABLE_TESTING_API=1)
target_include_directories(${TEST_DD_CLIENT_BINARY_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR})

if ($ENV{PROTOBUF_TEST})
    add_subdirectory(tests_protobuf)
endif ()
