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 "limits" : { 711e13e201SManos Pitsidianakis "iops-total": 1000 721e13e201SManos Pitsidianakis } 731e13e201SManos Pitsidianakis } 741e13e201SManos Pitsidianakis} 751e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 761e13e201SManos Pitsidianakis "arguments": { 771e13e201SManos Pitsidianakis "driver": "throttle", 781e13e201SManos Pitsidianakis "node-name": "throttle0", 791e13e201SManos Pitsidianakis "throttle-group": "group0", 801e13e201SManos Pitsidianakis "file": "disk0" 811e13e201SManos Pitsidianakis } 821e13e201SManos Pitsidianakis} 831e13e201SManos Pitsidianakis{ "execute": "query-named-block-nodes" } 841e13e201SManos Pitsidianakis{ "execute": "query-block" } 851e13e201SManos Pitsidianakis{ "execute": "quit" } 861e13e201SManos PitsidianakisEOF 871e13e201SManos Pitsidianakis 881e13e201SManos Pitsidianakisecho 891e13e201SManos Pitsidianakisecho "== property changes in ThrottleGroup ==" 901e13e201SManos Pitsidianakis 911e13e201SManos Pitsidianakisrun_qemu <<EOF 921e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 931e13e201SManos Pitsidianakis{ "execute": "object-add", 941e13e201SManos Pitsidianakis "arguments": { 951e13e201SManos Pitsidianakis "qom-type": "throttle-group", 961e13e201SManos Pitsidianakis "id": "group0", 971e13e201SManos Pitsidianakis "limits": { 981e13e201SManos Pitsidianakis "iops-total": 1000 991e13e201SManos Pitsidianakis } 1001e13e201SManos Pitsidianakis } 1011e13e201SManos Pitsidianakis} 1021e13e201SManos Pitsidianakis{ "execute" : "qom-get", 1031e13e201SManos Pitsidianakis "arguments" : { 1041e13e201SManos Pitsidianakis "path" : "group0", 1051e13e201SManos Pitsidianakis "property" : "limits" 1061e13e201SManos Pitsidianakis } 1071e13e201SManos Pitsidianakis} 1081e13e201SManos Pitsidianakis{ "execute" : "qom-set", 1091e13e201SManos Pitsidianakis "arguments" : { 1101e13e201SManos Pitsidianakis "path" : "group0", 1111e13e201SManos Pitsidianakis "property" : "limits", 1121e13e201SManos Pitsidianakis "value" : { 1131e13e201SManos Pitsidianakis "iops-total" : 0 1141e13e201SManos Pitsidianakis } 1151e13e201SManos Pitsidianakis } 1161e13e201SManos Pitsidianakis} 1171e13e201SManos Pitsidianakis{ "execute" : "qom-get", 1181e13e201SManos Pitsidianakis "arguments" : { 1191e13e201SManos Pitsidianakis "path" : "group0", 1201e13e201SManos Pitsidianakis "property" : "limits" 1211e13e201SManos Pitsidianakis } 1221e13e201SManos Pitsidianakis} 1231e13e201SManos Pitsidianakis{ "execute": "quit" } 1241e13e201SManos PitsidianakisEOF 1251e13e201SManos Pitsidianakis 1261e13e201SManos Pitsidianakisecho 1271e13e201SManos Pitsidianakisecho "== object creation/set errors ==" 1281e13e201SManos Pitsidianakis 1291e13e201SManos Pitsidianakisrun_qemu <<EOF 1301e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 1311e13e201SManos Pitsidianakis{ "execute": "object-add", 1321e13e201SManos Pitsidianakis "arguments": { 1331e13e201SManos Pitsidianakis "qom-type": "throttle-group", 1341e13e201SManos Pitsidianakis "id": "group0", 1351e13e201SManos Pitsidianakis "limits": { 1361e13e201SManos Pitsidianakis "iops-total": 1000 1371e13e201SManos Pitsidianakis } 1381e13e201SManos Pitsidianakis } 1391e13e201SManos Pitsidianakis} 1401e13e201SManos Pitsidianakis{ "execute" : "qom-set", 1411e13e201SManos Pitsidianakis "arguments" : { 1421e13e201SManos Pitsidianakis "path" : "group0", 1431e13e201SManos Pitsidianakis "property" : "x-iops-total", 1441e13e201SManos Pitsidianakis "value" : 0 1451e13e201SManos Pitsidianakis } 1461e13e201SManos Pitsidianakis} 1471e13e201SManos Pitsidianakis{ "execute" : "qom-set", 1481e13e201SManos Pitsidianakis "arguments" : { 1491e13e201SManos Pitsidianakis "path" : "group0", 1501e13e201SManos Pitsidianakis "property" : "limits", 1511e13e201SManos Pitsidianakis "value" : { 1521e13e201SManos Pitsidianakis "iops-total" : 10, 1531e13e201SManos Pitsidianakis "iops-read" : 10 1541e13e201SManos Pitsidianakis } 1551e13e201SManos Pitsidianakis } 1561e13e201SManos Pitsidianakis} 1571e13e201SManos Pitsidianakis{ "execute": "quit" } 1581e13e201SManos PitsidianakisEOF 1591e13e201SManos Pitsidianakis 1601e13e201SManos Pitsidianakisecho 1611e13e201SManos Pitsidianakisecho "== don't specify group ==" 1621e13e201SManos Pitsidianakis 1631e13e201SManos Pitsidianakisrun_qemu <<EOF 1641e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 1651e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 1661e13e201SManos Pitsidianakis "arguments": { 167b5d92efaSMax Reitz "driver": "null-co", 168b5d92efaSMax Reitz "node-name": "disk0" 1691e13e201SManos Pitsidianakis } 1701e13e201SManos Pitsidianakis} 1711e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 1721e13e201SManos Pitsidianakis "arguments": { 1731e13e201SManos Pitsidianakis "driver": "throttle", 1741e13e201SManos Pitsidianakis "node-name": "throttle0", 1751e13e201SManos Pitsidianakis "file": "disk0" 1761e13e201SManos Pitsidianakis } 1771e13e201SManos Pitsidianakis} 1781e13e201SManos Pitsidianakis{ "execute": "quit" } 1791e13e201SManos PitsidianakisEOF 1801e13e201SManos Pitsidianakis 1811e13e201SManos Pitsidianakisecho 1821e13e201SManos Pitsidianakis# success, all done 1831e13e201SManos Pitsidianakisecho "*** done" 1841e13e201SManos Pitsidianakisrm -f $seq.full 1851e13e201SManos Pitsidianakisstatus=0 186