summaryrefslogtreecommitdiffstats
path: root/src/seastar/tests/unit/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/seastar/tests/unit/CMakeLists.txt')
-rw-r--r--src/seastar/tests/unit/CMakeLists.txt681
1 files changed, 681 insertions, 0 deletions
diff --git a/src/seastar/tests/unit/CMakeLists.txt b/src/seastar/tests/unit/CMakeLists.txt
new file mode 100644
index 000000000..62b614809
--- /dev/null
+++ b/src/seastar/tests/unit/CMakeLists.txt
@@ -0,0 +1,681 @@
+#
+# This file is open source software, licensed to you under the terms
+# of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+# distributed with this work for additional information regarding copyright
+# ownership. 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.
+#
+
+#
+# Copyright (C) 2018 Scylladb, Ltd.
+#
+
+# Logical target for all unit tests.
+add_custom_target (unit_tests)
+
+set (Seastar_UNIT_TEST_SMP
+ 2
+ CACHE
+ STRING
+ "Run unit tests with this many cores.")
+
+#
+# Define a new unit test with the given name.
+#
+# seastar_add_test (name
+# [KIND {SEASTAR,BOOST,CUSTOM}]
+# [SOURCES source1 source2 ... sourcen]
+# [WORKING_DIRECTORY dir]
+# [LIBRARIES library1 library2 ... libraryn]
+# [RUN_ARGS arg1 arg2 ... argn])
+#
+# There are three kinds of test we support (the KIND parameter):
+#
+# - SEASTAR: Unit tests which use macros like `SEASTAR_TEST_CASE`
+# - BOOST: Unit tests which use macros like `BOOST_AUTO_TEST_CASE`
+# - CUSTOM: Custom tests which need to be specified
+#
+# SEASTAR and BOOST tests will have their output saved for interpretation by the Jenkins continuous integration service
+# if this is configured for the build.
+#
+# KIND can be omitted, in which case it is assumed to be SEASTAR.
+#
+# If SOURCES is provided, then the test files are first compiled into an executable which has the same name as the test
+# but with a suffix ("_test").
+#
+# WORKING_DIRECTORY can be optionally provided to choose where the test is executed.
+#
+# If LIBRARIES is provided along with SOURCES, then the executable is additionally linked with these libraries.
+#
+# RUN_ARGS are optional additional arguments to pass to the executable. For SEASTAR tests, these come after `--`. For
+# CUSTOM tests with no SOURCES, this parameter can be used to specify the executable name as well as its arguments since
+# no executable is compiled.
+#
+function (seastar_add_test name)
+ set (test_kinds
+ SEASTAR
+ BOOST
+ CUSTOM)
+
+ cmake_parse_arguments (parsed_args
+ ""
+ "WORKING_DIRECTORY;KIND"
+ "RUN_ARGS;SOURCES;LIBRARIES;DEPENDS"
+ ${ARGN})
+
+ if (NOT parsed_args_KIND)
+ set (parsed_args_KIND SEASTAR)
+ elseif (NOT (parsed_args_KIND IN_LIST test_kinds))
+ message (FATAL_ERROR "Invalid test kind. KIND must be one of ${test_kinds}")
+ endif ()
+
+ if (parsed_args_SOURCES)
+ # These may be unused.
+ seastar_jenkins_arguments (${name} jenkins_args)
+
+ #
+ # Each kind of test must populate the `args` and `libraries` lists.
+ #
+
+ set (libraries "${parsed_args_LIBRARIES}")
+
+ set (args "")
+ if (parsed_args_KIND STREQUAL "SEASTAR")
+ list (APPEND libraries
+ seastar_testing
+ seastar_private)
+
+ if (NOT (Seastar_JENKINS STREQUAL ""))
+ list (APPEND args ${jenkins_args})
+ endif ()
+
+ list (APPEND args -- -c ${Seastar_UNIT_TEST_SMP})
+ elseif (parsed_args_KIND STREQUAL "BOOST")
+ list (APPEND libraries
+ Boost::unit_test_framework
+ seastar_private)
+
+ if (NOT (Seastar_JENKINS STREQUAL ""))
+ list (APPEND args ${jenkins_args})
+ endif ()
+ endif ()
+
+ list (APPEND args ${parsed_args_RUN_ARGS})
+
+ set (executable_target test_unit_${name})
+ add_executable (${executable_target} ${parsed_args_SOURCES})
+
+ target_link_libraries (${executable_target}
+ PRIVATE ${libraries})
+
+ target_compile_definitions (${executable_target}
+ PRIVATE
+ SEASTAR_TESTING_MAIN
+ SEASTAR_TESTING_WITH_NETWORKING=$<BOOL:${Seastar_ENABLE_TESTS_ACCESSING_INTERNET}>)
+
+ if ((Seastar_STACK_GUARDS STREQUAL "ON") OR
+ ((Seastar_STACK_GUARDS STREQUAL "DEFAULT") AND
+ (CMAKE_BUILD_TYPE IN_LIST Seastar_STACK_GUARD_MODES)))
+ target_compile_definitions (${executable_target}
+ PRIVATE
+ SEASTAR_THREAD_STACK_GUARDS)
+ endif ()
+
+ target_include_directories (${executable_target}
+ PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${Seastar_SOURCE_DIR}/src)
+
+ set_target_properties (${executable_target}
+ PROPERTIES
+ OUTPUT_NAME ${name}_test)
+
+ add_dependencies (unit_tests ${executable_target})
+ set (forwarded_args COMMAND ${executable_target} ${args})
+ else ()
+ if (NOT (parsed_args_KIND STREQUAL "CUSTOM"))
+ message (FATAL_ERROR "SOURCES are required for ${parsed_args_KIND} tests")
+ endif ()
+
+ set (forwarded_args COMMAND ${parsed_args_RUN_ARGS})
+ endif ()
+
+ #
+ # We expect `forwarded_args` to be populated correctly at this point.
+ #
+
+ set (target test_unit_${name}_run)
+
+ if (parsed_args_WORKING_DIRECTORY)
+ list (APPEND forwarded_args WORKING_DIRECTORY ${parsed_args_WORKING_DIRECTORY})
+ endif ()
+
+ if (parsed_args_DEPENDS)
+ add_dependencies(${executable_target} ${parsed_args_DEPENDS})
+ endif()
+
+ add_custom_target (${target}
+ ${forwarded_args}
+ USES_TERMINAL)
+
+ add_test (
+ NAME Seastar.unit.${name}
+ COMMAND ${CMAKE_COMMAND} --build ${Seastar_BINARY_DIR} --target ${target})
+
+ set_tests_properties (Seastar.unit.${name}
+ PROPERTIES
+ TIMEOUT ${Seastar_TEST_TIMEOUT}
+ ENVIRONMENT "${Seastar_TEST_ENVIRONMENT}")
+endfunction ()
+
+#
+# Define a new custom unit test whose entry point is a Seastar application.
+#
+# seastar_add_app_test (name
+# [SOURCES source1 source2 ... sourcen]
+# [LIBRARIES library1 library2 ... libraryn]
+# [RUN_ARGS arg1 arg2 ... argn])
+#
+# These kinds of tests are structured like Seastar applications.
+#
+# These tests always link against `seastar_private` and are always invoked with
+# `-c ${Seastar_UNIT_TEST_SMP}`.
+#
+function (seastar_add_app_test name)
+ cmake_parse_arguments (parsed_args
+ ""
+ ""
+ "RUN_ARGS;SOURCES;LIBRARIES"
+ ${ARGN})
+
+ seastar_add_test (${name}
+ KIND CUSTOM
+ SOURCES ${parsed_args_SOURCES}
+ LIBRARIES
+ seastar_private
+ ${parsed_args_LIBRARIES}
+ RUN_ARGS
+ -c ${Seastar_UNIT_TEST_SMP}
+ ${parsed_args_RUN_ARGS})
+endfunction ()
+
+function (prepend_each var prefix)
+ set (result "")
+
+ foreach (x ${ARGN})
+ list (APPEND result ${prefix}/${x})
+ endforeach ()
+
+ set (${var} ${result} PARENT_SCOPE)
+endfunction ()
+
+add_custom_target (test_unit
+ COMMAND ctest --verbose -R Seastar.unit
+ USES_TERMINAL)
+
+seastar_add_test (abort_source
+ SOURCES abort_source_test.cc)
+
+seastar_add_test (alloc
+ SOURCES alloc_test.cc)
+
+if (NOT Seastar_EXECUTE_ONLY_FAST_TESTS)
+ set (allocator_test_args "")
+else ()
+ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set (allocator_test_args --iterations 5)
+ else ()
+ set (allocator_test_args --time 0.1)
+ endif ()
+endif ()
+
+seastar_add_test (allocator
+ SOURCES allocator_test.cc
+ RUN_ARGS ${allocator_test_args})
+
+seastar_add_app_test (alien
+ SOURCES alien_test.cc)
+
+seastar_add_test (checked_ptr
+ SOURCES checked_ptr_test.cc)
+
+seastar_add_test (chunked_fifo
+ SOURCES chunked_fifo_test.cc)
+
+seastar_add_test (chunk_parsers
+ SOURCES chunk_parsers_test.cc)
+
+seastar_add_test (circular_buffer
+ SOURCES circular_buffer_test.cc)
+
+seastar_add_test (circular_buffer_fixed_capacity
+ SOURCES circular_buffer_fixed_capacity_test.cc)
+
+seastar_add_test (condition_variable
+ SOURCES condition_variable_test.cc)
+
+seastar_add_test (connect
+ SOURCES connect_test.cc)
+
+seastar_add_test (content_source
+ SOURCES content_source_test.cc)
+
+seastar_add_test (coroutines
+ SOURCES coroutines_test.cc)
+
+seastar_add_test (defer
+ SOURCES defer_test.cc)
+
+seastar_add_test (deleter
+ SOURCES deleter_test.cc)
+
+seastar_add_app_test (directory
+ SOURCES directory_test.cc)
+
+seastar_add_test (distributed
+ SOURCES distributed_test.cc)
+
+seastar_add_test (dns
+ SOURCES dns_test.cc)
+
+seastar_add_test (execution_stage
+ SOURCES execution_stage_test.cc)
+
+seastar_add_test (expiring_fifo
+ SOURCES expiring_fifo_test.cc)
+
+seastar_add_test (abortable_fifo
+ SOURCES abortable_fifo_test.cc)
+
+seastar_add_test (io_queue
+ SOURCES io_queue_test.cc)
+
+seastar_add_test (fair_queue
+ SOURCES fair_queue_test.cc)
+
+seastar_add_test (file_io
+ SOURCES file_io_test.cc)
+
+seastar_add_test (file_utils
+ SOURCES file_utils_test.cc)
+
+seastar_add_test (foreign_ptr
+ SOURCES foreign_ptr_test.cc)
+
+seastar_add_test (fsnotifier
+ SOURCES fsnotifier_test.cc)
+
+seastar_add_test (fstream
+ SOURCES
+ fstream_test.cc
+ mock_file.hh)
+
+seastar_add_test (futures
+ SOURCES futures_test.cc)
+
+seastar_add_test (sharded
+ SOURCES sharded_test.cc)
+
+seastar_add_test (httpd
+ SOURCES
+ httpd_test.cc
+ loopback_socket.hh)
+
+seastar_add_test (websocket
+ SOURCES websocket_test.cc)
+
+seastar_add_test (ipv6
+ SOURCES ipv6_test.cc)
+
+seastar_add_test (network_interface
+ SOURCES network_interface_test.cc)
+
+seastar_add_test (json_formatter
+ SOURCES json_formatter_test.cc)
+
+seastar_add_test (locking
+ SOURCES locking_test.cc)
+
+seastar_add_test (lowres_clock
+ SOURCES lowres_clock_test.cc)
+
+seastar_add_test (metrics
+ SOURCES metrics_test.cc)
+
+seastar_add_test (net_config
+ KIND BOOST
+ SOURCES net_config_test.cc)
+
+seastar_add_test (noncopyable_function
+ KIND BOOST
+ SOURCES noncopyable_function_test.cc)
+
+seastar_add_test (output_stream
+ SOURCES output_stream_test.cc)
+
+seastar_add_test (packet
+ KIND BOOST
+ SOURCES packet_test.cc)
+
+seastar_add_test (program_options
+ KIND BOOST
+ SOURCES program_options_test.cc)
+
+seastar_add_test (queue
+ SOURCES queue_test.cc)
+
+seastar_add_test (request_parser
+ SOURCES request_parser_test.cc)
+
+seastar_add_test (rpc
+ SOURCES
+ loopback_socket.hh
+ rpc_test.cc)
+
+seastar_add_test (semaphore
+ SOURCES semaphore_test.cc)
+
+seastar_add_test (shared_ptr
+ KIND BOOST
+ SOURCES shared_ptr_test.cc)
+
+seastar_add_test (signal
+ SOURCES signal_test.cc)
+
+seastar_add_test (simple_stream
+ KIND BOOST
+ SOURCES simple_stream_test.cc)
+
+# TODO: Disabled for now. See GH-520.
+# seastar_add_test (slab
+# SOURCES slab_test.cc
+# NO_SEASTAR_TESTING_LIBRARY)
+
+seastar_add_app_test (smp
+ SOURCES smp_test.cc)
+
+seastar_add_test (socket
+ SOURCES socket_test.cc)
+
+seastar_add_test (sstring
+ KIND BOOST
+ SOURCES sstring_test.cc)
+
+seastar_add_test (stall_detector
+ SOURCES stall_detector_test.cc)
+
+seastar_add_test (stream_reader
+ SOURCES stream_reader_test.cc)
+
+seastar_add_test (thread
+ SOURCES thread_test.cc
+ LIBRARIES Valgrind::valgrind)
+
+seastar_add_test (scheduling_group
+ SOURCES scheduling_group_test.cc)
+
+seastar_add_app_test (thread_context_switch
+ SOURCES thread_context_switch_test.cc)
+
+seastar_add_app_test (timer
+ SOURCES timer_test.cc)
+
+seastar_add_test (uname
+ KIND BOOST
+ SOURCES uname_test.cc)
+
+seastar_add_test (source_location
+ KIND BOOST
+ SOURCES source_location_test.cc)
+
+seastar_add_test (shared_token_bucket
+ SOURCES shared_token_bucket_test.cc)
+
+function(seastar_add_certgen name)
+ cmake_parse_arguments(CERT
+ ""
+ "SUBJECT;SERVER;NAME;DOMAIN;COMMON;LOCALITY;ORG;WIDTH;STATE;COUNTRY;UNIT;EMAIL;DAYS;ALG"
+ "ALG_OPTS"
+ ${ARGN}
+ )
+
+ if (NOT CERT_SERVER)
+ execute_process(COMMAND hostname
+ RESULT_VARIABLE CERT_SERVER
+ )
+ endif()
+ if (NOT CERT_DOMAIN)
+ execute_process(COMMAND dnsdomainname
+ RESULT_VARIABLE CERT_DOMAIN
+ )
+ endif()
+ if (NOT CERT_NAME)
+ set(CERT_NAME ${CERT_SERVER})
+ endif()
+ if (NOT CERT_COUNTRY)
+ set(CERT_COUNTRY SE)
+ endif()
+ if (NOT CERT_STATE)
+ set(CERT_STATE Stockholm)
+ endif()
+ if (NOT CERT_LOCALITY)
+ set(CERT_LOCALITY ${CERT_STATE})
+ endif()
+ if (NOT CERT_ORG)
+ set(CERT_ORG ${CERT_DOMAIN})
+ endif()
+ if (NOT CERT_UNIT)
+ set(CERT_UNIT ${CERT_DOMAIN})
+ endif()
+ if (NOT CERT_COMMON)
+ set(CERT_COMMON ${CERT_SERVER}.${CERT_DOMAIN})
+ endif()
+ if (NOT CERT_EMAIL)
+ set(CERT_EMAIL postmaster@${CERT_DOMAIN})
+ endif()
+ if (NOT CERT_WIDTH)
+ set(CERT_WIDTH 4096)
+ endif()
+ if (NOT CERT_DAYS)
+ set(CERT_DAYS 3650)
+ endif()
+ if ((NOT CERT_ALG) AND (NOT CERT_ALG_OPTS))
+ set(CERT_ALG_OPTS -pkeyopt rsa_keygen_bits:${CERT_WIDTH})
+ endif()
+ if (NOT CERT_ALG)
+ set(CERT_ALG RSA)
+ endif()
+
+ set(CERT_PRIVKEY ${CERT_NAME}.key)
+ set(CERT_REQ ${CERT_NAME}.csr)
+ set(CERT_CERT ${CERT_NAME}.crt)
+
+ set(CERT_CAPRIVKEY ca${CERT_NAME}.key)
+ set(CERT_CAROOT ca${CERT_NAME}.pem)
+
+ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cert.cfg.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/${CERT_NAME}.cfg"
+ )
+
+ find_program(OPENSSL openssl)
+
+ add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${CERT_PRIVKEY}"
+ COMMAND ${OPENSSL} genpkey -quiet -out ${CERT_PRIVKEY} -algorithm ${CERT_ALG} ${CERT_ALG_OPTS}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${CERT_REQ}"
+ COMMAND ${OPENSSL} req -new -key ${CERT_PRIVKEY} -out ${CERT_REQ} -config ${CERT_NAME}.cfg
+ DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${CERT_PRIVKEY}"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+
+ add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${CERT_CAPRIVKEY}"
+ COMMAND ${OPENSSL} genpkey -quiet -out ${CERT_CAPRIVKEY} -algorithm ${CERT_ALG} ${CERT_ALG_OPTS}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${CERT_CAROOT}"
+ COMMAND ${OPENSSL} req -x509 -new -nodes -key ${CERT_CAPRIVKEY} -days ${CERT_DAYS} -config ${CERT_NAME}.cfg -out ${CERT_CAROOT}
+ DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${CERT_CAPRIVKEY}"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+
+ add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${CERT_CERT}"
+ COMMAND ${OPENSSL} x509 -req -in ${CERT_REQ} -CA ${CERT_CAROOT} -CAkey ${CERT_CAPRIVKEY} -CAcreateserial -out ${CERT_CERT} -days ${CERT_DAYS}
+ DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${CERT_REQ}" "${CMAKE_CURRENT_BINARY_DIR}/${CERT_CAROOT}"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+
+ add_custom_target(${name}
+ DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${CERT_CERT}"
+ )
+endfunction()
+
+function(seastar_gen_mtls_certs)
+ find_program(OPENSSL openssl)
+
+ set(SUBJECT "/C=GB/ST=London/L=London/O=Redpanda Data/OU=Core/CN=redpanda.com")
+ set(EXTENSION "subjectAltName = IP:127.0.0.1")
+ set(CLIENT1_SUBJECT "/C=GB/ST=London/L=London/O=Redpanda Data/OU=Core/CN=client1.org")
+ set(CLIENT2_SUBJECT "/C=GB/ST=London/L=London/O=Redpanda Data/OU=Core/CN=client2.org")
+
+ add_custom_command(OUTPUT mtls_ca.key
+ COMMAND ${OPENSSL} ecparam -name prime256v1 -genkey -noout -out mtls_ca.key
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ add_custom_command(OUTPUT mtls_ca.crt
+ COMMAND ${OPENSSL} req -new -x509 -sha256 -key mtls_ca.key -out mtls_ca.crt -subj ${SUBJECT} -addext ${EXTENSION}
+ DEPENDS mtls_ca.key
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ # server certificates
+ add_custom_command(OUTPUT mtls_server.key
+ COMMAND ${OPENSSL} ecparam -name prime256v1 -genkey -noout -out mtls_server.key
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ add_custom_command(OUTPUT mtls_server.csr
+ COMMAND ${OPENSSL} req -new -sha256 -key mtls_server.key -out mtls_server.csr -subj ${SUBJECT}
+ DEPENDS mtls_server.key
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ add_custom_command(OUTPUT mtls_server.crt
+ COMMAND ${OPENSSL} x509 -req -in mtls_server.csr -CA mtls_ca.crt -CAkey mtls_ca.key -CAcreateserial -out mtls_server.crt -days 1000 -sha256
+ DEPENDS mtls_server.csr mtls_ca.crt mtls_ca.key
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ # client1 certificates
+ add_custom_command(OUTPUT mtls_client1.key
+ COMMAND ${OPENSSL} ecparam -name prime256v1 -genkey -noout -out mtls_client1.key
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ add_custom_command(OUTPUT mtls_client1.csr
+ COMMAND ${OPENSSL} req -new -sha256 -key mtls_client1.key -out mtls_client1.csr -subj ${CLIENT1_SUBJECT}
+ DEPENDS mtls_client1.key
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ add_custom_command(OUTPUT mtls_client1.crt
+ COMMAND ${OPENSSL} x509 -req -in mtls_client1.csr -CA mtls_ca.crt -CAkey mtls_ca.key -CAcreateserial -out mtls_client1.crt -days 1000 -sha256
+ DEPENDS mtls_client1.csr mtls_ca.crt mtls_ca.key
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ # client2 certificates
+ add_custom_command(OUTPUT mtls_client2.key
+ COMMAND ${OPENSSL} ecparam -name prime256v1 -genkey -noout -out mtls_client2.key
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ add_custom_command(OUTPUT mtls_client2.csr
+ COMMAND ${OPENSSL} req -new -sha256 -key mtls_client2.key -out mtls_client2.csr -subj ${CLIENT2_SUBJECT}
+ DEPENDS mtls_client2.key
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ add_custom_command(OUTPUT mtls_client2.crt
+ COMMAND ${OPENSSL} x509 -req -in mtls_client2.csr -CA mtls_ca.crt -CAkey mtls_ca.key -CAcreateserial -out mtls_client2.crt -days 1000 -sha256
+ DEPENDS mtls_client2.csr mtls_ca.crt mtls_ca.key
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+
+ add_custom_target(mtls_certs
+ DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/mtls_client1.crt" "${CMAKE_CURRENT_BINARY_DIR}/mtls_client2.crt" "${CMAKE_CURRENT_BINARY_DIR}/mtls_server.crt"
+ )
+endfunction()
+
+seastar_add_certgen(testcrt DOMAIN scylladb.org SERVER test)
+seastar_add_certgen(othercrt DOMAIN apa.org SERVER other)
+seastar_gen_mtls_certs()
+
+set (tls_certificate_files
+ tls-ca-bundle.pem
+)
+
+prepend_each (
+ in_tls_certificate_files
+ ${CMAKE_CURRENT_SOURCE_DIR}/
+ ${tls_certificate_files})
+
+prepend_each (
+ out_tls_certificate_files
+ ${CMAKE_CURRENT_BINARY_DIR}/
+ ${tls_certificate_files})
+
+add_custom_command (
+ DEPENDS ${in_tls_certificate_files}
+ OUTPUT ${out_tls_certificate_files}
+ COMMAND ${CMAKE_COMMAND} -E copy ${in_tls_certificate_files} ${CMAKE_CURRENT_BINARY_DIR})
+
+add_custom_target(tls_files
+ DEPENDS ${out_tls_certificate_files}
+)
+
+add_custom_command (
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/https-server.py
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/https-server.py
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/https-server.py ${CMAKE_CURRENT_BINARY_DIR})
+
+add_custom_target (https_server
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/https-server.py)
+
+seastar_add_test (tls
+ DEPENDS tls_files testcrt othercrt mtls_certs https_server
+ SOURCES tls_test.cc
+ LIBRARIES Boost::filesystem
+ WORKING_DIRECTORY ${Seastar_BINARY_DIR})
+
+seastar_add_test (tuple_utils
+ KIND BOOST
+ SOURCES tuple_utils_test.cc)
+
+seastar_add_test (unix_domain
+ SOURCES unix_domain_test.cc)
+
+seastar_add_test (unwind
+ KIND BOOST
+ SOURCES unwind_test.cc)
+
+seastar_add_test (weak_ptr
+ KIND BOOST
+ SOURCES weak_ptr_test.cc)
+
+seastar_add_test (log_buf
+ SOURCES log_buf_test.cc)
+
+seastar_add_test (exception_logging
+ KIND BOOST
+ SOURCES exception_logging_test.cc)
+
+seastar_add_test (closeable
+ SOURCES closeable_test.cc)
+
+seastar_add_test (pipe
+ SOURCES pipe_test.cc)
+
+seastar_add_test (spawn
+ SOURCES spawn_test.cc)