File: TestFixtures.cmake

package info (click to toggle)
mongo-c-driver 2.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 47,088 kB
  • sloc: ansic: 193,670; python: 7,780; cpp: 1,493; sh: 659; makefile: 78
file content (49 lines) | stat: -rw-r--r-- 2,020 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
find_package (Python3 COMPONENTS Interpreter)

if (NOT TARGET Python3::Interpreter)
    message (STATUS "Python3 was not found, so test fixtures will not be defined")
    return ()
endif ()

get_filename_component(_MONGOC_BUILD_SCRIPT_DIR "${CMAKE_CURRENT_LIST_DIR}" DIRECTORY)
set (_MONGOC_PROC_CTL_COMMAND "$<TARGET_FILE:Python3::Interpreter>" -u -- "${_MONGOC_BUILD_SCRIPT_DIR}/proc-ctl.py")


function (mongo_define_subprocess_fixture name)
    cmake_parse_arguments(PARSE_ARGV 1 ARG "" "SPAWN_WAIT;STOP_WAIT;WORKING_DIRECTORY" "COMMAND")
    string (MAKE_C_IDENTIFIER "${name}" ident)
    if (NOT ARG_SPAWN_WAIT)
        set (ARG_SPAWN_WAIT 1)
    endif ()
    if (NOT ARG_STOP_WAIT)
        set (ARG_STOP_WAIT 5)
    endif ()
    if (NOT ARG_WORKING_DIRECTORY)
        set (ARG_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
    endif ()
    if (NOT ARG_COMMAND)
        message (SEND_ERROR "mongo_define_subprocess_fixture(${name}) requires a COMMAND")
        return ()
    endif ()
    get_filename_component (ctl_dir "${CMAKE_CURRENT_BINARY_DIR}/${ident}.ctl" ABSOLUTE)
    add_test (NAME "${name}/start"
              COMMAND ${_MONGOC_PROC_CTL_COMMAND} start
                "--ctl-dir=${ctl_dir}"
                "--cwd=${ARG_WORKING_DIRECTORY}"
                "--spawn-wait=${ARG_SPAWN_WAIT}"
                -- ${ARG_COMMAND})
    add_test (NAME "${name}/stop"
              COMMAND ${_MONGOC_PROC_CTL_COMMAND} stop "--ctl-dir=${ctl_dir}" --if-not-running=ignore)
    set_property (TEST "${name}/start" PROPERTY FIXTURES_SETUP "${name}")
    set_property (TEST "${name}/stop" PROPERTY FIXTURES_CLEANUP "${name}")
endfunction ()

# Create a fixture that runs a fake Azure IMDS server
mongo_define_subprocess_fixture(
    mongoc/fixtures/fake_kms_provider_server
    SPAWN_WAIT 1
    COMMAND
        "$<TARGET_FILE:Python3::Interpreter>" -u --
        "${_MONGOC_BUILD_SCRIPT_DIR}/bottle.py" fake_kms_provider_server:kms_provider
            --bind localhost:14987  # Port 14987 chosen arbitrarily
    )