From: Fabiano Rosas <farosas@suse.de>
To: Peter Xu <peterx@redhat.com>
Cc: qemu-devel@nongnu.org, "Juan Quintela" <quintela@redhat.com>,
"Steve Sistare" <steven.sistare@oracle.com>,
"Daniel P . Berrangé" <berrange@redhat.com>,
"Leonardo Bras" <leobras@redhat.com>,
"Thomas Huth" <thuth@redhat.com>,
"Laurent Vivier" <lvivier@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>
Subject: Re: [PATCH 6/6] tests/qtest: migration-test: Add tests for file-based migration
Date: Fri, 30 Jun 2023 12:05:23 -0300 [thread overview]
Message-ID: <874jmpq9cc.fsf@suse.de> (raw)
In-Reply-To: <ZJ35d0yqB5YD+8IH@x1n>
Peter Xu <peterx@redhat.com> writes:
> On Wed, Jun 28, 2023 at 01:55:42PM -0300, Fabiano Rosas wrote:
>> Add basic tests for file-based migration.
>>
>> Signed-off-by: Fabiano Rosas <farosas@suse.de>
>> ---
>> tests/qtest/migration-test.c | 104 +++++++++++++++++++++++++++++++++++
>> 1 file changed, 104 insertions(+)
>>
>> diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c
>> index acb778a8cd..b3019f54de 100644
>> --- a/tests/qtest/migration-test.c
>> +++ b/tests/qtest/migration-test.c
>> @@ -52,6 +52,10 @@ static bool got_dst_resume;
>> */
>> #define DIRTYLIMIT_TOLERANCE_RANGE 25 /* MB/s */
>>
>> +#define QEMU_VM_FILE_MAGIC 0x5145564d
>> +#define FILE_TEST_FILENAME "migfile"
>> +#define FILE_TEST_OFFSET 0x1000
>> +
>> #if defined(__linux__)
>> #include <sys/syscall.h>
>> #include <sys/vfs.h>
>> @@ -763,6 +767,7 @@ static void test_migrate_end(QTestState *from, QTestState *to, bool test_dest)
>> cleanup("migsocket");
>> cleanup("src_serial");
>> cleanup("dest_serial");
>> + cleanup(FILE_TEST_FILENAME);
>> }
>>
>> #ifdef CONFIG_GNUTLS
>> @@ -1460,11 +1465,28 @@ static void test_precopy_common(MigrateCommon *args)
>> */
>> wait_for_migration_complete(from);
>>
>> + /*
>> + * For file based migration the target must begin its
>> + * migration after the source has finished.
>> + */
>> + if (strstr(connect_uri, "file:")) {
>> + migrate_incoming_qmp(to, connect_uri, "{}");
>> + }
>> +
>> if (!got_src_stop) {
>> qtest_qmp_eventwait(from, "STOP");
>> }
>> } else {
>> wait_for_migration_complete(from);
>> +
>> + /*
>> + * For file based migration the target must begin its
>> + * migration after the source has finished.
>> + */
>> + if (strstr(connect_uri, "file:")) {
>> + migrate_incoming_qmp(to, connect_uri, "{}");
>> + }
>> +
>> /*
>> * Must wait for dst to finish reading all incoming
>> * data on the socket before issuing 'cont' otherwise
>> @@ -1682,6 +1704,78 @@ static void test_precopy_unix_compress_nowait(void)
>> test_precopy_common(&args);
>> }
>>
>> +static void test_precopy_file(void)
>> +{
>> + g_autofree char *uri = g_strdup_printf("file:%s/%s", tmpfs,
>> + FILE_TEST_FILENAME);
>> + MigrateCommon args = {
>> + .connect_uri = uri,
>> + .listen_uri = "defer",
>> + };
>> +
>> + test_precopy_common(&args);
>> +}
>> +
>> +#if defined(__linux__)
>> +static void file_offset_finish_hook(QTestState *from, QTestState *to, void *opaque)
>> +{
>> + g_autofree char *path = g_strdup_printf("%s/%s", tmpfs, FILE_TEST_FILENAME);
>> + size_t size = FILE_TEST_OFFSET + sizeof(QEMU_VM_FILE_MAGIC);
>> + uintptr_t *addr, *p;
>> + int fd;
>> +
>> + fd = open(path, O_RDONLY);
>> + g_assert(fd != -1);
>> + addr = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);
>
> Not something that matters a lot, but RO mapping a file with private is a
> bit weird. Maybe just use MAP_SHARED?
>
Yep
>> + g_assert(addr != MAP_FAILED);
>> +
>> + /*
>> + * Ensure the skipped offset contains zeros and the migration
>> + * stream starts at the right place.
>> + */
>> + p = addr;
>> + while (p < addr + FILE_TEST_OFFSET / sizeof(uintptr_t)) {
>> + g_assert(*p == 0);
>> + p++;
>> + }
>> + g_assert_cmpint(cpu_to_be32(*p), ==, QEMU_VM_FILE_MAGIC);
>> +
>> + munmap(addr, size);
>> + close(fd);
>> +}
>> +
>> +static void test_precopy_file_offset(void)
>> +{
>> + g_autofree char *uri = g_strdup_printf("file:%s/%s,offset=%d", tmpfs,
>> + FILE_TEST_FILENAME,
>> + FILE_TEST_OFFSET);
>
> Is it intended to also only run this test with linux? IIUC it should also
> work for others. Maybe only file_offset_finish_hook() is optional? Or am i
> wrong?
>
Yes, only the hook is linux-specific. I'll change it.
>> + MigrateCommon args = {
>> + .connect_uri = uri,
>> + .listen_uri = "defer",
>> + .finish_hook = file_offset_finish_hook,
>> + };
>> +
>> + test_precopy_common(&args);
>> +}
>> +#endif
>> +
>> +static void test_precopy_file_offset_bad(void)
>> +{
>> + /* using a value not supported by qemu_strtosz() */
>> + g_autofree char *uri = g_strdup_printf("file:%s/migfile,offset=0x20M",
>> + tmpfs);
>> + MigrateCommon args = {
>> + .connect_uri = uri,
>> + .listen_uri = "defer",
>> + .error_str = g_strdup(
>> + "file URI has bad offset 0x20M: Unknown error -22"),
>
> "Unknown error" may imply that in Steve's patch the errno is inverted..
>
> Shall we not rely on the string in the test? It might be too strict, I
> worry, because error strings should be defined for human readers, and we
> may not want some e.g. grammar / trivial change to break a test.
>
Well, you just caught an issue with the errno by looking at the string,
so maybe testing it is a good thing?
I'd expect anyone changing the string to run the test and catch the
mismatch before sending a patch anyway.
I don't have a strong opinion about it, though. I can remove the
error_str.
next prev parent reply other threads:[~2023-06-30 15:05 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-28 16:55 [PATCH 0/6] migration: Test the new "file:" migration Fabiano Rosas
2023-06-28 16:55 ` [PATCH 1/6] migration: Set migration status early in incoming side Fabiano Rosas
2023-06-29 19:18 ` Peter Xu
2023-06-30 14:57 ` Fabiano Rosas
2023-06-28 16:55 ` [PATCH 2/6] tests/qtest: migration: Expose migrate_set_capability Fabiano Rosas
2023-06-29 6:46 ` Thomas Huth
2023-06-28 16:55 ` [PATCH 3/6] tests/qtest: migration: Add migrate_incoming_qmp helper Fabiano Rosas
2023-06-29 21:16 ` Peter Xu
2023-06-30 14:57 ` Fabiano Rosas
2023-06-28 16:55 ` [PATCH 4/6] tests/qtest: migration: Use migrate_incoming_qmp where appropriate Fabiano Rosas
2023-06-28 16:55 ` [PATCH 5/6] tests/qtest: migration: Add support for negative testing of qmp_migrate Fabiano Rosas
2023-06-28 16:55 ` [PATCH 6/6] tests/qtest: migration-test: Add tests for file-based migration Fabiano Rosas
2023-06-29 21:36 ` Peter Xu
2023-06-30 15:05 ` Fabiano Rosas [this message]
2023-06-30 15:19 ` Steven Sistare
2023-06-30 16:25 ` Peter Xu
-- strict thread matches above, loose matches on Subject: below --
2023-06-26 18:22 [PATCH 0/6] migration: Test the new "file:" migration Fabiano Rosas
2023-06-26 18:22 ` [PATCH 6/6] tests/qtest: migration-test: Add tests for file-based migration Fabiano Rosas
2023-06-27 9:07 ` Daniel P. Berrangé
2023-06-27 12:54 ` Fabiano Rosas
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=874jmpq9cc.fsf@suse.de \
--to=farosas@suse.de \
--cc=berrange@redhat.com \
--cc=leobras@redhat.com \
--cc=lvivier@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=steven.sistare@oracle.com \
--cc=thuth@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.