include(AwsTestHarness)
enable_testing()

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

add_test_case(http_test_get_request)
add_test_case(http_test_request_bad_version)
add_test_case(http_test_response_bad_version)
add_test_case(http_test_get_status_code)
add_test_case(http_test_overflow_scratch_space)
add_test_case(http_test_receive_request_headers)
add_test_case(http_test_receive_response_headers)
add_test_case(http_test_get_transfer_encoding_flags)
add_test_case(http_test_body_unchunked)
add_test_case(http_test_body_chunked)
add_test_case(http_decode_trailers)
add_test_case(http_decode_one_byte_at_a_time)
add_test_case(http_decode_messages_at_random_intervals)
add_test_case(http_decode_bad_requests_and_assert_failure)
add_test_case(http_decode_bad_responses_and_assert_failure)
add_test_case(http_test_extraneous_buffer_data_ensure_not_processed)
add_test_case(http_test_ignore_chunk_extensions)
add_test_case(server_new_destroy)
# add_test_case(connection_setup_shutdown) TODO: diagnose occasional failures
add_test_case(h1_client_sanity_check)
add_test_case(h1_client_request_send_1liner)
add_test_case(h1_client_request_send_headers)
add_test_case(h1_client_request_send_body)
add_test_case(h1_client_request_send_large_body)
add_test_case(h1_client_request_send_large_head)
add_test_case(h1_client_request_send_multiple_in_1_io_message)
add_test_case(h1_client_response_get_1liner)
add_test_case(h1_client_response_get_headers)
add_test_case(h1_client_response_get_body)
add_test_case(h1_client_response_get_1_from_multiple_io_messages)
add_test_case(h1_client_response_get_multiple_from_1_io_message)
add_test_case(h1_client_response_with_bad_data_shuts_down_connection)
add_test_case(h1_client_response_with_too_much_data_shuts_down_connection)
add_test_case(h1_client_response_arrives_before_request_done_sending_is_ok)
add_test_case(h1_client_response_without_request_shuts_down_connection)
add_test_case(h1_client_window_reopens_by_default)
add_test_case(h1_client_window_shrinks_if_user_says_so)
add_test_case(h1_client_window_manual_update)
add_test_case(h1_client_window_manual_update_off_thread)
add_test_case(h1_client_request_cancelled_by_channel_shutdown)
add_test_case(h1_client_multiple_requests_cancelled_by_channel_shutdown)
add_test_case(h1_client_new_request_fails_if_channel_shut_down)
add_test_case(h1_client_close_from_outgoing_body_callback_stops_decoder)
add_test_case(h1_client_close_from_incoming_headers_callback_stops_decoder)
add_test_case(h1_client_close_from_incoming_headers_done_callback_stops_decoder)
add_test_case(h1_client_close_from_incoming_body_callback_stops_decoder)
add_test_case(h1_client_close_from_stream_complete_callback_stops_decoder)
add_test_case(h1_client_close_from_off_thread_makes_not_open)
add_test_case(h1_client_close_from_on_thread_makes_not_open)

set(TEST_BINARY_NAME ${CMAKE_PROJECT_NAME}-tests)
generate_test_driver(${TEST_BINARY_NAME})

#SSL certificates to use for testing.
add_custom_command(TARGET ${TEST_BINARY_NAME} PRE_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_directory
        ${CMAKE_CURRENT_SOURCE_DIR}/resources ${CMAKE_CURRENT_BINARY_DIR})
