All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kurz <groug@kaod.org>
To: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Cc: <qemu-devel@nongnu.org>, <thuth@redhat.com>,
	<alistair.francis@wdc.com>, <peter.maydell@linaro.org>,
	<qemu_oss@crudebyte.com>
Subject: Re: [PATCH for-9.0 1/3] qtest/virtio-9p-test.c: consolidate create dir, file and symlink tests
Date: Tue, 26 Mar 2024 18:05:50 +0100	[thread overview]
Message-ID: <20240326180550.3072dd2d@bahia> (raw)
In-Reply-To: <20240326132606.686025-2-dbarboza@ventanamicro.com>

On Tue, 26 Mar 2024 10:26:04 -0300
Daniel Henrique Barboza <dbarboza@ventanamicro.com> wrote:

> The local 9p driver in virtio-9p-test.c its temporary dir right at the
> start of qos-test (via virtio_9p_create_local_test_dir()) and only
> deletes it after qos-test is finished (via
> virtio_9p_remove_local_test_dir()).
> 
> This means that any qos-test machine that ends up running virtio-9p-test local
> tests more than once will end up re-using the same temp dir. This is
> what's happening in [1] after we introduced the riscv machine nodes: if
> we enable slow tests with the '-m slow' flag using qemu-system-riscv64,
> this is what happens:
> 
> - a temp dir is created, e.g. qtest-9p-local-WZLDL2;
> 
> - virtio-9p-device tests will run virtio-9p-test successfully;
> 
> - virtio-9p-pci tests will run virtio-9p-test, and fail right at the
>   first slow test at fs_create_dir() because the "01" file was already
>   created by fs_create_dir() test when running with the virtio-9p-device.
> 
> We can fix it by making every test clean up their changes in the
> filesystem after they're done. But we don't need every test either:
> what fs_create_file() does is already exercised in fs_unlinkat_dir(),
> i.e. a dir is created, verified to be created, and then removed. Fixing
> fs_create_file() would turn it into fs_unlikat_dir(), so we don't need
> both. The same theme follows every test in virtio-9p-test.c, where the
> 'unlikat' variant does the same thing the 'create' does but with some
> cleaning in the end.
> 
> Consolide some tests as follows:
> 
> - fs_create_dir() is removed. fs_unlinkat_dir() is renamed to
>   fs_create_unlinkat_dir();
> 
> - fs_create_file() is removed. fs_unlinkat_file() is renamed to
>   fs_create_unlinkat_file(). The "04" dir it uses is now being removed;
> 
> - fs_symlink_file() is removed. fs_unlinkat_symlink() is renamed to
>   fs_create_unlinkat_symlink(). Both "real_file" and the "06" dir it
>   creates is now being removed.
> 

The  change looks good functionally but it breaks the legitimate assumption
that files "06/*" come from test #6 and so on... I think you should consider
renumbering to avoid confusion when debugging logs.

Since this will bring more hunks, please split this in enough reviewable
patches.

Cheers,

--
Greg

