summaryrefslogtreecommitdiff
path: root/test/system/125-import.bats
blob: 743da85b27d7fe8cd03fb05048dc65312519252f (plain)
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
#!/usr/bin/env bats   -*- bats -*-
#
# tests for podman import
#

load helpers

@test "podman import" {
    local archive=$PODMAN_TMPDIR/archive.tar
    local random_content=$(random_string 12)
    # Generate a random name and tag (must be lower-case)
    local random_name=x0$(random_string 12 | tr A-Z a-z)
    local random_tag=t0$(random_string 7 | tr A-Z a-z)
    local fqin=localhost/$random_name:$random_tag

    run_podman run --name import $IMAGE sh -c "echo ${random_content} > /random.txt"
    run_podman export import -o $archive
    run_podman rm -t 0 -f import

    # Simple import
    run_podman import -q $archive
    iid="$output"
    run_podman run --rm $iid cat /random.txt
    is "$output" "$random_content" "simple import"
    run_podman rmi -f $iid

    # Simple import via stdin
    run_podman import -q - < <(cat $archive)
    iid="$output"
    run_podman run --rm $iid cat /random.txt
    is "$output" "$random_content" "simple import via stdin"
    run_podman rmi -f $iid

    # Tagged import
    run_podman import -q $archive $fqin
    run_podman run --rm $fqin cat /random.txt
    is "$output" "$random_content" "tagged import"
    run_podman rmi -f $fqin

    # Tagged import via stdin
    run_podman import -q - $fqin < <(cat $archive)
    run_podman run --rm $fqin cat /random.txt
    is "$output" "$random_content" "tagged import via stdin"
    run_podman rmi -f $fqin
}

@test "podman export, alter tarball, re-import" {

    # Create a test file following test
    mkdir $PODMAN_TMPDIR/tmp
    touch $PODMAN_TMPDIR/testfile1
    echo "modified tar file" >> $PODMAN_TMPDIR/tmp/testfile2

    # Create Dockerfile for test
    dockerfile=$PODMAN_TMPDIR/Dockerfile

    cat >$dockerfile <<EOF
FROM $IMAGE
ADD testfile1 /tmp
WORKDIR /tmp
EOF

    b_img=before_change_img
    b_cnt=before_change_cnt
    a_img=after_change_img
    a_cnt=after_change_cnt

    # Build from Dockerfile FROM non-existing local image
    run_podman build -t $b_img $PODMAN_TMPDIR
    run_podman create --name $b_cnt $b_img

    # Export built container as tarball
    run_podman export -o $PODMAN_TMPDIR/$b_cnt.tar $b_cnt
    run_podman rm -t 0 -f $b_cnt

    # Modify tarball contents
    tar --delete -f $PODMAN_TMPDIR/$b_cnt.tar tmp/testfile1
    tar -C $PODMAN_TMPDIR -rf $PODMAN_TMPDIR/$b_cnt.tar tmp/testfile2

    # Import tarball and Tag imported image
    run_podman import -q $PODMAN_TMPDIR/$b_cnt.tar \
        --change "CMD sh -c \
        \"trap 'exit 33' 2;
        while true; do sleep 0.05;done\"" $a_img

    # Run imported image to confirm tarball modification, block on non-special signal
    run_podman run --name $a_cnt -d $a_img

    # Confirm testfile1 is deleted from tarball
    run_podman 1 exec $a_cnt cat /tmp/testfile1
    is "$output" ".*can't open '/tmp/testfile1': No such file or directory"

    # Confirm testfile2 is added to tarball
    run_podman exec $a_cnt cat /tmp/testfile2
    is "$output" "modified tar file" "modify tarball content"

    # Kill can send non-TERM/KILL signal to container to exit
    run_podman kill --signal 2 $a_cnt
    run_podman wait $a_cnt

    # Confirm exit within timeout
    run_podman ps -a --filter name=$a_cnt --format '{{.Status}}'
    is "$output" "Exited (33) .*" "Exit by non-TERM/KILL"

    run_podman rm -t 0 -f $a_cnt
    run_podman rmi $b_img $a_img

}