diff options
Diffstat (limited to 'contrib/netbsd-tests/bin/df')
-rw-r--r-- | contrib/netbsd-tests/bin/df/getmntinfo.c | 218 | ||||
-rwxr-xr-x | contrib/netbsd-tests/bin/df/t_df.sh | 148 |
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 +} |