t_mount.c revision 272343
1247280Sdteske/* $NetBSD: t_mount.c,v 1.13 2012/11/27 16:01:49 jakllsch Exp $ */ 2247280Sdteske 3247280Sdteske/* 4252980Sdteske * Basic tests for mounting 5247280Sdteske */ 6247280Sdteske 7247280Sdteske/* 8247280Sdteske * 48Kimage: 9247280Sdteske * Adapted for rump and atf from a testcase supplied 10247280Sdteske * by Hubert Feyrer on netbsd-users@ 11247280Sdteske */ 12247280Sdteske 13247280Sdteske#include <atf-c.h> 14247280Sdteske 15247280Sdteske#define FSTEST_IMGSIZE (96 * 512) 16252987Sdteske#include "../common/h_fsmacros.h" 17247280Sdteske 18247280Sdteske#include <sys/types.h> 19247280Sdteske#include <sys/mount.h> 20252987Sdteske 21247280Sdteske#include <stdlib.h> 22247280Sdteske 23247280Sdteske#include <ufs/ufs/ufsmount.h> 24247280Sdteske 25247280Sdteske#include <rump/rump.h> 26247280Sdteske#include <rump/rump_syscalls.h> 27247280Sdteske 28247280Sdteske#include "../../h_macros.h" 29247280Sdteske 30247280SdteskeATF_TC(48Kimage); 31247280SdteskeATF_TC_HEAD(48Kimage, tc) 32247280Sdteske{ 33247280Sdteske atf_tc_set_md_var(tc, "descr", "mount small 48K ffs image"); 34247280Sdteske} 35247280Sdteske 36252077SdteskeATF_TC_BODY(48Kimage, tc) 37252077Sdteske{ 38247280Sdteske void *tmp; 39247280Sdteske 40247280Sdteske atf_tc_expect_fail("PR kern/43573"); 41247280Sdteske FSTEST_CONSTRUCTOR(tc, ffs, tmp); 42247280Sdteske atf_tc_expect_pass(); 43247280Sdteske 44247280Sdteske FSTEST_DESTRUCTOR(tc, ffs, tmp); 45247280Sdteske} 46247280Sdteske 47247280SdteskeATF_TC(fsbsizeovermaxphys); 48247280SdteskeATF_TC_HEAD(fsbsizeovermaxphys, tc) 49247280Sdteske{ 50247280Sdteske 51247280Sdteske atf_tc_set_md_var(tc, "descr", "mounts file system with " 52247280Sdteske "blocksize > MAXPHYS"); 53247280Sdteske /* PR kern/43727 */ 54247280Sdteske} 55247280Sdteske 56247280SdteskeATF_TC_BODY(fsbsizeovermaxphys, tc) 57247280Sdteske{ 58247280Sdteske char cmd[1024]; 59247280Sdteske struct ufs_args args; 60247280Sdteske struct statvfs svb; 61247280Sdteske 62247280Sdteske /* 63247280Sdteske * We cannot pass newfs parameters via the fstest interface, 64252795Sdteske * so do things the oldfashioned manual way. 65247280Sdteske */ 66247280Sdteske snprintf(cmd, sizeof(cmd), "newfs -G -b %d -F -s 10000 " 67247280Sdteske "ffs.img > /dev/null", MAXPHYS * 2); 68247280Sdteske if (system(cmd)) 69247280Sdteske atf_tc_fail("cannot create file system"); 70247280Sdteske 71247280Sdteske rump_init(); 72247280Sdteske if (rump_pub_etfs_register("/devdisk", "ffs.img", RUMP_ETFS_BLK)) 73247280Sdteske atf_tc_fail("cannot register rump fake device"); 74247280Sdteske 75247280Sdteske args.fspec = __UNCONST("/devdisk"); 76247280Sdteske 77247280Sdteske if (rump_sys_mkdir("/mp", 0777) == -1) 78247280Sdteske atf_tc_fail_errno("create mountpoint"); 79247280Sdteske 80247280Sdteske /* mount succeeded? bad omen. confirm we're in trouble. */ 81247280Sdteske if (rump_sys_mount(MOUNT_FFS, "/mp", 0, &args, sizeof(args)) != -1) { 82247280Sdteske rump_sys_statvfs1("/mp", &svb, ST_WAIT); 83247280Sdteske atf_tc_fail("not expecting to be alive"); 84247280Sdteske } 85247280Sdteske 86247280Sdteske /* otherwise we're do-ne */ 87247280Sdteske} 88247280Sdteske 89247280SdteskeATF_TC(fsbsizeovermaxbsize); 90247280SdteskeATF_TC_HEAD(fsbsizeovermaxbsize, tc) 91247280Sdteske{ 92247280Sdteske 93247280Sdteske atf_tc_set_md_var(tc, "descr", "mounts file system with " 94247280Sdteske "blocksize > MAXBSIZE"); 95247280Sdteske} 96247280Sdteske 97247280SdteskeATF_TC_BODY(fsbsizeovermaxbsize, tc) 98247280Sdteske{ 99247280Sdteske char cmd[1024]; 100247280Sdteske struct ufs_args args; 101247280Sdteske struct statvfs svb; 102247280Sdteske 103247280Sdteske /* 104247280Sdteske * We cannot pass newfs parameters via the fstest interface, 105247280Sdteske * so do things the oldfashioned manual way. 106247280Sdteske */ 107247280Sdteske snprintf(cmd, sizeof(cmd), "newfs -G -b %d -F -s 10000 " 108247280Sdteske "ffs.img > /dev/null", MAXBSIZE * 2); 109247280Sdteske if (system(cmd)) 110247280Sdteske atf_tc_fail("cannot create file system"); 111247280Sdteske 112247280Sdteske rump_init(); 113247280Sdteske if (rump_pub_etfs_register("/devdisk", "ffs.img", RUMP_ETFS_BLK)) 114247280Sdteske atf_tc_fail("cannot register rump fake device"); 115247280Sdteske 116247280Sdteske args.fspec = __UNCONST("/devdisk"); 117247280Sdteske 118247280Sdteske if (rump_sys_mkdir("/mp", 0777) == -1) 119247280Sdteske atf_tc_fail_errno("create mountpoint"); 120247280Sdteske 121247280Sdteske /* mount succeeded? bad omen. confirm we're in trouble. */ 122247280Sdteske if (rump_sys_mount(MOUNT_FFS, "/mp", 0, &args, sizeof(args)) != -1) { 123247280Sdteske rump_sys_statvfs1("/mp", &svb, ST_WAIT); 124247280Sdteske atf_tc_fail("not expecting to be alive"); 125247280Sdteske } 126247280Sdteske 127247280Sdteske /* otherwise we're do-ne */ 128247280Sdteske} 129247280Sdteske 130247280SdteskeATF_TP_ADD_TCS(tp) 131247280Sdteske{ 132247280Sdteske 133247280Sdteske ATF_TP_ADD_TC(tp, 48Kimage); 134247280Sdteske ATF_TP_ADD_TC(tp, fsbsizeovermaxphys); 135247280Sdteske ATF_TP_ADD_TC(tp, fsbsizeovermaxbsize); 136247280Sdteske 137247280Sdteske return atf_no_error(); 138247280Sdteske} 139247280Sdteske