
import-search /boost/config/checks ;
import config : requires ;
import ac ;

# Configure openssl if it hasn't been done yet
using openssl ;

# Use these requirements as both regular and usage requirements across all tests
local requirements =
        <library>/boost/redis//boost_redis
        <define>BOOST_ASIO_NO_DEPRECATED=1
        <define>BOOST_ASIO_DISABLE_BOOST_ARRAY=1
        <define>BOOST_ASIO_DISABLE_BOOST_BIND=1
        <define>BOOST_ASIO_DISABLE_BOOST_DATE_TIME=1
        <define>BOOST_ASIO_DISABLE_BOOST_REGEX=1
        <toolset>msvc:<cxxflags>"/bigobj"
        <target-os>windows:<define>_WIN32_WINNT=0x0601
        [ requires
            cxx14_constexpr
            cxx14_generic_lambdas
            cxx14_initialized_lambda_captures
            cxx14_aggregate_nsdmi
            cxx14_return_type_deduction
            cxx17_hdr_charconv
            cxx17_hdr_optional
            cxx17_hdr_string_view
            cxx17_hdr_variant
            cxx17_std_apply
            cxx17_structured_bindings
        ]
        [ ac.check-library /openssl//ssl    : <library>/openssl//ssl/<link>shared : <build>no ]
        [ ac.check-library /openssl//crypto : <library>/openssl//crypto/<link>shared : <build>no ]
        <library>/boost/test//boost_unit_test_framework
    ;


# Helper library
lib redis_test_common
    :
        boost_redis.cpp
        common.cpp
    : requirements $(requirements)
    : usage-requirements $(requirements)
;

# B2 runs tests in parallel, and some tests rely on having exclusive
# access to a Redis server, so we only run the ones that don't require a DB server.
local tests =
    test_low_level_sync_sans_io
    test_low_level
    test_request
    test_run
    test_any_adapter
;

# Build and run the tests
for local test in $(tests)
{
    run
        $(test).cpp
        redis_test_common/<link>static
    : target-name $(test)
    ;
}
