File: 331-system-check.bats

package info (click to toggle)
podman 5.7.0%2Bds2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 23,824 kB
  • sloc: sh: 4,700; python: 2,798; perl: 1,885; ansic: 1,484; makefile: 977; ruby: 42; csh: 8
file content (248 lines) | stat: -rw-r--r-- 11,197 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
#!/usr/bin/env bats   -*- bats -*-
#
# Creates errors that should be caught by `system check`, and verifies
# that they are caught and remedied, even if it requires discarding some
# data in read-write layers.
#

load helpers

@test "podman system check - unmanaged layers" {
    run_podman_testing create-storage-layer
    layerID="$output"
    run_podman_testing create-storage-layer --parent=$layerID
    run_podman 125 system check
    assert "$output" =~ "layer in lower level storage driver not accounted for" "output from 'podman system check' with unmanaged layers"
    run_podman system check -r
    run_podman system check
}

@test "podman system check - unused layers" {
    run_podman_testing create-layer
    layerID="$output"
    run_podman_testing create-layer --parent=$layerID
    run_podman system check
    run_podman 125 system check -m 0
    assert "$output" =~ "layer not referenced" "output from 'podman system check' with unused layers"
    run_podman system check -m 0 -r
    run_podman system check -m 0
}

@test "podman system check - layer content digest changed" {
    run_podman_testing create-layer
    layerID="$output"
    make_layer_blob 8 ${PODMAN_TMPDIR}/archive.tar
    run_podman_testing populate-layer --layer=$layerID --file=${PODMAN_TMPDIR}/archive.tar
    run_podman_testing create-image --layer=$layerID
    imageID="$output"
    testing_make_image_metadata_for_layer_blobs $imageID ${PODMAN_TMPDIR}/archive.tar
    run_podman create $imageID
    make_layer_blob 1 ${PODMAN_TMPDIR}/archive.tar
    run_podman_testing modify-layer --layer=$layerID --file=${PODMAN_TMPDIR}/archive.tar
    run_podman 125 system check
    assert "$output" =~ "checksum failed" "output from 'podman system check' with modified layer contents"
    run_podman 125 system check -r
    run_podman 0+w system check -r -f
    run_podman system check
}

@test "podman system check - layer content added" {
    run_podman_testing create-layer
    layerID="$output"
    make_layer_blob 8 ${PODMAN_TMPDIR}/archive.tar
    run_podman_testing populate-layer --layer=$layerID --file=${PODMAN_TMPDIR}/archive.tar
    run_podman_testing create-image --layer=$layerID
    imageID="$output"
    testing_make_image_metadata_for_layer_blobs $imageID ${PODMAN_TMPDIR}/archive.tar
    run_podman create $imageID
    make_layer_blob 100 101 ${PODMAN_TMPDIR}/archive.tar
    run_podman_testing modify-layer --layer=$layerID --file=${PODMAN_TMPDIR}/archive.tar
    run_podman 125 system check
    assert "$output" =~ "content modified" "output from 'podman system check' with unexpected content added to layer"
    run_podman 125 system check -r
    run_podman 0+w system check -r -f
    run_podman system check
}

@test "podman system check - storage image layer missing" {
    run_podman_testing create-layer
    layerID="$output"
    make_layer_blob 8 ${PODMAN_TMPDIR}/archive.tar
    run_podman_testing populate-layer --layer=$layerID --file=${PODMAN_TMPDIR}/archive.tar
    run_podman_testing create-image --layer=$layerID
    imageID="$output"
    testing_make_image_metadata_for_layer_blobs $imageID ${PODMAN_TMPDIR}/archive.tar
    run_podman create $imageID
    run_podman_testing remove-layer --layer=$layerID
    run_podman 125 system check
    assert "$output" =~ "image layer is missing" "output from 'podman system check' with missing layer"
    run_podman 125 system check -r
    run_podman 0+w system check -r -f
    run_podman system check
}

