summaryrefslogtreecommitdiffstats
path: root/tools/regression
diff options
context:
space:
mode:
authorngie <ngie@FreeBSD.org>2014-08-27 18:25:14 +0000
committerngie <ngie@FreeBSD.org>2014-08-27 18:25:14 +0000
commit3d2bab33aa9bc3dde1dd57cf667e10eb89730df8 (patch)
tree4b996aa897962c40692fc76d3019b80f747456ec /tools/regression
parent7901389ab7af88345b39d8f30df648bec2bcd2ac (diff)
downloadFreeBSD-src-3d2bab33aa9bc3dde1dd57cf667e10eb89730df8.zip
FreeBSD-src-3d2bab33aa9bc3dde1dd57cf667e10eb89730df8.tar.gz
MFC r270180:
r269906: Add missing BSD.tests.dist entry for lib/libutil to unbreak installworld with MK_TESTS == no Phabric: D555 Approved by: jmmv (mentor, implicit) Pointyhat to: ngie r269904: Integrate lib/libutil into the build/kyua Remove the .t wrappers Rename all of the TAP test applications from test-<test> to <test>_test to match the convention described in the TestSuite wiki page humanize_number_test.c: - Fix -Wformat warnings with counter variables - Fix minor style(9) issues: -- Header sorting -- Variable declaration alignment/sorting in main(..) -- Fit the lines in <80 columns - Fix an off by one index error in the testcase output [*] - Remove unnecessary `extern char * optarg;` (this is already provided by unistd.h) Phabric: D555 Approved by: jmmv (mentor) Obtained from: EMC / Isilon Storage Division [*] Submitted by: Casey Peel <cpeel@isilon.com> [*] Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'tools/regression')
-rw-r--r--tools/regression/lib/libutil/Makefile13
-rw-r--r--tools/regression/lib/libutil/test-flopen.c210
-rw-r--r--tools/regression/lib/libutil/test-flopen.t12
-rw-r--r--tools/regression/lib/libutil/test-grp.c117
-rw-r--r--tools/regression/lib/libutil/test-grp.t12
-rw-r--r--tools/regression/lib/libutil/test-humanize_number.c592
-rwxr-xr-xtools/regression/lib/libutil/test-humanize_number.t10
-rw-r--r--tools/regression/lib/libutil/test-pidfile.c280
-rw-r--r--tools/regression/lib/libutil/test-trimdomain-nodomain.c91
-rw-r--r--tools/regression/lib/libutil/test-trimdomain-nodomain.t10
-rw-r--r--tools/regression/lib/libutil/test-trimdomain.c91
-rw-r--r--tools/regression/lib/libutil/test-trimdomain.t10
12 files changed, 0 insertions, 1448 deletions
diff --git a/tools/regression/lib/libutil/Makefile b/tools/regression/lib/libutil/Makefile
deleted file mode 100644
index 229b4d2..0000000
--- a/tools/regression/lib/libutil/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-# $FreeBSD$
-
-TESTS= test-trimdomain test-trimdomain-nodomain test-flopen test-grp \
- test-pidfile test-humanize_number
-CFLAGS+= -g -Wall -Wextra -Werror -lutil
-
-.PHONY: tests
-tests: ${TESTS}
- for p in ${TESTS}; do ${.OBJDIR}/$$p; done
-
-.PHONY: clean
-clean:
- -rm -f ${TESTS}
diff --git a/tools/regression/lib/libutil/test-flopen.c b/tools/regression/lib/libutil/test-flopen.c
deleted file mode 100644
index 0471584..0000000
--- a/tools/regression/lib/libutil/test-flopen.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/*-
- * Copyright (c) 2007-2009 Dag-Erling Coïdan Smørgrav
- * 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
- * in this position and unchanged.
- * 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 AUTHOR 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 AUTHOR 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/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-
-#include <errno.h>
-#include <signal.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <libutil.h>
-
-/*
- * Test that flopen() can create a file.
- */
-const char *
-test_flopen_create(void)
-{
- const char *fn = "test_flopen_create";
- const char *result = NULL;
- int fd;
-
- unlink(fn);
- fd = flopen(fn, O_RDWR|O_CREAT, 0640);
- if (fd < 0) {
- result = strerror(errno);
- } else {
- close(fd);
- }
- unlink(fn);
- return (result);
-}
-
-/*
- * Test that flopen() can open an existing file.
- */
-const char *
-test_flopen_open(void)
-{
- const char *fn = "test_flopen_open";
- const char *result = NULL;
- int fd;
-
- fd = open(fn, O_RDWR|O_CREAT, 0640);
- if (fd < 0) {
- result = strerror(errno);
- } else {
- close(fd);
- fd = flopen(fn, O_RDWR);
- if (fd < 0) {
- result = strerror(errno);
- } else {
- close(fd);
- }
- }
- unlink(fn);
- return (result);
-}
-
-/*
- * Test that flopen() can lock against itself
- */
-const char *
-test_flopen_lock_self(void)
-{
- const char *fn = "test_flopen_lock_self";
- const char *result = NULL;
- int fd1, fd2;
-
- unlink(fn);
- fd1 = flopen(fn, O_RDWR|O_CREAT, 0640);
- if (fd1 < 0) {
- result = strerror(errno);
- } else {
- fd2 = flopen(fn, O_RDWR|O_NONBLOCK);
- if (fd2 >= 0) {
- result = "second open succeeded";
- close(fd2);
- }
- close(fd1);
- }
- unlink(fn);
- return (result);
-}
-
-/*
- * Test that flopen() can lock against other processes
- */
-const char *
-test_flopen_lock_other(void)
-{
- const char *fn = "test_flopen_lock_other";
- const char *result = NULL;
- volatile int fd1, fd2;
-
- unlink(fn);
- fd1 = flopen(fn, O_RDWR|O_CREAT, 0640);
- if (fd1 < 0) {
- result = strerror(errno);
- } else {
- fd2 = -42;
- if (vfork() == 0) {
- fd2 = flopen(fn, O_RDWR|O_NONBLOCK);
- close(fd2);
- _exit(0);
- }
- if (fd2 == -42)
- result = "vfork() doesn't work as expected";
- if (fd2 >= 0)
- result = "second open succeeded";
- close(fd1);
- }
- unlink(fn);
- return (result);
-}
-
-/*
- * Test that child processes inherit the lock
- */
-const char *
-test_flopen_lock_child(void)
-{
- const char *fn = "test_flopen_lock_child";
- const char *result = NULL;
- pid_t pid;
- volatile int fd1, fd2;
-
- unlink(fn);
- fd1 = flopen(fn, O_RDWR|O_CREAT, 0640);
- if (fd1 < 0) {
- result = strerror(errno);
- } else {
- pid = fork();
- if (pid == -1) {
- result = strerror(errno);
- } else if (pid == 0) {
- select(0, 0, 0, 0, 0);
- _exit(0);
- }
- close(fd1);
- if ((fd2 = flopen(fn, O_RDWR|O_NONBLOCK)) != -1) {
- result = "second open succeeded";
- close(fd2);
- }
- kill(pid, SIGINT);
- }
- unlink(fn);
- return (result);
-}
-
-static struct test {
- const char *name;
- const char *(*func)(void);
-} t[] = {
- { "flopen_create", test_flopen_create },
- { "flopen_open", test_flopen_open },
- { "flopen_lock_self", test_flopen_lock_self },
- { "flopen_lock_other", test_flopen_lock_other },
- { "flopen_lock_child", test_flopen_lock_child },
-};
-
-int
-main(void)
-{
- const char *result;
- int i, nt;
-
- nt = sizeof(t) / sizeof(*t);
- printf("1..%d\n", nt);
- for (i = 0; i < nt; ++i) {
- if ((result = t[i].func()) != NULL)
- printf("not ok %d - %s # %s\n", i + 1,
- t[i].name, result);
- else
- printf("ok %d - %s\n", i + 1,
- t[i].name);
- }
- exit(0);
-}
diff --git a/tools/regression/lib/libutil/test-flopen.t b/tools/regression/lib/libutil/test-flopen.t
deleted file mode 100644
index cbb7c8c..0000000
--- a/tools/regression/lib/libutil/test-flopen.t
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-#
-# $FreeBSD$
-#
-
-base=$(realpath $(dirname $0))
-name=$(basename $0 .t)
-
-set -e
-cd $base
-make -s $name >/dev/null
-exec $base/$name
diff --git a/tools/regression/lib/libutil/test-grp.c b/tools/regression/lib/libutil/test-grp.c
deleted file mode 100644
index ae7ce73..0000000
--- a/tools/regression/lib/libutil/test-grp.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*-
- * Copyright (c) 2008 Sean C. Farley <scf@FreeBSD.org>
- * 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,
- * without modification, immediately at the beginning of the file.
- * 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 AUTHOR ``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 AUTHOR 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/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/types.h>
-#include <errno.h>
-#include <grp.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <libutil.h>
-
-
-/*
- * Static values for building and testing an artificial group.
- */
-static char grpName[] = "groupName";
-static char grpPasswd[] = "groupPwd";
-static gid_t grpGID = 1234;
-static char *grpMems[] = { "mem1", "mem2", "mem3", NULL };
-static const char *origStrGrp = "groupName:groupPwd:1234:mem1,mem2,mem3";
-
-
-/*
- * Build a group to test against without depending on a real group to be found
- * within /etc/group.
- */
-static void
-build_grp(struct group *grp)
-{
- grp->gr_name = grpName;
- grp->gr_passwd = grpPasswd;
- grp->gr_gid = grpGID;
- grp->gr_mem = grpMems;
-
- return;
-}
-
-
-int
-main(void)
-{
- char *strGrp;
- int testNdx;
- struct group *dupGrp;
- struct group *scanGrp;
- struct group origGrp;
-
- /* Setup. */
- printf("1..4\n");
- testNdx = 0;
-
- /* Manually build a group using static values. */
- build_grp(&origGrp);
-
- /* Copy the group. */
- testNdx++;
- if ((dupGrp = gr_dup(&origGrp)) == NULL)
- printf("not ");
- printf("ok %d - %s\n", testNdx, "gr_dup");
-
- /* Compare the original and duplicate groups. */
- testNdx++;
- if (! gr_equal(&origGrp, dupGrp))
- printf("not ");
- printf("ok %d - %s\n", testNdx, "gr_equal");
-
- /* Create group string from the duplicate group structure. */
- testNdx++;
- strGrp = gr_make(dupGrp);
- if (strcmp(strGrp, origStrGrp) != 0)
- printf("not ");
- printf("ok %d - %s\n", testNdx, "gr_make");
-
- /*
- * Create group structure from string and compare it to the original
- * group structure.
- */
- testNdx++;
- if ((scanGrp = gr_scan(strGrp)) == NULL || ! gr_equal(&origGrp,
- scanGrp))
- printf("not ");
- printf("ok %d - %s\n", testNdx, "gr_scan");
-
- /* Clean up. */
- free(scanGrp);
- free(strGrp);
- free(dupGrp);
-
- exit(EXIT_SUCCESS);
-}
diff --git a/tools/regression/lib/libutil/test-grp.t b/tools/regression/lib/libutil/test-grp.t
deleted file mode 100644
index cbb7c8c..0000000
--- a/tools/regression/lib/libutil/test-grp.t
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-#
-# $FreeBSD$
-#
-
-base=$(realpath $(dirname $0))
-name=$(basename $0 .t)
-
-set -e
-cd $base
-make -s $name >/dev/null
-exec $base/$name
diff --git a/tools/regression/lib/libutil/test-humanize_number.c b/tools/regression/lib/libutil/test-humanize_number.c
deleted file mode 100644
index 24f197d..0000000
--- a/tools/regression/lib/libutil/test-humanize_number.c
+++ /dev/null
@@ -1,592 +0,0 @@
-/*-
- * Copyright 2012 Clifton Royston
- * Copyright 2013 John-Mark Gurney
- * 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 AUTHOR 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 AUTHOR 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.
- *
- * $FreeBSD$
- *
- */
-
-#include <sys/types.h>
-#include <stdlib.h>
-#include <libutil.h>
-#include <stdio.h>
-#include <string.h>
-#include <inttypes.h>
-#include <math.h>
-#include <unistd.h>
-#include <limits.h>
-
-extern char * optarg;
-
-#define MAX_STR_FLAGS_RESULT 80
-#define MAX_INT_STR_DIGITS 12
-
-static const int64_t halfExabyte = (int64_t)500*1000*1000*1000*1000*1000L;
-
-static struct {
- int retval;
- const char *res;
- int64_t num;
- int flags;
- int scale;
-} test_args[] = {
- /* tests 0-13 test 1000 suffixes */
- { 2, "0 ", (int64_t)0L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "1 k", (int64_t)500L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "1 M", (int64_t)500*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "1 G", (int64_t)500*1000*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "1 T", (int64_t)500*1000*1000*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "1 P", (int64_t)500*1000*1000*1000*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "1 E", (int64_t)500*1000*1000*1000*1000*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 2, "1 ", (int64_t)1L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "2 k", (int64_t)1500L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "2 M", (int64_t)1500*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "2 G", (int64_t)1500*1000*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "2 T", (int64_t)1500*1000*1000*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "2 P", (int64_t)1500*1000*1000*1000*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "2 E", (int64_t)1500*1000*1000*1000*1000*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
-
- /* tests 14-27 test 1024 suffixes */
- { 2, "0 ", (int64_t)0L, 0, HN_AUTOSCALE },
- { 3, "1 K", (int64_t)512L, 0, HN_AUTOSCALE },
- { 3, "1 M", (int64_t)512*1024L, 0, HN_AUTOSCALE },
- { 3, "1 G", (int64_t)512*1024*1024L, 0, HN_AUTOSCALE },
- { 3, "1 T", (int64_t)512*1024*1024*1024L, 0, HN_AUTOSCALE },
- { 3, "1 P", (int64_t)512*1024*1024*1024*1024L, 0, HN_AUTOSCALE },
- { 3, "1 E", (int64_t)512*1024*1024*1024*1024*1024L, 0, HN_AUTOSCALE },
- { 2, "1 ", (int64_t)1L, 0, HN_AUTOSCALE },
- { 3, "2 K", (int64_t)1536L, 0, HN_AUTOSCALE },
- { 3, "2 M", (int64_t)1536*1024L, 0, HN_AUTOSCALE },
- { 3, "2 G", (int64_t)1536*1024*1024L, 0, HN_AUTOSCALE },
- { 3, "2 T", (int64_t)1536*1024*1024*1024L, 0, HN_AUTOSCALE },
- { 3, "2 P", (int64_t)1536*1024*1024*1024*1024L, 0, HN_AUTOSCALE },
- { 3, "2 E", (int64_t)1536*1024*1024*1024*1024*1024L, 0, HN_AUTOSCALE },
-
- /* tests 28-37 test rounding */
- { 3, "0 M", (int64_t)500*1000L-1, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "1 M", (int64_t)500*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "1 M", (int64_t)1000*1000L + 500*1000L-1, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "2 M", (int64_t)1000*1000L + 500*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 3, "0 K", (int64_t)512L-1, 0, HN_AUTOSCALE },
- { 3, "1 K", (int64_t)512L, 0, HN_AUTOSCALE },
- { 3, "0 M", (int64_t)512*1024L-1, 0, HN_AUTOSCALE },
- { 3, "1 M", (int64_t)512*1024L, 0, HN_AUTOSCALE },
- { 3, "1 M", (int64_t)1024*1024L + 512*1024L-1, 0, HN_AUTOSCALE },
- { 3, "2 M", (int64_t)1024*1024L + 512*1024L, 0, HN_AUTOSCALE },
-
- /* tests 38-61 test specific scale factors with 1000 divisor */
- { 3, "0 k", (int64_t)0L, HN_DIVISOR_1000, 1 },
- { 3, "1 k", (int64_t)500L, HN_DIVISOR_1000, 1 },
- { 3, "0 M", (int64_t)500L, HN_DIVISOR_1000, 2 },
- { 3, "1 M", (int64_t)500*1000L, HN_DIVISOR_1000, 2 },
- { 3, "0 G", (int64_t)500*1000L, HN_DIVISOR_1000, 3 },
- { 3, "1 G", (int64_t)500*1000*1000L, HN_DIVISOR_1000, 3 },
- { 3, "0 T", (int64_t)500*1000*1000L, HN_DIVISOR_1000, 4 },
- { 3, "1 T", (int64_t)500*1000*1000*1000L, HN_DIVISOR_1000, 4 },
- { 3, "0 P", (int64_t)500*1000*1000*1000L, HN_DIVISOR_1000, 5 },
- { 3, "1 P", (int64_t)500*1000*1000*1000*1000L, HN_DIVISOR_1000, 5 },
- { 3, "0 E", (int64_t)500*1000*1000*1000*1000L, HN_DIVISOR_1000, 6 },
- { 3, "1 E", (int64_t)500*1000*1000*1000*1000*1000L, HN_DIVISOR_1000, 6 },
- { 3, "0 k", (int64_t)1L, HN_DIVISOR_1000, 1 },
- { 3, "2 k", (int64_t)1500L, HN_DIVISOR_1000, 1 },
- { 3, "0 M", (int64_t)1500L, HN_DIVISOR_1000, 2 },
- { 3, "2 M", (int64_t)1500*1000L, HN_DIVISOR_1000, 2 },
- { 3, "0 G", (int64_t)1500*1000L, HN_DIVISOR_1000, 3 },
- { 3, "2 G", (int64_t)1500*1000*1000L, HN_DIVISOR_1000, 3 },
- { 3, "0 T", (int64_t)1500*1000*1000L, HN_DIVISOR_1000, 4 },
- { 3, "2 T", (int64_t)1500*1000*1000*1000L, HN_DIVISOR_1000, 4 },
- { 3, "0 P", (int64_t)1500*1000*1000*1000L, HN_DIVISOR_1000, 5 },
- { 3, "2 P", (int64_t)1500*1000*1000*1000*1000L, HN_DIVISOR_1000, 5 },
- { 3, "0 E", (int64_t)1500*1000*1000*1000*1000L, HN_DIVISOR_1000, 6 },
- { 3, "2 E", (int64_t)1500*1000*1000*1000*1000*1000L, HN_DIVISOR_1000, 6 },
-
- /* tests 62-85 test specific scale factors with 1024 divisor */
- { 3, "0 K", (int64_t)0L, 0, 1 },
- { 3, "1 K", (int64_t)512L, 0, 1 },
- { 3, "0 M", (int64_t)512L, 0, 2 },
- { 3, "1 M", (int64_t)512*1024L, 0, 2 },
- { 3, "0 G", (int64_t)512*1024L, 0, 3 },
- { 3, "1 G", (int64_t)512*1024*1024L, 0, 3 },
- { 3, "0 T", (int64_t)512*1024*1024L, 0, 4 },
- { 3, "1 T", (int64_t)512*1024*1024*1024L, 0, 4 },
- { 3, "0 P", (int64_t)512*1024*1024*1024L, 0, 5 },
- { 3, "1 P", (int64_t)512*1024*1024*1024*1024L, 0, 5 },
- { 3, "0 E", (int64_t)512*1024*1024*1024*1024L, 0, 6 },
- { 3, "1 E", (int64_t)512*1024*1024*1024*1024*1024L, 0, 6 },
- { 3, "0 K", (int64_t)1L, 0, 1 },
- { 3, "2 K", (int64_t)1536L, 0, 1 },
- { 3, "0 M", (int64_t)1536L, 0, 2 },
- { 3, "2 M", (int64_t)1536*1024L, 0, 2 },
- { 3, "0 G", (int64_t)1536*1024L, 0, 3 },
- { 3, "2 G", (int64_t)1536*1024*1024L, 0, 3 },
- { 3, "0 T", (int64_t)1536*1024*1024L, 0, 4 },
- { 3, "2 T", (int64_t)1536*1024*1024*1024L, 0, 4 },
- { 3, "0 P", (int64_t)1536*1024*1024*1024L, 0, 5 },
- { 3, "2 P", (int64_t)1536*1024*1024*1024*1024L, 0, 5 },
- { 3, "0 E", (int64_t)1536*1024*1024*1024*1024L, 0, 6 },
- { 3, "2 E", (int64_t)1536*1024*1024*1024*1024*1024L, 0, 6 },
-
- /* tests 86-99 test invalid specific scale values of < 0 or >= 7 with
- and without HN_DIVISOR_1000 set */
- /* all should return errors with new code; with old, the latter 3
- are instead processed as if having AUTOSCALE and/or GETSCALE set */
- { -1, "", (int64_t)1L, 0, 7 },
- { -1, "", (int64_t)1L, HN_DIVISOR_1000, 7 },
- { -1, "", (int64_t)1L, 0, 1000 },
- { -1, "", (int64_t)1L, HN_DIVISOR_1000, 1000 },
- { -1, "", (int64_t)0L, 0, 1000*1000 },
- { -1, "", (int64_t)0L, HN_DIVISOR_1000, 1000*1000 },
- { -1, "", (int64_t)0L, 0, INT_MAX },
- { -1, "", (int64_t)0L, HN_DIVISOR_1000, INT_MAX },
-
- /* Negative scale values are not handled well
- by the existing library routine - should report as error */
- /* all should return errors with new code, fail assertion with old */
-
- { -1, "", (int64_t)1L, 0, -1 },
- { -1, "", (int64_t)1L, HN_DIVISOR_1000, -1 },
- { -1, "", (int64_t)1L, 0, -1000 },
- { -1, "", (int64_t)1L, HN_DIVISOR_1000, -1000 },
-
- /* __INT_MIN doesn't print properly, skipped. */
-
- { -1, "", (int64_t)1L, 0, -__INT_MAX },
- { -1, "", (int64_t)1L, HN_DIVISOR_1000, -__INT_MAX },
-
-
- /* tests for scale == 0, without autoscale */
- /* tests 100-114 test scale 0 with 1000 divisor - print first N digits */
- { 2, "0 ", (int64_t)0L, HN_DIVISOR_1000, 0 },
- { 2, "1 ", (int64_t)1L, HN_DIVISOR_1000, 0 },
- { 3, "10 ", (int64_t)10L, HN_DIVISOR_1000, 0 },
- { 3, "0 M", (int64_t)150L, HN_DIVISOR_1000, HN_NOSPACE },
- { 3, "0 M", (int64_t)500L, HN_DIVISOR_1000, HN_NOSPACE },
- { 3, "0 M", (int64_t)999L, HN_DIVISOR_1000, HN_NOSPACE },
- { 4, "150", (int64_t)150L, HN_DIVISOR_1000, 0 },
- { 4, "500", (int64_t)500L, HN_DIVISOR_1000, 0 },
- { 4, "999", (int64_t)999L, HN_DIVISOR_1000, 0 },
- { 5, "100", (int64_t)1000L, HN_DIVISOR_1000, 0 },
- { 5, "150", (int64_t)1500L, HN_DIVISOR_1000, 0 },
- { 7, "500", (int64_t)500*1000L, HN_DIVISOR_1000, 0 },
- { 8, "150", (int64_t)1500*1000L, HN_DIVISOR_1000, 0 },
- { 10, "500", (int64_t)500*1000*1000L, HN_DIVISOR_1000, 0 },
- { 11, "150", (int64_t)1500*1000*1000L, HN_DIVISOR_1000, 0 },
-
- /* tests 115-126 test scale 0 with 1024 divisor - print first N digits */
- { 2, "0 ", (int64_t)0L, 0, 0 },
- { 2, "1 ", (int64_t)1L, 0, 0 },
- { 3, "10 ", (int64_t)10L, 0, 0 },
- { 4, "150", (int64_t)150L, 0, 0 },
- { 4, "500", (int64_t)500L, 0, 0 },
- { 4, "999", (int64_t)999L, 0, 0 },
- { 5, "100", (int64_t)1000L, 0, 0 },
- { 5, "150", (int64_t)1500L, 0, 0 },
- { 7, "500", (int64_t)500*1000L, 0, 0 },
- { 8, "150", (int64_t)1500*1000L, 0, 0 },
- { 10, "500", (int64_t)500*1000*1000L, 0, 0 },
- { 11, "150", (int64_t)1500*1000*1000L, 0, 0 },
-
- /* Test boundary cases for very large positive/negative number formatting */
- /* Explicit scale, divisor 1024 */
-
- /* XXX = requires length 5 (buflen 6) for some cases*/
- /* KLUDGE - test loop below will bump length 5 up to 5 */
- { 3, "8 E", INT64_MAX, 0, 6 },
- { 4, "-8 E", -INT64_MAX, 0, 6 },
- { 3, "0 E", (int64_t)92*1024*1024*1024*1024*1024L, 0, 6 },
- { 3, "0 E", -(int64_t)92*1024*1024*1024*1024*1024L, 0, 6 },
- { 3, "0 E", (int64_t)82*1024*1024*1024*1024*1024L, 0, 6 },
- { 3, "0 E", -(int64_t)82*1024*1024*1024*1024*1024L, 0, 6 },
- { 3, "0 E", (int64_t)81*1024*1024*1024*1024*1024L, 0, 6 },
- { 3, "0 E", -(int64_t)81*1024*1024*1024*1024*1024L, 0, 6 },
- { 4, "92 P", (int64_t)92*1024*1024*1024*1024*1024L, 0, 5 },
- { 5, "-92 P", -(int64_t)92*1024*1024*1024*1024*1024L, 0, 5 },
- { 4, "82 P", (int64_t)82*1024*1024*1024*1024*1024L, 0, 5 },
- { 5, "-82 P", -(int64_t)82*1024*1024*1024*1024*1024L, 0, 5 },
- { 4, "81 P", (int64_t)81*1024*1024*1024*1024*1024L, 0, 5 },
- { 5, "-81 P", -(int64_t)81*1024*1024*1024*1024*1024L, 0, 5 },
-
- /* Explicit scale, divisor 1000 */
- { 3, "9 E", INT64_MAX, HN_DIVISOR_1000, 6 },
- { 4, "-9 E", -INT64_MAX, HN_DIVISOR_1000, 6 },
- { 3, "0 E", (int64_t)82*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 6 },
- { 3, "0 E", -(int64_t)82*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 6 },
- { 3, "0 E", (int64_t)82*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 6 },
- { 3, "0 E", -(int64_t)82*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 6 },
- { 4, "92 P", (int64_t)82*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 5 },
- { 5, "-92 P", -(int64_t)82*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 5 },
- { 4, "91 P", (int64_t)81*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 5 },
- { 5, "-91 P", -(int64_t)81*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 5 },
-
- /* Autoscale, divisor 1024 */
- { 3, "8 E", INT64_MAX, 0, HN_AUTOSCALE },
- { 4, "-8 E", -INT64_MAX, 0, HN_AUTOSCALE },
- { 4, "92 P", (int64_t)92*1024*1024*1024*1024*1024L, 0, HN_AUTOSCALE },
- { 5, "-92 P", -(int64_t)92*1024*1024*1024*1024*1024L, 0, HN_AUTOSCALE },
- { 4, "82 P", (int64_t)82*1024*1024*1024*1024*1024L, 0, HN_AUTOSCALE },
- { 5, "-82 P", -(int64_t)82*1024*1024*1024*1024*1024L, 0, HN_AUTOSCALE },
- { 4, "81 P", (int64_t)81*1024*1024*1024*1024*1024L, 0, HN_AUTOSCALE },
- { 5, "-81 P", -(int64_t)81*1024*1024*1024*1024*1024L, 0, HN_AUTOSCALE },
- /* Autoscale, divisor 1000 */
- { 3, "9 E", INT64_MAX, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 4, "-9 E", -INT64_MAX, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 4, "92 P", (int64_t)82*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "-92 P", -(int64_t)82*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 4, "91 P", (int64_t)81*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "-91 P", -(int64_t)81*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, HN_AUTOSCALE },
-
- /* 0 scale, divisor 1024 */
- { 12, "skdj", INT64_MAX, 0, 0 },
- { 21, "-9223", -INT64_MAX, 0, 0 },
- { 19, "10358", (int64_t)92*1024*1024*1024*1024*1024L, 0, 0 },
- { 20, "-1035", -(int64_t)92*1024*1024*1024*1024*1024L, 0, 0 },
- { 18, "92323", (int64_t)82*1024*1024*1024*1024*1024L, 0, 0 },
- { 19, "-9232", -(int64_t)82*1024*1024*1024*1024*1024L, 0, 0 },
- { 18, "91197", (int64_t)81*1024*1024*1024*1024*1024L, 0, 0 },
- { 19, "-9119", -(int64_t)81*1024*1024*1024*1024*1024L, 0, 0 },
-
- /* 0 scale, divisor 1000 */
- /* XXX - why does this fail? */
- { -1, "", INT64_MAX, HN_DIVISOR_1000, 0 },
- { 21, "-9223", -INT64_MAX, HN_DIVISOR_1000, 0 },
- { 19, "10358", (int64_t)92*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 0 },
- { 20, "-1035", -(int64_t)92*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 0 },
- { 18, "92323", (int64_t)82*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 0 },
- { 19, "-9232", -(int64_t)82*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 0 },
- /* Expected to pass */
- { 18, "91197", (int64_t)81*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 0 },
- { 19, "-9119", -(int64_t)81*1024*1024*1024*1024*1024L, HN_DIVISOR_1000, 0 },
-
-
-
- /* Need to implement tests for GETSCALE */
-/* { ?, "", (int64_t)0L, HN_DIVISOR_1000, HN_GETSCALE },
- ...
-*/
- /* Tests for HN_DECIMAL */
- /* Positive, Autoscale */
- { 5, "500 k", (int64_t)500*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "994 k", (int64_t)994*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "995 k", (int64_t)995*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "999 k", (int64_t)999*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "1.0 M", (int64_t)1000*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "1.5 M", (int64_t)1500*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "1.9 M", (int64_t)1949*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "2.0 M", (int64_t)1950*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "9.9 M", (int64_t)9949*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 4, "10 M", (int64_t)9950*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "500 M", (int64_t)500*1000*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "994 M", (int64_t)994*1000*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "995 M", (int64_t)995*1000*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "999 M", (int64_t)999*1000*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
-
- { 5, "500 K", (int64_t)500*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "994 K", (int64_t)994*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "995 K", (int64_t)995*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "999 K", (int64_t)999*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "1.0 M", (int64_t)1000*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "1.0 M", (int64_t)1018*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "1.0 M", (int64_t)1019*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "1.5 M", (int64_t)1536*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "1.9 M", (int64_t)1996*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "2.0 M", (int64_t)1997*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "2.0 M", (int64_t)2047*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "2.0 M", (int64_t)2048*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "2.0 M", (int64_t)2099*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "2.1 M", (int64_t)2100*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "9.9 M", (int64_t)10188*1024L, HN_DECIMAL, HN_AUTOSCALE },
- /* XXX - shouldn't the following two be "10. M"? */
- { 4, "10 M", (int64_t)10189*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 4, "10 M", (int64_t)10240*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "500 M", (int64_t)500*1024*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "994 M", (int64_t)994*1024*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "995 M", (int64_t)995*1024*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "999 M", (int64_t)999*1024*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "1.0 G", (int64_t)1000*1024*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "1.0 G", (int64_t)1023*1024*1024L, HN_DECIMAL, HN_AUTOSCALE },
-
- /* Negative, Autoscale - should pass */
- { 6, "-1.5 ", -(int64_t)1500*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 6, "-1.9 ", -(int64_t)1949*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 6, "-9.9 ", -(int64_t)9949*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
-
- { 6, "-1.5 ", -(int64_t)1536*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 6, "-1.9 ", -(int64_t)1949*1024L, HN_DECIMAL, HN_AUTOSCALE },
- { 6, "-9.7 ", -(int64_t)9949*1024L, HN_DECIMAL, HN_AUTOSCALE },
-
- /* Positive/negative, at maximum scale */
- { 5, "500 P", (int64_t)500*1000*1000*1000*1000*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "1.9 E", (int64_t)1949*1000*1000*1000*1000*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "8.9 E", (int64_t)8949*1000*1000*1000*1000*1000L, HN_DIVISOR_1000, HN_AUTOSCALE },
- { 5, "9.2 E", INT64_MAX, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- /* Negatives work with latest rev only: */
- { 6, "-9.2 ", -INT64_MAX, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
- { 6, "-8.9 ", -(int64_t)8949*1000*1000*1000*1000*1000L, HN_DECIMAL|HN_DIVISOR_1000, HN_AUTOSCALE },
-
- { 5, "8.0 E", INT64_MAX, HN_DECIMAL, HN_AUTOSCALE },
- { 5, "7.9 E", INT64_MAX-(int64_t)100*1024*1024*1024*1024*1024LL, HN_DECIMAL, HN_AUTOSCALE },
- { 6, "-8.0 ", -INT64_MAX, HN_DECIMAL, HN_AUTOSCALE },
- { 6, "-7.9 ", -INT64_MAX+(int64_t)100*1024*1024*1024*1024*1024LL, HN_DECIMAL, HN_AUTOSCALE },
-
- /* Positive, Fixed scales */
- { 5, "500 k", (int64_t)500*1000L, HN_DECIMAL|HN_DIVISOR_1000, 1 },
- { 5, "0.5 M", (int64_t)500*1000L, HN_DECIMAL|HN_DIVISOR_1000, 2 },
- { 5, "949 k", (int64_t)949*1000L, HN_DECIMAL|HN_DIVISOR_1000, 1 },
- { 5, "0.9 M", (int64_t)949*1000L, HN_DECIMAL|HN_DIVISOR_1000, 2 },
- { 5, "950 k", (int64_t)950*1000L, HN_DECIMAL|HN_DIVISOR_1000, 1 },
- { 5, "1.0 M", (int64_t)950*1000L, HN_DECIMAL|HN_DIVISOR_1000, 2 },
- { 5, "999 k", (int64_t)999*1000L, HN_DECIMAL|HN_DIVISOR_1000, 1 },
- { 5, "1.0 M", (int64_t)999*1000L, HN_DECIMAL|HN_DIVISOR_1000, 2 },
- { 5, "1.5 M", (int64_t)1500*1000L, HN_DECIMAL|HN_DIVISOR_1000, 2 },
- { 5, "1.9 M", (int64_t)1949*1000L, HN_DECIMAL|HN_DIVISOR_1000, 2 },
- { 5, "2.0 M", (int64_t)1950*1000L, HN_DECIMAL|HN_DIVISOR_1000, 2 },
- { 5, "9.9 M", (int64_t)9949*1000L, HN_DECIMAL|HN_DIVISOR_1000, 2 },
- { 4, "10 M", (int64_t)9950*1000L, HN_DECIMAL|HN_DIVISOR_1000, 2 },
- { 5, "500 M", (int64_t)500*1000*1000L, HN_DECIMAL|HN_DIVISOR_1000, 2 },
- { 5, "0.5 G", (int64_t)500*1000*1000L, HN_DECIMAL|HN_DIVISOR_1000, 3 },
- { 5, "999 M", (int64_t)999*1000*1000L, HN_DECIMAL|HN_DIVISOR_1000, 2 },
- { 5, "1.0 G", (int64_t)999*1000*1000L, HN_DECIMAL|HN_DIVISOR_1000, 3 },
- /* Positive/negative, at maximum scale */
- { 5, "500 P", (int64_t)500*1000*1000*1000*1000*1000L, HN_DIVISOR_1000, 5 },
- { 5, "1.0 E", (int64_t)500*1000*1000*1000*1000*1000L, HN_DIVISOR_1000, 6 },
- { 5, "1.9 E", (int64_t)1949*1000*1000*1000*1000*1000L, HN_DIVISOR_1000, 6 },
- { 5, "8.9 E", (int64_t)8949*1000*1000*1000*1000*1000L, HN_DIVISOR_1000, 6 },
- { 5, "9.2 E", INT64_MAX, HN_DECIMAL|HN_DIVISOR_1000, 6 },
-
- /* HN_DECIMAL + binary + fixed scale cases not completed */
- { 5, "512 K", (int64_t)512*1024L, HN_DECIMAL, 1 },
- { 5, "0.5 M", (int64_t)512*1024L, HN_DECIMAL, 2 },
-
- /* Negative, Fixed scales */
- /* Not yet added, but should work with latest rev */
-
-};
-
-
-/* Command line options usage */
-static void
-usage(char * progname) {
- printf("%s: tests libutil humanize_number function\n", progname);
- printf("Usage: %s [-nE] [-l num] [-v]\n\n", progname);
- printf("Options:\n");
- printf("\t-l num\tSet max length for result; buflen = num + 1\n");
- printf("\t\t (NOTE: does not change expected result strings.)\n");
- printf("\t-n\tInclude negative scale tests, which cause older libutil\n");
- printf("\t\t version of function to coredump with assertion failure\n");
- printf("\t-E\tInclude numbers > 1/2 Exa[byte] which currently fail\n");
- printf("\t-v\tVerbose - always print summary results\n");
- printf("\t-h, -?\tShow options\n");
-}
-
-/* Parse command line options */
-static void
-read_options(int argc, char * const argv[], size_t *bufLength,
- int *includeNegativeScale, int *includeExabytes, int *verbose) {
- int ch;
- size_t temp;
-
- while ((ch = getopt(argc, argv, "nEh?vl:")) != -1) {
- switch (ch) {
- default:
- usage(argv[0]);
- exit(1);
- break; /* UNREACHABLE */
- case 'h' :
- case '?' :
- usage(argv[0]);
- exit(0);
- break; /* UNREACHABLE */
- case 'l' :
- sscanf(optarg, "%zu", &temp);
- *bufLength = temp + 1;
- break;
- case 'n' :
- *includeNegativeScale = 1;
- break;
- case 'E' :
- *includeExabytes = 1;
- break;
- case 'v' :
- *verbose = 1;
- break;
- }
- }
-}
-
-static struct {
- int value;
- const char *name;
- } flags[] = {
- { HN_AUTOSCALE, "HN_AUTOSCALE" },
- { HN_GETSCALE, "HN_GETSCALE" },
- { HN_DIVISOR_1000, "HN_DIVISOR_1000"},
- { HN_B, "HN_B"},
- { HN_DECIMAL, "HN_DECIMAL"},
-};
-
-static const char *separator = "|";
-
-/* Format flags parameter for meaningful display */
-static char *
-str_flags(int hn_flags, char *noFlags) {
- size_t i;
- char * result;
-
- result = malloc(MAX_STR_FLAGS_RESULT);
- result[0] = '\0';
-
- for (i = 0; i < sizeof flags / sizeof *flags; i++) {
- if (hn_flags & flags[i].value) {
- if (*result != 0)
- strlcat(result, separator,
- MAX_STR_FLAGS_RESULT);
- strlcat(result, flags[i].name, MAX_STR_FLAGS_RESULT);
- }
- }
-
- if (strlen(result) == 0)
- strlcat(result, noFlags, MAX_STR_FLAGS_RESULT);
- return result;
-}
-
-
-/* Format scale parameter for meaningful display */
-static char *
-str_scale(int scale) {
- char *result;
-
- if (scale == HN_AUTOSCALE || scale == HN_GETSCALE)
- return str_flags(scale, "");
-
- result = malloc(MAX_INT_STR_DIGITS);
- result[0] = '\0';
- snprintf(result, MAX_INT_STR_DIGITS, "%d", scale);
- return result;
-}
-
-static void
-testskipped(size_t i)
-{
-
- printf("ok %lu # skip - not turned on\n", i);
-}
-
-int
-main(int argc, char * const argv[])
-{
- char *buf;
- char *flag_str, *scale_str;
- size_t i;
- size_t errcnt, tested, skipped;
- int r;
- size_t buflen;
- int includeNegScale;
- int includeExabyteTests;
- int verbose;
-
- buflen = 4;
- includeNegScale = 0;
- includeExabyteTests = 0;
- verbose = 0;
-
- read_options(argc, argv, &buflen, &includeNegScale,
- &includeExabyteTests, &verbose);
-
- buf = malloc(buflen);
- errcnt = 0;
- tested = 0;
- skipped = 0;
-
- if (buflen != 4)
- printf("Warning: buffer size %zu != 4, expect some results to differ.\n", buflen);
-
- printf("1..%lu\n", sizeof test_args / sizeof *test_args);
- for (i = 0; i < sizeof test_args / sizeof *test_args; i++) {
- /* KLUDGE */
- if (test_args[i].num == INT64_MAX && buflen == 4) {
- /* Start final tests which require buffer of 6 */
- free(buf);
- buflen = 6;
- buf = malloc(buflen);
- if (verbose)
- printf("Buffer length increased to %zu\n",
- buflen);
- }
-
- if (test_args[i].scale < 0 && ! includeNegScale) {
- skipped++;
- testskipped(i);
- continue;
- }
- if (test_args[i].num >= halfExabyte && ! includeExabyteTests) {
- skipped++;
- testskipped(i);
- continue;
- }
-
- r = humanize_number(buf, buflen, test_args[i].num, "",
- test_args[i].scale, test_args[i].flags);
- flag_str = str_flags(test_args[i].flags, "[no flags]");
- scale_str = str_scale(test_args[i].scale);
-
- if (r != test_args[i].retval) {
- if (verbose)
- printf("wrong return value on index %lu, buflen: %zu, got: %d + \"%s\", expected %d + \"%s\"; num = %" PRId64 ", scale = %s, flags= %s.\n",
- i, buflen, r, buf, test_args[i].retval,
- test_args[i].res, test_args[i].num,
- scale_str, flag_str);
- else
- printf("not ok %lu # return %d != %d\n", i, r,
- test_args[i].retval);
- errcnt++;
- } else if (strcmp(buf, test_args[i].res) != 0) {
- if (verbose)
- printf("result mismatch on index %lu, got: \"%s\", expected \"%s\"; num = %" PRId64 ", scale = %s, flags= %s.\n",
- i, buf, test_args[i].res, test_args[i].num,
- scale_str, flag_str);
- else
- printf("not ok %lu # buf \"%s\" != \"%s\"\n", i,
- buf, test_args[i].res);
- errcnt++;
- } else {
- if (verbose)
- printf("successful result on index %lu, returned %d, got: \"%s\"; num = %" PRId64 ", scale = %s, flags= %s.\n",
- i, r, buf, test_args[i].num, scale_str,
- flag_str);
- else
- printf("ok %lu\n", i);
- }
- tested++;
- }
-
- if (verbose)
- printf("total errors: %lu/%lu tests, %lu skipped\n", errcnt,
- tested, skipped);
-
- if (errcnt)
- return 1;
-
- return 0;
-}
diff --git a/tools/regression/lib/libutil/test-humanize_number.t b/tools/regression/lib/libutil/test-humanize_number.t
deleted file mode 100755
index 516bc4c..0000000
--- a/tools/regression/lib/libutil/test-humanize_number.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable && echo humanize_numbers ok
diff --git a/tools/regression/lib/libutil/test-pidfile.c b/tools/regression/lib/libutil/test-pidfile.c
deleted file mode 100644
index 0b70bc8..0000000
--- a/tools/regression/lib/libutil/test-pidfile.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/*-
- * Copyright (c) 2007-2009 Dag-Erling Coïdan Smørgrav
- * 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
- * in this position and unchanged.
- * 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 AUTHOR 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 AUTHOR 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/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/wait.h>
-
-#include <fcntl.h>
-#include <errno.h>
-#include <signal.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <libutil.h>
-
-/*
- * We need a signal handler so kill(2) will interrupt our child's
- * select(2) instead of killing it.
- */
-static void
-signal_handler(int sig)
-{
- (void)sig;
-}
-
-/*
- * Test that pidfile_open() can create a pidfile and that pidfile_write()
- * can write to it.
- */
-static const char *
-test_pidfile_uncontested(void)
-{
- const char *fn = "test_pidfile_uncontested";
- struct pidfh *pf;
- pid_t other = 0;
-
- unlink(fn);
- pf = pidfile_open(fn, 0600, &other);
- if (pf == NULL && other != 0)
- return ("pidfile exists and is locked");
- if (pf == NULL)
- return (strerror(errno));
- if (pidfile_write(pf) != 0) {
- pidfile_close(pf);
- unlink(fn);
- return ("failed to write PID");
- }
- pidfile_close(pf);
- unlink(fn);
- return (NULL);
-}
-
-/*
- * Test that pidfile_open() locks against self.
- */
-static const char *
-test_pidfile_self(void)
-{
- const char *fn = "test_pidfile_self";
- struct pidfh *pf1, *pf2;
- pid_t other = 0;
- int serrno;
-
- unlink(fn);
- pf1 = pidfile_open(fn, 0600, &other);
- if (pf1 == NULL && other != 0)
- return ("pidfile exists and is locked");
- if (pf1 == NULL)
- return (strerror(errno));
- if (pidfile_write(pf1) != 0) {
- serrno = errno;
- pidfile_close(pf1);
- unlink(fn);
- return (strerror(serrno));
- }
- // second open should fail
- pf2 = pidfile_open(fn, 0600, &other);
- if (pf2 != NULL) {
- pidfile_close(pf1);
- pidfile_close(pf2);
- unlink(fn);
- return ("managed to opened pidfile twice");
- }
- if (other != getpid()) {
- pidfile_close(pf1);
- unlink(fn);
- return ("pidfile contained wrong PID");
- }
- pidfile_close(pf1);
- unlink(fn);
- return (NULL);
-}
-
-/*
- * Common code for test_pidfile_{contested,inherited}.
- */
-static const char *
-common_test_pidfile_child(const char *fn, int parent_open)
-{
- struct pidfh *pf = NULL;
- pid_t other = 0, pid = 0;
- int fd[2], serrno, status;
- char ch;
-
- unlink(fn);
- if (pipe(fd) != 0)
- return (strerror(errno));
-
- if (parent_open) {
- pf = pidfile_open(fn, 0600, &other);
- if (pf == NULL && other != 0)
- return ("pidfile exists and is locked");
- if (pf == NULL)
- return (strerror(errno));
- }
-
- pid = fork();
- if (pid == -1)
- return (strerror(errno));
- if (pid == 0) {
- // child
- close(fd[0]);
- signal(SIGINT, signal_handler);
- if (!parent_open) {
- pf = pidfile_open(fn, 0600, &other);
- if (pf == NULL && other != 0)
- return ("pidfile exists and is locked");
- if (pf == NULL)
- return (strerror(errno));
- }
- if (pidfile_write(pf) != 0) {
- serrno = errno;
- pidfile_close(pf);
- unlink(fn);
- return (strerror(serrno));
- }
- if (pf == NULL)
- _exit(1);
- if (pidfile_write(pf) != 0)
- _exit(1);
- if (write(fd[1], "*", 1) != 1)
- _exit(1);
- select(0, 0, 0, 0, 0);
- _exit(0);
- }
- // parent
- close(fd[1]);
- if (pf)
- pidfile_close(pf);
-
- // wait for the child to signal us
- if (read(fd[0], &ch, 1) != 1) {
- serrno = errno;
- unlink(fn);
- kill(pid, SIGTERM);
- errno = serrno;
- return (strerror(errno));
- }
-
- // We shouldn't be able to lock the same pidfile as our child
- pf = pidfile_open(fn, 0600, &other);
- if (pf != NULL) {
- pidfile_close(pf);
- unlink(fn);
- return ("managed to lock contested pidfile");
- }
-
- // Failed to lock, but not because it was contested
- if (other == 0) {
- unlink(fn);
- return (strerror(errno));
- }
-
- // Locked by the wrong process
- if (other != pid) {
- unlink(fn);
- return ("pidfile contained wrong PID");
- }
-
- // check our child's fate
- if (pf)
- pidfile_close(pf);
- unlink(fn);
- if (kill(pid, SIGINT) != 0)
- return (strerror(errno));
- if (waitpid(pid, &status, 0) == -1)
- return (strerror(errno));
- if (WIFSIGNALED(status))
- return ("child caught signal");
- if (WEXITSTATUS(status) != 0)
- return ("child returned non-zero status");
-
- // success
- return (NULL);
-}
-
-/*
- * Test that pidfile_open() fails when attempting to open a pidfile that
- * is already locked, and that it returns the correct PID.
- */
-static const char *
-test_pidfile_contested(void)
-{
- const char *fn = "test_pidfile_contested";
- const char *result;
-
- result = common_test_pidfile_child(fn, 0);
- return (result);
-}
-
-/*
- * Test that the pidfile lock is inherited.
- */
-static const char *
-test_pidfile_inherited(void)
-{
- const char *fn = "test_pidfile_inherited";
- const char *result;
-
- result = common_test_pidfile_child(fn, 1);
- return (result);
-}
-
-static struct test {
- const char *name;
- const char *(*func)(void);
-} t[] = {
- { "pidfile_uncontested", test_pidfile_uncontested },
- { "pidfile_self", test_pidfile_self },
- { "pidfile_contested", test_pidfile_contested },
- { "pidfile_inherited", test_pidfile_inherited },
-};
-
-int
-main(void)
-{
- const char *result;
- int i, nt;
-
- nt = sizeof(t) / sizeof(*t);
- printf("1..%d\n", nt);
- for (i = 0; i < nt; ++i) {
- if ((result = t[i].func()) != NULL)
- printf("not ok %d - %s # %s\n", i + 1,
- t[i].name, result);
- else
- printf("ok %d - %s\n", i + 1,
- t[i].name);
- }
- exit(0);
-}
diff --git a/tools/regression/lib/libutil/test-trimdomain-nodomain.c b/tools/regression/lib/libutil/test-trimdomain-nodomain.c
deleted file mode 100644
index c02ccdb..0000000
--- a/tools/regression/lib/libutil/test-trimdomain-nodomain.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2005 Brooks Davis. 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 AUTHOR 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 AUTHOR 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/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <errno.h>
-#include <libutil.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define TESTDOMAIN ""
-#define TESTHOST "testhost"
-#define TESTFQDN "testhost" TESTDOMAIN
-
-int failures = 0;
-int tests = 0;
-
-/*
- * Evily override gethostname(3) so trimdomain always gets the same result.
- * This makes the tests much easier to write and less likely to fail on
- * oddly configured systems.
- */
-int
-gethostname(char *name, size_t namelen)
-{
- if (strlcpy(name, TESTFQDN, namelen) > namelen) {
- errno = ENAMETOOLONG;
- return (-1);
- }
- return (0);
-}
-
-void
-testit(const char *input, int hostsize, const char *output, const char *test)
-{
- char *testhost;
- const char *expected = (output == NULL) ? input : output;
-
- testhost = strdup(input);
- trimdomain(testhost, hostsize < 0 ? (int)strlen(testhost) : hostsize);
- tests++;
- if (strcmp(testhost, expected) != 0) {
- printf("not ok %d - %s\n", tests, test);
- printf("# %s -> %s (expected %s)\n", input, testhost, expected);
- } else
- printf("ok %d - %s\n", tests, test);
- free(testhost);
- return;
-}
-
-int
-main(void)
-{
-
- printf("1..5\n");
-
- testit(TESTFQDN, -1, TESTHOST, "self");
- testit("XXX" TESTDOMAIN, -1, "XXX", "different host, same domain");
- testit("XXX" TESTDOMAIN, 1, NULL, "short hostsize");
- testit("bogus.example.net", -1, NULL, "arbitrary host");
- testit("XXX." TESTFQDN, -1, NULL, "domain is local hostname");
-
- return (0);
-}
diff --git a/tools/regression/lib/libutil/test-trimdomain-nodomain.t b/tools/regression/lib/libutil/test-trimdomain-nodomain.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/libutil/test-trimdomain-nodomain.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/libutil/test-trimdomain.c b/tools/regression/lib/libutil/test-trimdomain.c
deleted file mode 100644
index 08fcfc0..0000000
--- a/tools/regression/lib/libutil/test-trimdomain.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2005 Brooks Davis. 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 AUTHOR 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 AUTHOR 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/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <errno.h>
-#include <libutil.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define TESTDOMAIN ".domain.example.com"
-#define TESTHOST "testhost"
-#define TESTFQDN "testhost" TESTDOMAIN
-
-int failures = 0;
-int tests = 0;
-
-/*
- * Evily override gethostname(3) so trimdomain always gets the same result.
- * This makes the tests much easier to write and less likely to fail on
- * oddly configured systems.
- */
-int
-gethostname(char *name, size_t namelen)
-{
- if (strlcpy(name, TESTFQDN, namelen) > namelen) {
- errno = ENAMETOOLONG;
- return (-1);
- }
- return (0);
-}
-
-void
-testit(const char *input, int hostsize, const char *output, const char *test)
-{
- char *testhost;
- const char *expected = (output == NULL) ? input : output;
-
- testhost = strdup(input);
- trimdomain(testhost, hostsize < 0 ? (int)strlen(testhost) : hostsize);
- tests++;
- if (strcmp(testhost, expected) != 0) {
- printf("not ok %d - %s\n", tests, test);
- printf("# %s -> %s (expected %s)\n", input, testhost, expected);
- } else
- printf("ok %d - %s\n", tests, test);
- free(testhost);
- return;
-}
-
-int
-main(void)
-{
-
- printf("1..5\n");
-
- testit(TESTFQDN, -1, TESTHOST, "self");
- testit("XXX" TESTDOMAIN, -1, "XXX", "different host, same domain");
- testit("XXX" TESTDOMAIN, 1, NULL, "short hostsize");
- testit("bogus.example.net", -1, NULL, "arbitrary host");
- testit("XXX." TESTFQDN, -1, NULL, "domain is local hostname");
-
- return (0);
-}
diff --git a/tools/regression/lib/libutil/test-trimdomain.t b/tools/regression/lib/libutil/test-trimdomain.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/libutil/test-trimdomain.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
OpenPOWER on IntegriCloud