1*63d1fd59SEnji Cooper /* $NetBSD: t_quota2_1.c,v 1.5 2017/01/13 21:30:39 christos Exp $ */ 257718be8SEnji Cooper 357718be8SEnji Cooper /* 457718be8SEnji Cooper * Basic tests for quota2 557718be8SEnji Cooper */ 657718be8SEnji Cooper 757718be8SEnji Cooper #include <atf-c.h> 857718be8SEnji Cooper 957718be8SEnji Cooper #include "../common/h_fsmacros.h" 1057718be8SEnji Cooper 1157718be8SEnji Cooper #include <sys/types.h> 1257718be8SEnji Cooper #include <sys/mount.h> 1357718be8SEnji Cooper 1457718be8SEnji Cooper #include <stdlib.h> 1557718be8SEnji Cooper 1657718be8SEnji Cooper #include <ufs/ufs/ufsmount.h> 1757718be8SEnji Cooper 1857718be8SEnji Cooper #include <rump/rump.h> 1957718be8SEnji Cooper #include <rump/rump_syscalls.h> 2057718be8SEnji Cooper 21*63d1fd59SEnji Cooper #include "h_macros.h" 2257718be8SEnji Cooper 2357718be8SEnji Cooper static void 2457718be8SEnji Cooper do_quota(const atf_tc_t *tc, int n, const char *newfs_opts, int log) 2557718be8SEnji Cooper { 2657718be8SEnji Cooper int i; 2757718be8SEnji Cooper char buf[1024]; 2857718be8SEnji Cooper int res; 2957718be8SEnji Cooper int fd; 3057718be8SEnji Cooper struct ufs_args uargs; 3157718be8SEnji Cooper 3257718be8SEnji Cooper snprintf(buf, sizeof(buf), "newfs -q user -q group -F -s 4000 -n %d " 3357718be8SEnji Cooper "%s %s", (n + 3), newfs_opts, FSTEST_IMGNAME); 3457718be8SEnji Cooper if (system(buf) == -1) 3557718be8SEnji Cooper atf_tc_fail_errno("cannot create file system"); 3657718be8SEnji Cooper 3757718be8SEnji Cooper rump_init(); 3857718be8SEnji Cooper if (rump_sys_mkdir(FSTEST_MNTNAME, 0777) == -1) 3957718be8SEnji Cooper atf_tc_fail_errno("mount point create"); 4057718be8SEnji Cooper 4157718be8SEnji Cooper rump_pub_etfs_register("/diskdev", FSTEST_IMGNAME, RUMP_ETFS_BLK); 4257718be8SEnji Cooper 4357718be8SEnji Cooper uargs.fspec = __UNCONST("/diskdev"); 4457718be8SEnji Cooper if (rump_sys_mount(MOUNT_FFS, FSTEST_MNTNAME, (log) ? MNT_LOG : 0, 4557718be8SEnji Cooper &uargs, sizeof(uargs)) == -1) 4657718be8SEnji Cooper atf_tc_fail_errno("mount ffs %s", FSTEST_MNTNAME); 4757718be8SEnji Cooper 4857718be8SEnji Cooper atf_tc_expect_pass(); 4957718be8SEnji Cooper FSTEST_ENTER(); 5057718be8SEnji Cooper RL(rump_sys_chown(".", 0, 0)); 5157718be8SEnji Cooper for (i = 0 ; i < n; i++) { 5257718be8SEnji Cooper sprintf(buf, "file%d", i); 5357718be8SEnji Cooper RL(fd = rump_sys_open(buf, O_CREAT | O_RDWR, 0755)); 5457718be8SEnji Cooper sprintf(buf, "test file no %d", i); 5557718be8SEnji Cooper RL(rump_sys_write(fd, buf, strlen(buf))); 5657718be8SEnji Cooper RL(rump_sys_fchown(fd, i, i+80000)); 5757718be8SEnji Cooper rump_sys_close(fd); 5857718be8SEnji Cooper } 5957718be8SEnji Cooper FSTEST_EXIT(); 6057718be8SEnji Cooper if (rump_sys_unmount(FSTEST_MNTNAME, 0) != 0) { 6157718be8SEnji Cooper rump_pub_vfs_mount_print(FSTEST_MNTNAME, 1); 6257718be8SEnji Cooper atf_tc_fail_errno("unmount failed"); 6357718be8SEnji Cooper } 6457718be8SEnji Cooper snprintf(buf, 1024, "fsck_ffs -fn -F %s", FSTEST_IMGNAME); 6557718be8SEnji Cooper res = system(buf); 6657718be8SEnji Cooper if (res != 0) 6757718be8SEnji Cooper atf_tc_fail("fsck returned %d", res); 6857718be8SEnji Cooper } 6957718be8SEnji Cooper 7057718be8SEnji Cooper #define DECL_TEST(nent, newops, name, descr, log) \ 7157718be8SEnji Cooper ATF_TC(quota_##name); \ 7257718be8SEnji Cooper \ 7357718be8SEnji Cooper ATF_TC_HEAD(quota_##name, tc) \ 7457718be8SEnji Cooper { \ 7557718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", \ 7657718be8SEnji Cooper "test quotas with %d users and groups, %s", \ 7757718be8SEnji Cooper nent, descr); \ 7857718be8SEnji Cooper } \ 7957718be8SEnji Cooper \ 8057718be8SEnji Cooper ATF_TC_BODY(quota_##name, tc) \ 8157718be8SEnji Cooper { \ 8257718be8SEnji Cooper do_quota(tc, nent, newops, log); \ 8357718be8SEnji Cooper } 8457718be8SEnji Cooper 8557718be8SEnji Cooper DECL_TEST(40, "-O1 -B le", 40_O1_le, "UFS1 little-endian", 0) 8657718be8SEnji Cooper DECL_TEST(40, "-O1 -B be", 40_O1_be, "UFS1 big-endian", 0) 8757718be8SEnji Cooper 8857718be8SEnji Cooper DECL_TEST(40, "-O2 -B le", 40_O2_le, "UFS2 little-endian", 0) 8957718be8SEnji Cooper DECL_TEST(40, "-O2 -B be", 40_O2_be, "UFS2 big-endian", 0) 9057718be8SEnji Cooper 9157718be8SEnji Cooper DECL_TEST(40, "-O1", 40_O1_log, "UFS1 log", 1) 9257718be8SEnji Cooper DECL_TEST(40, "-O2", 40_O2_log, "UFS2 log", 1) 9357718be8SEnji Cooper 9457718be8SEnji Cooper DECL_TEST(1000, "-O1 -B le", 1000_O1_le, "UFS1 little-endian", 0) 9557718be8SEnji Cooper DECL_TEST(1000, "-O1 -B be", 1000_O1_be, "UFS1 big-endian", 0) 9657718be8SEnji Cooper 9757718be8SEnji Cooper DECL_TEST(1000, "-O2 -B le", 1000_O2_le, "UFS2 little-endian", 0) 9857718be8SEnji Cooper DECL_TEST(1000, "-O2 -B be", 1000_O2_be, "UFS2 big-endian", 0) 9957718be8SEnji Cooper 10057718be8SEnji Cooper ATF_TP_ADD_TCS(tp) 10157718be8SEnji Cooper { 10257718be8SEnji Cooper 10357718be8SEnji Cooper ATF_TP_ADD_TC(tp, quota_40_O1_le); 10457718be8SEnji Cooper ATF_TP_ADD_TC(tp, quota_40_O1_be); 10557718be8SEnji Cooper ATF_TP_ADD_TC(tp, quota_40_O2_le); 10657718be8SEnji Cooper ATF_TP_ADD_TC(tp, quota_40_O2_be); 10757718be8SEnji Cooper ATF_TP_ADD_TC(tp, quota_40_O1_log); 10857718be8SEnji Cooper ATF_TP_ADD_TC(tp, quota_40_O2_log); 10957718be8SEnji Cooper ATF_TP_ADD_TC(tp, quota_1000_O1_le); 11057718be8SEnji Cooper ATF_TP_ADD_TC(tp, quota_1000_O1_be); 11157718be8SEnji Cooper ATF_TP_ADD_TC(tp, quota_1000_O2_le); 11257718be8SEnji Cooper ATF_TP_ADD_TC(tp, quota_1000_O2_be); 11357718be8SEnji Cooper return atf_no_error(); 11457718be8SEnji Cooper } 115