@test "podman system check - storage container image missing" {
    run_podman_testing create-layer
    layerID="$output"
    make_layer_blob 8 ${PODMAN_TMPDIR}/archive.tar
    run_podman_testing populate-layer --layer=$layerID --file=${PODMAN_TMPDIR}/archive.tar
    run_podman_testing create-image --layer=$layerID
    imageID="$output"
    testing_make_image_metadata_for_layer_blobs $imageID ${PODMAN_TMPDIR}/archive.tar
    run_podman create $imageID
    run_podman_testing remove-image --image=$imageID
    run_podman 125 system check -m 0
    assert "$output" =~ "image missing" "output from 'podman system check' with missing image"
    run_podman 125 system check -r -m 0
    run_podman 0+w system check -r -f -m 0
    run_podman system check -m 0
}

@test "podman system check - storage layer data missing" {
    run_podman_testing create-layer
    layerID="$output"
    make_layer_blob ${PODMAN_TMPDIR}/archive.tar
    run_podman_testing populate-layer --layer=$layerID --file=${PODMAN_TMPDIR}/archive.tar
    make_random_file ${PODMAN_TMPDIR}/random-data.bin
    run_podman_testing create-layer-data --key=foo --file=${PODMAN_TMPDIR}/random-data.bin --layer=$layerID
    run_podman_testing create-image --layer=$layerID
    imageID="$output"
    testing_make_image_metadata_for_layer_blobs $imageID ${PODMAN_TMPDIR}/archive.tar
    run_podman create $imageID
    run_podman_testing remove-layer-data --key=foo --layer=$layerID
    run_podman 125 system check
    assert "$output" =~ "layer data item is missing" "output from 'podman system check' with missing layer data"
    run_podman 125 system check -r
    run_podman 0+w system check -r -f
    run_podman system check
}

@test "podman system check - storage image data missing" {
    run_podman_testing create-layer
    layerID="$output"
    make_layer_blob 8 ${PODMAN_TMPDIR}/archive.tar
    run_podman_testing populate-layer --layer=$layerID --file=${PODMAN_TMPDIR}/archive.tar
    run_podman_testing create-image --layer=$layerID
    imageID="$output"
    testing_make_image_metadata_for_layer_blobs $imageID ${PODMAN_TMPDIR}/archive.tar
    make_random_file ${PODMAN_TMPDIR}/random-data.bin
    run_podman_testing create-image-data --key=foo --file=${PODMAN_TMPDIR}/random-data.bin --image=$imageID
    run_podman create $imageID
    run_podman_testing remove-image-data --key=foo --image=$imageID
    run_podman 125 system check
    assert "$output" =~ "image data item is missing" "output from 'podman system check' with missing image data"
    run_podman 125 system check -r
    run_podman 0+w system check -r -f
    run_podman system check
}

@test "podman system check - storage image data modified" {
    run_podman_testing create-layer
    layerID="$output"
    make_layer_blob 8 ${PODMAN_TMPDIR}/archive.tar
    run_podman_testing populate-layer --layer=$layerID --file=${PODMAN_TMPDIR}/archive.tar
    run_podman_testing create-image --layer=$layerID
    imageID="$output"
    testing_make_image_metadata_for_layer_blobs $imageID ${PODMAN_TMPDIR}/archive.tar
    run_podman create $imageID
    make_random_file ${PODMAN_TMPDIR}/random-data.bin
    run_podman_testing create-image-data --key=foo --file=${PODMAN_TMPDIR}/random-data.bin --image=$imageID
    make_random_file ${PODMAN_TMPDIR}/random-data.bin
    run_podman_testing modify-image-data --key=foo --file=${PODMAN_TMPDIR}/random-data.bin --image=$imageID
    run_podman 125 system check
    assert "$output" =~ "image data item has incorrect" "output from 'podman system check' with modified image data"
    run_podman 125 system check -r
    run_podman 0+w system check -r -f
    run_podman system check
}

@test "podman system check - container data missing" {
    run_podman_testing create-layer
    layerID="$output"
    make_layer_blob 8 ${PODMAN_TMPDIR}/archive.tar
    run_podman_testing populate-layer --layer=$layerID --file=${PODMAN_TMPDIR}/archive.tar
    run_podman_testing create-image --layer=$layerID
    imageID="$output"
    testing_make_image_metadata_for_layer_blobs $imageID ${PODMAN_TMPDIR}/archive.tar
    run_podman create $imageID
    containerID="$output"
    make_random_file ${PODMAN_TMPDIR}/random-data.bin
    run_podman_testing create-container-data --key=foo --file=${PODMAN_TMPDIR}/random-data.bin --container=$containerID
    run_podman_testing remove-container-data --key=foo --container=$containerID
    run_podman 125 system check
    assert "$output" =~ "container data item is missing" "output from 'podman system check' with missing container data"
    run_podman 125 system check -r
    run_podman 0+w system check -r -f
    run_podman system check
    run_podman rmi $imageID
}

