qemu/tests/unit
Vladimir Sementsov-Ogievskiy e6af4f0e94 tests/test-bdrv-graph-mod: add test_parallel_perm_update
Add test to show that simple DFS recursion order is not correct for
permission update. Correct order is topological-sort order, which will
be introduced later.

Consider the block driver which has two filter children: one active
with exclusive write access and one inactive with no specific
permissions.

And, these two children has a common base child, like this:

┌─────┐     ┌──────┐
│ fl2 │ ◀── │ top  │
└─────┘     └──────┘
  │           │
  │           │ w
  │           ▼
  │         ┌──────┐
  │         │ fl1  │
  │         └──────┘
  │           │
  │           │ w
  │           ▼
  │         ┌──────┐
  └───────▶ │ base │
            └──────┘

So, exclusive write is propagated.

Assume, we want to make fl2 active instead of fl1.
So, we set some option for top driver and do permission update.

If permission update (remember, it's DFS) goes first through
top->fl1->base branch it will succeed: it firstly drop exclusive write
permissions and than apply them for another BdrvChildren.
But if permission update goes first through top->fl2->base branch it
will fail, as when we try to update fl2->base child, old not yet
updated fl1->base child will be in conflict.

Now test fails, so it runs only with -d flag. To run do

  ./test-bdrv-graph-mod -d -p /bdrv-graph-mod/parallel-perm-update

from <build-directory>/tests.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20210428151804.439460-3-vsementsov@virtuozzo.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2021-04-30 12:27:47 +02:00
..
check-block-qdict.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
check-qdict.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
check-qjson.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
check-qlist.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
check-qlit.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
check-qnull.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
check-qnum.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
check-qobject.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
check-qom-interface.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
check-qom-proplist.c tests: convert check-qom-proplist to keyval 2021-03-19 10:18:17 +01:00
check-qstring.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
crypto-tls-psk-helpers.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
crypto-tls-psk-helpers.h tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
crypto-tls-x509-helpers.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
crypto-tls-x509-helpers.h tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
io-channel-helpers.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
io-channel-helpers.h tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
iothread.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
iothread.h tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
meson.build tests: Add tests for yank with the chardev-change case 2021-04-01 15:27:44 +04:00
pkix_asn1_tab.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
ptimer-test-stubs.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
ptimer-test.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
ptimer-test.h tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
rcutorture.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
socket-helpers.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
socket-helpers.h tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-aio-multithread.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-aio.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-authz-list.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-authz-listfile.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-authz-pam.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-authz-simple.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-base64.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-bdrv-drain.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-bdrv-graph-mod.c tests/test-bdrv-graph-mod: add test_parallel_perm_update 2021-04-30 12:27:47 +02:00
test-bitcnt.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-bitmap.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-bitops.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-block-backend.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-block-iothread.c tests/unit/test-block-iothread: fix maybe-uninitialized error on GCC 11 2021-03-20 06:17:09 +01:00
test-blockjob-txn.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-blockjob.c test-blockjob: Test job_wait_unpaused() 2021-04-09 18:00:29 +02:00
test-bufferiszero.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-char.c char: Deprecate backend aliases 'tty' and 'parport' 2021-03-19 10:18:06 +01:00
test-clone-visitor.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-coroutine.c test-coroutine: Add rwlock downgrade test 2021-03-31 10:44:21 +01:00
test-crypto-afsplit.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-crypto-block.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-crypto-cipher.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-crypto-hash.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-crypto-hmac.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-crypto-ivgen.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-crypto-pbkdf.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-crypto-secret.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-crypto-tlscredsx509.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-crypto-tlssession.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-crypto-xts.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-cutils.c utils: Work around mingw strto*l bug with 0x 2021-03-24 14:25:41 +00:00
test-fdmon-epoll.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-hbitmap.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-image-locking.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-int128.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-io-channel-buffer.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-io-channel-command.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-io-channel-file.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-io-channel-socket.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-io-channel-tls.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-io-task.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-iov.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-keyval.c * Move unit and bench tests into separate directories 2021-03-14 15:13:53 +00:00
test-logging.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-mul64.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-opts-visitor.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-qapi-util.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-qdev-global-props.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-qdist.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-qemu-opts.c * Move unit and bench tests into separate directories 2021-03-14 15:13:53 +00:00
test-qga.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-qgraph.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-qht.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-qmp-cmds.c qapi: Enforce command naming rules 2021-03-23 22:31:05 +01:00
test-qmp-event.c qapi: Enforce event naming rules 2021-03-23 22:31:05 +01:00
test-qobject-input-visitor.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-qobject-output-visitor.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-rcu-list.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-rcu-simpleq.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-rcu-slist.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-rcu-tailq.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-replication.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-shift128.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-string-input-visitor.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-string-output-visitor.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-thread-pool.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-throttle.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-timed-average.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-util-filemonitor.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-util-sockets.c test-util-sockets: Add stub for monitor_set_cur() 2021-03-19 16:05:11 +01:00
test-uuid.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-visitor-serialization.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-vmstate.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-write-threshold.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-x86-cpuid.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-xbzrle.c tests: Move unit tests into a separate directory 2021-03-12 15:46:30 +01:00
test-yank.c tests: Add tests for yank with the chardev-change case 2021-04-01 15:27:44 +04:00