xref: /qemu/tests/qemu-iotests/184 (revision 9dd003a99842d1d82c336e45c5cce656149de382)
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