summaryrefslogtreecommitdiffstats
path: root/contrib/netbsd-tests/bin/df
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/netbsd-tests/bin/df')
-rw-r--r--contrib/netbsd-tests/bin/df/getmntinfo.c218
-rwxr-xr-xcontrib/netbsd-tests/bin/df/t_df.sh148
2 files changed, 366 insertions, 0 deletions
diff --git a/contrib/netbsd-tests/bin/df/getmntinfo.c b/contrib/netbsd-tests/bin/df/getmntinfo.c
new file mode 100644
index 0000000..4ad1f40
--- /dev/null
+++ b/contrib/netbsd-tests/bin/df/getmntinfo.c
@@ -0,0 +1,218 @@
+/* $NetBSD: getmntinfo.c,v 1.1 2012/03/17 16:33:11 jruoho Exp $ */
+/*
+ * Copyright (c) 2007 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/param.h>
+#include <sys/ucred.h>
+#include <sys/mount.h>
+
+#include <err.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define KB * 1024
+#define MB * 1024 KB
+#define GB * 1024 MB
+
+static struct statvfs *getnewstatvfs(void);
+static void other_variants(const struct statvfs *, const int *, int,
+ const int *, int);
+static void setup_filer(void);
+static void setup_ld0g(void);
+static void setup_strpct(void);
+
+static struct statvfs *allstatvfs;
+static int sftotal, sfused;
+
+struct statvfs *
+getnewstatvfs(void)
+{
+
+ if (sftotal == sfused) {
+ sftotal = sftotal ? sftotal * 2 : 1;
+ allstatvfs = realloc(allstatvfs,
+ sftotal * sizeof(struct statvfs));
+ if (allstatvfs == NULL)
+ err(EXIT_FAILURE, "realloc");
+ }
+
+ return (&allstatvfs[sfused++]);
+}
+
+void
+other_variants(const struct statvfs *tmpl, const int *minfree, int minfreecnt,
+ const int *consumed, int consumedcnt)
+{
+ int64_t total, used;
+ struct statvfs *sf;
+ int i, j;
+
+ for (i = 0; i < minfreecnt; i++)
+ for (j = 0; j < consumedcnt; j++) {
+ sf = getnewstatvfs();
+ *sf = *tmpl;
+ total = (int64_t)(u_long)sf->f_blocks * sf->f_bsize;
+ used = total * consumed[j] / 100;
+ sf->f_bfree = (total - used) / sf->f_bsize;
+ sf->f_bavail = (total * (100 - minfree[i]) / 100 -
+ used) / (int)sf->f_bsize;
+ sf->f_bresvd = sf->f_bfree - sf->f_bavail;
+ }
+}
+
+/*
+ * Parameter taken from:
+ * http://mail-index.NetBSD.org/tech-userlevel/2004/03/24/0001.html
+ */
+void
+setup_filer(void)
+{
+ static const struct statvfs tmpl = {
+#define BSIZE 512
+#define TOTAL 1147ULL GB
+#define USED 132ULL MB
+ .f_bsize = BSIZE,
+ .f_frsize = BSIZE,
+ .f_blocks = TOTAL / BSIZE,
+ .f_bfree = (TOTAL - USED) / BSIZE,
+ .f_bavail = (TOTAL - USED) / BSIZE,
+ .f_bresvd = 0,
+ .f_mntfromname = "filer:/",
+ .f_mntonname = "/filer",
+#undef USED
+#undef TOTAL
+#undef BSIZE
+ };
+ static const int minfree[] = { 0, 5, 10, 15, };
+ static const int consumed[] = { 0, 20, 60, 95, 100 };
+
+ *getnewstatvfs() = tmpl;
+ other_variants(&tmpl, minfree, sizeof(minfree) / sizeof(minfree[0]),
+ consumed, sizeof(consumed) / sizeof(consumed[0]));
+}
+
+/*
+ * Parameter taken from:
+ * http://mail-index.NetBSD.org/current-users/2004/03/01/0038.html
+ */
+void
+setup_ld0g(void)
+{
+ static const struct statvfs tmpl = {
+#define BSIZE 4096 /* Guess */
+#define TOTAL 1308726116ULL KB
+#define USED 17901268ULL KB
+#define AVAIL 1225388540ULL KB
+ .f_bsize = BSIZE,
+ .f_frsize = BSIZE,
+ .f_blocks = TOTAL / BSIZE,
+ .f_bfree = (TOTAL - USED) / BSIZE,
+ .f_bavail = AVAIL / BSIZE,
+ .f_bresvd = (TOTAL - USED) / BSIZE - AVAIL / BSIZE,
+ .f_mntfromname = "/dev/ld0g",
+ .f_mntonname = "/anon-root",
+#undef AVAIL
+#undef USED
+#undef TOTAL
+#undef BSIZE
+ };
+ static const int minfree[] = { 0, 5, 10, 15, };
+ static const int consumed[] = { 0, 20, 60, 95, 100 };
+
+ *getnewstatvfs() = tmpl;
+ other_variants(&tmpl, minfree, sizeof(minfree) / sizeof(minfree[0]),
+ consumed, sizeof(consumed) / sizeof(consumed[0]));
+}
+
+/*
+ * Test of strpct() with huge number.
+ */
+void
+setup_strpct(void)
+{
+ static const struct statvfs tmpl = {
+#define BSIZE 4096 /* Guess */
+#define TOTAL 0x4ffffffffULL KB
+#define USED (TOTAL / 2)
+#define AVAIL (TOTAL / 2)
+ .f_bsize = BSIZE,
+ .f_frsize = BSIZE,
+ .f_blocks = TOTAL / BSIZE,
+ .f_bfree = (TOTAL - USED) / BSIZE,
+ .f_bavail = AVAIL / BSIZE,
+ .f_bresvd = (TOTAL - USED) / BSIZE - AVAIL / BSIZE,
+ .f_mntfromname = "/dev/strpct",
+ .f_mntonname = "/strpct",
+#undef AVAIL
+#undef USED
+#undef TOTAL
+#undef BSIZE
+ };
+
+ *getnewstatvfs() = tmpl;
+}
+
+/*
+ * Parameter taken from:
+ * http://www.netbsd.org/cgi-bin/query-pr-single.pl?number=23600
+ */
+static void
+setup_pr23600(void)
+{
+ static const struct statvfs tmpl = {
+#define BSIZE 512
+#define TOTAL 20971376ULL
+#define USED 5719864ULL
+#define AVAIL 15251512ULL
+ .f_bsize = BSIZE,
+ .f_frsize = BSIZE,
+ .f_blocks = TOTAL,
+ .f_bfree = TOTAL - USED,
+ .f_bavail = AVAIL,
+ .f_bresvd = TOTAL - USED - AVAIL,
+ .f_mntfromname = "/dev/wd0e",
+ .f_mntonname = "/mount/windows/C",
+#undef AVAIL
+#undef USED
+#undef TOTAL
+#undef BSIZE
+ };
+
+ *getnewstatvfs() = tmpl;
+}
+
+int
+getmntinfo(struct statvfs **mntbuf, int flags)
+{
+
+ setup_filer();
+ setup_ld0g();
+ setup_strpct();
+ setup_pr23600();
+
+ *mntbuf = allstatvfs;
+ return (sfused);
+}
diff --git a/contrib/netbsd-tests/bin/df/t_df.sh b/contrib/netbsd-tests/bin/df/t_df.sh
new file mode 100755
index 0000000..ffb5aad
--- /dev/null
+++ b/contrib/netbsd-tests/bin/df/t_df.sh
@@ -0,0 +1,148 @@
+# $NetBSD: t_df.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+#
+# Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+atf_test_case normal
+normal_head() {
+ atf_set "descr" "Checks that the output of df without flags is" \
+ "correct according to some already-known, sane" \
+ "output"
+}
+normal_body() {
+ cat >expout <<EOF
+Filesystem 1K-blocks Used Avail %Cap Mounted on
+filer:/ 1202716672 135168 1202581504 0% /filer
+filer:/ 1202716672 0 1202716672 0% /filer
+filer:/ 1202716672 240543334 962173337 20% /filer
+filer:/ 1202716672 721630003 481086668 60% /filer
+filer:/ 1202716672 1142580838 60135833 95% /filer
+filer:/ 1202716672 1202716672 0 100% /filer
+filer:/ 1202716672 0 1142580838 0% /filer
+filer:/ 1202716672 240543334 902037504 21% /filer
+filer:/ 1202716672 721630003 420950835 63% /filer
+filer:/ 1202716672 1142580838 0 100% /filer
+filer:/ 1202716672 1202716672 -60135833 105% /filer
+filer:/ 1202716672 0 1082445004 0% /filer
+filer:/ 1202716672 240543334 841901670 22% /filer
+filer:/ 1202716672 721630003 360815001 66% /filer
+filer:/ 1202716672 1142580838 -60135833 105% /filer
+filer:/ 1202716672 1202716672 -120271667 111% /filer
+filer:/ 1202716672 0 1022309171 0% /filer
+filer:/ 1202716672 240543334 781765836 23% /filer
+filer:/ 1202716672 721630003 300679168 70% /filer
+filer:/ 1202716672 1142580838 -120271667 111% /filer
+filer:/ 1202716672 1202716672 -180407500 117% /filer
+/dev/ld0g 1308726116 17901268 1225388540 1% /anon-root
+/dev/ld0g 1308726116 0 1308726116 0% /anon-root
+/dev/ld0g 1308726116 261745224 1046980892 20% /anon-root
+/dev/ld0g 1308726116 785235672 523490444 60% /anon-root
+/dev/ld0g 1308726116 1243289812 65436304 95% /anon-root
+/dev/ld0g 1308726116 1308726116 0 100% /anon-root
+/dev/ld0g 1308726116 0 1243289808 0% /anon-root
+/dev/ld0g 1308726116 261745224 981544584 21% /anon-root
+/dev/ld0g 1308726116 785235672 458054140 63% /anon-root
+/dev/ld0g 1308726116 1243289812 0 100% /anon-root
+/dev/ld0g 1308726116 1308726116 -65436304 105% /anon-root
+/dev/ld0g 1308726116 0 1177853504 0% /anon-root
+/dev/ld0g 1308726116 261745224 916108280 22% /anon-root
+/dev/ld0g 1308726116 785235672 392617832 66% /anon-root
+/dev/ld0g 1308726116 1243289812 -65436304 105% /anon-root
+/dev/ld0g 1308726116 1308726116 -130872608 111% /anon-root
+/dev/ld0g 1308726116 0 1112417196 0% /anon-root
+/dev/ld0g 1308726116 261745224 850671972 23% /anon-root
+/dev/ld0g 1308726116 785235672 327181528 70% /anon-root
+/dev/ld0g 1308726116 1243289812 -130872608 111% /anon-root
+/dev/ld0g 1308726116 1308726116 -196308916 117% /anon-root
+/dev/strpct 21474836476 10737418240 10737418236 50% /strpct
+/dev/wd0e 10485688 2859932 7625756 27% /mount/windows/C
+EOF
+ atf_check -s eq:0 -o file:expout -e empty \
+ -x "BLOCKSIZE=1k $(atf_get_srcdir)/h_df -n"
+}
+
+atf_test_case hflag
+hflag_head() {
+ atf_set "descr" "Checks that the output of df is correct according" \
+ "to some already-known, sane output when using the" \
+ "human readable format"
+}
+hflag_body() {
+ cat >expout <<EOF
+Filesystem Size Used Avail %Cap Mounted on
+filer:/ 1.1T 132M 1.1T 0% /filer
+filer:/ 1.1T 0B 1.1T 0% /filer
+filer:/ 1.1T 229G 918G 20% /filer
+filer:/ 1.1T 688G 459G 60% /filer
+filer:/ 1.1T 1.1T 57G 95% /filer
+filer:/ 1.1T 1.1T 0B 100% /filer
+filer:/ 1.1T 0B 1.1T 0% /filer
+filer:/ 1.1T 229G 860G 21% /filer
+filer:/ 1.1T 688G 401G 63% /filer
+filer:/ 1.1T 1.1T 0B 100% /filer
+filer:/ 1.1T 1.1T -57G 105% /filer
+filer:/ 1.1T 0B 1.0T 0% /filer
+filer:/ 1.1T 229G 803G 22% /filer
+filer:/ 1.1T 688G 344G 66% /filer
+filer:/ 1.1T 1.1T -57G 105% /filer
+filer:/ 1.1T 1.1T -115G 111% /filer
+filer:/ 1.1T 0B 975G 0% /filer
+filer:/ 1.1T 229G 746G 23% /filer
+filer:/ 1.1T 688G 287G 70% /filer
+filer:/ 1.1T 1.1T -115G 111% /filer
+filer:/ 1.1T 1.1T -172G 117% /filer
+/dev/ld0g 1.2T 17G 1.1T 1% /anon-root
+/dev/ld0g 1.2T 0B 1.2T 0% /anon-root
+/dev/ld0g 1.2T 250G 998G 20% /anon-root
+/dev/ld0g 1.2T 749G 499G 60% /anon-root
+/dev/ld0g 1.2T 1.2T 62G 95% /anon-root
+/dev/ld0g 1.2T 1.2T 0B 100% /anon-root
+/dev/ld0g 1.2T 0B 1.2T 0% /anon-root
+/dev/ld0g 1.2T 250G 936G 21% /anon-root
+/dev/ld0g 1.2T 749G 437G 63% /anon-root
+/dev/ld0g 1.2T 1.2T 0B 100% /anon-root
+/dev/ld0g 1.2T 1.2T -62G 105% /anon-root
+/dev/ld0g 1.2T 0B 1.1T 0% /anon-root
+/dev/ld0g 1.2T 250G 874G 22% /anon-root
+/dev/ld0g 1.2T 749G 374G 66% /anon-root
+/dev/ld0g 1.2T 1.2T -62G 105% /anon-root
+/dev/ld0g 1.2T 1.2T -125G 111% /anon-root
+/dev/ld0g 1.2T 0B 1.0T 0% /anon-root
+/dev/ld0g 1.2T 250G 811G 23% /anon-root
+/dev/ld0g 1.2T 749G 312G 70% /anon-root
+/dev/ld0g 1.2T 1.2T -125G 111% /anon-root
+/dev/ld0g 1.2T 1.2T -187G 117% /anon-root
+/dev/strpct 20T 10T 10T 50% /strpct
+/dev/wd0e 10G 2.7G 7.3G 27% /mount/windows/C
+EOF
+ atf_check -s eq:0 -o file:expout -e empty \
+ -x "BLOCKSIZE=1k $(atf_get_srcdir)/h_df -hn"
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case normal
+ atf_add_test_case hflag
+}
OpenPOWER on IntegriCloud