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