1*57718be8SEnji Cooper /* $NetBSD: t_mount.c,v 1.13 2012/11/27 16:01:49 jakllsch Exp $ */ 2*57718be8SEnji Cooper 3*57718be8SEnji Cooper /* 4*57718be8SEnji Cooper * Basic tests for mounting 5*57718be8SEnji Cooper */ 6*57718be8SEnji Cooper 7*57718be8SEnji Cooper /* 8*57718be8SEnji Cooper * 48Kimage: 9*57718be8SEnji Cooper * Adapted for rump and atf from a testcase supplied 10*57718be8SEnji Cooper * by Hubert Feyrer on netbsd-users@ 11*57718be8SEnji Cooper */ 12*57718be8SEnji Cooper 13*57718be8SEnji Cooper #include <atf-c.h> 14*57718be8SEnji Cooper 15*57718be8SEnji Cooper #define FSTEST_IMGSIZE (96 * 512) 16*57718be8SEnji Cooper #include "../common/h_fsmacros.h" 17*57718be8SEnji Cooper 18*57718be8SEnji Cooper #include <sys/types.h> 19*57718be8SEnji Cooper #include <sys/mount.h> 20*57718be8SEnji Cooper 21*57718be8SEnji Cooper #include <stdlib.h> 22*57718be8SEnji Cooper 23*57718be8SEnji Cooper #include <ufs/ufs/ufsmount.h> 24*57718be8SEnji Cooper 25*57718be8SEnji Cooper #include <rump/rump.h> 26*57718be8SEnji Cooper #include <rump/rump_syscalls.h> 27*57718be8SEnji Cooper 28*57718be8SEnji Cooper #include "../../h_macros.h" 29*57718be8SEnji Cooper 30*57718be8SEnji Cooper ATF_TC(48Kimage); 31*57718be8SEnji Cooper ATF_TC_HEAD(48Kimage, tc) 32*57718be8SEnji Cooper { 33*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "mount small 48K ffs image"); 34*57718be8SEnji Cooper } 35*57718be8SEnji Cooper 36*57718be8SEnji Cooper ATF_TC_BODY(48Kimage, tc) 37*57718be8SEnji Cooper { 38*57718be8SEnji Cooper void *tmp; 39*57718be8SEnji Cooper 40*57718be8SEnji Cooper atf_tc_expect_fail("PR kern/43573"); 41*57718be8SEnji Cooper FSTEST_CONSTRUCTOR(tc, ffs, tmp); 42*57718be8SEnji Cooper atf_tc_expect_pass(); 43*57718be8SEnji Cooper 44*57718be8SEnji Cooper FSTEST_DESTRUCTOR(tc, ffs, tmp); 45*57718be8SEnji Cooper } 46*57718be8SEnji Cooper 47*57718be8SEnji Cooper ATF_TC(fsbsizeovermaxphys); 48*57718be8SEnji Cooper ATF_TC_HEAD(fsbsizeovermaxphys, tc) 49*57718be8SEnji Cooper { 50*57718be8SEnji Cooper 51*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "mounts file system with " 52*57718be8SEnji Cooper "blocksize > MAXPHYS"); 53*57718be8SEnji Cooper /* PR kern/43727 */ 54*57718be8SEnji Cooper } 55*57718be8SEnji Cooper 56*57718be8SEnji Cooper ATF_TC_BODY(fsbsizeovermaxphys, tc) 57*57718be8SEnji Cooper { 58*57718be8SEnji Cooper char cmd[1024]; 59*57718be8SEnji Cooper struct ufs_args args; 60*57718be8SEnji Cooper struct statvfs svb; 61*57718be8SEnji Cooper 62*57718be8SEnji Cooper /* 63*57718be8SEnji Cooper * We cannot pass newfs parameters via the fstest interface, 64*57718be8SEnji Cooper * so do things the oldfashioned manual way. 65*57718be8SEnji Cooper */ 66*57718be8SEnji Cooper snprintf(cmd, sizeof(cmd), "newfs -G -b %d -F -s 10000 " 67*57718be8SEnji Cooper "ffs.img > /dev/null", MAXPHYS * 2); 68*57718be8SEnji Cooper if (system(cmd)) 69*57718be8SEnji Cooper atf_tc_fail("cannot create file system"); 70*57718be8SEnji Cooper 71*57718be8SEnji Cooper rump_init(); 72*57718be8SEnji Cooper if (rump_pub_etfs_register("/devdisk", "ffs.img", RUMP_ETFS_BLK)) 73*57718be8SEnji Cooper atf_tc_fail("cannot register rump fake device"); 74*57718be8SEnji Cooper 75*57718be8SEnji Cooper args.fspec = __UNCONST("/devdisk"); 76*57718be8SEnji Cooper 77*57718be8SEnji Cooper if (rump_sys_mkdir("/mp", 0777) == -1) 78*57718be8SEnji Cooper atf_tc_fail_errno("create mountpoint"); 79*57718be8SEnji Cooper 80*57718be8SEnji Cooper /* mount succeeded? bad omen. confirm we're in trouble. */ 81*57718be8SEnji Cooper if (rump_sys_mount(MOUNT_FFS, "/mp", 0, &args, sizeof(args)) != -1) { 82*57718be8SEnji Cooper rump_sys_statvfs1("/mp", &svb, ST_WAIT); 83*57718be8SEnji Cooper atf_tc_fail("not expecting to be alive"); 84*57718be8SEnji Cooper } 85*57718be8SEnji Cooper 86*57718be8SEnji Cooper /* otherwise we're do-ne */ 87*57718be8SEnji Cooper } 88*57718be8SEnji Cooper 89*57718be8SEnji Cooper ATF_TC(fsbsizeovermaxbsize); 90*57718be8SEnji Cooper ATF_TC_HEAD(fsbsizeovermaxbsize, tc) 91*57718be8SEnji Cooper { 92*57718be8SEnji Cooper 93*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "mounts file system with " 94*57718be8SEnji Cooper "blocksize > MAXBSIZE"); 95*57718be8SEnji Cooper } 96*57718be8SEnji Cooper 97*57718be8SEnji Cooper ATF_TC_BODY(fsbsizeovermaxbsize, tc) 98*57718be8SEnji Cooper { 99*57718be8SEnji Cooper char cmd[1024]; 100*57718be8SEnji Cooper struct ufs_args args; 101*57718be8SEnji Cooper struct statvfs svb; 102*57718be8SEnji Cooper 103*57718be8SEnji Cooper /* 104*57718be8SEnji Cooper * We cannot pass newfs parameters via the fstest interface, 105*57718be8SEnji Cooper * so do things the oldfashioned manual way. 106*57718be8SEnji Cooper */ 107*57718be8SEnji Cooper snprintf(cmd, sizeof(cmd), "newfs -G -b %d -F -s 10000 " 108*57718be8SEnji Cooper "ffs.img > /dev/null", MAXBSIZE * 2); 109*57718be8SEnji Cooper if (system(cmd)) 110*57718be8SEnji Cooper atf_tc_fail("cannot create file system"); 111*57718be8SEnji Cooper 112*57718be8SEnji Cooper rump_init(); 113*57718be8SEnji Cooper if (rump_pub_etfs_register("/devdisk", "ffs.img", RUMP_ETFS_BLK)) 114*57718be8SEnji Cooper atf_tc_fail("cannot register rump fake device"); 115*57718be8SEnji Cooper 116*57718be8SEnji Cooper args.fspec = __UNCONST("/devdisk"); 117*57718be8SEnji Cooper 118*57718be8SEnji Cooper if (rump_sys_mkdir("/mp", 0777) == -1) 119*57718be8SEnji Cooper atf_tc_fail_errno("create mountpoint"); 120*57718be8SEnji Cooper 121*57718be8SEnji Cooper /* mount succeeded? bad omen. confirm we're in trouble. */ 122*57718be8SEnji Cooper if (rump_sys_mount(MOUNT_FFS, "/mp", 0, &args, sizeof(args)) != -1) { 123*57718be8SEnji Cooper rump_sys_statvfs1("/mp", &svb, ST_WAIT); 124*57718be8SEnji Cooper atf_tc_fail("not expecting to be alive"); 125*57718be8SEnji Cooper } 126*57718be8SEnji Cooper 127*57718be8SEnji Cooper /* otherwise we're do-ne */ 128*57718be8SEnji Cooper } 129*57718be8SEnji Cooper 130*57718be8SEnji Cooper ATF_TP_ADD_TCS(tp) 131*57718be8SEnji Cooper { 132*57718be8SEnji Cooper 133*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, 48Kimage); 134*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, fsbsizeovermaxphys); 135*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, fsbsizeovermaxbsize); 136*57718be8SEnji Cooper 137*57718be8SEnji Cooper return atf_no_error(); 138*57718be8SEnji Cooper } 139