xref: /netbsd-src/tests/fs/ffs/t_mount.c (revision c54cb81102ced2313cb40993fe05548aca9933a1)
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