11e13e201SManos Pitsidianakis#!/bin/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 Pitsidianakishere=`pwd` 281e13e201SManos Pitsidianakisstatus=1 # failure is the default! 291e13e201SManos Pitsidianakis 301e13e201SManos Pitsidianakis_cleanup() 311e13e201SManos Pitsidianakis{ 321e13e201SManos Pitsidianakis _cleanup_test_img 331e13e201SManos Pitsidianakis} 341e13e201SManos Pitsidianakistrap "_cleanup; exit \$status" 0 1 2 3 15 351e13e201SManos Pitsidianakis 361e13e201SManos Pitsidianakis# get standard environment, filters and checks 371e13e201SManos Pitsidianakis. ./common.rc 381e13e201SManos Pitsidianakis. ./common.filter 391e13e201SManos Pitsidianakis 401e13e201SManos Pitsidianakis_supported_fmt qcow2 411e13e201SManos Pitsidianakis_supported_proto file 421e13e201SManos Pitsidianakis_supported_os Linux 431e13e201SManos Pitsidianakis 441e13e201SManos Pitsidianakisfunction do_run_qemu() 451e13e201SManos Pitsidianakis{ 461e13e201SManos Pitsidianakis echo Testing: "$@" | _filter_imgfmt 471e13e201SManos Pitsidianakis $QEMU -nographic -qmp-pretty stdio -serial none "$@" 481e13e201SManos Pitsidianakis echo 491e13e201SManos Pitsidianakis} 501e13e201SManos Pitsidianakis 511e13e201SManos Pitsidianakisfunction run_qemu() 521e13e201SManos Pitsidianakis{ 531e13e201SManos Pitsidianakis do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_qmp\ 54*b66df843SMax Reitz | _filter_qemu_io | _filter_generated_node_ids \ 55*b66df843SMax Reitz | _filter_actual_image_size 561e13e201SManos Pitsidianakis} 571e13e201SManos Pitsidianakis 581e13e201SManos Pitsidianakis_make_test_img 64M 591e13e201SManos Pitsidianakistest_throttle=$($QEMU_IMG --help|grep throttle) 601e13e201SManos Pitsidianakis[ "$test_throttle" = "" ] && _supported_fmt throttle 611e13e201SManos Pitsidianakis 621e13e201SManos Pitsidianakisecho 631e13e201SManos Pitsidianakisecho "== checking interface ==" 641e13e201SManos Pitsidianakis 651e13e201SManos Pitsidianakisrun_qemu <<EOF 661e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 671e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 681e13e201SManos Pitsidianakis "arguments": { 691e13e201SManos Pitsidianakis "driver": "$IMGFMT", 701e13e201SManos Pitsidianakis "node-name": "disk0", 711e13e201SManos Pitsidianakis "file": { 721e13e201SManos Pitsidianakis "driver": "file", 731e13e201SManos Pitsidianakis "filename": "$TEST_IMG" 741e13e201SManos Pitsidianakis } 751e13e201SManos Pitsidianakis } 761e13e201SManos Pitsidianakis} 771e13e201SManos Pitsidianakis{ "execute": "object-add", 781e13e201SManos Pitsidianakis "arguments": { 791e13e201SManos Pitsidianakis "qom-type": "throttle-group", 801e13e201SManos Pitsidianakis "id": "group0", 811e13e201SManos Pitsidianakis "props": { 821e13e201SManos Pitsidianakis "limits" : { 831e13e201SManos Pitsidianakis "iops-total": 1000 841e13e201SManos Pitsidianakis } 851e13e201SManos Pitsidianakis } 861e13e201SManos Pitsidianakis } 871e13e201SManos Pitsidianakis} 881e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 891e13e201SManos Pitsidianakis "arguments": { 901e13e201SManos Pitsidianakis "driver": "throttle", 911e13e201SManos Pitsidianakis "node-name": "throttle0", 921e13e201SManos Pitsidianakis "throttle-group": "group0", 931e13e201SManos Pitsidianakis "file": "disk0" 941e13e201SManos Pitsidianakis } 951e13e201SManos Pitsidianakis} 961e13e201SManos Pitsidianakis{ "execute": "query-named-block-nodes" } 971e13e201SManos Pitsidianakis{ "execute": "query-block" } 981e13e201SManos Pitsidianakis{ "execute": "quit" } 991e13e201SManos PitsidianakisEOF 1001e13e201SManos Pitsidianakis 1011e13e201SManos Pitsidianakisecho 1021e13e201SManos Pitsidianakisecho "== property changes in ThrottleGroup ==" 1031e13e201SManos Pitsidianakis 1041e13e201SManos Pitsidianakisrun_qemu <<EOF 1051e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 1061e13e201SManos Pitsidianakis{ "execute": "object-add", 1071e13e201SManos Pitsidianakis "arguments": { 1081e13e201SManos Pitsidianakis "qom-type": "throttle-group", 1091e13e201SManos Pitsidianakis "id": "group0", 1101e13e201SManos Pitsidianakis "props" : { 1111e13e201SManos Pitsidianakis "limits": { 1121e13e201SManos Pitsidianakis "iops-total": 1000 1131e13e201SManos Pitsidianakis } 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" : "qom-set", 1241e13e201SManos Pitsidianakis "arguments" : { 1251e13e201SManos Pitsidianakis "path" : "group0", 1261e13e201SManos Pitsidianakis "property" : "limits", 1271e13e201SManos Pitsidianakis "value" : { 1281e13e201SManos Pitsidianakis "iops-total" : 0 1291e13e201SManos Pitsidianakis } 1301e13e201SManos Pitsidianakis } 1311e13e201SManos Pitsidianakis} 1321e13e201SManos Pitsidianakis{ "execute" : "qom-get", 1331e13e201SManos Pitsidianakis "arguments" : { 1341e13e201SManos Pitsidianakis "path" : "group0", 1351e13e201SManos Pitsidianakis "property" : "limits" 1361e13e201SManos Pitsidianakis } 1371e13e201SManos Pitsidianakis} 1381e13e201SManos Pitsidianakis{ "execute": "quit" } 1391e13e201SManos PitsidianakisEOF 1401e13e201SManos Pitsidianakis 1411e13e201SManos Pitsidianakisecho 1421e13e201SManos Pitsidianakisecho "== object creation/set errors ==" 1431e13e201SManos Pitsidianakis 1441e13e201SManos Pitsidianakisrun_qemu <<EOF 1451e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 1461e13e201SManos Pitsidianakis{ "execute": "object-add", 1471e13e201SManos Pitsidianakis "arguments": { 1481e13e201SManos Pitsidianakis "qom-type": "throttle-group", 1491e13e201SManos Pitsidianakis "id": "group0", 1501e13e201SManos Pitsidianakis "props" : { 1511e13e201SManos Pitsidianakis "limits": { 1521e13e201SManos Pitsidianakis "iops-total": 1000 1531e13e201SManos Pitsidianakis } 1541e13e201SManos Pitsidianakis } 1551e13e201SManos Pitsidianakis } 1561e13e201SManos Pitsidianakis} 1571e13e201SManos Pitsidianakis{ "execute" : "qom-set", 1581e13e201SManos Pitsidianakis "arguments" : { 1591e13e201SManos Pitsidianakis "path" : "group0", 1601e13e201SManos Pitsidianakis "property" : "x-iops-total", 1611e13e201SManos Pitsidianakis "value" : 0 1621e13e201SManos Pitsidianakis } 1631e13e201SManos Pitsidianakis} 1641e13e201SManos Pitsidianakis{ "execute" : "qom-set", 1651e13e201SManos Pitsidianakis "arguments" : { 1661e13e201SManos Pitsidianakis "path" : "group0", 1671e13e201SManos Pitsidianakis "property" : "limits", 1681e13e201SManos Pitsidianakis "value" : { 1691e13e201SManos Pitsidianakis "iops-total" : 10, 1701e13e201SManos Pitsidianakis "iops-read" : 10 1711e13e201SManos Pitsidianakis } 1721e13e201SManos Pitsidianakis } 1731e13e201SManos Pitsidianakis} 1741e13e201SManos Pitsidianakis{ "execute": "quit" } 1751e13e201SManos PitsidianakisEOF 1761e13e201SManos Pitsidianakis 1771e13e201SManos Pitsidianakisecho 1781e13e201SManos Pitsidianakisecho "== don't specify group ==" 1791e13e201SManos Pitsidianakis 1801e13e201SManos Pitsidianakisrun_qemu <<EOF 1811e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 1821e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 1831e13e201SManos Pitsidianakis "arguments": { 1841e13e201SManos Pitsidianakis "driver": "$IMGFMT", 1851e13e201SManos Pitsidianakis "node-name": "disk0", 1861e13e201SManos Pitsidianakis "file": { 1871e13e201SManos Pitsidianakis "driver": "file", 1881e13e201SManos Pitsidianakis "filename": "$TEST_IMG" 1891e13e201SManos Pitsidianakis } 1901e13e201SManos Pitsidianakis } 1911e13e201SManos Pitsidianakis} 1921e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 1931e13e201SManos Pitsidianakis "arguments": { 1941e13e201SManos Pitsidianakis "driver": "throttle", 1951e13e201SManos Pitsidianakis "node-name": "throttle0", 1961e13e201SManos Pitsidianakis "file": "disk0" 1971e13e201SManos Pitsidianakis } 1981e13e201SManos Pitsidianakis} 1991e13e201SManos Pitsidianakis{ "execute": "quit" } 2001e13e201SManos PitsidianakisEOF 2011e13e201SManos Pitsidianakis 2021e13e201SManos Pitsidianakisecho 2031e13e201SManos Pitsidianakis# success, all done 2041e13e201SManos Pitsidianakisecho "*** done" 2051e13e201SManos Pitsidianakisrm -f $seq.full 2061e13e201SManos Pitsidianakisstatus=0 207