podman

Форк
0
/
bats 
149 строк · 4.6 Кб
1
#!/bin/bash
2
#
3
# bats wrapper - invokes bats, root & rootless, on podman system tests
4
#
5

6
###############################################################################
7
# BEGIN usage message
8

9
usage="Usage: $0 [--root] [--rootless] [FILENAME-PATTERN[:TEST-PATTERN]]
10

11
$0 is a wrapper for invoking podman system tests.
12

13
   --root         Run only as root
14
   --rootless     Run only as user (i.e. you)
15
   --remote       Run with podman-remote (see below)
16

17
   FILENAME-PATTERN Run only test files that match 'test/system/*name*',
18
                    e.g. '500' or 'net' will match 500-networking.bats.
19

20
   TEST-PATTERN     When appended to a filename-pattern, and you have a
21
                    modern-enough version of bats installed (i.e. Fedora
22
                    but not RHEL), runs with '--filter TEST-PATTERN' which
23
                    runs only subtests within FILENAME-PATTERH whose names
24
                    match that string.
25

26
   --tag=TAG      Passed on to bats as '--filter-tags TAG'
27
                  As of 2023-07-26 the only tag used is 'distro-integration'
28

29
   -T             Passed on to bats, which will then show timing data
30

31
   --help         display usage message
32

33
By default, tests ./bin/podman. To test a different podman, do:
34

35
    \$ env PODMAN=/abs/path/to/podman $0 ....
36

37
To test podman-remote, start your own servers (root and rootless) via:
38

39
    \$ bin/podman system service --timeout=0 &
40
    \$ sudo !!
41

42
...then invoke this script with --remote. (This script can't start the
43
servers, because we can sudo *starting* the service but can't sudo
44
stopping it: by the time the bats tests finish, the sudo timeout will
45
have expired. We apologize for the inconvenience.)
46

47
$0 also passes through \$OCI_RUNTIME, should you need to test that.
48

49
Examples:
50

51
    \$ $0 220:\"restart cleans up\"
52
       ... only the \"restart cleans up\" test in 220-healthcheck.bats
53

54
    \$ $0 --root 160:\"ps -f\"
55
       ... runs all tests in 160-volumes.bats that match \"ps -f\" (root only)
56
"
57

58
# END   usage message
59
###############################################################################
60
# BEGIN initialization and command-line arg checking
61

62
# By default, test the podman in our working directory.
63
# Some tests cd out of our workdir, so abs path is important
64
export PODMAN=${PODMAN:-$(pwd)/bin/podman}
65
export QUADLET=${QUADLET:-$(pwd)/bin/quadlet}
66

67
# Directory in which
68
TESTS=test/system
69

70
REMOTE=
71
TEST_ROOT=1
72
TEST_ROOTLESS=1
73

74
declare -a bats_opts=()
75

76
declare -a bats_filter=()
77

78
for i;do
79
    value=`expr "$i" : '[^=]*=\(.*\)'`
80
    case "$i" in
81
        -h|--help)  echo "$usage"; exit 0;;
82
        --root)     TEST_ROOTLESS= ;;
83
        --rootless) TEST_ROOT= ;;
84
        --remote)   REMOTE=remote ;;
85
        --ts|-T)    bats_opts+=("-T") ;;
86
        --tag=*)    bats_filter=("--filter-tags" "$value") ;;
87
        */*.bats)   TESTS=$i ;;
88
        *)
89
            if [[ $i =~ : ]]; then
90
                tname=${i%:*}          # network:localhost -> network
91
                filt=${i#*:}           # network:localhost ->   localhost
92
                TESTS=$(echo $TESTS/*$tname*.bats)
93
                bats_filter=("--filter" "$filt")
94
            else
95
                TESTS=$(echo $TESTS/*$i*.bats)
96
            fi
97
            ;;
98
    esac
99
done
100

101
# With --remote, use correct binary and make sure daem--I mean server--is live
102
if [[ "$REMOTE" ]]; then
103
    if ! [[ $PODMAN =~ -remote ]]; then
104
        PODMAN=${PODMAN}-remote
105
    fi
106

107
    if [[ -n "$TEST_ROOT" ]]; then
108
        sudo $PODMAN info >/dev/null || exit 1
109
    fi
110
    if [[ -n "$TEST_ROOTLESS" ]]; then
111
        $PODMAN info >/dev/null || exit 1
112
    fi
113
fi
114

115
# END   initialization and command-line arg checking
116
###############################################################################
117

118
rc=0
119

120
# As of 2021-11 podman has a bunch of external helper binaries
121
if [[ -z "$CONTAINERS_HELPER_BINARY_DIR" ]]; then
122
    export CONTAINERS_HELPER_BINARY_DIR=$(pwd)/bin
123
fi
124

125
# Used in 120-load test to identify rootless destination for podman image scp
126
export PODMAN_ROOTLESS_USER=$(id -un)
127

128
# Root
129
if [[ "$TEST_ROOT" ]]; then
130
    echo "# bats ${bats_filter[*]} $TESTS"
131
    sudo    --preserve-env=PODMAN \
132
            --preserve-env=QUADLET \
133
            --preserve-env=PODMAN_TEST_DEBUG \
134
            --preserve-env=OCI_RUNTIME \
135
            --preserve-env=CONTAINERS_HELPER_BINARY_DIR \
136
            --preserve-env=PODMAN_ROOTLESS_USER \
137
            bats "${bats_opts[@]}" "${bats_filter[@]}" $TESTS
138
    rc=$?
139
fi
140

141
# Rootless. (Only if we're not already root)
142
if [[ "$TEST_ROOTLESS" && "$(id -u)" != 0 ]]; then
143
    echo "--------------------------------------------------"
144
    echo "\$ bats ${bats_filter[*]} $TESTS"
145
    bats "${bats_opts[@]}" "${bats_filter[@]}" $TESTS
146
    rc=$((rc | $?))
147
fi
148

149
exit $rc
150

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.