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