1b7d7f723SFabiano Rosas /*
2b7d7f723SFabiano Rosas * QTest migration helpers
3b7d7f723SFabiano Rosas *
4b7d7f723SFabiano Rosas * Copyright (c) 2016-2018 Red Hat, Inc. and/or its affiliates
5b7d7f723SFabiano Rosas * based on the vhost-user-test.c that is:
6b7d7f723SFabiano Rosas * Copyright (c) 2014 Virtual Open Systems Sarl.
7b7d7f723SFabiano Rosas *
8b7d7f723SFabiano Rosas * This work is licensed under the terms of the GNU GPL, version 2 or later.
9b7d7f723SFabiano Rosas * See the COPYING file in the top-level directory.
10b7d7f723SFabiano Rosas *
11b7d7f723SFabiano Rosas */
12b7d7f723SFabiano Rosas
13b7d7f723SFabiano Rosas #ifndef MIGRATION_UTIL_H
14b7d7f723SFabiano Rosas #define MIGRATION_UTIL_H
15b7d7f723SFabiano Rosas
16b7d7f723SFabiano Rosas #include "libqtest.h"
17b7d7f723SFabiano Rosas
18b7d7f723SFabiano Rosas typedef struct QTestMigrationState {
19b7d7f723SFabiano Rosas bool stop_seen;
20b7d7f723SFabiano Rosas bool resume_seen;
21b7d7f723SFabiano Rosas bool suspend_seen;
22b7d7f723SFabiano Rosas bool suspend_me;
23b7d7f723SFabiano Rosas } QTestMigrationState;
24b7d7f723SFabiano Rosas
25b7d7f723SFabiano Rosas bool migrate_watch_for_events(QTestState *who, const char *name,
26b7d7f723SFabiano Rosas QDict *event, void *opaque);
27b7d7f723SFabiano Rosas
28b7d7f723SFabiano Rosas QDict *migrate_query(QTestState *who);
29b7d7f723SFabiano Rosas QDict *migrate_query_not_failed(QTestState *who);
30b7d7f723SFabiano Rosas
31b7d7f723SFabiano Rosas void wait_for_migration_status(QTestState *who,
32b7d7f723SFabiano Rosas const char *goal, const char **ungoals);
33b7d7f723SFabiano Rosas
34b7d7f723SFabiano Rosas void wait_for_migration_complete(QTestState *who);
35b7d7f723SFabiano Rosas
36b7d7f723SFabiano Rosas void wait_for_migration_fail(QTestState *from, bool allow_active);
37b7d7f723SFabiano Rosas
38b7d7f723SFabiano Rosas char *find_common_machine_version(const char *mtype, const char *var1,
39b7d7f723SFabiano Rosas const char *var2);
40b7d7f723SFabiano Rosas char *resolve_machine_version(const char *alias, const char *var1,
41b7d7f723SFabiano Rosas const char *var2);
42b7d7f723SFabiano Rosas #ifdef O_DIRECT
43b7d7f723SFabiano Rosas bool probe_o_direct_support(const char *tmpfs);
44b7d7f723SFabiano Rosas #else
probe_o_direct_support(const char * tmpfs)45b7d7f723SFabiano Rosas static inline bool probe_o_direct_support(const char *tmpfs)
46b7d7f723SFabiano Rosas {
47b7d7f723SFabiano Rosas return false;
48b7d7f723SFabiano Rosas }
49b7d7f723SFabiano Rosas #endif
50124a3c58SFabiano Rosas
51124a3c58SFabiano Rosas bool ufd_version_check(bool *uffd_feature_thread_id);
522fa72ba7SFabiano Rosas bool kvm_dirty_ring_supported(void);
53b7d7f723SFabiano Rosas void migration_test_add(const char *path, void (*fn)(void));
54*aabb2a5bSFabiano Rosas void migration_test_add_suffix(const char *path, const char *suffix,
55*aabb2a5bSFabiano Rosas void (*fn)(void *));
56b7d7f723SFabiano Rosas char *migrate_get_connect_uri(QTestState *who);
57b7d7f723SFabiano Rosas void migrate_set_ports(QTestState *to, QList *channel_list);
58b7d7f723SFabiano Rosas
59b7d7f723SFabiano Rosas #endif /* MIGRATION_UTIL_H */
60