#!/usr/bin/env bash
#
# 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
