OSDN Git Service

Merge tag 'pull-halloween-omnibus-311023-2' of https://gitlab.com/stsquad/qemu into...
[qmiga/qemu.git] / tests / qemu-iotests / 184
1 #!/usr/bin/env bash
2 # group: rw auto quick
3 #
4 # Test I/O throttle block filter driver interface
5 #
6 # Copyright (C) 2017 Manos Pitsidianakis
7 #
8 # This program is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version.
12 #
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 #
21
22 # creator
23 owner="Manos Pitsidianakis"
24
25 seq=`basename $0`
26 echo "QA output created by $seq"
27
28 status=1        # failure is the default!
29
30 trap "exit \$status" 0 1 2 3 15
31
32 # get standard environment, filters and checks
33 . ./common.rc
34 . ./common.filter
35
36 _supported_os Linux
37 _require_drivers throttle
38
39 do_run_qemu()
40 {
41     echo Testing: "$@" | _filter_imgfmt
42     $QEMU -nographic -qmp-pretty stdio -serial none "$@"
43     echo
44 }
45
46 run_qemu()
47 {
48     do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_qmp\
49                           | _filter_qemu_io | _filter_generated_node_ids
50 }
51
52 test_throttle=$($QEMU_IMG --help|grep throttle)
53 [ "$test_throttle" = "" ] && _supported_fmt throttle
54
55 echo
56 echo "== checking interface =="
57
58 run_qemu <<EOF
59 { "execute": "qmp_capabilities" }
60 { "execute": "blockdev-add",
61   "arguments": {
62     "driver": "null-co",
63     "node-name": "disk0"
64   }
65 }
66 { "execute": "object-add",
67   "arguments": {
68     "qom-type": "throttle-group",
69     "id": "group0",
70     "limits" : {
71       "iops-total": 1000
72     }
73   }
74 }
75 { "execute": "blockdev-add",
76   "arguments": {
77     "driver": "throttle",
78     "node-name": "throttle0",
79     "throttle-group": "group0",
80     "file": "disk0"
81   }
82 }
83 { "execute": "query-named-block-nodes" }
84 { "execute": "query-block" }
85 { "execute": "quit" }
86 EOF
87
88 echo
89 echo "== property changes in ThrottleGroup =="
90
91 run_qemu <<EOF
92 { "execute": "qmp_capabilities" }
93 { "execute": "object-add",
94   "arguments": {
95     "qom-type": "throttle-group",
96     "id": "group0",
97     "limits": {
98         "iops-total": 1000
99     }
100   }
101 }
102 { "execute" : "qom-get",
103   "arguments" : {
104     "path" : "group0",
105     "property" : "limits"
106   }
107 }
108 { "execute" : "qom-set",
109     "arguments" : {
110         "path" : "group0",
111         "property" : "limits",
112         "value" : {
113             "iops-total" : 0
114         }
115     }
116 }
117 { "execute" : "qom-get",
118   "arguments" : {
119     "path" : "group0",
120     "property" : "limits"
121   }
122 }
123 { "execute": "quit" }
124 EOF
125
126 echo
127 echo "== object creation/set errors  =="
128
129 run_qemu <<EOF
130 { "execute": "qmp_capabilities" }
131 { "execute": "object-add",
132   "arguments": {
133     "qom-type": "throttle-group",
134     "id": "group0",
135     "limits": {
136         "iops-total": 1000
137     }
138   }
139 }
140 { "execute" : "qom-set",
141   "arguments" : {
142     "path" : "group0",
143     "property" : "x-iops-total",
144     "value" : 0
145   }
146 }
147 { "execute" : "qom-set",
148     "arguments" : {
149         "path" : "group0",
150         "property" : "limits",
151         "value" : {
152             "iops-total" : 10,
153             "iops-read" : 10
154         }
155     }
156 }
157 { "execute": "quit" }
158 EOF
159
160 echo
161 echo "== don't specify group =="
162
163 run_qemu <<EOF
164 { "execute": "qmp_capabilities" }
165 { "execute": "blockdev-add",
166   "arguments": {
167     "driver": "null-co",
168     "node-name": "disk0"
169   }
170 }
171 { "execute": "blockdev-add",
172   "arguments": {
173     "driver": "throttle",
174     "node-name": "throttle0",
175     "file": "disk0"
176   }
177 }
178 { "execute": "quit" }
179 EOF
180
181 echo
182 # success, all done
183 echo "*** done"
184 rm -f $seq.full
185 status=0