summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authormike <mike@FreeBSD.org>2002-12-18 16:59:08 +0000
committermike <mike@FreeBSD.org>2002-12-18 16:59:08 +0000
commit6ff2965718e70f018e1f4dfe9c2dbbcc09a93656 (patch)
tree8da937172b292663e8732463ca4bb418fdcb9d4d /tools
parent91ae3fa45da5b963b386ec2315195c8a46fca992 (diff)
downloadFreeBSD-src-6ff2965718e70f018e1f4dfe9c2dbbcc09a93656.zip
FreeBSD-src-6ff2965718e70f018e1f4dfe9c2dbbcc09a93656.tar.gz
Add regression test for strerror()/strerror_r().
Based on: src/lib/libc/string/strerror.c (rev 1.8)
Diffstat (limited to 'tools')
-rw-r--r--tools/regression/lib/libc/string/Makefile11
-rw-r--r--tools/regression/lib/libc/string/test-strerror.c130
2 files changed, 141 insertions, 0 deletions
diff --git a/tools/regression/lib/libc/string/Makefile b/tools/regression/lib/libc/string/Makefile
new file mode 100644
index 0000000..5c136e9
--- /dev/null
+++ b/tools/regression/lib/libc/string/Makefile
@@ -0,0 +1,11 @@
+# $FreeBSD$
+
+TESTS= test-strerror
+
+.PHONY: tests
+tests: ${TESTS}
+ for p in ${TESTS}; do ${.OBJDIR}/$$p; done
+
+.PHONY: clean
+clean:
+ -rm -f ${TESTS}
diff --git a/tools/regression/lib/libc/string/test-strerror.c b/tools/regression/lib/libc/string/test-strerror.c
new file mode 100644
index 0000000..375ca64
--- /dev/null
+++ b/tools/regression/lib/libc/string/test-strerror.c
@@ -0,0 +1,130 @@
+/*-
+ * Copyright (c) 2001 Wes Peters <wes@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.
+ * 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 <assert.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main(void)
+{
+ char buf[64];
+ char *sret;
+ int iret;
+
+ /*
+ * strerror() failure tests.
+ */
+ errno = 0;
+ sret = strerror(0);
+ assert(strcmp(sret, "Unknown error: 0") == 0);
+ assert(errno == EINVAL);
+
+ errno = 0;
+ sret = strerror(INT_MAX);
+ snprintf(buf, sizeof(buf), "Unknown error: %d", INT_MAX);
+ assert(strcmp(sret, buf) == 0);
+ assert(errno == EINVAL);
+
+ /*
+ * strerror() success tests.
+ */
+ errno = 0;
+ sret = strerror(EPERM);
+ assert(strcmp(sret, "Operation not permitted") == 0);
+ assert(errno == 0);
+
+ errno = 0;
+ sret = strerror(EPFNOSUPPORT);
+ assert(strcmp(sret, "Protocol family not supported") == 0);
+ assert(errno == 0);
+
+ errno = 0;
+ sret = strerror(ELAST);
+ assert(errno == 0);
+
+ printf("PASS strerror()\n");
+
+ /*
+ * strerror_r() failure tests.
+ */
+ memset(buf, '*', sizeof(buf));
+ iret = strerror_r(0, buf, sizeof(buf));
+ assert(strcmp(buf, "Unknown error: 0") == 0);
+ assert(iret == EINVAL);
+
+ memset(buf, '*', sizeof(buf));
+ /* One byte too short. */
+ iret = strerror_r(EPERM, buf, strlen("Operation not permitted"));
+ assert(strcmp(buf, "Operation not permitte") == 0);
+ assert(iret == ERANGE);
+
+ memset(buf, '*', sizeof(buf));
+ /* One byte too short. */
+ iret = strerror_r(-1, buf, strlen("Unknown error: -1"));
+ assert(strcmp(buf, "Unknown error: -") == 0);
+ assert(iret == EINVAL);
+
+ memset(buf, '*', sizeof(buf));
+ /* Two bytes too short. */
+ iret = strerror_r(-2, buf, strlen("Unknown error: -2") - 1);
+ assert(strcmp(buf, "Unknown error: ") == 0);
+ assert(iret == EINVAL);
+
+ memset(buf, '*', sizeof(buf));
+ /* Three bytes too short. */
+ iret = strerror_r(-2, buf, strlen("Unknown error: -2") - 2);
+ assert(strcmp(buf, "Unknown error:") == 0);
+ assert(iret == EINVAL);
+
+ memset(buf, '*', sizeof(buf));
+ /* One byte too short. */
+ iret = strerror_r(12345, buf, strlen("Unknown error: 12345"));
+ assert(strcmp(buf, "Unknown error: 1234") == 0);
+ assert(iret == EINVAL);
+
+ /*
+ * strerror_r() success tests.
+ */
+ memset(buf, '*', sizeof(buf));
+ iret = strerror_r(EDEADLK, buf, sizeof(buf));
+ assert(strcmp(buf, "Resource deadlock avoided") == 0);
+ assert(iret == 0);
+
+ memset(buf, '*', sizeof(buf));
+ iret = strerror_r(EPROCLIM, buf, sizeof(buf));
+ assert(strcmp(buf, "Too many processes") == 0);
+ assert(iret == 0);
+
+ printf("PASS strerror_r()\n");
+
+ exit(0);
+}
OpenPOWER on IntegriCloud