Re: [kvm-unit-tests PATCH 2/7] migration: Add a migrate_skip command

2024-03-03 Thread Thomas Huth

On 26/02/2024 10.38, Nicholas Piggin wrote:

Tests that are run with MIGRATION=yes but skip due to some requirement
not being met will show as a failure due to the harness requirement to
see one successful migration. The workaround for this is to migrate in
test's skip path. Add a new command that just tells the harness to not
expect a migration.

Signed-off-by: Nicholas Piggin 
---
  common/selftest-migration.c | 14 -
  lib/migrate.c   | 19 -
  lib/migrate.h   |  2 ++
  powerpc/unittests.cfg   |  6 ++
  s390x/unittests.cfg |  5 +
  scripts/arch-run.bash   | 41 +
  6 files changed, 73 insertions(+), 14 deletions(-)


Reviewed-by: Thomas Huth 




[kvm-unit-tests PATCH 2/7] migration: Add a migrate_skip command

2024-02-26 Thread Nicholas Piggin
Tests that are run with MIGRATION=yes but skip due to some requirement
not being met will show as a failure due to the harness requirement to
see one successful migration. The workaround for this is to migrate in
test's skip path. Add a new command that just tells the harness to not
expect a migration.

Signed-off-by: Nicholas Piggin 
---
 common/selftest-migration.c | 14 -
 lib/migrate.c   | 19 -
 lib/migrate.h   |  2 ++
 powerpc/unittests.cfg   |  6 ++
 s390x/unittests.cfg |  5 +
 scripts/arch-run.bash   | 41 +
 6 files changed, 73 insertions(+), 14 deletions(-)

diff --git a/common/selftest-migration.c b/common/selftest-migration.c
index 54b5d6b2d..0afd8581c 100644
--- a/common/selftest-migration.c
+++ b/common/selftest-migration.c
@@ -14,14 +14,18 @@
 
 int main(int argc, char **argv)
 {
-   int i = 0;
-
report_prefix_push("migration");
 
-   for (i = 0; i < NR_MIGRATIONS; i++)
-   migrate_quiet();
+   if (argc > 1 && !strcmp(argv[1], "skip")) {
+   migrate_skip();
+   report(true, "migration skipping");
+   } else {
+   int i;
 
-   report(true, "simple harness stress test");
+   for (i = 0; i < NR_MIGRATIONS; i++)
+   migrate_quiet();
+   report(true, "simple harness stress");
+   }
 
report_prefix_pop();
 
diff --git a/lib/migrate.c b/lib/migrate.c
index 92d1d957d..1d22196b7 100644
--- a/lib/migrate.c
+++ b/lib/migrate.c
@@ -39,7 +39,24 @@ void migrate_once(void)
 
if (migrated)
return;
-
migrated = true;
+
migrate();
 }
+
+/*
+ * When the test has been started in migration mode, but the test case is
+ * skipped and no migration point is reached, this can be used to tell the
+ * harness not to mark it as a failure to migrate.
+ */
+void migrate_skip(void)
+{
+   static bool did_migrate_skip;
+
+   if (did_migrate_skip)
+   return;
+   did_migrate_skip = true;
+
+   puts("Skipped VM migration (quiet)\n");
+   (void)getchar();
+}
diff --git a/lib/migrate.h b/lib/migrate.h
index 95b9102b0..db6e0c501 100644
--- a/lib/migrate.h
+++ b/lib/migrate.h
@@ -9,3 +9,5 @@
 void migrate(void);
 void migrate_quiet(void);
 void migrate_once(void);
+
+void migrate_skip(void);
diff --git a/powerpc/unittests.cfg b/powerpc/unittests.cfg
index 7ce57de02..89abf2095 100644
--- a/powerpc/unittests.cfg
+++ b/powerpc/unittests.cfg
@@ -40,6 +40,12 @@ groups = selftest
 file = selftest-migration.elf
 groups = selftest migration
 
+[selftest-migration-skip]
+file = selftest-migration.elf
+machine = pseries
+groups = selftest migration
+extra_params = -append "skip"
+
 [spapr_hcall]
 file = spapr_hcall.elf
 
diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg
index a7ad522ca..f613602d3 100644
--- a/s390x/unittests.cfg
+++ b/s390x/unittests.cfg
@@ -28,6 +28,11 @@ extra_params = -append 'test 123'
 file = selftest-migration.elf
 groups = selftest migration
 
+[selftest-migration-skip]
+file = selftest-migration.elf
+groups = selftest migration
+extra_params = -append "skip"
+
 [intercept]
 file = intercept.elf
 
diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash
index e5b36a07b..d0f6f098f 100644
--- a/scripts/arch-run.bash
+++ b/scripts/arch-run.bash
@@ -124,12 +124,17 @@ qmp_events ()
 
 filter_quiet_msgs ()
 {
-   grep -v "Now migrate the VM (quiet)"
+   grep -v "Now migrate the VM (quiet)" |
+   grep -v "Skipped VM migration (quiet)"
 }
 
 seen_migrate_msg ()
 {
-   grep -q -e "Now migrate the VM" < $1
+   if [ $skip_migration -eq 1 ]; then
+   grep -q -e "Now migrate the VM" < $1
+   else
+   grep -q -e "Now migrate the VM" -e "Skipped VM migration" < $1
+   fi
 }
 
 run_migration ()
@@ -142,7 +147,7 @@ run_migration ()
migcmdline=$@
 
trap 'trap - TERM ; kill 0 ; exit 2' INT TERM
-   trap 'rm -f ${src_out} ${dst_out} ${src_outfifo} ${dst_outfifo} 
${dst_incoming} ${src_qmp} ${dst_qmp} ${dst_infifo}' RETURN EXIT
+   trap 'rm -f ${src_out} ${dst_out} ${src_outfifo} ${dst_outfifo} 
${dst_incoming} ${src_qmp} ${dst_qmp} ${src_infifo} ${dst_infifo}' RETURN EXIT
 
dst_incoming=$(mktemp -u -t mig-helper-socket-incoming.XX)
src_out=$(mktemp -t mig-helper-stdout1.XX)
@@ -151,21 +156,26 @@ run_migration ()
dst_outfifo=$(mktemp -u -t mig-helper-fifo-stdout2.XX)
src_qmp=$(mktemp -u -t mig-helper-qmp1.XX)
dst_qmp=$(mktemp -u -t mig-helper-qmp2.XX)
-   dst_infifo=$(mktemp -u -t mig-helper-fifo-stdin.XX)
+   src_infifo=$(mktemp -u -t mig-helper-fifo-stdin1.XX)
+   dst_infifo=$(mktemp -u -t mig-helper-fifo-stdin2.XX)
src_qmpout=/dev/null
dst_qmpout=/dev/null
+   skip_migration=0
 
mkfifo ${src_outfifo}