Fix tests on kernel 5.3+
Signed-off-by: Cole Robinson <crobinso@redhat.com>
This commit is contained in:
parent
481596d7a6
commit
964eff6ae8
|
@ -0,0 +1,134 @@
|
|||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Wed, 21 Aug 2019 16:14:27 +0100
|
||||
Subject: [PATCH] tests: make filemonitor test more robust to event ordering
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The ordering of events that are emitted during the rmdir
|
||||
test have changed with kernel >= 5.3. Semantically both
|
||||
new & old orderings are correct, so we must be able to
|
||||
cope with either.
|
||||
|
||||
To cope with this, when we see an unexpected event, we
|
||||
push it back onto the queue and look and the subsequent
|
||||
event to see if that matches instead.
|
||||
|
||||
Tested-by: Peter Xu <peterx@redhat.com>
|
||||
Tested-by: Wei Yang <richardw.yang@linux.intel.com>
|
||||
Tested-by: Cornelia Huck <cohuck@redhat.com>
|
||||
Reviewed-by: Thomas Huth <thuth@redhat.com>
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit bf9e0313c27d8e6ecd7f7de3d63e1cb25d8f6311)
|
||||
---
|
||||
tests/test-util-filemonitor.c | 43 +++++++++++++++++++++++++++--------
|
||||
1 file changed, 34 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/tests/test-util-filemonitor.c b/tests/test-util-filemonitor.c
|
||||
index 46e781c022..301cd2db61 100644
|
||||
--- a/tests/test-util-filemonitor.c
|
||||
+++ b/tests/test-util-filemonitor.c
|
||||
@@ -45,6 +45,11 @@ typedef struct {
|
||||
const char *filedst;
|
||||
int64_t *watchid;
|
||||
int eventid;
|
||||
+ /*
|
||||
+ * Only valid with OP_EVENT - this event might be
|
||||
+ * swapped with the next OP_EVENT
|
||||
+ */
|
||||
+ bool swapnext;
|
||||
} QFileMonitorTestOp;
|
||||
|
||||
typedef struct {
|
||||
@@ -98,6 +103,10 @@ qemu_file_monitor_test_handler(int64_t id,
|
||||
QFileMonitorTestData *data = opaque;
|
||||
QFileMonitorTestRecord *rec = g_new0(QFileMonitorTestRecord, 1);
|
||||
|
||||
+ if (debug) {
|
||||
+ g_printerr("Queue event id %" PRIx64 " event %d file %s\n",
|
||||
+ id, event, filename);
|
||||
+ }
|
||||
rec->id = id;
|
||||
rec->event = event;
|
||||
rec->filename = g_strdup(filename);
|
||||
@@ -125,7 +134,8 @@ qemu_file_monitor_test_record_free(QFileMonitorTestRecord *rec)
|
||||
* to wait for the event to be queued for us.
|
||||
*/
|
||||
static QFileMonitorTestRecord *
|
||||
-qemu_file_monitor_test_next_record(QFileMonitorTestData *data)
|
||||
+qemu_file_monitor_test_next_record(QFileMonitorTestData *data,
|
||||
+ QFileMonitorTestRecord *pushback)
|
||||
{
|
||||
GTimer *timer = g_timer_new();
|
||||
QFileMonitorTestRecord *record = NULL;
|
||||
@@ -139,9 +149,15 @@ qemu_file_monitor_test_next_record(QFileMonitorTestData *data)
|
||||
}
|
||||
if (data->records) {
|
||||
record = data->records->data;
|
||||
- tmp = data->records;
|
||||
- data->records = g_list_remove_link(data->records, tmp);
|
||||
- g_list_free(tmp);
|
||||
+ if (pushback) {
|
||||
+ data->records->data = pushback;
|
||||
+ } else {
|
||||
+ tmp = data->records;
|
||||
+ data->records = g_list_remove_link(data->records, tmp);
|
||||
+ g_list_free(tmp);
|
||||
+ }
|
||||
+ } else if (pushback) {
|
||||
+ qemu_file_monitor_test_record_free(pushback);
|
||||
}
|
||||
qemu_mutex_unlock(&data->lock);
|
||||
|
||||
@@ -158,13 +174,15 @@ static bool
|
||||
qemu_file_monitor_test_expect(QFileMonitorTestData *data,
|
||||
int64_t id,
|
||||
QFileMonitorEvent event,
|
||||
- const char *filename)
|
||||
+ const char *filename,
|
||||
+ bool swapnext)
|
||||
{
|
||||
QFileMonitorTestRecord *rec;
|
||||
bool ret = false;
|
||||
|
||||
- rec = qemu_file_monitor_test_next_record(data);
|
||||
+ rec = qemu_file_monitor_test_next_record(data, NULL);
|
||||
|
||||
+ retry:
|
||||
if (!rec) {
|
||||
g_printerr("Missing event watch id %" PRIx64 " event %d file %s\n",
|
||||
id, event, filename);
|
||||
@@ -172,6 +190,11 @@ qemu_file_monitor_test_expect(QFileMonitorTestData *data,
|
||||
}
|
||||
|
||||
if (id != rec->id) {
|
||||
+ if (swapnext) {
|
||||
+ rec = qemu_file_monitor_test_next_record(data, rec);
|
||||
+ swapnext = false;
|
||||
+ goto retry;
|
||||
+ }
|
||||
g_printerr("Expected watch id %" PRIx64 " but got %" PRIx64 "\n",
|
||||
id, rec->id);
|
||||
goto cleanup;
|
||||
@@ -347,7 +370,8 @@ test_file_monitor_events(void)
|
||||
.filesrc = "fish", },
|
||||
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
|
||||
.filesrc = "", .watchid = &watch4,
|
||||
- .eventid = QFILE_MONITOR_EVENT_IGNORED },
|
||||
+ .eventid = QFILE_MONITOR_EVENT_IGNORED,
|
||||
+ .swapnext = true },
|
||||
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
|
||||
.filesrc = "fish", .watchid = &watch0,
|
||||
.eventid = QFILE_MONITOR_EVENT_DELETED },
|
||||
@@ -493,8 +517,9 @@ test_file_monitor_events(void)
|
||||
g_printerr("Event id=%" PRIx64 " event=%d file=%s\n",
|
||||
*op->watchid, op->eventid, op->filesrc);
|
||||
}
|
||||
- if (!qemu_file_monitor_test_expect(
|
||||
- &data, *op->watchid, op->eventid, op->filesrc))
|
||||
+ if (!qemu_file_monitor_test_expect(&data, *op->watchid,
|
||||
+ op->eventid, op->filesrc,
|
||||
+ op->swapnext))
|
||||
goto cleanup;
|
||||
break;
|
||||
case QFILE_MONITOR_TEST_OP_CREATE:
|
|
@ -175,6 +175,8 @@ Source21: 95-kvm-ppc64-memlock.conf
|
|||
# gluster 4K block size fixes (bz #1737256)
|
||||
Patch0001: 0001-file-posix-Handle-undetectable-alignment.patch
|
||||
Patch0002: 0002-block-posix-Always-allocate-the-first-block.patch
|
||||
# Fix tests on kernel 5.3+
|
||||
Patch0003: 0003-tests-make-filemonitor-test-more-robust-to-event-ord.patch
|
||||
|
||||
|
||||
# documentation deps
|
||||
|
|
Loading…
Reference in New Issue