Skip to content

Commit

Permalink
migration-test: Add bootfile_create/delete() functions
Browse files Browse the repository at this point in the history
The bootsector code is read only from the guest (otherwise we are
going to have problems with it being read from both source and
destination).

Create a single copy for all the tests.

Reviewed-by: Peter Xu <peterx@redhat.com>
Message-ID: <20230608224943.3877-10-quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
  • Loading branch information
Juan Quintela committed Sep 29, 2023
1 parent 877cec6 commit 0c690d3
Showing 1 changed file with 36 additions and 14 deletions.
50 changes: 36 additions & 14 deletions tests/qtest/migration-test.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,14 +125,47 @@ static char *bootpath;
#include "tests/migration/aarch64/a-b-kernel.h"
#include "tests/migration/s390x/a-b-bios.h"

static void init_bootfile(void *content, size_t len)
static void bootfile_create(char *dir)
{
const char *arch = qtest_get_arch();
unsigned char *content;
size_t len;

bootpath = g_strdup_printf("%s/bootsect", dir);
if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) {
/* the assembled x86 boot sector should be exactly one sector large */
g_assert(sizeof(x86_bootsect) == 512);
content = x86_bootsect;
len = sizeof(x86_bootsect);
} else if (g_str_equal(arch, "s390x")) {
content = s390x_elf;
len = sizeof(s390x_elf);
} else if (strcmp(arch, "ppc64") == 0) {
/*
* sane architectures can be programmed at the boot prompt
*/
return;
} else if (strcmp(arch, "aarch64") == 0) {
content = aarch64_kernel;
len = sizeof(aarch64_kernel);
g_assert(sizeof(aarch64_kernel) <= ARM_TEST_MAX_KERNEL_SIZE);
} else {
g_assert_not_reached();
}

FILE *bootfile = fopen(bootpath, "wb");

g_assert_cmpint(fwrite(content, len, 1, bootfile), ==, 1);
fclose(bootfile);
}

static void bootfile_delete(void)
{
unlink(bootpath);
g_free(bootpath);
bootpath = NULL;
}

/*
* Wait for some output in the serial output file,
* we get an 'A' followed by an endless string of 'B's
Expand Down Expand Up @@ -724,15 +757,11 @@ static int test_migrate_start(QTestState **from, QTestState **to,
got_src_stop = false;
got_dst_resume = false;
if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) {
/* the assembled x86 boot sector should be exactly one sector large */
assert(sizeof(x86_bootsect) == 512);
init_bootfile(x86_bootsect, sizeof(x86_bootsect));
memory_size = "150M";
arch_opts = g_strdup_printf("-drive file=%s,format=raw", bootpath);
start_address = X86_TEST_MEM_START;
end_address = X86_TEST_MEM_END;
} else if (g_str_equal(arch, "s390x")) {
init_bootfile(s390x_elf, sizeof(s390x_elf));
memory_size = "128M";
arch_opts = g_strdup_printf("-bios %s", bootpath);
start_address = S390_TEST_MEM_START;
Expand All @@ -747,14 +776,11 @@ static int test_migrate_start(QTestState **from, QTestState **to,
"until'", end_address, start_address);
arch_opts = g_strdup("-nodefaults -machine vsmt=8");
} else if (strcmp(arch, "aarch64") == 0) {
init_bootfile(aarch64_kernel, sizeof(aarch64_kernel));
memory_size = "150M";
arch_opts = g_strdup_printf("-machine virt,gic-version=max -cpu max "
"-kernel %s", bootpath);
start_address = ARM_TEST_MEM_START;
end_address = ARM_TEST_MEM_END;

g_assert(sizeof(aarch64_kernel) <= ARM_TEST_MAX_KERNEL_SIZE);
} else {
g_assert_not_reached();
}
Expand Down Expand Up @@ -2629,9 +2655,6 @@ static QTestState *dirtylimit_start_vm(void)
const char *arch = qtest_get_arch();

assert((strcmp(arch, "x86_64") == 0));
assert(sizeof(x86_bootsect) == 512);
init_bootfile(x86_bootsect, sizeof(x86_bootsect));

cmd = g_strdup_printf("-accel kvm,dirty-ring-size=4096 "
"-name dirtylimit-test,debug-threads=on "
"-m 150M -smp 1 "
Expand Down Expand Up @@ -2807,7 +2830,7 @@ int main(int argc, char **argv)
g_get_tmp_dir(), err->message);
}
g_assert(tmpfs);
bootpath = g_strdup_printf("%s/bootsect", tmpfs);
bootfile_create(tmpfs);

module_call_init(MODULE_INIT_QOM);

Expand Down Expand Up @@ -2955,8 +2978,7 @@ int main(int argc, char **argv)

g_assert_cmpint(ret, ==, 0);

cleanup("bootsect");
g_free(bootpath);
bootfile_delete();
ret = rmdir(tmpfs);
if (ret != 0) {
g_test_message("unable to rmdir: path (%s): %s",
Expand Down

0 comments on commit 0c690d3

Please sign in to comment.