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