diff options
author | Thomas Huth <thuth@redhat.com> | 2021-03-10 07:33:14 +0100 |
---|---|---|
committer | Thomas Huth <thuth@redhat.com> | 2021-03-12 15:46:30 +0100 |
commit | da668aa15b99150a8595c491aee00d5d2426aaf9 (patch) | |
tree | 0463b0a303e807bdab46460f6c702be611bd7179 /tests/test-bdrv-graph-mod.c | |
parent | 363fc963054d8e82cfd55fa9b9aa130692a8dbd7 (diff) | |
download | qemu-da668aa15b99150a8595c491aee00d5d2426aaf9.zip qemu-da668aa15b99150a8595c491aee00d5d2426aaf9.tar.gz qemu-da668aa15b99150a8595c491aee00d5d2426aaf9.tar.bz2 |
tests: Move unit tests into a separate directory
The main tests directory still looks very crowded, and it's not
clear which files are part of a unit tests and which belong to
a different test subsystem. Let's clean up the mess and move the
unit tests to a separate directory.
Message-Id: <20210310063314.1049838-1-thuth@redhat.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Diffstat (limited to 'tests/test-bdrv-graph-mod.c')
-rw-r--r-- | tests/test-bdrv-graph-mod.c | 200 |
1 files changed, 0 insertions, 200 deletions
diff --git a/tests/test-bdrv-graph-mod.c b/tests/test-bdrv-graph-mod.c deleted file mode 100644 index c4f7d16..0000000 --- a/tests/test-bdrv-graph-mod.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Block node graph modifications tests - * - * Copyright (c) 2019 Virtuozzo International GmbH. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ - -#include "qemu/osdep.h" -#include "qapi/error.h" -#include "qemu/main-loop.h" -#include "block/block_int.h" -#include "sysemu/block-backend.h" - -static BlockDriver bdrv_pass_through = { - .format_name = "pass-through", - .bdrv_child_perm = bdrv_default_perms, -}; - -static void no_perm_default_perms(BlockDriverState *bs, BdrvChild *c, - BdrvChildRole role, - BlockReopenQueue *reopen_queue, - uint64_t perm, uint64_t shared, - uint64_t *nperm, uint64_t *nshared) -{ - *nperm = 0; - *nshared = BLK_PERM_ALL; -} - -static BlockDriver bdrv_no_perm = { - .format_name = "no-perm", - .bdrv_child_perm = no_perm_default_perms, -}; - -static BlockDriverState *no_perm_node(const char *name) -{ - return bdrv_new_open_driver(&bdrv_no_perm, name, BDRV_O_RDWR, &error_abort); -} - -static BlockDriverState *pass_through_node(const char *name) -{ - return bdrv_new_open_driver(&bdrv_pass_through, name, - BDRV_O_RDWR, &error_abort); -} - -/* - * test_update_perm_tree - * - * When checking node for a possibility to update permissions, it's subtree - * should be correctly checked too. New permissions for each node should be - * calculated and checked in context of permissions of other nodes. If we - * check new permissions of the node only in context of old permissions of - * its neighbors, we can finish up with wrong permission graph. - * - * This test firstly create the following graph: - * +--------+ - * | root | - * +--------+ - * | - * | perm: write, read - * | shared: except write - * v - * +-------------------+ +----------------+ - * | passtrough filter |---------->| null-co node | - * +-------------------+ +----------------+ - * - * - * and then, tries to append filter under node. Expected behavior: fail. - * Otherwise we'll get the following picture, with two BdrvChild'ren, having - * write permission to one node, without actually sharing it. - * - * +--------+ - * | root | - * +--------+ - * | - * | perm: write, read - * | shared: except write - * v - * +-------------------+ - * | passtrough filter | - * +-------------------+ - * | | - * perm: write, read | | perm: write, read - * shared: except write | | shared: except write - * v v - * +----------------+ - * | null co node | - * +----------------+ - */ -static void test_update_perm_tree(void) -{ - int ret; - - BlockBackend *root = blk_new(qemu_get_aio_context(), - BLK_PERM_WRITE | BLK_PERM_CONSISTENT_READ, - BLK_PERM_ALL & ~BLK_PERM_WRITE); - BlockDriverState *bs = no_perm_node("node"); - BlockDriverState *filter = pass_through_node("filter"); - - blk_insert_bs(root, bs, &error_abort); - - bdrv_attach_child(filter, bs, "child", &child_of_bds, - BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY, &error_abort); - - ret = bdrv_append(filter, bs, NULL); - g_assert_cmpint(ret, <, 0); - - blk_unref(root); -} - -/* - * test_should_update_child - * - * Test that bdrv_replace_node, and concretely should_update_child - * do the right thing, i.e. not creating loops on the graph. - * - * The test does the following: - * 1. initial graph: - * - * +------+ +--------+ - * | root | | filter | - * +------+ +--------+ - * | | - * root| target| - * v v - * +------+ +--------+ - * | node |<---------| target | - * +------+ backing +--------+ - * - * 2. Append @filter above @node. If should_update_child works correctly, - * it understands, that backing child of @target should not be updated, - * as it will create a loop on node graph. Resulting picture should - * be the left one, not the right: - * - * +------+ +------+ - * | root | | root | - * +------+ +------+ - * | | - * root| root| - * v v - * +--------+ target +--------+ target - * | filter |--------------+ | filter |--------------+ - * +--------+ | +--------+ | - * | | | ^ v - * backing| | backing| | +--------+ - * v v | +-----------| target | - * +------+ +--------+ v backing +--------+ - * | node |<---------| target | +------+ - * +------+ backing +--------+ | node | - * +------+ - * - * (good picture) (bad picture) - * - */ -static void test_should_update_child(void) -{ - BlockBackend *root = blk_new(qemu_get_aio_context(), 0, BLK_PERM_ALL); - BlockDriverState *bs = no_perm_node("node"); - BlockDriverState *filter = no_perm_node("filter"); - BlockDriverState *target = no_perm_node("target"); - - blk_insert_bs(root, bs, &error_abort); - - bdrv_set_backing_hd(target, bs, &error_abort); - - g_assert(target->backing->bs == bs); - bdrv_attach_child(filter, target, "target", &child_of_bds, - BDRV_CHILD_DATA, &error_abort); - bdrv_append(filter, bs, &error_abort); - g_assert(target->backing->bs == bs); - - bdrv_unref(bs); - blk_unref(root); -} - -int main(int argc, char *argv[]) -{ - bdrv_init(); - qemu_init_main_loop(&error_abort); - - g_test_init(&argc, &argv, NULL); - - g_test_add_func("/bdrv-graph-mod/update-perm-tree", test_update_perm_tree); - g_test_add_func("/bdrv-graph-mod/should-update-child", - test_should_update_child); - - return g_test_run(); -} |