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