#!/bin/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"

here=`pwd`
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

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

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

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
