1*1e13e201SManos Pitsidianakis#!/bin/bash 2*1e13e201SManos Pitsidianakis# 3*1e13e201SManos Pitsidianakis# Test I/O throttle block filter driver interface 4*1e13e201SManos Pitsidianakis# 5*1e13e201SManos Pitsidianakis# Copyright (C) 2017 Manos Pitsidianakis 6*1e13e201SManos Pitsidianakis# 7*1e13e201SManos Pitsidianakis# This program is free software; you can redistribute it and/or modify 8*1e13e201SManos Pitsidianakis# it under the terms of the GNU General Public License as published by 9*1e13e201SManos Pitsidianakis# the Free Software Foundation; either version 2 of the License, or 10*1e13e201SManos Pitsidianakis# (at your option) any later version. 11*1e13e201SManos Pitsidianakis# 12*1e13e201SManos Pitsidianakis# This program is distributed in the hope that it will be useful, 13*1e13e201SManos Pitsidianakis# but WITHOUT ANY WARRANTY; without even the implied warranty of 14*1e13e201SManos Pitsidianakis# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*1e13e201SManos Pitsidianakis# GNU General Public License for more details. 16*1e13e201SManos Pitsidianakis# 17*1e13e201SManos Pitsidianakis# You should have received a copy of the GNU General Public License 18*1e13e201SManos Pitsidianakis# along with this program. If not, see <http://www.gnu.org/licenses/>. 19*1e13e201SManos Pitsidianakis# 20*1e13e201SManos Pitsidianakis 21*1e13e201SManos Pitsidianakis# creator 22*1e13e201SManos Pitsidianakisowner="Manos Pitsidianakis" 23*1e13e201SManos Pitsidianakis 24*1e13e201SManos Pitsidianakisseq=`basename $0` 25*1e13e201SManos Pitsidianakisecho "QA output created by $seq" 26*1e13e201SManos Pitsidianakis 27*1e13e201SManos Pitsidianakishere=`pwd` 28*1e13e201SManos Pitsidianakisstatus=1 # failure is the default! 29*1e13e201SManos Pitsidianakis 30*1e13e201SManos Pitsidianakis_cleanup() 31*1e13e201SManos Pitsidianakis{ 32*1e13e201SManos Pitsidianakis _cleanup_test_img 33*1e13e201SManos Pitsidianakis} 34*1e13e201SManos Pitsidianakistrap "_cleanup; exit \$status" 0 1 2 3 15 35*1e13e201SManos Pitsidianakis 36*1e13e201SManos Pitsidianakis# get standard environment, filters and checks 37*1e13e201SManos Pitsidianakis. ./common.rc 38*1e13e201SManos Pitsidianakis. ./common.filter 39*1e13e201SManos Pitsidianakis 40*1e13e201SManos Pitsidianakis_supported_fmt qcow2 41*1e13e201SManos Pitsidianakis_supported_proto file 42*1e13e201SManos Pitsidianakis_supported_os Linux 43*1e13e201SManos Pitsidianakis 44*1e13e201SManos Pitsidianakisfunction do_run_qemu() 45*1e13e201SManos Pitsidianakis{ 46*1e13e201SManos Pitsidianakis echo Testing: "$@" | _filter_imgfmt 47*1e13e201SManos Pitsidianakis $QEMU -nographic -qmp-pretty stdio -serial none "$@" 48*1e13e201SManos Pitsidianakis echo 49*1e13e201SManos Pitsidianakis} 50*1e13e201SManos Pitsidianakis 51*1e13e201SManos Pitsidianakisfunction run_qemu() 52*1e13e201SManos Pitsidianakis{ 53*1e13e201SManos Pitsidianakis do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_qmp\ 54*1e13e201SManos Pitsidianakis | _filter_qemu_io | _filter_generated_node_ids 55*1e13e201SManos Pitsidianakis} 56*1e13e201SManos Pitsidianakis 57*1e13e201SManos Pitsidianakis_make_test_img 64M 58*1e13e201SManos Pitsidianakistest_throttle=$($QEMU_IMG --help|grep throttle) 59*1e13e201SManos Pitsidianakis[ "$test_throttle" = "" ] && _supported_fmt throttle 60*1e13e201SManos Pitsidianakis 61*1e13e201SManos Pitsidianakisecho 62*1e13e201SManos Pitsidianakisecho "== checking interface ==" 63*1e13e201SManos Pitsidianakis 64*1e13e201SManos Pitsidianakisrun_qemu <<EOF 65*1e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 66*1e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 67*1e13e201SManos Pitsidianakis "arguments": { 68*1e13e201SManos Pitsidianakis "driver": "$IMGFMT", 69*1e13e201SManos Pitsidianakis "node-name": "disk0", 70*1e13e201SManos Pitsidianakis "file": { 71*1e13e201SManos Pitsidianakis "driver": "file", 72*1e13e201SManos Pitsidianakis "filename": "$TEST_IMG" 73*1e13e201SManos Pitsidianakis } 74*1e13e201SManos Pitsidianakis } 75*1e13e201SManos Pitsidianakis} 76*1e13e201SManos Pitsidianakis{ "execute": "object-add", 77*1e13e201SManos Pitsidianakis "arguments": { 78*1e13e201SManos Pitsidianakis "qom-type": "throttle-group", 79*1e13e201SManos Pitsidianakis "id": "group0", 80*1e13e201SManos Pitsidianakis "props": { 81*1e13e201SManos Pitsidianakis "limits" : { 82*1e13e201SManos Pitsidianakis "iops-total": 1000 83*1e13e201SManos Pitsidianakis } 84*1e13e201SManos Pitsidianakis } 85*1e13e201SManos Pitsidianakis } 86*1e13e201SManos Pitsidianakis} 87*1e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 88*1e13e201SManos Pitsidianakis "arguments": { 89*1e13e201SManos Pitsidianakis "driver": "throttle", 90*1e13e201SManos Pitsidianakis "node-name": "throttle0", 91*1e13e201SManos Pitsidianakis "throttle-group": "group0", 92*1e13e201SManos Pitsidianakis "file": "disk0" 93*1e13e201SManos Pitsidianakis } 94*1e13e201SManos Pitsidianakis} 95*1e13e201SManos Pitsidianakis{ "execute": "query-named-block-nodes" } 96*1e13e201SManos Pitsidianakis{ "execute": "query-block" } 97*1e13e201SManos Pitsidianakis{ "execute": "quit" } 98*1e13e201SManos PitsidianakisEOF 99*1e13e201SManos Pitsidianakis 100*1e13e201SManos Pitsidianakisecho 101*1e13e201SManos Pitsidianakisecho "== property changes in ThrottleGroup ==" 102*1e13e201SManos Pitsidianakis 103*1e13e201SManos Pitsidianakisrun_qemu <<EOF 104*1e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 105*1e13e201SManos Pitsidianakis{ "execute": "object-add", 106*1e13e201SManos Pitsidianakis "arguments": { 107*1e13e201SManos Pitsidianakis "qom-type": "throttle-group", 108*1e13e201SManos Pitsidianakis "id": "group0", 109*1e13e201SManos Pitsidianakis "props" : { 110*1e13e201SManos Pitsidianakis "limits": { 111*1e13e201SManos Pitsidianakis "iops-total": 1000 112*1e13e201SManos Pitsidianakis } 113*1e13e201SManos Pitsidianakis } 114*1e13e201SManos Pitsidianakis } 115*1e13e201SManos Pitsidianakis} 116*1e13e201SManos Pitsidianakis{ "execute" : "qom-get", 117*1e13e201SManos Pitsidianakis "arguments" : { 118*1e13e201SManos Pitsidianakis "path" : "group0", 119*1e13e201SManos Pitsidianakis "property" : "limits" 120*1e13e201SManos Pitsidianakis } 121*1e13e201SManos Pitsidianakis} 122*1e13e201SManos Pitsidianakis{ "execute" : "qom-set", 123*1e13e201SManos Pitsidianakis "arguments" : { 124*1e13e201SManos Pitsidianakis "path" : "group0", 125*1e13e201SManos Pitsidianakis "property" : "limits", 126*1e13e201SManos Pitsidianakis "value" : { 127*1e13e201SManos Pitsidianakis "iops-total" : 0 128*1e13e201SManos Pitsidianakis } 129*1e13e201SManos Pitsidianakis } 130*1e13e201SManos Pitsidianakis} 131*1e13e201SManos Pitsidianakis{ "execute" : "qom-get", 132*1e13e201SManos Pitsidianakis "arguments" : { 133*1e13e201SManos Pitsidianakis "path" : "group0", 134*1e13e201SManos Pitsidianakis "property" : "limits" 135*1e13e201SManos Pitsidianakis } 136*1e13e201SManos Pitsidianakis} 137*1e13e201SManos Pitsidianakis{ "execute": "quit" } 138*1e13e201SManos PitsidianakisEOF 139*1e13e201SManos Pitsidianakis 140*1e13e201SManos Pitsidianakisecho 141*1e13e201SManos Pitsidianakisecho "== object creation/set errors ==" 142*1e13e201SManos Pitsidianakis 143*1e13e201SManos Pitsidianakisrun_qemu <<EOF 144*1e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 145*1e13e201SManos Pitsidianakis{ "execute": "object-add", 146*1e13e201SManos Pitsidianakis "arguments": { 147*1e13e201SManos Pitsidianakis "qom-type": "throttle-group", 148*1e13e201SManos Pitsidianakis "id": "group0", 149*1e13e201SManos Pitsidianakis "props" : { 150*1e13e201SManos Pitsidianakis "limits": { 151*1e13e201SManos Pitsidianakis "iops-total": 1000 152*1e13e201SManos Pitsidianakis } 153*1e13e201SManos Pitsidianakis } 154*1e13e201SManos Pitsidianakis } 155*1e13e201SManos Pitsidianakis} 156*1e13e201SManos Pitsidianakis{ "execute" : "qom-set", 157*1e13e201SManos Pitsidianakis "arguments" : { 158*1e13e201SManos Pitsidianakis "path" : "group0", 159*1e13e201SManos Pitsidianakis "property" : "x-iops-total", 160*1e13e201SManos Pitsidianakis "value" : 0 161*1e13e201SManos Pitsidianakis } 162*1e13e201SManos Pitsidianakis} 163*1e13e201SManos Pitsidianakis{ "execute" : "qom-set", 164*1e13e201SManos Pitsidianakis "arguments" : { 165*1e13e201SManos Pitsidianakis "path" : "group0", 166*1e13e201SManos Pitsidianakis "property" : "limits", 167*1e13e201SManos Pitsidianakis "value" : { 168*1e13e201SManos Pitsidianakis "iops-total" : 10, 169*1e13e201SManos Pitsidianakis "iops-read" : 10 170*1e13e201SManos Pitsidianakis } 171*1e13e201SManos Pitsidianakis } 172*1e13e201SManos Pitsidianakis} 173*1e13e201SManos Pitsidianakis{ "execute": "quit" } 174*1e13e201SManos PitsidianakisEOF 175*1e13e201SManos Pitsidianakis 176*1e13e201SManos Pitsidianakisecho 177*1e13e201SManos Pitsidianakisecho "== don't specify group ==" 178*1e13e201SManos Pitsidianakis 179*1e13e201SManos Pitsidianakisrun_qemu <<EOF 180*1e13e201SManos Pitsidianakis{ "execute": "qmp_capabilities" } 181*1e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 182*1e13e201SManos Pitsidianakis "arguments": { 183*1e13e201SManos Pitsidianakis "driver": "$IMGFMT", 184*1e13e201SManos Pitsidianakis "node-name": "disk0", 185*1e13e201SManos Pitsidianakis "file": { 186*1e13e201SManos Pitsidianakis "driver": "file", 187*1e13e201SManos Pitsidianakis "filename": "$TEST_IMG" 188*1e13e201SManos Pitsidianakis } 189*1e13e201SManos Pitsidianakis } 190*1e13e201SManos Pitsidianakis} 191*1e13e201SManos Pitsidianakis{ "execute": "blockdev-add", 192*1e13e201SManos Pitsidianakis "arguments": { 193*1e13e201SManos Pitsidianakis "driver": "throttle", 194*1e13e201SManos Pitsidianakis "node-name": "throttle0", 195*1e13e201SManos Pitsidianakis "file": "disk0" 196*1e13e201SManos Pitsidianakis } 197*1e13e201SManos Pitsidianakis} 198*1e13e201SManos Pitsidianakis{ "execute": "quit" } 199*1e13e201SManos PitsidianakisEOF 200*1e13e201SManos Pitsidianakis 201*1e13e201SManos Pitsidianakisecho 202*1e13e201SManos Pitsidianakis# success, all done 203*1e13e201SManos Pitsidianakisecho "*** done" 204*1e13e201SManos Pitsidianakisrm -f $seq.full 205*1e13e201SManos Pitsidianakisstatus=0 206