aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2022-07-12 20:31:50 +0100
committerPeter Maydell <peter.maydell@linaro.org>2022-07-12 20:31:50 +0100
commit824824d12217f7d80b372eb051aad2c082cffb98 (patch)
tree34da8294c607697d38f08e96ccdb182abfc00049 /tests
parent8e3d85d36b77f11ad7bded3a2d48c1f0cc334f82 (diff)
parent85c4bf8aa6c93c24876e8870ae7cf8ab2e5a96cf (diff)
downloadqemu-824824d12217f7d80b372eb051aad2c082cffb98.zip
qemu-824824d12217f7d80b372eb051aad2c082cffb98.tar.gz
qemu-824824d12217f7d80b372eb051aad2c082cffb98.tar.bz2
Merge tag 'pull-block-2022-07-12' of https://gitlab.com/hreitz/qemu into staging
Block patches: - Refactoring for non-coroutine variants of bdrv/blk_co_* functions: Auto-generate more of them with the block coroutine wrapper generator script - iotest fixes - Both for the storage daemon and the system emulator: Fix PID file handling when daemonizing (store the absolute path and delete that on exit, which is necessary because daemonizing will change the working directory to /) # gpg: Signature made Tue 12 Jul 2022 19:04:14 BST # gpg: using RSA key CB62D7A0EE3829E45F004D34A1FA40D098019CDF # gpg: issuer "hreitz@redhat.com" # gpg: Good signature from "Hanna Reitz <hreitz@redhat.com>" [marginal] # gpg: WARNING: This key is not certified with sufficiently trusted signatures! # gpg: It is not certain that the signature belongs to the owner. # Primary key fingerprint: CB62 D7A0 EE38 29E4 5F00 4D34 A1FA 40D0 9801 9CDF * tag 'pull-block-2022-07-12' of https://gitlab.com/hreitz/qemu: (35 commits) vl: Unlink absolute PID file path vl: Conditionally register PID file unlink notifier qsd: Unlink absolute PID file path iotests/297: Have mypy ignore unused ignores qsd: Do not use error_report() before monitor_init block: Remove remaining unused symbols in coroutines.h block: Reorganize some declarations in block-backend-io.h block: Add blk_co_truncate() block: Add blk_co_ioctl() block: Implement blk_flush() using generated_co_wrapper block: Implement blk_pdiscard() using generated_co_wrapper block: Implement blk_pwrite_zeroes() using generated_co_wrapper block: Add blk_co_pwrite_compressed() block: Change blk_pwrite_compressed() param order block: Export blk_pwritev_part() in block-backend-io.h block: Add blk_[co_]preadv_part() block: Add blk_{preadv,pwritev}() block: Implement blk_{pread,pwrite}() using generated_co_wrapper block: Make blk_co_pwrite() take a const buffer block: Make 'bytes' param of blk_{pread,pwrite}() an int64_t ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'tests')
-rwxr-xr-xtests/qemu-iotests/1085
-rw-r--r--tests/qemu-iotests/223.out4
-rw-r--r--tests/qemu-iotests/307.out4
-rw-r--r--tests/qemu-iotests/mypy.ini2
-rw-r--r--tests/unit/test-block-iothread.c153
-rw-r--r--tests/unit/test-crypto-block.c38
6 files changed, 169 insertions, 37 deletions
diff --git a/tests/qemu-iotests/108 b/tests/qemu-iotests/108
index 9e923d6..54e935a 100755
--- a/tests/qemu-iotests/108
+++ b/tests/qemu-iotests/108
@@ -60,6 +60,11 @@ if sudo -n losetup &>/dev/null; then
else
loopdev=false
+ # Check for usable FUSE in the host environment:
+ if test ! -c "/dev/fuse"; then
+ _notrun 'No passwordless sudo nor usable /dev/fuse'
+ fi
+
# QSD --export fuse will either yield "Parameter 'id' is missing"
# or "Invalid parameter 'fuse'", depending on whether there is
# FUSE support or not.
diff --git a/tests/qemu-iotests/223.out b/tests/qemu-iotests/223.out
index 0647941..26fb347 100644
--- a/tests/qemu-iotests/223.out
+++ b/tests/qemu-iotests/223.out
@@ -93,7 +93,7 @@ exports available: 3
export: 'n2'
description: some text
size: 4194304
- flags: 0xced ( flush fua trim zeroes df cache fast-zero )
+ flags: 0xded ( flush fua trim zeroes df multi cache fast-zero )
min block: 1
opt block: 4096
max block: 33554432
@@ -212,7 +212,7 @@ exports available: 3
export: 'n2'
description: some text
size: 4194304
- flags: 0xced ( flush fua trim zeroes df cache fast-zero )
+ flags: 0xded ( flush fua trim zeroes df multi cache fast-zero )
min block: 1
opt block: 4096
max block: 33554432
diff --git a/tests/qemu-iotests/307.out b/tests/qemu-iotests/307.out
index ec8d2be..390f05d 100644
--- a/tests/qemu-iotests/307.out
+++ b/tests/qemu-iotests/307.out
@@ -83,7 +83,7 @@ exports available: 2
export: 'export1'
description: This is the writable second export
size: 67108864
- flags: 0xced ( flush fua trim zeroes df cache fast-zero )
+ flags: 0xded ( flush fua trim zeroes df multi cache fast-zero )
min block: XXX
opt block: XXX
max block: XXX
@@ -109,7 +109,7 @@ exports available: 1
export: 'export1'
description: This is the writable second export
size: 67108864
- flags: 0xced ( flush fua trim zeroes df cache fast-zero )
+ flags: 0xded ( flush fua trim zeroes df multi cache fast-zero )
min block: XXX
opt block: XXX
max block: XXX
diff --git a/tests/qemu-iotests/mypy.ini b/tests/qemu-iotests/mypy.ini
index 4c0339f..d66ffc2 100644
--- a/tests/qemu-iotests/mypy.ini
+++ b/tests/qemu-iotests/mypy.ini
@@ -9,4 +9,4 @@ no_implicit_optional = True
scripts_are_modules = True
warn_redundant_casts = True
warn_unused_configs = True
-warn_unused_ignores = True
+warn_unused_ignores = False
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
index 94718c9..8b55ecc 100644
--- a/tests/unit/test-block-iothread.c
+++ b/tests/unit/test-block-iothread.c
@@ -88,11 +88,11 @@ static void test_sync_op_pread(BdrvChild *c)
int ret;
/* Success */
- ret = bdrv_pread(c, 0, buf, sizeof(buf));
- g_assert_cmpint(ret, ==, 512);
+ ret = bdrv_pread(c, 0, sizeof(buf), buf, 0);
+ g_assert_cmpint(ret, ==, 0);
/* Early error: Negative offset */
- ret = bdrv_pread(c, -2, buf, sizeof(buf));
+ ret = bdrv_pread(c, -2, sizeof(buf), buf, 0);
g_assert_cmpint(ret, ==, -EIO);
}
@@ -102,11 +102,11 @@ static void test_sync_op_pwrite(BdrvChild *c)
int ret;
/* Success */
- ret = bdrv_pwrite(c, 0, buf, sizeof(buf));
- g_assert_cmpint(ret, ==, 512);
+ ret = bdrv_pwrite(c, 0, sizeof(buf), buf, 0);
+ g_assert_cmpint(ret, ==, 0);
/* Early error: Negative offset */
- ret = bdrv_pwrite(c, -2, buf, sizeof(buf));
+ ret = bdrv_pwrite(c, -2, sizeof(buf), buf, 0);
g_assert_cmpint(ret, ==, -EIO);
}
@@ -116,11 +116,11 @@ static void test_sync_op_blk_pread(BlockBackend *blk)
int ret;
/* Success */
- ret = blk_pread(blk, 0, buf, sizeof(buf));
- g_assert_cmpint(ret, ==, 512);
+ ret = blk_pread(blk, 0, sizeof(buf), buf, 0);
+ g_assert_cmpint(ret, ==, 0);
/* Early error: Negative offset */
- ret = blk_pread(blk, -2, buf, sizeof(buf));
+ ret = blk_pread(blk, -2, sizeof(buf), buf, 0);
g_assert_cmpint(ret, ==, -EIO);
}
@@ -130,11 +130,98 @@ static void test_sync_op_blk_pwrite(BlockBackend *blk)
int ret;
/* Success */
- ret = blk_pwrite(blk, 0, buf, sizeof(buf), 0);
- g_assert_cmpint(ret, ==, 512);
+ ret = blk_pwrite(blk, 0, sizeof(buf), buf, 0);
+ g_assert_cmpint(ret, ==, 0);
+
+ /* Early error: Negative offset */
+ ret = blk_pwrite(blk, -2, sizeof(buf), buf, 0);
+ g_assert_cmpint(ret, ==, -EIO);
+}
+
+static void test_sync_op_blk_preadv(BlockBackend *blk)
+{
+ uint8_t buf[512];
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, sizeof(buf));
+ int ret;
+
+ /* Success */
+ ret = blk_preadv(blk, 0, sizeof(buf), &qiov, 0);
+ g_assert_cmpint(ret, ==, 0);
/* Early error: Negative offset */
- ret = blk_pwrite(blk, -2, buf, sizeof(buf), 0);
+ ret = blk_preadv(blk, -2, sizeof(buf), &qiov, 0);
+ g_assert_cmpint(ret, ==, -EIO);
+}
+
+static void test_sync_op_blk_pwritev(BlockBackend *blk)
+{
+ uint8_t buf[512] = { 0 };
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, sizeof(buf));
+ int ret;
+
+ /* Success */
+ ret = blk_pwritev(blk, 0, sizeof(buf), &qiov, 0);
+ g_assert_cmpint(ret, ==, 0);
+
+ /* Early error: Negative offset */
+ ret = blk_pwritev(blk, -2, sizeof(buf), &qiov, 0);
+ g_assert_cmpint(ret, ==, -EIO);
+}
+
+static void test_sync_op_blk_preadv_part(BlockBackend *blk)
+{
+ uint8_t buf[512];
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, sizeof(buf));
+ int ret;
+
+ /* Success */
+ ret = blk_preadv_part(blk, 0, sizeof(buf), &qiov, 0, 0);
+ g_assert_cmpint(ret, ==, 0);
+
+ /* Early error: Negative offset */
+ ret = blk_preadv_part(blk, -2, sizeof(buf), &qiov, 0, 0);
+ g_assert_cmpint(ret, ==, -EIO);
+}
+
+static void test_sync_op_blk_pwritev_part(BlockBackend *blk)
+{
+ uint8_t buf[512] = { 0 };
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, sizeof(buf));
+ int ret;
+
+ /* Success */
+ ret = blk_pwritev_part(blk, 0, sizeof(buf), &qiov, 0, 0);
+ g_assert_cmpint(ret, ==, 0);
+
+ /* Early error: Negative offset */
+ ret = blk_pwritev_part(blk, -2, sizeof(buf), &qiov, 0, 0);
+ g_assert_cmpint(ret, ==, -EIO);
+}
+
+static void test_sync_op_blk_pwrite_compressed(BlockBackend *blk)
+{
+ uint8_t buf[512] = { 0 };
+ int ret;
+
+ /* Late error: Not supported */
+ ret = blk_pwrite_compressed(blk, 0, sizeof(buf), buf);
+ g_assert_cmpint(ret, ==, -ENOTSUP);
+
+ /* Early error: Negative offset */
+ ret = blk_pwrite_compressed(blk, -2, sizeof(buf), buf);
+ g_assert_cmpint(ret, ==, -EIO);
+}
+
+static void test_sync_op_blk_pwrite_zeroes(BlockBackend *blk)
+{
+ int ret;
+
+ /* Success */
+ ret = blk_pwrite_zeroes(blk, 0, 512, 0);
+ g_assert_cmpint(ret, ==, 0);
+
+ /* Early error: Negative offset */
+ ret = blk_pwrite_zeroes(blk, -2, 512, 0);
g_assert_cmpint(ret, ==, -EIO);
}
@@ -211,6 +298,19 @@ static void test_sync_op_truncate(BdrvChild *c)
c->bs->open_flags |= BDRV_O_RDWR;
}
+static void test_sync_op_blk_truncate(BlockBackend *blk)
+{
+ int ret;
+
+ /* Normal success path */
+ ret = blk_truncate(blk, 65536, false, PREALLOC_MODE_OFF, 0, NULL);
+ g_assert_cmpint(ret, ==, 0);
+
+ /* Early error: Negative offset */
+ ret = blk_truncate(blk, -2, false, PREALLOC_MODE_OFF, 0, NULL);
+ g_assert_cmpint(ret, ==, -EINVAL);
+}
+
static void test_sync_op_block_status(BdrvChild *c)
{
int ret;
@@ -302,6 +402,30 @@ const SyncOpTest sync_op_tests[] = {
.fn = test_sync_op_pwrite,
.blkfn = test_sync_op_blk_pwrite,
}, {
+ .name = "/sync-op/preadv",
+ .fn = NULL,
+ .blkfn = test_sync_op_blk_preadv,
+ }, {
+ .name = "/sync-op/pwritev",
+ .fn = NULL,
+ .blkfn = test_sync_op_blk_pwritev,
+ }, {
+ .name = "/sync-op/preadv_part",
+ .fn = NULL,
+ .blkfn = test_sync_op_blk_preadv_part,
+ }, {
+ .name = "/sync-op/pwritev_part",
+ .fn = NULL,
+ .blkfn = test_sync_op_blk_pwritev_part,
+ }, {
+ .name = "/sync-op/pwrite_compressed",
+ .fn = NULL,
+ .blkfn = test_sync_op_blk_pwrite_compressed,
+ }, {
+ .name = "/sync-op/pwrite_zeroes",
+ .fn = NULL,
+ .blkfn = test_sync_op_blk_pwrite_zeroes,
+ }, {
.name = "/sync-op/load_vmstate",
.fn = test_sync_op_load_vmstate,
}, {
@@ -314,6 +438,7 @@ const SyncOpTest sync_op_tests[] = {
}, {
.name = "/sync-op/truncate",
.fn = test_sync_op_truncate,
+ .blkfn = test_sync_op_blk_truncate,
}, {
.name = "/sync-op/block_status",
.fn = test_sync_op_block_status,
@@ -349,7 +474,9 @@ static void test_sync_op(const void *opaque)
blk_set_aio_context(blk, ctx, &error_abort);
aio_context_acquire(ctx);
- t->fn(c);
+ if (t->fn) {
+ t->fn(c);
+ }
if (t->blkfn) {
t->blkfn(blk);
}
diff --git a/tests/unit/test-crypto-block.c b/tests/unit/test-crypto-block.c
index 3b1f0d5..3417b67 100644
--- a/tests/unit/test-crypto-block.c
+++ b/tests/unit/test-crypto-block.c
@@ -188,12 +188,12 @@ static struct QCryptoBlockTestData {
};
-static ssize_t test_block_read_func(QCryptoBlock *block,
- size_t offset,
- uint8_t *buf,
- size_t buflen,
- void *opaque,
- Error **errp)
+static int test_block_read_func(QCryptoBlock *block,
+ size_t offset,
+ uint8_t *buf,
+ size_t buflen,
+ void *opaque,
+ Error **errp)
{
Buffer *header = opaque;
@@ -201,14 +201,14 @@ static ssize_t test_block_read_func(QCryptoBlock *block,
memcpy(buf, header->buffer + offset, buflen);
- return buflen;
+ return 0;
}
-static ssize_t test_block_init_func(QCryptoBlock *block,
- size_t headerlen,
- void *opaque,
- Error **errp)
+static int test_block_init_func(QCryptoBlock *block,
+ size_t headerlen,
+ void *opaque,
+ Error **errp)
{
Buffer *header = opaque;
@@ -216,16 +216,16 @@ static ssize_t test_block_init_func(QCryptoBlock *block,
buffer_reserve(header, headerlen);
- return headerlen;
+ return 0;
}
-static ssize_t test_block_write_func(QCryptoBlock *block,
- size_t offset,
- const uint8_t *buf,
- size_t buflen,
- void *opaque,
- Error **errp)
+static int test_block_write_func(QCryptoBlock *block,
+ size_t offset,
+ const uint8_t *buf,
+ size_t buflen,
+ void *opaque,
+ Error **errp)
{
Buffer *header = opaque;
@@ -234,7 +234,7 @@ static ssize_t test_block_write_func(QCryptoBlock *block,
memcpy(header->buffer + offset, buf, buflen);
header->offset = offset + buflen;
- return buflen;
+ return 0;
}