1314817Sngie/* $NetBSD: t_quota2_1.c,v 1.5 2017/01/13 21:30:39 christos Exp $ */ 2272343Sngie 3272343Sngie/* 4272343Sngie * Basic tests for quota2 5272343Sngie */ 6272343Sngie 7272343Sngie#include <atf-c.h> 8272343Sngie 9272343Sngie#include "../common/h_fsmacros.h" 10272343Sngie 11272343Sngie#include <sys/types.h> 12272343Sngie#include <sys/mount.h> 13272343Sngie 14272343Sngie#include <stdlib.h> 15272343Sngie 16272343Sngie#include <ufs/ufs/ufsmount.h> 17272343Sngie 18272343Sngie#include <rump/rump.h> 19272343Sngie#include <rump/rump_syscalls.h> 20272343Sngie 21314817Sngie#include "h_macros.h" 22272343Sngie 23272343Sngiestatic void 24272343Sngiedo_quota(const atf_tc_t *tc, int n, const char *newfs_opts, int log) 25272343Sngie{ 26272343Sngie int i; 27272343Sngie char buf[1024]; 28272343Sngie int res; 29272343Sngie int fd; 30272343Sngie struct ufs_args uargs; 31272343Sngie 32272343Sngie snprintf(buf, sizeof(buf), "newfs -q user -q group -F -s 4000 -n %d " 33272343Sngie "%s %s", (n + 3), newfs_opts, FSTEST_IMGNAME); 34272343Sngie if (system(buf) == -1) 35272343Sngie atf_tc_fail_errno("cannot create file system"); 36272343Sngie 37272343Sngie rump_init(); 38272343Sngie if (rump_sys_mkdir(FSTEST_MNTNAME, 0777) == -1) 39272343Sngie atf_tc_fail_errno("mount point create"); 40272343Sngie 41272343Sngie rump_pub_etfs_register("/diskdev", FSTEST_IMGNAME, RUMP_ETFS_BLK); 42272343Sngie 43272343Sngie uargs.fspec = __UNCONST("/diskdev"); 44272343Sngie if (rump_sys_mount(MOUNT_FFS, FSTEST_MNTNAME, (log) ? MNT_LOG : 0, 45272343Sngie &uargs, sizeof(uargs)) == -1) 46272343Sngie atf_tc_fail_errno("mount ffs %s", FSTEST_MNTNAME); 47272343Sngie 48272343Sngie atf_tc_expect_pass(); 49272343Sngie FSTEST_ENTER(); 50272343Sngie RL(rump_sys_chown(".", 0, 0)); 51272343Sngie for (i = 0 ; i < n; i++) { 52272343Sngie sprintf(buf, "file%d", i); 53272343Sngie RL(fd = rump_sys_open(buf, O_CREAT | O_RDWR, 0755)); 54272343Sngie sprintf(buf, "test file no %d", i); 55272343Sngie RL(rump_sys_write(fd, buf, strlen(buf))); 56272343Sngie RL(rump_sys_fchown(fd, i, i+80000)); 57272343Sngie rump_sys_close(fd); 58272343Sngie } 59272343Sngie FSTEST_EXIT(); 60272343Sngie if (rump_sys_unmount(FSTEST_MNTNAME, 0) != 0) { 61272343Sngie rump_pub_vfs_mount_print(FSTEST_MNTNAME, 1); 62272343Sngie atf_tc_fail_errno("unmount failed"); 63272343Sngie } 64272343Sngie snprintf(buf, 1024, "fsck_ffs -fn -F %s", FSTEST_IMGNAME); 65272343Sngie res = system(buf); 66272343Sngie if (res != 0) 67272343Sngie atf_tc_fail("fsck returned %d", res); 68272343Sngie} 69272343Sngie 70272343Sngie#define DECL_TEST(nent, newops, name, descr, log) \ 71272343SngieATF_TC(quota_##name); \ 72272343Sngie \ 73272343SngieATF_TC_HEAD(quota_##name, tc) \ 74272343Sngie{ \ 75272343Sngie atf_tc_set_md_var(tc, "descr", \ 76272343Sngie "test quotas with %d users and groups, %s", \ 77272343Sngie nent, descr); \ 78272343Sngie} \ 79272343Sngie \ 80272343SngieATF_TC_BODY(quota_##name, tc) \ 81272343Sngie{ \ 82272343Sngie do_quota(tc, nent, newops, log); \ 83272343Sngie} 84272343Sngie 85272343SngieDECL_TEST(40, "-O1 -B le", 40_O1_le, "UFS1 little-endian", 0) 86272343SngieDECL_TEST(40, "-O1 -B be", 40_O1_be, "UFS1 big-endian", 0) 87272343Sngie 88272343SngieDECL_TEST(40, "-O2 -B le", 40_O2_le, "UFS2 little-endian", 0) 89272343SngieDECL_TEST(40, "-O2 -B be", 40_O2_be, "UFS2 big-endian", 0) 90272343Sngie 91272343SngieDECL_TEST(40, "-O1", 40_O1_log, "UFS1 log", 1) 92272343SngieDECL_TEST(40, "-O2", 40_O2_log, "UFS2 log", 1) 93272343Sngie 94272343SngieDECL_TEST(1000, "-O1 -B le", 1000_O1_le, "UFS1 little-endian", 0) 95272343SngieDECL_TEST(1000, "-O1 -B be", 1000_O1_be, "UFS1 big-endian", 0) 96272343Sngie 97272343SngieDECL_TEST(1000, "-O2 -B le", 1000_O2_le, "UFS2 little-endian", 0) 98272343SngieDECL_TEST(1000, "-O2 -B be", 1000_O2_be, "UFS2 big-endian", 0) 99272343Sngie 100272343SngieATF_TP_ADD_TCS(tp) 101272343Sngie{ 102272343Sngie 103272343Sngie ATF_TP_ADD_TC(tp, quota_40_O1_le); 104272343Sngie ATF_TP_ADD_TC(tp, quota_40_O1_be); 105272343Sngie ATF_TP_ADD_TC(tp, quota_40_O2_le); 106272343Sngie ATF_TP_ADD_TC(tp, quota_40_O2_be); 107272343Sngie ATF_TP_ADD_TC(tp, quota_40_O1_log); 108272343Sngie ATF_TP_ADD_TC(tp, quota_40_O2_log); 109272343Sngie ATF_TP_ADD_TC(tp, quota_1000_O1_le); 110272343Sngie ATF_TP_ADD_TC(tp, quota_1000_O1_be); 111272343Sngie ATF_TP_ADD_TC(tp, quota_1000_O2_le); 112272343Sngie ATF_TP_ADD_TC(tp, quota_1000_O2_be); 113272343Sngie return atf_no_error(); 114272343Sngie} 115