> We're still missing the 'hardlink' tests. We'll do it in the next patch
> since it's less trivial to consolidate than these.
> 
> [1] https://mail.gnu.org/archive/html/qemu-devel/2024-03/msg05807.html
> 
> Reported-by: Thomas Huth <thuth@redhat.com>
> Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
> ---
>  tests/qtest/virtio-9p-test.c | 97 +++++++++++-------------------------
>  1 file changed, 29 insertions(+), 68 deletions(-)
> 
> diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c
> index 65e69491e5..cdbe3e78ea 100644
> --- a/tests/qtest/virtio-9p-test.c
> +++ b/tests/qtest/virtio-9p-test.c
> @@ -506,26 +506,8 @@ static void fs_readdir_split_512(void *obj, void *data,
>  
>  /* tests using the 9pfs 'local' fs driver */
>  
> -static void fs_create_dir(void *obj, void *data, QGuestAllocator *t_alloc)
> -{
> -    QVirtio9P *v9p = obj;
> -    v9fs_set_allocator(t_alloc);
> -    struct stat st;
> -    g_autofree char *root_path = virtio_9p_test_path("");
> -    g_autofree char *new_dir = virtio_9p_test_path("01");
> -
> -    g_assert(root_path != NULL);
> -
> -    tattach({ .client = v9p });
> -    tmkdir({ .client = v9p, .atPath = "/", .name = "01" });
> -
> -    /* check if created directory really exists now ... */
> -    g_assert(stat(new_dir, &st) == 0);
> -    /* ... and is actually a directory */
> -    g_assert((st.st_mode & S_IFMT) == S_IFDIR);
> -}
> -
> -static void fs_unlinkat_dir(void *obj, void *data, QGuestAllocator *t_alloc)
> +static void fs_create_unlinkat_dir(void *obj, void *data,
> +                                   QGuestAllocator *t_alloc)
>  {
>      QVirtio9P *v9p = obj;
>      v9fs_set_allocator(t_alloc);
> @@ -551,28 +533,13 @@ static void fs_unlinkat_dir(void *obj, void *data, QGuestAllocator *t_alloc)
>      g_assert(stat(new_dir, &st) != 0);
>  }
>  
> -static void fs_create_file(void *obj, void *data, QGuestAllocator *t_alloc)
> -{
> -    QVirtio9P *v9p = obj;
> -    v9fs_set_allocator(t_alloc);
> -    struct stat st;
> -    g_autofree char *new_file = virtio_9p_test_path("03/1st_file");
> -
> -    tattach({ .client = v9p });
> -    tmkdir({ .client = v9p, .atPath = "/", .name = "03" });
> -    tlcreate({ .client = v9p, .atPath = "03", .name = "1st_file" });
> -
> -    /* check if created file exists now ... */
> -    g_assert(stat(new_file, &st) == 0);
> -    /* ... and is a regular file */
> -    g_assert((st.st_mode & S_IFMT) == S_IFREG);
> -}
> -
> -static void fs_unlinkat_file(void *obj, void *data, QGuestAllocator *t_alloc)
> +static void fs_create_unlinkat_file(void *obj, void *data,
> +                                    QGuestAllocator *t_alloc)
>  {
>      QVirtio9P *v9p = obj;
>      v9fs_set_allocator(t_alloc);
>      struct stat st;
> +    g_autofree char *new_dir = virtio_9p_test_path("04");
>      g_autofree char *new_file = virtio_9p_test_path("04/doa_file");
>  
>      tattach({ .client = v9p });
> @@ -587,37 +554,22 @@ static void fs_unlinkat_file(void *obj, void *data, QGuestAllocator *t_alloc)
>      tunlinkat({ .client = v9p, .atPath = "04", .name = "doa_file" });
>      /* file should be gone now */
>      g_assert(stat(new_file, &st) != 0);
> -}
> -
> -static void fs_symlink_file(void *obj, void *data, QGuestAllocator *t_alloc)
> -{
> -    QVirtio9P *v9p = obj;
> -    v9fs_set_allocator(t_alloc);
> -    struct stat st;
> -    g_autofree char *real_file = virtio_9p_test_path("05/real_file");
> -    g_autofree char *symlink_file = virtio_9p_test_path("05/symlink_file");
>  
> -    tattach({ .client = v9p });
> -    tmkdir({ .client = v9p, .atPath = "/", .name = "05" });
> -    tlcreate({ .client = v9p, .atPath = "05", .name = "real_file" });
> -    g_assert(stat(real_file, &st) == 0);
> -    g_assert((st.st_mode & S_IFMT) == S_IFREG);
> -
> -    tsymlink({
> -        .client = v9p, .atPath = "05", .name = "symlink_file",
> -        .symtgt = "real_file"
> +    /* also cleanup dir*/
> +    tunlinkat({
> +        .client = v9p, .atPath = "/", .name = "04",
> +        .flags = P9_DOTL_AT_REMOVEDIR
>      });
> -
> -    /* check if created link exists now */
> -    g_assert(stat(symlink_file, &st) == 0);
> +    g_assert(stat(new_dir, &st) != 0);
>  }
>  
> -static void fs_unlinkat_symlink(void *obj, void *data,
> -                                QGuestAllocator *t_alloc)
> +static void fs_create_unlinkat_symlink(void *obj, void *data,
> +                                       QGuestAllocator *t_alloc)
>  {
>      QVirtio9P *v9p = obj;
>      v9fs_set_allocator(t_alloc);
>      struct stat st;
> +    g_autofree char *new_dir = virtio_9p_test_path("06");
>      g_autofree char *real_file = virtio_9p_test_path("06/real_file");
>      g_autofree char *symlink_file = virtio_9p_test_path("06/symlink_file");
>  
> @@ -636,6 +588,16 @@ static void fs_unlinkat_symlink(void *obj, void *data,
>      tunlinkat({ .client = v9p, .atPath = "06", .name = "symlink_file" });
>      /* symlink should be gone now */
>      g_assert(stat(symlink_file, &st) != 0);
> +
> +    /* remove real file and dir */
> +    tunlinkat({ .client = v9p, .atPath = "06", .name = "real_file" });
> +    g_assert(stat(real_file, &st) != 0);
> +
> +    tunlinkat({
> +        .client = v9p, .atPath = "/", .name = "06",
> +        .flags = P9_DOTL_AT_REMOVEDIR
> +    });
> +    g_assert(stat(new_dir, &st) != 0);
>  }
>  
>  static void fs_hardlink_file(void *obj, void *data, QGuestAllocator *t_alloc)
> @@ -746,13 +708,12 @@ static void register_virtio_9p_test(void)
>  
>      opts.before = assign_9p_local_driver;
>      qos_add_test("local/config", "virtio-9p", pci_config,  &opts);
> -    qos_add_test("local/create_dir", "virtio-9p", fs_create_dir, &opts);
> -    qos_add_test("local/unlinkat_dir", "virtio-9p", fs_unlinkat_dir, &opts);
> -    qos_add_test("local/create_file", "virtio-9p", fs_create_file, &opts);
> -    qos_add_test("local/unlinkat_file", "virtio-9p", fs_unlinkat_file, &opts);
> -    qos_add_test("local/symlink_file", "virtio-9p", fs_symlink_file, &opts);
> -    qos_add_test("local/unlinkat_symlink", "virtio-9p", fs_unlinkat_symlink,
> -                 &opts);
> +    qos_add_test("local/create_unlinkat_dir", "virtio-9p",
> +                 fs_create_unlinkat_dir, &opts);
> +    qos_add_test("local/create_unlinkat_file", "virtio-9p",
> +                 fs_create_unlinkat_file, &opts);
> +    qos_add_test("local/create_unlinkat_symlink", "virtio-9p",
> +                 fs_create_unlinkat_symlink, &opts);
>      qos_add_test("local/hardlink_file", "virtio-9p", fs_hardlink_file, &opts);
>      qos_add_test("local/unlinkat_hardlink", "virtio-9p", fs_unlinkat_hardlink,
>                   &opts);



-- 
Greg


  reply	other threads:[~2024-03-26 17:06 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-26 13:26 [PATCH for-9.0 0/3] qtest/virtio-9p-test.c: fix slow tests Daniel Henrique Barboza
2024-03-26 13:26 ` [PATCH for-9.0 1/3] qtest/virtio-9p-test.c: consolidate create dir, file and symlink tests Daniel Henrique Barboza
2024-03-26 17:05   ` Greg Kurz [this message]
2024-03-26 17:47     ` Daniel Henrique Barboza
2024-03-27  8:47       ` Christian Schoenebeck
2024-03-27  9:33         ` Daniel Henrique Barboza
2024-03-27 10:14           ` Christian Schoenebeck
2024-03-27 11:28             ` Daniel Henrique Barboza
2024-03-27 12:26               ` Christian Schoenebeck
2024-03-27 12:32                 ` Greg Kurz
2024-03-27 12:40                 ` Daniel Henrique Barboza
2024-03-26 13:26 ` [PATCH for-9.0 2/3] qtest/virtio-9p-test.c: consolidate hardlink tests Daniel Henrique Barboza
2024-03-26 13:26 ` [PATCH for-9.0 3/3] qtest/virtio-9p-test.c: remove g_test_slow() gate Daniel Henrique Barboza
2024-03-26 15:55 ` [PATCH for-9.0 0/3] qtest/virtio-9p-test.c: fix slow tests Greg Kurz
2024-03-26 16:07   ` Daniel Henrique Barboza
2024-03-27  8:52     ` Christian Schoenebeck
2024-03-26 16:23 ` Thomas Huth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240326180550.3072dd2d@bahia \
    --to=groug@kaod.org \
    --cc=alistair.francis@wdc.com \
    --cc=dbarboza@ventanamicro.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu_oss@crudebyte.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.