From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Cleber Rosa <crosa@redhat.com>,
qemu-block@nongnu.org, qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, Max Reitz <mreitz@redhat.com>,
Wainer dos Santos Moschetta <wainersm@redhat.com>,
Caio Carrara <ccarrara@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [Qemu-devel] [RFC PATCH 2/2] qemu-img: consider a zero number of I/O requests an invalid count
Date: Mon, 12 Nov 2018 15:38:45 +0100 [thread overview]
Message-ID: <a6993de7-340f-848a-809b-2d07e2923fc7@redhat.com> (raw)
In-Reply-To: <20181109221213.7310-3-crosa@redhat.com>
On 9/11/18 23:12, Cleber Rosa wrote:
> It's debatable whether it makes sense to consider the bench command
> successful when no I/O requests will be performed. This changes the
> behavior to consider a zero count of I/O requests an invalid value.
> While at it, avoid using signed types for number of I/O requests.
>
> The image file used, is a simple raw image with 1K size. There's a
> obvious trade off between creating and reusing those images. This is
> an experiment in sharing those among tests. It was created using:
>
> mkdir -p tests/data/images/empty
> cd tests/data/images/empty
> qemu-img create raw 1K
>
> This relies on the Test's "get_data()", which by default looks for
> data files on sources that map to various levels of specificity of a
> test: file, test and additionally with variant and a symlink.
>
> One other possibility with regards to in-tree images, is to extend the
> Test's "get_data()" API (which is extensible by design) and make the
> common images directory a "source". The resulting API usage would be
> similar to:
>
> self.get_data("empty/raw", source="common_images")
>
> or simply:
>
> self.get_data("empty/raw")
>
> To look for "empty/raw" in any of the available sources. That would
> make the symlink unnecessary.
>
> Reference: https://avocado-framework.readthedocs.io/en/65.0/api/core/avocado.core.html#avocado.core.test.TestData
> Signed-off-by: Cleber Rosa <crosa@redhat.com>
> ---
> qemu-img.c | 8 ++---
> tests/acceptance/qemu_img_bench.py | 34 ++++++++++++++++++++
> tests/acceptance/qemu_img_bench.py.data/img | 1 +
> tests/data/images/empty/raw | Bin 0 -> 1024 bytes
> 4 files changed, 39 insertions(+), 4 deletions(-)
> create mode 100644 tests/acceptance/qemu_img_bench.py
> create mode 120000 tests/acceptance/qemu_img_bench.py.data/img
> create mode 100644 tests/data/images/empty/raw
>
> diff --git a/qemu-img.c b/qemu-img.c
> index 4c96db7ba4..7ffcdd1589 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -3960,7 +3960,7 @@ typedef struct BenchData {
> int bufsize;
> int step;
> int nrreq;
> - int n;
> + unsigned int n;
> int flush_interval;
> bool drain_on_flush;
> uint8_t *buf;
> @@ -4051,7 +4051,7 @@ static int img_bench(int argc, char **argv)
> bool quiet = false;
> bool image_opts = false;
> bool is_write = false;
> - int count = 75000;
> + unsigned int count = 75000;
> int depth = 64;
> int64_t offset = 0;
> size_t bufsize = 4096;
> @@ -4098,7 +4098,7 @@ static int img_bench(int argc, char **argv)
> {
> unsigned long res;
>
> - if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > INT_MAX) {
> + if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > UINT_MAX || res <= 0) {
res is unsigned so can't be < 0.
> error_report("Invalid request count specified");
> return 1;
> }
> @@ -4248,7 +4248,7 @@ static int img_bench(int argc, char **argv)
> .flush_interval = flush_interval,
> .drain_on_flush = drain_on_flush,
> };
> - printf("Sending %d %s requests, %d bytes each, %d in parallel "
> + printf("Sending %u %s requests, %d bytes each, %d in parallel "
> "(starting at offset %" PRId64 ", step size %d)\n",
> data.n, data.write ? "write" : "read", data.bufsize, data.nrreq,
> data.offset, data.step);
> diff --git a/tests/acceptance/qemu_img_bench.py b/tests/acceptance/qemu_img_bench.py
> new file mode 100644
> index 0000000000..327524ad8f
> --- /dev/null
> +++ b/tests/acceptance/qemu_img_bench.py
> @@ -0,0 +1,34 @@
> +# Test for the basic qemu-img bench command
> +#
> +# Copyright (c) 2018 Red Hat, Inc.
> +#
> +# Author:
> +# Cleber Rosa <crosa@redhat.com>
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2 or
> +# later. See the COPYING file in the top-level directory.
> +
> +import os
> +
> +from avocado_qemu import QemuImgTest
> +from avocado.utils import process
> +
> +
> +class Bench(QemuImgTest):
> + """
> + Runs the qemu-img tool with the bench command and different
> + options and verifies the expected outcome.
> +
> + :avocado: enable
> + """
> + def check_invalid_count(self, count):
> + cmd = "%s bench -c %d %s" % (self.qemu_img_bin, count, self.get_data("img"))
> + result = process.run(cmd, ignore_status=True)
> + self.assertEqual(1, result.exit_status)
> + self.assertIn(b"Invalid request count", result.stderr)
> +
> + def test_zero_count(self):
> + self.check_invalid_count(0)
> +
> + def test_negative_count(self):
> + self.check_invalid_count(-1)
> diff --git a/tests/acceptance/qemu_img_bench.py.data/img b/tests/acceptance/qemu_img_bench.py.data/img
> new file mode 120000
> index 0000000000..6d01ef2e85
> --- /dev/null
> +++ b/tests/acceptance/qemu_img_bench.py.data/img
> @@ -0,0 +1 @@
> +../../data/images/empty/raw
> \ No newline at end of file
> diff --git a/tests/data/images/empty/raw b/tests/data/images/empty/raw
> new file mode 100644
> index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20
> GIT binary patch
> literal 1024
> ScmZQz7zLvtFd70QH3R?z00031
>
> literal 0
> HcmV?d00001
>
next prev parent reply other threads:[~2018-11-12 14:38 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-09 22:12 [Qemu-devel] [RFC PATCH 0/2] Acceptance tests for qemu-img Cleber Rosa
2018-11-09 22:12 ` [Qemu-devel] [RFC PATCH 1/2] Acceptance Tests: add QemuImgTest base class Cleber Rosa
2018-11-09 22:12 ` [Qemu-devel] [RFC PATCH 2/2] qemu-img: consider a zero number of I/O requests an invalid count Cleber Rosa
2018-11-12 14:38 ` Philippe Mathieu-Daudé [this message]
2018-11-12 15:04 ` Cleber Rosa
2018-11-12 10:49 ` [Qemu-devel] [RFC PATCH 0/2] Acceptance tests for qemu-img Kevin Wolf
2018-11-12 14:59 ` Cleber Rosa
2018-11-12 15:11 ` Daniel P. Berrangé
2018-11-12 16:00 ` Kevin Wolf
2018-11-12 17:36 ` Cleber Rosa
2018-11-13 9:39 ` Markus Armbruster
2018-11-13 13:50 ` Daniel P. Berrangé
2018-11-13 14:41 ` Cleber Rosa
2018-11-13 12:18 ` Kevin Wolf
2018-11-13 13:26 ` Eduardo Habkost
2018-11-13 13:51 ` Kevin Wolf
2018-11-13 13:56 ` Eduardo Habkost
2018-11-13 14:20 ` Cleber Rosa
2018-11-13 14:32 ` Eduardo Habkost
2018-11-13 14:43 ` Cleber Rosa
2018-11-13 14:51 ` Eduardo Habkost
2018-11-13 14:15 ` Cleber Rosa
2018-11-13 15:38 ` Kevin Wolf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a6993de7-340f-848a-809b-2d07e2923fc7@redhat.com \
--to=philmd@redhat.com \
--cc=ccarrara@redhat.com \
--cc=crosa@redhat.com \
--cc=ehabkost@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=wainersm@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).