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