1*c54cb811Schristos /* $NetBSD: t_mount.c,v 1.14 2017/01/13 21:30:39 christos Exp $ */
224850d26Snjoly
324850d26Snjoly /*
42fc19132Spooka * Basic tests for mounting
52fc19132Spooka */
62fc19132Spooka
72fc19132Spooka /*
82fc19132Spooka * 48Kimage:
924850d26Snjoly * Adapted for rump and atf from a testcase supplied
1024850d26Snjoly * by Hubert Feyrer on netbsd-users@
1124850d26Snjoly */
1224850d26Snjoly
1324850d26Snjoly #include <atf-c.h>
1424850d26Snjoly
15471d3742Spooka #define FSTEST_IMGSIZE (96 * 512)
16cca4b54eSpooka #include "../common/h_fsmacros.h"
17cca4b54eSpooka
182fc19132Spooka #include <sys/types.h>
192fc19132Spooka #include <sys/mount.h>
202fc19132Spooka
212fc19132Spooka #include <stdlib.h>
222fc19132Spooka
232fc19132Spooka #include <ufs/ufs/ufsmount.h>
242fc19132Spooka
252fc19132Spooka #include <rump/rump.h>
262fc19132Spooka #include <rump/rump_syscalls.h>
272fc19132Spooka
28*c54cb811Schristos #include "h_macros.h"
292fc19132Spooka
3024850d26Snjoly ATF_TC(48Kimage);
3124850d26Snjoly ATF_TC_HEAD(48Kimage, tc)
3224850d26Snjoly {
3324850d26Snjoly atf_tc_set_md_var(tc, "descr", "mount small 48K ffs image");
3424850d26Snjoly }
3524850d26Snjoly
3624850d26Snjoly ATF_TC_BODY(48Kimage, tc)
3724850d26Snjoly {
3824850d26Snjoly void *tmp;
3924850d26Snjoly
4083eca23eSpooka atf_tc_expect_fail("PR kern/43573");
41471d3742Spooka FSTEST_CONSTRUCTOR(tc, ffs, tmp);
4283eca23eSpooka atf_tc_expect_pass();
4383eca23eSpooka
44471d3742Spooka FSTEST_DESTRUCTOR(tc, ffs, tmp);
4524850d26Snjoly }
4624850d26Snjoly
474ab3368eSjakllsch ATF_TC(fsbsizeovermaxphys);
ATF_TC_HEAD(fsbsizeovermaxphys,tc)484ab3368eSjakllsch ATF_TC_HEAD(fsbsizeovermaxphys, tc)
492fc19132Spooka {
502fc19132Spooka
512fc19132Spooka atf_tc_set_md_var(tc, "descr", "mounts file system with "
522fc19132Spooka "blocksize > MAXPHYS");
532fc19132Spooka /* PR kern/43727 */
542fc19132Spooka }
552fc19132Spooka
ATF_TC_BODY(fsbsizeovermaxphys,tc)564ab3368eSjakllsch ATF_TC_BODY(fsbsizeovermaxphys, tc)
572fc19132Spooka {
582fc19132Spooka char cmd[1024];
592fc19132Spooka struct ufs_args args;
602fc19132Spooka struct statvfs svb;
612fc19132Spooka
627a2fe155Spooka /*
637a2fe155Spooka * We cannot pass newfs parameters via the fstest interface,
647a2fe155Spooka * so do things the oldfashioned manual way.
657a2fe155Spooka */
662fc19132Spooka snprintf(cmd, sizeof(cmd), "newfs -G -b %d -F -s 10000 "
674ab3368eSjakllsch "ffs.img > /dev/null", MAXPHYS * 2);
682fc19132Spooka if (system(cmd))
692fc19132Spooka atf_tc_fail("cannot create file system");
702fc19132Spooka
712fc19132Spooka rump_init();
722fc19132Spooka if (rump_pub_etfs_register("/devdisk", "ffs.img", RUMP_ETFS_BLK))
732fc19132Spooka atf_tc_fail("cannot register rump fake device");
742fc19132Spooka
752fc19132Spooka args.fspec = __UNCONST("/devdisk");
762fc19132Spooka
772fc19132Spooka if (rump_sys_mkdir("/mp", 0777) == -1)
782fc19132Spooka atf_tc_fail_errno("create mountpoint");
792fc19132Spooka
802fc19132Spooka /* mount succeeded? bad omen. confirm we're in trouble. */
812fc19132Spooka if (rump_sys_mount(MOUNT_FFS, "/mp", 0, &args, sizeof(args)) != -1) {
822fc19132Spooka rump_sys_statvfs1("/mp", &svb, ST_WAIT);
83471d3742Spooka atf_tc_fail("not expecting to be alive");
842fc19132Spooka }
852fc19132Spooka
862fc19132Spooka /* otherwise we're do-ne */
872fc19132Spooka }
882fc19132Spooka
899dc12b58Sjakllsch ATF_TC(fsbsizeovermaxbsize);
ATF_TC_HEAD(fsbsizeovermaxbsize,tc)909dc12b58Sjakllsch ATF_TC_HEAD(fsbsizeovermaxbsize, tc)
919dc12b58Sjakllsch {
929dc12b58Sjakllsch
939dc12b58Sjakllsch atf_tc_set_md_var(tc, "descr", "mounts file system with "
949dc12b58Sjakllsch "blocksize > MAXBSIZE");
959dc12b58Sjakllsch }
969dc12b58Sjakllsch
ATF_TC_BODY(fsbsizeovermaxbsize,tc)979dc12b58Sjakllsch ATF_TC_BODY(fsbsizeovermaxbsize, tc)
989dc12b58Sjakllsch {
999dc12b58Sjakllsch char cmd[1024];
1009dc12b58Sjakllsch struct ufs_args args;
1019dc12b58Sjakllsch struct statvfs svb;
1029dc12b58Sjakllsch
1039dc12b58Sjakllsch /*
1049dc12b58Sjakllsch * We cannot pass newfs parameters via the fstest interface,
1059dc12b58Sjakllsch * so do things the oldfashioned manual way.
1069dc12b58Sjakllsch */
1079dc12b58Sjakllsch snprintf(cmd, sizeof(cmd), "newfs -G -b %d -F -s 10000 "
1089dc12b58Sjakllsch "ffs.img > /dev/null", MAXBSIZE * 2);
1099dc12b58Sjakllsch if (system(cmd))
1109dc12b58Sjakllsch atf_tc_fail("cannot create file system");
1119dc12b58Sjakllsch
1129dc12b58Sjakllsch rump_init();
1139dc12b58Sjakllsch if (rump_pub_etfs_register("/devdisk", "ffs.img", RUMP_ETFS_BLK))
1149dc12b58Sjakllsch atf_tc_fail("cannot register rump fake device");
1159dc12b58Sjakllsch
1169dc12b58Sjakllsch args.fspec = __UNCONST("/devdisk");
1179dc12b58Sjakllsch
1189dc12b58Sjakllsch if (rump_sys_mkdir("/mp", 0777) == -1)
1199dc12b58Sjakllsch atf_tc_fail_errno("create mountpoint");
1209dc12b58Sjakllsch
1219dc12b58Sjakllsch /* mount succeeded? bad omen. confirm we're in trouble. */
1229dc12b58Sjakllsch if (rump_sys_mount(MOUNT_FFS, "/mp", 0, &args, sizeof(args)) != -1) {
1239dc12b58Sjakllsch rump_sys_statvfs1("/mp", &svb, ST_WAIT);
1249dc12b58Sjakllsch atf_tc_fail("not expecting to be alive");
1259dc12b58Sjakllsch }
1269dc12b58Sjakllsch
1279dc12b58Sjakllsch /* otherwise we're do-ne */
1289dc12b58Sjakllsch }
1299dc12b58Sjakllsch
ATF_TP_ADD_TCS(tp)13024850d26Snjoly ATF_TP_ADD_TCS(tp)
13124850d26Snjoly {
1322fc19132Spooka
13324850d26Snjoly ATF_TP_ADD_TC(tp, 48Kimage);
1344ab3368eSjakllsch ATF_TP_ADD_TC(tp, fsbsizeovermaxphys);
1359dc12b58Sjakllsch ATF_TP_ADD_TC(tp, fsbsizeovermaxbsize);
1362fc19132Spooka
13724850d26Snjoly return atf_no_error();
13824850d26Snjoly }
139