podman

Форк
0
/
320-system-df.bats 
161 строка · 5.9 Кб
1
#!/usr/bin/env bats   -*- bats -*-
2
#
3
# tests for podman system df
4
#
5

6
load helpers
7

8
function setup() {
9
    # Depending on which tests have been run prior to getting here, there
10
    # may be one or two images loaded. We want only '$IMAGE', not the
11
    # systemd one.
12
    run_podman rmi -f $SYSTEMD_IMAGE
13

14
    basic_setup
15
}
16

17
function teardown() {
18
    basic_teardown
19

20
    # In case the active-volumes test failed: clean up stray volumes
21
    run_podman volume rm -a
22
}
23

24
@test "podman system df - basic functionality" {
25
    run_podman system df
26
    is "$output" ".*Images  *1 *0 "       "Exactly one image"
27
    is "$output" ".*Containers *0 *0 "    "No containers"
28
    is "$output" ".*Local Volumes *0 *0 " "No volumes"
29
}
30

31
@test "podman system df --format {{ json . }} functionality" {
32
    run_podman system df --format '{{json .}}'
33
    is "$output" '.*"TotalCount":1'       "Exactly one image"
34
    is "$output" '.*"RawSize".*"Size"' "RawSize and Size reported"
35
    is "$output" '.*"RawReclaimable".*"Reclaimable"' "RawReclaimable and Reclaimable reported"
36
    is "$output" '.*"Containers".*"Total":0' "Total containers reported"
37
    is "$output" '.*"Local Volumes".*"Size":"0B"' "Total containers reported"
38
    is "$output" '.*"Local Volumes".*"Size":"0B"' "Total containers reported"
39
}
40

41
@test "podman system df --format json functionality" {
42
    # Run two dummy containers, one which exits, one which stays running
43
    run_podman run    --name stoppedcontainer $IMAGE true
44
    run_podman run -d --name runningcontainer $IMAGE top
45
    run_podman system df --format json
46
    local results="$output"
47

48
    # FIXME! This needs to be fiddled with every time we bump testimage.
49
    local size=11
50
    if [[ "$(uname -m)" = "aarch64" ]]; then
51
        size=13
52
    fi
53

54
    # FIXME: we can't check exact RawSize or Size because every CI system
55
    # computes a different value: 12701526, 12702113, 12706209... and
56
    # those are all amd64. aarch64 gets 12020148, 12019561.
57
    #
58
    # WARNING: RawSize and Size tests may fail if $IMAGE is updated. Since
59
    # that tends to be done yearly or less, and only by Ed, that's OK.
60
    local tests="
61
Type           | Images         | Containers | Local Volumes
62
Total          |              1 |          2 |             0
63
Active         |              1 |          1 |             0
64
RawSize        | ~${size}...... |         !0 |             0
65
RawReclaimable |              0 |         !0 |             0
66
Reclaimable    |        ~\(0%\) |   ~\(50%\) |       ~\(0%\)
67
TotalCount     |              1 |          2 |             0
68
Size           |   ~${size}.*MB |        !0B |            0B
69
"
70
    while read -a fields; do
71
        for i in 0 1 2;do
72
            expect="${fields[$((i+1))]}"
73
            actual=$(jq -r ".[$i].${fields[0]}" <<<"$results")
74

75
            # Do exact-match check, unless the expect term starts with ~ or !
76
            op='='
77
            if [[ "$expect" =~ ^\! ]]; then
78
                op='!='
79
                expect=${expect##\!}
80
            fi
81
            if [[ "$expect" =~ ^~ ]]; then
82
                op='=~'
83
                expect=${expect##\~}
84
            fi
85

86
            assert "$actual" "$op" "$expect" "system df[$i].${fields[0]}"
87
        done
88
    done < <(parse_table "$tests")
89

90
    # Clean up
91
    run_podman rm -f -t 0 stoppedcontainer runningcontainer
92
}
93

94
@test "podman system df - with active containers and volumes" {
95
    run_podman run    -v /myvol1 --name c1 $IMAGE true
96
    run_podman run -d -v /myvol2 --name c2 $IMAGE top
97

98
    run_podman system df --format '{{ .Type }}:{{ .Total }}:{{ .Active }}'
99
    is "${lines[0]}" "Images:1:1"        "system df : Images line"
100
    is "${lines[1]}" "Containers:2:1"    "system df : Containers line"
101
    is "${lines[2]}" "Local Volumes:2:2" "system df : Volumes line"
102

103
    # Try -v. (Grrr. No way to specify individual formats)
104
    #
105
    # Yes, I know this would be more elegant as a separate @test, but
106
    # container/volume setup/teardown costs ~3 seconds and that matters.
107
    run_podman system df -v
108
    is "${lines[2]}" \
109
       "${PODMAN_TEST_IMAGE_REGISTRY}/${PODMAN_TEST_IMAGE_USER}/${PODMAN_TEST_IMAGE_NAME} * ${PODMAN_TEST_IMAGE_TAG} [0-9a-f]* .* 2" \
110
       "system df -v: the 'Images' line"
111

112
    # Containers are listed in random order. Just check that each has 1 volume
113
    is "${lines[5]}" \
114
       "[0-9a-f]\{12\} *[0-9a-f]\{12\} .* 1 .* c[12]" \
115
       "system df -v, 'Containers', first line"
116
    is "${lines[6]}" \
117
       "[0-9a-f]\{12\} *[0-9a-f]\{12\} .* 1 .* c[12]" \
118
       "system df -v, 'Containers', second line"
119

120
    # Volumes, likewise: random order.
121
    is "${lines[9]}" "[0-9a-f]\{64\} *[01] * 0B" \
122
       "system df -v, 'Volumes', first line"
123
    is "${lines[10]}" "[0-9a-f]\{64\} *[01] * 0B" \
124
       "system df -v, 'Volumes', second line"
125

126
    # Make sure that the return image "raw" size is correct
127
    run_podman image inspect $IMAGE --format "{{.Size}}"
128
    expectedSize="$output"
129

130
    run_podman system df --format "{{.RawSize}}"
131
    is "${lines[0]}" "$expectedSize" "raw image size is correct"
132

133
    # Clean up and check reclaimable image data
134
    run_podman system df --format '{{.Reclaimable}}'
135
    is "${lines[0]}" "0B (0%)" "cannot reclaim image data as it's still used by the containers"
136

137
    run_podman stop c2
138

139
    # Create a second image by committing a container.
140
    run_podman container commit -q c1
141
    image="$output"
142

143
    run_podman system df --format '{{.Reclaimable}}'
144
    is "${lines[0]}" ".* (100%)" "100 percent of image data is reclaimable because $IMAGE has unique size of 0"
145

146
    # Make sure the unique size is now really 0.  We cannot use --format for
147
    # that unfortunately but we can exploit the fact that $IMAGE is used by
148
    # two containers.
149
    run_podman system df -v
150
    is "$output" ".*0B\\s\\+2.*"
151

152
    run_podman rm c1 c2
153

154
    run_podman system df --format '{{.Reclaimable}}'
155
    is "${lines[0]}" ".* (100%)" "100 percent of image data is reclaimable because all containers are gone"
156

157
    run_podman rmi $image
158
    run_podman volume rm -a
159
}
160

161
# vim: filetype=sh
162

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

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

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

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