master
text 94 lines 2.41 KB
Raw
1 #!/usr/bin/env bash
2 # group: rw quick
3 #
4 # Test of opening both server and client NBD in a qcow2 backing chain
5 #
6 # Copyright (C) Red Hat, Inc.
7 #
8 # SPDX-License-Identifier: GPL-2.0-or-later
9
10 # creator
11 owner=eblake@redhat.com
12
13 seq=`basename $0`
14 echo "QA output created by $seq"
15
16 status=1 # failure is the default!
17
18 _cleanup()
19 {
20 _cleanup_qemu
21 _cleanup_test_img
22 rm -f "$SOCK_DIR/nbd"
23 }
24 trap "_cleanup; exit \$status" 0 1 2 3 15
25
26 # get standard environment, filters and checks
27 cd ..
28 . ./common.rc
29 . ./common.filter
30 . ./common.qemu
31 . ./common.nbd
32
33 _supported_fmt qcow2 # Hardcoded to qcow2 command line and QMP below
34 _supported_proto file
35
36 size=100M
37
38 echo
39 echo "=== Preparing base image ==="
40
41 TEST_IMG="$TEST_IMG.base" _make_test_img $size
42
43 echo
44 echo "=== Starting QEMU and exposing base image ==="
45
46 _launch_qemu -machine q35
47 h1=$QEMU_HANDLE
48 _send_qemu_cmd $QEMU_HANDLE '{"execute": "qmp_capabilities"}' 'return'
49 _send_qemu_cmd $QEMU_HANDLE '{"execute": "blockdev-add",
50 "arguments": {"node-name":"base", "driver":"qcow2",
51 "file":{"driver":"file", "filename":"'"$TEST_IMG.base"'"}}}' 'return'
52 _send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-start",
53 "arguments": {"addr":{"type":"unix",
54 "data":{"path":"'"$SOCK_DIR/nbd"'"}}}}' 'return'
55 _send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-add",
56 "arguments": {"device":"base","name":"base"}}' 'return'
57
58 echo
59 echo "=== Adding explicit NBD client ==="
60
61 _send_qemu_cmd $QEMU_HANDLE '{"execute": "blockdev-add",
62 "arguments": {"node-name":"client", "driver":"nbd",
63 "read-only":true, "export":"base",
64 "server":{"type":"unix", "path":"'"$SOCK_DIR/nbd"'"}}}' 'return'
65 _send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-add",
66 "arguments": {"device":"client","name":"client"}}' 'return'
67
68 echo
69 echo "=== Creating wrapper image ==="
70
71 _make_test_img -F raw -b "nbd+unix:///base?socket=$SOCK_DIR/nbd" $size
72
73 echo
74 echo "=== Adding wrapper image with implicit client from qcow2 file ==="
75
76 _send_qemu_cmd $QEMU_HANDLE '{"execute": "blockdev-add",
77 "arguments": {"node-name":"wrap", "driver":"qcow2",
78 "file":{"driver":"file", "filename":"'"$TEST_IMG"'"}}}' 'return'
79 _send_qemu_cmd $QEMU_HANDLE '{"execute":"nbd-server-add",
80 "arguments": {"device":"wrap","name":"wrap"}}' 'return'
81
82 echo
83 echo "=== Checking NBD server ==="
84
85 $QEMU_NBD --list -k $SOCK_DIR/nbd
86
87 echo
88 echo "=== Cleaning up ==="
89
90 _send_qemu_cmd $QEMU_HANDLE '{"execute":"quit"}' ''
91
92 echo "*** done"
93 rm -f $seq.full
94 status=0