File: exec.sh

package info (click to toggle)
incus 6.0.5-8
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 26,092 kB
  • sloc: sh: 16,313; ansic: 3,121; python: 457; makefile: 337; ruby: 51; sql: 50; lisp: 6
file content (97 lines) | stat: -rw-r--r-- 2,787 bytes parent folder | download | duplicates (5)
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
test_exec() {
    ensure_import_testimage

    name=x1
    incus launch testimage x1
    incus list ${name} | grep RUNNING

    exec_container_noninteractive() {
        echo "abc${1}" | incus exec "${name}" --force-noninteractive -- cat | grep abc
    }

    exec_container_interactive() {
        echo "abc${1}" | incus exec "${name}" -- cat | grep abc
    }

    for i in $(seq 1 25); do
        exec_container_interactive "${i}" > "${INCUS_DIR}/exec-${i}.out" 2>&1
    done

    for i in $(seq 1 25); do
        exec_container_noninteractive "${i}" > "${INCUS_DIR}/exec-${i}.out" 2>&1
    done

    # Check non-websocket based exec works.
    opID=$(incus query -X POST -d '{\"command\":[\"touch\",\"/root/foo1\"],\"record-output\":false}' /1.0/instances/x1/exec | jq -r .id)
    sleep 1
    incus query /1.0/operations/"${opID}" | jq .metadata.return | grep -F "0"
    incus exec x1 -- stat /root/foo1

    opID=$(incus query -X POST -d '{\"command\":[\"missingcmd\"],\"record-output\":false}' /1.0/instances/x1/exec | jq -r .id)
    sleep 1
    incus query /1.0/operations/"${opID}" | jq .metadata.return | grep -F "127"

    echo "hello" | incus exec x1 -- tee /root/foo1
    opID=$(incus query -X POST -d '{\"command\":[\"cat\",\"/root/foo1\"],\"record-output\":true}' /1.0/instances/x1/exec | jq -r .id)
    sleep 1
    stdOutURL=$(incus query /1.0/operations/"${opID}" | jq '.metadata.output["1"]')
    incus query "${stdOutURL}" | grep -F "hello"

    incus stop "${name}" --force
    incus delete "${name}"
}

test_concurrent_exec() {
    if [ -z "${INCUS_CONCURRENT:-}" ]; then
        echo "==> SKIP: INCUS_CONCURRENT isn't set"
        return
    fi

    ensure_import_testimage

    name=x1
    incus launch testimage x1
    incus list ${name} | grep RUNNING

    exec_container_noninteractive() {
        echo "abc${1}" | incus exec "${name}" --force-noninteractive -- cat | grep abc
    }

    exec_container_interactive() {
        echo "abc${1}" | incus exec "${name}" -- cat | grep abc
    }

    PIDS=""
    for i in $(seq 1 25); do
        exec_container_interactive "${i}" > "${INCUS_DIR}/exec-${i}.out" 2>&1 &
        PIDS="${PIDS} $!"
    done

    for i in $(seq 1 25); do
        exec_container_noninteractive "${i}" > "${INCUS_DIR}/exec-${i}.out" 2>&1 &
        PIDS="${PIDS} $!"
    done

    for pid in ${PIDS}; do
        wait "${pid}"
    done

    incus stop "${name}" --force
    incus delete "${name}"
}

test_exec_exit_code() {
    ensure_import_testimage
    incus launch testimage x1

    incus exec x1 -- true || exitCode=$?
    [ "${exitCode:-0}" -eq 0 ]

    incus exec x1 -- false || exitCode=$?
    [ "${exitCode:-0}" -eq 1 ]

    incus exec x1 -- invalid-command || exitCode=$?
    [ "${exitCode:-0}" -eq 127 ]

    incus delete --force x1
}