From df74e53708eb4c6d607d7ccec347053aab473168 Mon Sep 17 00:00:00 2001 From: pooka Date: Thu, 8 Jul 2010 13:21:02 +0000 Subject: [PATCH] Add LFS to vfs test list. TODO: start cleanerd too. It fails in a number of different ways. Some of them seem to appear as a function of the file system size (i'm not sure if it's because the lack of the cleaner or not. i'm guessing ``no'', though). ok njoly --- tests/fs/common/h_fsmacros.h | 5 +- tests/fs/common/lfs.c | 150 +++++++++++++++++++++++++++++++++++ tests/fs/vfs/Makefile | 3 +- 3 files changed, 156 insertions(+), 2 deletions(-) create mode 100644 tests/fs/common/lfs.c diff --git a/tests/fs/common/h_fsmacros.h b/tests/fs/common/h_fsmacros.h index a1d4284ce0ff..71fe719af5b0 100644 --- a/tests/fs/common/h_fsmacros.h +++ b/tests/fs/common/h_fsmacros.h @@ -1,4 +1,4 @@ -/* $NetBSD: h_fsmacros.h,v 1.2 2010/07/05 14:53:03 njoly Exp $ */ +/* $NetBSD: h_fsmacros.h,v 1.3 2010/07/08 13:21:02 pooka Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -37,6 +37,7 @@ #include "ext2fs.c" #include "ffs.c" +#include "lfs.c" #include "msdosfs.c" #include "sysvbfs.c" #include "tmpfs.c" @@ -73,6 +74,7 @@ #define ATF_TC_FSAPPLY(func,desc) \ ATF_TC_FSADD(ext2fs,"ext2fs",func,desc) \ ATF_TC_FSADD(ffs,"ffs",func,desc) \ + ATF_TC_FSADD(lfs,"lfs",func,desc) \ ATF_TC_FSADD(msdosfs,"msdosfs",func,desc) \ ATF_TC_FSADD(sysvbfs,"sysvbfs",func,desc) \ ATF_TC_FSADD(tmpfs,"tmpfs",func,desc) @@ -80,6 +82,7 @@ #define ATF_TP_FSAPPLY(func) \ ATF_TP_FSADD(ext2fs,func); \ ATF_TP_FSADD(ffs,func); \ + ATF_TP_FSADD(lfs,func); \ ATF_TP_FSADD(msdosfs,func); \ ATF_TP_FSADD(sysvbfs,func); \ ATF_TP_FSADD(tmpfs,func); diff --git a/tests/fs/common/lfs.c b/tests/fs/common/lfs.c new file mode 100644 index 000000000000..bc0e5ed7ba6a --- /dev/null +++ b/tests/fs/common/lfs.c @@ -0,0 +1,150 @@ +/* $NetBSD: lfs.c,v 1.1 2010/07/08 13:21:02 pooka Exp $ */ + +/*- + * Copyright (c) 2010 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Nicolas Joly. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include +#include + +struct lfstestargs { + struct ufs_args ta_uargs; + char ta_devpath[MAXPATHLEN]; + char ta_imgpath[MAXPATHLEN]; +}; + +static int +lfs_newfs(void **buf, const char *image, off_t size) +{ + char cmd[1024]; + int res; + static unsigned int num = 0; + struct lfstestargs *args; + + size /= 512; + snprintf(cmd, 1024, "newfs_lfs -D -F -s %"PRId64" ./%s >/dev/null", + size, image); + res = system(cmd); + if (res != 0) + return res; + + res = rump_init(); + if (res != 0) + return res; + + args = calloc(1, sizeof(*args)); + if (args == NULL) + return -1; + + snprintf(args->ta_devpath, MAXPATHLEN, "/dev/device%d.lfs", num); + snprintf(args->ta_imgpath, MAXPATHLEN, "%s", image); + args->ta_uargs.fspec = args->ta_devpath; + + res = rump_pub_etfs_register(args->ta_devpath, image, RUMP_ETFS_BLK); + if (res != 0) { + free(args); + return res; + } + + *buf = args; + num++; + + /* + * XXX: this should be IN THE TEST, not here + */ + atf_tc_expect_signal(-1, "i'll file a PR soon"); + + return 0; +} + +static int +lfs_delfs(void *buf) +{ + int res; + struct lfstestargs *args = buf; + + res = rump_pub_etfs_remove(args->ta_devpath); + if (res != 0) + return res; + + res = unlink(args->ta_imgpath); + if (res != 0) + return res; + + free(args); + + return 0; +} + +static int +lfs_mount(void *buf, const char *path, int flags) +{ + int res; + struct lfstestargs *args = buf; + + /* XXX: should start cleanerd */ + + res = rump_sys_mkdir(path, 0777); + if (res == -1) + return res; + + res = rump_sys_mount(MOUNT_LFS, path, flags, &args->ta_uargs, + sizeof(args->ta_uargs)); + return res; +} + +static int +lfs_unmount(const char *path, int flags) +{ + int res; + + /* + * Rarely the test does not crash. atf currently has no way of + * saying "just chill even if the test doesn't fail", so this + * takes care of it. + */ + abort(); + + res = rump_sys_unmount(path, flags); + if (res == -1) + return res; + + res = rump_sys_rmdir(path); + return res; +} diff --git a/tests/fs/vfs/Makefile b/tests/fs/vfs/Makefile index 15e12fff4091..2cd8c101a342 100644 --- a/tests/fs/vfs/Makefile +++ b/tests/fs/vfs/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.1 2010/07/05 12:53:58 njoly Exp $ +# $NetBSD: Makefile,v 1.2 2010/07/08 13:21:02 pooka Exp $ # TESTSDIR= ${TESTSBASE}/fs/vfs @@ -8,6 +8,7 @@ TESTS_C= t_rmdirrace LDADD+=-lrumpfs_ext2fs # ext2fs LDADD+=-lrumpfs_ffs # ffs +LDADD+=-lrumpfs_lfs # lfs LDADD+=-lrumpfs_msdos # msdos LDADD+=-lrumpfs_sysvbfs # sysvbfs LDADD+=-lrumpfs_tmpfs # tmpfs