@test "podman system check - container data modified" {
    run_podman_testing create-layer
    layerID="$output"
    make_layer_blob 8 ${PODMAN_TMPDIR}/archive.tar
    run_podman_testing populate-layer --layer=$layerID --file=${PODMAN_TMPDIR}/archive.tar
    run_podman_testing create-image --layer=$layerID
    imageID="$output"
    testing_make_image_metadata_for_layer_blobs $imageID ${PODMAN_TMPDIR}/archive.tar
    run_podman create $imageID
    containerID="$output"
    make_random_file ${PODMAN_TMPDIR}/random-data.bin
    run_podman_testing create-container-data --key=foo --file=${PODMAN_TMPDIR}/random-data.bin --container=$containerID
    make_random_file ${PODMAN_TMPDIR}/random-data.bin
    run_podman_testing modify-container-data --key=foo --file=${PODMAN_TMPDIR}/random-data.bin --container=$containerID
    run_podman 125 system check
    assert "$output" =~ "container data item has incorrect" "output from 'podman system check' with modified container data"
    run_podman 125 system check -r
    run_podman 0+w system check -r -f
    run_podman system check
    run_podman rmi $imageID
}

function make_layer_blob() {
    local tmpdir=$(mktemp -d --tmpdir=${PODMAN_TMPDIR} make_layer_blob.XXXXXX)
    local blobfile
    local seqargs
    for arg in "${@}" ; do
        seqargs="${blobfile:+$seqargs $blobfile}"
        blobfile="$arg"
    done
    seqargs="${seqargs:-8}"
    local filelist=
    for file in $(seq ${seqargs}); do
        dd if=/dev/urandom of="$tmpdir/file$file" bs=1 count=$((1024 + $file)) status=none
        filelist="$filelist file$file"
    done
    tar -c --owner=root:0 --group=root:0 -f "$blobfile" -C "$tmpdir" $filelist
}

function testing_make_image_metadata_for_layer_blobs() {
    local tmpdir=$(mktemp -d --tmpdir=${PODMAN_TMPDIR} make_image_metadata.XXXXXX)
    local imageID=$1
    shift
    echo '{"config":{},"rootfs":{"type":"layers","diff_ids":[' > $tmpdir/config.json
    echo '{"schemaVersion":2,"mediaType":"application/vnd.oci.image.manifest.v1+json","layers":[' > $tmpdir/manifest
    local comma=
    for blob in "$@" ; do
        local sum=$(sha256sum $blob)
        sum=${sum%% *}
        local size=$(wc -c $blob)
        size=${size%% *}
        echo $comma '"sha256:'$sum'"' >> $tmpdir/config.json
        echo $comma '{"digest":"sha256:'$sum'","size":'$size',"mediaType":"application/vnd.oci.image.layer.v1.tar"}' >> $tmpdir/manifest
        comma=,
    done
    echo ']}}' >> $tmpdir/config.json
    sum=$(sha256sum $tmpdir/config.json)
    sum=${sum%% *}
    size=$(wc -c $tmpdir/config.json)
    size=${size%% *}
    echo '],"config":{"digest":"sha256:'$sum'","size":'$size',"mediaType":"application/vnd.oci.image.config.v1+json"}}' >> $tmpdir/manifest
    run_podman_testing create-image-data -i $imageID -k sha256:$sum -f $tmpdir/config.json
    sum=$(sha256sum $tmpdir/manifest)
    sum=${sum%% *}
    run_podman_testing create-image-data -i $imageID -k manifest-sha256:$sum -f $tmpdir/manifest
    run_podman_testing create-image-data -i $imageID -k manifest -f $tmpdir/manifest
}

# vim: filetype=sh