Fabiano Rosas <faro...@suse.de> wrote: D> Juan Quintela <quint...@redhat.com> writes: > >> From: Fabiano Rosas <faro...@suse.de> >> >> Add basic tests for file-based migration. >> >> Note that we cannot use test_precopy_common because that routine >> expects it to be possible to run the migration live. With the file >> transport there is no live migration because we must wait for the >> source to finish writing the migration data to the file before the >> destination can start reading. Add a new migration function >> specifically to handle the file migration. >> >> Reviewed-by: Peter Xu <pet...@redhat.com> >> Reviewed-by: Juan Quintela <quint...@redhat.com> >> Signed-off-by: Fabiano Rosas <faro...@suse.de> >> Signed-off-by: Juan Quintela <quint...@redhat.com> >> Message-ID: <20230712190742.22294-7-faro...@suse.de>
>> +static void file_offset_finish_hook(QTestState *from, QTestState *to, >> + void *opaque) >> +{ >> +#if defined(__linux__) >> + 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_SHARED, fd, 0); >> + 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); > > This truncates to 32-bits, so it breaks on a BE host. We need this: > > -->8-- > From ea0c2d1c988add48d9754891a9fc7f6854a9718a Mon Sep 17 00:00:00 2001 > From: Fabiano Rosas <faro...@suse.de> > Date: Mon, 16 Oct 2023 15:21:49 -0300 > Subject: [PATCH] fixup! tests/qtest: migration-test: Add tests for file-based > migration > > --- > tests/qtest/migration-test.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c > index da02b6d692..e1c110537b 100644 > --- a/tests/qtest/migration-test.c > +++ b/tests/qtest/migration-test.c > @@ -1966,7 +1966,7 @@ static void file_offset_finish_hook(QTestState *from, > QTestState *to, > g_assert(*p == 0); > p++; > } > - g_assert_cmpint(cpu_to_be32(*p), ==, QEMU_VM_FILE_MAGIC); > + g_assert_cmpint(cpu_to_be64(*p) >> 32, ==, QEMU_VM_FILE_MAGIC); > > munmap(addr, size); > close(fd); I am resubmitting with this change. But I think we need to change this: >> + 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; I think we should change the test so the file is 64 bits on every architecture. Then we can cast to void * or uintptr_t as needed. Later, Juan.