111a82d14SPhilippe Mathieu-Daudé#!/usr/bin/env bash 2*9dd003a9SVladimir Sementsov-Ogievskiy# group: rw auto quick 31e13e201SManos Pitsidianakis# 41e13e201SManos Pitsidianakis# Test I/O throttle block filter driver interface 51e13e201SManos Pitsidianakis# 61e13e201SManos Pitsidianakis# Copyright (C) 2017 Manos Pitsidianakis 71e13e201SManos Pitsidianakis# 81e13e201SManos Pitsidianakis# This program is free software; you can redistribute it and/or modify 91e13e201SManos Pitsidianakis# it under the terms of the GNU General Public License as published by 101e13e201SManos Pitsidianakis# the Free Software Foundation; either version 2 of the License, or 111e13e201SManos Pitsidianakis# (at your option) any later version. 121e13e201SManos Pitsidianakis# 131e13e201SManos Pitsidianakis# This program is distributed in the hope that it will be useful, 141e13e201SManos Pitsidianakis# but WITHOUT ANY WARRANTY; without even the implied warranty of 151e13e201SManos Pitsidianakis# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 161e13e201SManos Pitsidianakis# GNU General Public License for more details. 171e13e201SManos Pitsidianakis# 181e13e201SManos Pitsidianakis# You should have received a copy of the GNU General Public License 191e13e201SManos Pitsidianakis# along with this program. If not, see <http://www.gnu.org/licenses/>. 201e13e201SManos Pitsidianakis# 211e13e201SManos Pitsidianakis 221e13e201SManos Pitsidianakis# creator 231e13e201SManos Pitsidianakisowner="Manos Pitsidianakis" 241e13e201SManos Pitsidianakis 251e13e201SManos Pitsidianakisseq=`basename $0` 261e13e201SManos Pitsidianakisecho "QA output created by $seq" 271e13e201SManos Pitsidianakis 281e13e201SManos Pitsidianakisstatus=1 # failure is the default! 291e13e201SManos Pitsidianakis 30b5d92efaSMax Reitztrap "exit \$status" 0 1 2 3 15 311e13e201SManos Pitsidianakis 321e13e201SManos Pitsidianakis# get standard environment, filters and checks 331e13e201SManos Pitsidianakis. ./common.rc 341e13e201SManos Pitsidianakis. ./common.filter 351e13e201SManos Pitsidianakis 361e13e201SManos Pitsidianakis_supported_os Linux 3721b43d00SThomas Huth_require_drivers throttle 381e13e201SManos Pitsidianakis 398cedcffdSEric Blakedo_run_qemu() 401e13e201SManos Pitsidianakis{ 411e13e201SManos Pitsidianakis echo Testing: "$@" | _filter_imgfmt 421e13e201SManos Pitsidianakis $QEMU -nographic -qmp-pretty stdio -serial none "$@" 431e13e201SManos Pitsidianakis echo 441e13e201SManos Pitsidianakis} 451e13e201SManos Pitsidianakis 468cedcffdSEric Blakerun_qemu() 471e13e201SManos Pitsidianakis{ 481e13e201SManos Pitsidianakis do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_qmp\ 4907cd7b65SMax Reitz | _filter_qemu_io | _filter_generated_node_ids 501e13e201SManos Pitsidianakis} 511e13e201SManos Pitsidianakis 521e13e201SManos Pitsidianakistest_throttle=$($QEMU_IMG --help|grep throttle) 531e13e201SManos Pitsidianakis[ "$test_throttle" = "" ] && _supported_fmt throttle 541e13e201SManos Pitsidianakis 551e13e201SManos Pitsidianakisecho 561e13e201SManos Pitsidianakisecho "== checking interface ==" 571e13e201SManos Pitsidianakis 581e13e201SManos Pitsidianakisrun_qemu <<EOF 591e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 601e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 611e13e201SManos Pitsidianakis "arguments": { 62b5d92efaSMax Reitz "driver": "null-co", 63b5d92efaSMax Reitz "node-name": "disk0" 641e13e201SManos Pitsidianakis } 651e13e201SManos Pitsidianakis} 661e13e201SManos Pitsidianakis{ "execute": "object-add", 671e13e201SManos Pitsidianakis "arguments": { 681e13e201SManos Pitsidianakis "qom-type": "throttle-group", 691e13e201SManos Pitsidianakis "id": "group0", 701e13e201SManos Pitsidianakis "props": { 711e13e201SManos Pitsidianakis "limits" : { 721e13e201SManos Pitsidianakis "iops-total": 1000 731e13e201SManos Pitsidianakis } 741e13e201SManos Pitsidianakis } 751e13e201SManos Pitsidianakis } 761e13e201SManos Pitsidianakis} 771e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 781e13e201SManos Pitsidianakis "arguments": { 791e13e201SManos Pitsidianakis "driver": "throttle", 801e13e201SManos Pitsidianakis "node-name": "throttle0", 811e13e201SManos Pitsidianakis "throttle-group": "group0", 821e13e201SManos Pitsidianakis "file": "disk0" 831e13e201SManos Pitsidianakis } 841e13e201SManos Pitsidianakis} 851e13e201SManos Pitsidianakis{ "execute": "query-named-block-nodes" } 861e13e201SManos Pitsidianakis{ "execute": "query-block" } 871e13e201SManos Pitsidianakis{ "execute": "quit" } 881e13e201SManos PitsidianakisEOF 891e13e201SManos Pitsidianakis 901e13e201SManos Pitsidianakisecho 911e13e201SManos Pitsidianakisecho "== property changes in ThrottleGroup ==" 921e13e201SManos Pitsidianakis 931e13e201SManos Pitsidianakisrun_qemu <<EOF 941e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 951e13e201SManos Pitsidianakis{ "execute": "object-add", 961e13e201SManos Pitsidianakis "arguments": { 971e13e201SManos Pitsidianakis "qom-type": "throttle-group", 981e13e201SManos Pitsidianakis "id": "group0", 991e13e201SManos Pitsidianakis "props" : { 1001e13e201SManos Pitsidianakis "limits": { 1011e13e201SManos Pitsidianakis "iops-total": 1000 1021e13e201SManos Pitsidianakis } 1031e13e201SManos Pitsidianakis } 1041e13e201SManos Pitsidianakis } 1051e13e201SManos Pitsidianakis} 1061e13e201SManos Pitsidianakis{ "execute" : "qom-get", 1071e13e201SManos Pitsidianakis "arguments" : { 1081e13e201SManos Pitsidianakis "path" : "group0", 1091e13e201SManos Pitsidianakis "property" : "limits" 1101e13e201SManos Pitsidianakis } 1111e13e201SManos Pitsidianakis} 1121e13e201SManos Pitsidianakis{ "execute" : "qom-set", 1131e13e201SManos Pitsidianakis "arguments" : { 1141e13e201SManos Pitsidianakis "path" : "group0", 1151e13e201SManos Pitsidianakis "property" : "limits", 1161e13e201SManos Pitsidianakis "value" : { 1171e13e201SManos Pitsidianakis "iops-total" : 0 1181e13e201SManos Pitsidianakis } 1191e13e201SManos Pitsidianakis } 1201e13e201SManos Pitsidianakis} 1211e13e201SManos Pitsidianakis{ "execute" : "qom-get", 1221e13e201SManos Pitsidianakis "arguments" : { 1231e13e201SManos Pitsidianakis "path" : "group0", 1241e13e201SManos Pitsidianakis "property" : "limits" 1251e13e201SManos Pitsidianakis } 1261e13e201SManos Pitsidianakis} 1271e13e201SManos Pitsidianakis{ "execute": "quit" } 1281e13e201SManos PitsidianakisEOF 1291e13e201SManos Pitsidianakis 1301e13e201SManos Pitsidianakisecho 1311e13e201SManos Pitsidianakisecho "== object creation/set errors ==" 1321e13e201SManos Pitsidianakis 1331e13e201SManos Pitsidianakisrun_qemu <<EOF 1341e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 1351e13e201SManos Pitsidianakis{ "execute": "object-add", 1361e13e201SManos Pitsidianakis "arguments": { 1371e13e201SManos Pitsidianakis "qom-type": "throttle-group", 1381e13e201SManos Pitsidianakis "id": "group0", 1391e13e201SManos Pitsidianakis "props" : { 1401e13e201SManos Pitsidianakis "limits": { 1411e13e201SManos Pitsidianakis "iops-total": 1000 1421e13e201SManos Pitsidianakis } 1431e13e201SManos Pitsidianakis } 1441e13e201SManos Pitsidianakis } 1451e13e201SManos Pitsidianakis} 1461e13e201SManos Pitsidianakis{ "execute" : "qom-set", 1471e13e201SManos Pitsidianakis "arguments" : { 1481e13e201SManos Pitsidianakis "path" : "group0", 1491e13e201SManos Pitsidianakis "property" : "x-iops-total", 1501e13e201SManos Pitsidianakis "value" : 0 1511e13e201SManos Pitsidianakis } 1521e13e201SManos Pitsidianakis} 1531e13e201SManos Pitsidianakis{ "execute" : "qom-set", 1541e13e201SManos Pitsidianakis "arguments" : { 1551e13e201SManos Pitsidianakis "path" : "group0", 1561e13e201SManos Pitsidianakis "property" : "limits", 1571e13e201SManos Pitsidianakis "value" : { 1581e13e201SManos Pitsidianakis "iops-total" : 10, 1591e13e201SManos Pitsidianakis "iops-read" : 10 1601e13e201SManos Pitsidianakis } 1611e13e201SManos Pitsidianakis } 1621e13e201SManos Pitsidianakis} 1631e13e201SManos Pitsidianakis{ "execute": "quit" } 1641e13e201SManos PitsidianakisEOF 1651e13e201SManos Pitsidianakis 1661e13e201SManos Pitsidianakisecho 1671e13e201SManos Pitsidianakisecho "== don't specify group ==" 1681e13e201SManos Pitsidianakis 1691e13e201SManos Pitsidianakisrun_qemu <<EOF 1701e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 1711e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 1721e13e201SManos Pitsidianakis "arguments": { 173b5d92efaSMax Reitz "driver": "null-co", 174b5d92efaSMax Reitz "node-name": "disk0" 1751e13e201SManos Pitsidianakis } 1761e13e201SManos Pitsidianakis} 1771e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 1781e13e201SManos Pitsidianakis "arguments": { 1791e13e201SManos Pitsidianakis "driver": "throttle", 1801e13e201SManos Pitsidianakis "node-name": "throttle0", 1811e13e201SManos Pitsidianakis "file": "disk0" 1821e13e201SManos Pitsidianakis } 1831e13e201SManos Pitsidianakis} 1841e13e201SManos Pitsidianakis{ "execute": "quit" } 1851e13e201SManos PitsidianakisEOF 1861e13e201SManos Pitsidianakis 1871e13e201SManos Pitsidianakisecho 1881e13e201SManos Pitsidianakis# success, all done 1891e13e201SManos Pitsidianakisecho "*** done" 1901e13e201SManos Pitsidianakisrm -f $seq.full 1911e13e201SManos Pitsidianakisstatus=0 192