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