1 1.5 christos /* $NetBSD: t_quota2_1.c,v 1.5 2017/01/13 21:30:39 christos Exp $ */ 2 1.2 bouyer 3 1.2 bouyer /* 4 1.2 bouyer * Basic tests for quota2 5 1.2 bouyer */ 6 1.2 bouyer 7 1.2 bouyer #include <atf-c.h> 8 1.2 bouyer 9 1.2 bouyer #include "../common/h_fsmacros.h" 10 1.2 bouyer 11 1.2 bouyer #include <sys/types.h> 12 1.2 bouyer #include <sys/mount.h> 13 1.2 bouyer 14 1.2 bouyer #include <stdlib.h> 15 1.2 bouyer 16 1.2 bouyer #include <ufs/ufs/ufsmount.h> 17 1.2 bouyer 18 1.2 bouyer #include <rump/rump.h> 19 1.2 bouyer #include <rump/rump_syscalls.h> 20 1.2 bouyer 21 1.5 christos #include "h_macros.h" 22 1.2 bouyer 23 1.2 bouyer static void 24 1.2 bouyer do_quota(const atf_tc_t *tc, int n, const char *newfs_opts, int log) 25 1.2 bouyer { 26 1.2 bouyer int i; 27 1.2 bouyer char buf[1024]; 28 1.2 bouyer int res; 29 1.2 bouyer int fd; 30 1.2 bouyer struct ufs_args uargs; 31 1.2 bouyer 32 1.2 bouyer snprintf(buf, sizeof(buf), "newfs -q user -q group -F -s 4000 -n %d " 33 1.2 bouyer "%s %s", (n + 3), newfs_opts, FSTEST_IMGNAME); 34 1.2 bouyer if (system(buf) == -1) 35 1.2 bouyer atf_tc_fail_errno("cannot create file system"); 36 1.2 bouyer 37 1.2 bouyer rump_init(); 38 1.2 bouyer if (rump_sys_mkdir(FSTEST_MNTNAME, 0777) == -1) 39 1.2 bouyer atf_tc_fail_errno("mount point create"); 40 1.2 bouyer 41 1.2 bouyer rump_pub_etfs_register("/diskdev", FSTEST_IMGNAME, RUMP_ETFS_BLK); 42 1.2 bouyer 43 1.2 bouyer uargs.fspec = __UNCONST("/diskdev"); 44 1.2 bouyer if (rump_sys_mount(MOUNT_FFS, FSTEST_MNTNAME, (log) ? MNT_LOG : 0, 45 1.2 bouyer &uargs, sizeof(uargs)) == -1) 46 1.2 bouyer atf_tc_fail_errno("mount ffs %s", FSTEST_MNTNAME); 47 1.2 bouyer 48 1.2 bouyer atf_tc_expect_pass(); 49 1.2 bouyer FSTEST_ENTER(); 50 1.2 bouyer RL(rump_sys_chown(".", 0, 0)); 51 1.2 bouyer for (i = 0 ; i < n; i++) { 52 1.2 bouyer sprintf(buf, "file%d", i); 53 1.2 bouyer RL(fd = rump_sys_open(buf, O_CREAT | O_RDWR, 0755)); 54 1.2 bouyer sprintf(buf, "test file no %d", i); 55 1.2 bouyer RL(rump_sys_write(fd, buf, strlen(buf))); 56 1.2 bouyer RL(rump_sys_fchown(fd, i, i+80000)); 57 1.2 bouyer rump_sys_close(fd); 58 1.2 bouyer } 59 1.2 bouyer FSTEST_EXIT(); 60 1.2 bouyer if (rump_sys_unmount(FSTEST_MNTNAME, 0) != 0) { 61 1.2 bouyer rump_pub_vfs_mount_print(FSTEST_MNTNAME, 1); 62 1.2 bouyer atf_tc_fail_errno("unmount failed"); 63 1.2 bouyer } 64 1.2 bouyer snprintf(buf, 1024, "fsck_ffs -fn -F %s", FSTEST_IMGNAME); 65 1.2 bouyer res = system(buf); 66 1.3 joerg if (res != 0) 67 1.3 joerg atf_tc_fail("fsck returned %d", res); 68 1.2 bouyer } 69 1.2 bouyer 70 1.2 bouyer #define DECL_TEST(nent, newops, name, descr, log) \ 71 1.2 bouyer ATF_TC(quota_##name); \ 72 1.2 bouyer \ 73 1.2 bouyer ATF_TC_HEAD(quota_##name, tc) \ 74 1.2 bouyer { \ 75 1.4 joerg atf_tc_set_md_var(tc, "descr", \ 76 1.4 joerg "test quotas with %d users and groups, %s", \ 77 1.4 joerg nent, descr); \ 78 1.2 bouyer } \ 79 1.2 bouyer \ 80 1.2 bouyer ATF_TC_BODY(quota_##name, tc) \ 81 1.2 bouyer { \ 82 1.2 bouyer do_quota(tc, nent, newops, log); \ 83 1.2 bouyer } 84 1.2 bouyer 85 1.2 bouyer DECL_TEST(40, "-O1 -B le", 40_O1_le, "UFS1 little-endian", 0) 86 1.2 bouyer DECL_TEST(40, "-O1 -B be", 40_O1_be, "UFS1 big-endian", 0) 87 1.2 bouyer 88 1.2 bouyer DECL_TEST(40, "-O2 -B le", 40_O2_le, "UFS2 little-endian", 0) 89 1.2 bouyer DECL_TEST(40, "-O2 -B be", 40_O2_be, "UFS2 big-endian", 0) 90 1.2 bouyer 91 1.2 bouyer DECL_TEST(40, "-O1", 40_O1_log, "UFS1 log", 1) 92 1.2 bouyer DECL_TEST(40, "-O2", 40_O2_log, "UFS2 log", 1) 93 1.2 bouyer 94 1.2 bouyer DECL_TEST(1000, "-O1 -B le", 1000_O1_le, "UFS1 little-endian", 0) 95 1.2 bouyer DECL_TEST(1000, "-O1 -B be", 1000_O1_be, "UFS1 big-endian", 0) 96 1.2 bouyer 97 1.2 bouyer DECL_TEST(1000, "-O2 -B le", 1000_O2_le, "UFS2 little-endian", 0) 98 1.2 bouyer DECL_TEST(1000, "-O2 -B be", 1000_O2_be, "UFS2 big-endian", 0) 99 1.2 bouyer 100 1.2 bouyer ATF_TP_ADD_TCS(tp) 101 1.2 bouyer { 102 1.2 bouyer 103 1.2 bouyer ATF_TP_ADD_TC(tp, quota_40_O1_le); 104 1.2 bouyer ATF_TP_ADD_TC(tp, quota_40_O1_be); 105 1.2 bouyer ATF_TP_ADD_TC(tp, quota_40_O2_le); 106 1.2 bouyer ATF_TP_ADD_TC(tp, quota_40_O2_be); 107 1.2 bouyer ATF_TP_ADD_TC(tp, quota_40_O1_log); 108 1.2 bouyer ATF_TP_ADD_TC(tp, quota_40_O2_log); 109 1.2 bouyer ATF_TP_ADD_TC(tp, quota_1000_O1_le); 110 1.2 bouyer ATF_TP_ADD_TC(tp, quota_1000_O1_be); 111 1.2 bouyer ATF_TP_ADD_TC(tp, quota_1000_O2_le); 112 1.2 bouyer ATF_TP_ADD_TC(tp, quota_1000_O2_be); 113 1.2 bouyer return atf_no_error(); 114 1.2 bouyer } 115