# Copyright 2007 Andy Tompkins. # Copyright 2017 - 2018 James E. King III # Distributed under the Boost Software License, Version 1.0. (See # accompanying file LICENSE_1_0.txt or copy at # https://www.boost.org/LICENSE_1_0.txt) lib bcrypt ; project libs/uuid/test : requirements # boost.jam defines BOOST_ALL_NO_LIB, this makes library management # near-impossible with the platform selection logic in the random_provider windows:BOOST_UUID_FORCE_AUTO_LINK windows,gcc:bcrypt # boost::lexical_cast needs this for a warning-free build (CHAR_MAX) clang:-Wno-c99-extensions # boost::random needs this setting for a warning free build: msvc:_SCL_SECURE_NO_WARNINGS # link static for easier debugging static ; import os ; import path ; import regex ; import testing ; # this rule enumerates through all the headers and ensures # that inclusion of the header by itself is sufficient to # compile successfully, proving the header does not depend # on any other headers to be included first - adapted from # logic in the winapi test bjam script rule test_all { local all_rules = ; local file ; local headers_path = [ path.make $(BOOST_ROOT)/libs/uuid/include/boost/uuid ] ; for file in [ path.glob-tree $(headers_path) : *.hpp : uuid ] { local rel_file = [ path.relative-to $(headers_path) $(file) ] ; # Note: The test name starts with '~' in order to group these tests in the test report table, preferably at the end. # All '/' are replaced with '-' because apparently test scripts have a problem with test names containing slashes. local test_name = [ regex.replace $(rel_file) "/" "-" ] ; local decl_test_name = ~hdr-decl-$(test_name) ; # ECHO $(rel_file) ; all_rules += [ compile compile/decl_header.cpp : "BOOST_UUID_TEST_HEADER=$(rel_file)" $(file) : $(decl_test_name) ] ; } local tests_path = [ path.make $(BOOST_ROOT)/libs/uuid/test/compile-fail ] ; for file in [ path.glob-tree $(tests_path) : *.cpp ] { local rel_file = [ path.relative-to $(tests_path) $(file) ] ; local test_name = [ regex.replace [ regex.replace $(rel_file) "/" "-" ] ".cpp" "" ] ; local decl_test_name = cf-$(test_name) ; # ECHO $(rel_file) ; all_rules += [ compile-fail $(file) : : $(decl_test_name) ] ; } # make sure compile time options work in isolation all_rules += [ compile compile/decl_header.cpp : "BOOST_UUID_TEST_HEADER=uuid.hpp" "BOOST_UUID_NO_TYPE_TRAITS" $(BOOST_ROOT)/boost/uuid/uuid.hpp : compile_uuid_no_type_traits ] ; all_rules += [ compile compile/decl_header.cpp : "BOOST_UUID_TEST_HEADER=uuid.hpp" "BOOST_UUID_NO_SIMD" $(BOOST_ROOT)/boost/uuid/uuid.hpp : compile_uuid_no_simd ] ; # ECHO All rules: $(all_rules) ; return $(all_rules) ; } # disabled in UBSAN builds due to issues in Boost.Serialization if ! [ os.environ UBSAN_OPTIONS ] { test-suite uuid-serialization : # test serializing uuids [ run test_serialization.cpp ../../serialization/build//boost_serialization ] # TODO - This test fails to like with boost_wserialization # [ run test_wserialization.cpp # ../../serialization/build//boost_serialization # ../../serialization/build//boost_wserialization # : : : ../../config/test/all//BOOST_NO_STD_WSTREAMBUF # ] ; } test-suite uuid : [ test_all ] # test inclucing all .hpp files in 2 translations units # to look for issues when using multiple translation units # eg. missing inline on a global functionstate is not missing [ run test_include1.cpp test_include2.cpp ] # main test [ run test_uuid.cpp ] [ run test_uuid_no_simd.cpp ] # test uuid_io.hpp [ run test_io.cpp ] # test generators [ run test_nil_generator.cpp ] [ run test_name_generator.cpp ] [ run test_name_generator.cpp : : : BOOST_UUID_COMPAT_PRE_1_71_MD5 : test_name_generator_pre_1_71_compat ] [ run test_string_generator.cpp ] [ run test_random_generator.cpp ] # test tagging an object [ run test_tagging.cpp ] # test use cases [ run test_uuid_class.cpp ] [ run test_uuid_in_map.cpp ] # test hash functions [ run test_hash.cpp ] [ run test_md5.cpp ] [ run test_md5.cpp : : : BOOST_UUID_COMPAT_PRE_1_71_MD5 : test_md5_pre_1_71_compat ] [ run test_sha1.cpp ] # test MSVC 12 (VS2013) optimizer bug with SIMD operations. # See https://svn.boost.org/trac/boost/ticket/8509#comment:3 # Only happens in Release x64 builds. [ run test_msvc_simd_bug981648_main.cpp test_msvc_simd_bug981648_foo.cpp : : : no msvc-12.0:yes release on : test_msvc_simd_bug981648 ] # a small benchmark test for random generation [ run test_bench_random.cpp ../../timer/build//boost_timer : : : clang-cloudabi:no ] [ run test_entropy_error.cpp ] # tests for the header-only random provider # there are a number of variations to test all compile-time branches # and to make sure we test all the error handling code paths [ run test_detail_random_provider.cpp : : : _WIN32_WINNT=0x0600 # will force bcrypt over wincrypt (on windows) : test_detail_random_provider_happy ] [ run test_detail_random_provider.cpp : : : BOOST_UUID_RANDOM_PROVIDER_NO_LIB # disable any auto-linking BOOST_UUID_TEST_RANDOM_MOCK # mock default provider to force error path testing _WIN32_WINNT=0x0600 # will force bcrypt over wincrypt (on windows) : test_detail_random_provider_sad ] # CI builds in appveyor normally select the bcrypt provider, so # force wincrypt to be selected and test both happy and sad paths: [ lib mock_random : mock_random.cpp : shared no # do not build on any target-os windows:yes ] # except for windows [ run test_detail_random_provider.cpp : : : _WIN32_WINNT=0x0501 # will force wincrypt over bcrypt no # do not build on any target-os windows:yes # except for windows : test_detail_random_provider_happy_wincrypt ] [ run test_detail_random_provider.cpp mock_random : : : _WIN32_WINNT=0x0501 # will force wincrypt over bcrypt BOOST_UUID_RANDOM_PROVIDER_NO_LIB # disable any auto-linking BOOST_UUID_TEST_RANDOM_MOCK # mock wincrypt to force error path testing no # do not build on any target-os windows:yes # except for windows : test_detail_random_provider_sad_wincrypt ] # CI builds in travis will eventually select getrandom/getentropy when they move # to a version of ubuntu with glibc-2.25 on it, so when that happens keep # testing the posix provider: [ run test_detail_random_provider.cpp : : : BOOST_UUID_RANDOM_PROVIDER_FORCE_POSIX # will force POSIX over getrandom/getentropy windows:no # do not bother running on windows clang-cloudabi:no # no need to build under cloudabi : test_detail_random_provider_happy_posix ] [ run test_detail_random_provider.cpp : : : BOOST_UUID_RANDOM_PROVIDER_FORCE_POSIX # will force POSIX over getrandom/getentropy BOOST_UUID_TEST_RANDOM_MOCK # redirect code to use mock system calls windows:no # do not bother running on windows clang-cloudabi:no # no need to build under cloudabi : test_detail_random_provider_sad_posix ] # Force running tests for getentropy despite it's not going to be used on Linux. getentropy # may be used on systems other than Linux, which are not part of the CI testers pool. [ run test_detail_random_provider.cpp : : : BOOST_UUID_RANDOM_PROVIDER_DISABLE_GETRANDOM # will force getentropy over getrandom no linux:yes # build only on linux (or any other systems that support getentropy) : test_detail_random_provider_happy_getentropy ] [ run test_detail_random_provider.cpp : : : BOOST_UUID_RANDOM_PROVIDER_DISABLE_GETRANDOM # will force getentropy over getrandom BOOST_UUID_TEST_RANDOM_MOCK # redirect code to use mock system calls no linux:yes # build only on linux (or any other systems that support getentropy) : test_detail_random_provider_sad_getentropy ] ;