On 31.10.2016 16:38, Fam Zheng wrote: > Signed-off-by: Fam Zheng > --- > tests/Makefile.include | 2 + > tests/test-image-lock.c | 179 ++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 181 insertions(+) > create mode 100644 tests/test-image-lock.c > > diff --git a/tests/Makefile.include b/tests/Makefile.include > index cd058ef..65f8500 100644 > --- a/tests/Makefile.include > +++ b/tests/Makefile.include > @@ -56,6 +56,7 @@ check-unit-y += tests/test-hbitmap$(EXESUF) > gcov-files-test-hbitmap-y = blockjob.c > check-unit-y += tests/test-blockjob$(EXESUF) > check-unit-y += tests/test-blockjob-txn$(EXESUF) > +check-unit-y += tests/test-image-lock$(EXESUF) > check-unit-y += tests/test-x86-cpuid$(EXESUF) > # all code tested by test-x86-cpuid is inside topology.h > gcov-files-test-x86-cpuid-y = > @@ -493,6 +494,7 @@ tests/test-rfifolock$(EXESUF): tests/test-rfifolock.o $(test-util-obj-y) > tests/test-throttle$(EXESUF): tests/test-throttle.o $(test-block-obj-y) > tests/test-blockjob$(EXESUF): tests/test-blockjob.o $(test-block-obj-y) $(test-util-obj-y) > tests/test-blockjob-txn$(EXESUF): tests/test-blockjob-txn.o $(test-block-obj-y) $(test-util-obj-y) > +tests/test-image-lock$(EXESUF): tests/test-image-lock.o $(test-block-obj-y) $(libqos-obj-y) > tests/test-thread-pool$(EXESUF): tests/test-thread-pool.o $(test-block-obj-y) > tests/test-iov$(EXESUF): tests/test-iov.o $(test-util-obj-y) > tests/test-hbitmap$(EXESUF): tests/test-hbitmap.o $(test-util-obj-y) > diff --git a/tests/test-image-lock.c b/tests/test-image-lock.c > new file mode 100644 > index 0000000..db5a723 > --- /dev/null > +++ b/tests/test-image-lock.c > @@ -0,0 +1,179 @@ > +/* > + * Image lock tests > + * > + * Copyright 2016 Red Hat, Inc. > + * > + * Authors: > + * Fam Zheng > + * > + * This work is licensed under the terms of the GNU LGPL, version 2 or later. > + * See the COPYING.LIB file in the top-level directory. > + */ > + > +#include "qemu/osdep.h" > +#include "qapi/error.h" > +#include "qemu/error-report.h" > +#include "qapi/qmp/qbool.h" > +#include "sysemu/block-backend.h" > + > +#define TEST_IMAGE_SIZE 4096 > +static char test_image[] = "/tmp/qtest.XXXXXX"; > +static int test_image_fd; > + > +static BlockBackend *open_test_image(int flags, bool disable_lock) > +{ > + QDict *opts = qdict_new(); > + > + qdict_set_default_str(opts, "filename", test_image); > + qdict_set_default_str(opts, "driver", "file"); > + if (disable_lock) { > + qdict_put(opts, "disable-lock", qbool_from_bool(true)); > + } > + > + return blk_new_open(NULL, NULL, opts, flags | BDRV_O_ALLOW_RDWR, NULL); > +} > + > +#define RW true > +#define RO false > +#define SHARE true > +#define EXCLU false > + > +static struct CompatData { > + bool write_1; > + bool share_1; > + bool write_2; > + bool share_2; > + bool compatible; > +} compat_data[] = { > + /* Write 1, Share 1, Write 2, Share 2, Compatible. */ > + { RO, SHARE, RO, SHARE, true, }, > + { RO, SHARE, RO, EXCLU, true, }, > + { RO, SHARE, RW, SHARE, true, }, > + { RO, SHARE, RW, EXCLU, true, }, > + { RO, EXCLU, RO, SHARE, true, }, > + { RO, EXCLU, RO, EXCLU, true, }, > + { RO, EXCLU, RW, SHARE, false, }, > + { RO, EXCLU, RW, EXCLU, false, }, > +}; Without having looked closer at the test, what about RW/RW compatibility? Max