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