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 <cr...@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) { 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 <cr...@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 -- 2.19.1