#!/usr/bin/env bash
# group: rw auto quick
#
# Test I/O throttle block filter driver interface
#
# Copyright (C) 2017 Manos Pitsidianakis
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

# creator
owner="Manos Pitsidianakis"

seq=`basename $0`
echo "QA output created by $seq"

status=1	# failure is the default!

trap "exit \$status" 0 1 2 3 15

# get standard environment, filters and checks
. ./common.rc
. ./common.filter

_supported_os Linux
_require_drivers throttle

do_run_qemu()
{
    echo Testing: "$@" | _filter_imgfmt
    $QEMU -nographic -qmp-pretty stdio -serial none "$@"
    echo
}

run_qemu()
{
    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_qmp\
                          | _filter_qemu_io | _filter_generated_node_ids
}

test_throttle=$($QEMU_IMG --help|grep throttle)
[ "$test_throttle" = "" ] && _supported_fmt throttle

echo
echo "== checking interface =="

run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "blockdev-add",
  "arguments": {
    "driver": "null-co",
    "node-name": "disk0"
  }
}
{ "execute": "object-add",
  "arguments": {
    "qom-type": "throttle-group",
    "id": "group0",
    "props": {
      "limits" : {
        "iops-total": 1000
      }
    }
  }
}
{ "execute": "blockdev-add",
  "arguments": {
    "driver": "throttle",
    "node-name": "throttle0",
    "throttle-group": "group0",
    "file": "disk0"
  }
}
{ "execute": "query-named-block-nodes" }
{ "execute": "query-block" }
{ "execute": "quit" }
EOF

echo
echo "== property changes in ThrottleGroup =="

run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "object-add",
  "arguments": {
    "qom-type": "throttle-group",
    "id": "group0",
    "props" : {
      "limits": {
          "iops-total": 1000
      }
    }
  }
}
{ "execute" : "qom-get",
  "arguments" : {
    "path" : "group0",
    "property" : "limits"
  }
}
{ "execute" : "qom-set",
    "arguments" : {
        "path" : "group0",
        "property" : "limits",
        "value" : {
            "iops-total" : 0
        }
    }
}
{ "execute" : "qom-get",
  "arguments" : {
    "path" : "group0",
    "property" : "limits"
  }
}
{ "execute": "quit" }
EOF

echo
echo "== object creation/set errors  =="

run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "object-add",
  "arguments": {
    "qom-type": "throttle-group",
    "id": "group0",
    "props" : {
      "limits": {
          "iops-total": 1000
      }
    }
  }
}
{ "execute" : "qom-set",
  "arguments" : {
    "path" : "group0",
    "property" : "x-iops-total",
    "value" : 0
  }
}
{ "execute" : "qom-set",
    "arguments" : {
        "path" : "group0",
        "property" : "limits",
        "value" : {
            "iops-total" : 10,
            "iops-read" : 10
        }
    }
}
{ "execute": "quit" }
EOF

echo
echo "== don't specify group =="

run_qemu <<EOF
{ "execute": "qmp_capabilities" }
{ "execute": "blockdev-add",
  "arguments": {
    "driver": "null-co",
    "node-name": "disk0"
  }
}
{ "execute": "blockdev-add",
  "arguments": {
    "driver": "throttle",
    "node-name": "throttle0",
    "file": "disk0"
  }
}
{ "execute": "quit" }
EOF

echo
# success, all done
echo "*** done"
rm -f $seq.full
status=0
