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