Wed Nov 3 16:09:44 2010 UTC ()
add a clearenv test.


(christos)
diff -r1.4 -r1.5 src/tests/lib/libc/stdlib/t_environment.c

cvs diff -r1.4 -r1.5 src/tests/lib/libc/stdlib/Attic/t_environment.c (expand / switch to unified diff)

--- src/tests/lib/libc/stdlib/Attic/t_environment.c 2010/10/25 20:35:36 1.4
+++ src/tests/lib/libc/stdlib/Attic/t_environment.c 2010/11/03 16:09:43 1.5
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: t_environment.c,v 1.4 2010/10/25 20:35:36 njoly Exp $ */ 1/* $NetBSD: t_environment.c,v 1.5 2010/11/03 16:09:43 christos Exp $ */
2/*- 2/*-
3 * Copyright (c) 2010 The NetBSD Foundation, Inc. 3 * Copyright (c) 2010 The NetBSD Foundation, Inc.
4 * All rights reserved. 4 * All rights reserved.
5 * 5 *
6 * This code is derived from software contributed to The NetBSD Foundation 6 * This code is derived from software contributed to The NetBSD Foundation
7 * by Christos Zoulas 7 * by Christos Zoulas
8 * 8 *
9 * Redistribution and use in source and binary forms, with or without 9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions 10 * modification, are permitted provided that the following conditions
11 * are met: 11 * are met:
12 * 12 *
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
@@ -22,49 +22,56 @@ @@ -22,49 +22,56 @@
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 24 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 25 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
26 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
30 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE. 31 * SUCH DAMAGE.
32 */ 32 */
33 33
34#include <sys/cdefs.h> 34#include <sys/cdefs.h>
35__RCSID("$NetBSD: t_environment.c,v 1.4 2010/10/25 20:35:36 njoly Exp $"); 35__RCSID("$NetBSD: t_environment.c,v 1.5 2010/11/03 16:09:43 christos Exp $");
36 36
37#include <atf-c.h> 37#include <atf-c.h>
38#include <errno.h> 38#include <errno.h>
39#include <stdio.h> 39#include <stdio.h>
40#include <stdlib.h> 40#include <stdlib.h>
41#include <string.h> 41#include <string.h>
42 42
43ATF_TC(t_setenv); 43ATF_TC(t_setenv);
44ATF_TC(t_putenv); 44ATF_TC(t_putenv);
 45ATF_TC(t_clearenv);
45 46
46ATF_TC_HEAD(t_setenv, tc) 47ATF_TC_HEAD(t_setenv, tc)
47{ 48{
48 atf_tc_set_md_var(tc, "descr", 49 atf_tc_set_md_var(tc, "descr",
49 "Test setenv(3), getenv(3), unsetenv(3)"); 50 "Test setenv(3), getenv(3), unsetenv(3)");
50} 51}
51 52
52ATF_TC_HEAD(t_putenv, tc) 53ATF_TC_HEAD(t_putenv, tc)
53{ 54{
54 atf_tc_set_md_var(tc, "descr", 55 atf_tc_set_md_var(tc, "descr",
55 "Test putenv(3), getenv(3), unsetenv(3)"); 56 "Test putenv(3), getenv(3), unsetenv(3)");
56} 57}
57 58
 59ATF_TC_HEAD(t_clearenv, tc)
 60{
 61 atf_tc_set_md_var(tc, "descr",
 62 "Test user clearing environment directly");
 63}
 64
58ATF_TC_BODY(t_setenv, tc) 65ATF_TC_BODY(t_setenv, tc)
59{ 66{
60 size_t i; 67 size_t i;
61 char name[1024]; 68 char name[1024];
62 char value[1024]; 69 char value[1024];
63 for (i = 0; i < 10240; i++) { 70 for (i = 0; i < 10240; i++) {
64 snprintf(name, sizeof(name), "var%zu", i); 71 snprintf(name, sizeof(name), "var%zu", i);
65 snprintf(value, sizeof(value), "value%ld", lrand48()); 72 snprintf(value, sizeof(value), "value%ld", lrand48());
66 setenv(name, value, 1); 73 setenv(name, value, 1);
67 ATF_CHECK_STREQ(getenv(name), value); 74 ATF_CHECK_STREQ(getenv(name), value);
68 } 75 }
69 76
70 for (i = 0; i < 10240; i++) { 77 for (i = 0; i < 10240; i++) {
@@ -87,24 +94,50 @@ ATF_TC_BODY(t_putenv, tc) @@ -87,24 +94,50 @@ ATF_TC_BODY(t_putenv, tc)
87 char string[1024]; 94 char string[1024];
88 95
89 snprintf(string, sizeof(string), "crap=true"); 96 snprintf(string, sizeof(string), "crap=true");
90 ATF_CHECK(putenv(string) != -1); 97 ATF_CHECK(putenv(string) != -1);
91 ATF_CHECK_STREQ(getenv("crap"), "true"); 98 ATF_CHECK_STREQ(getenv("crap"), "true");
92 string[1] = 'l'; 99 string[1] = 'l';
93 ATF_CHECK_STREQ(getenv("clap"), "true"); 100 ATF_CHECK_STREQ(getenv("clap"), "true");
94 ATF_CHECK(getenv("crap") == NULL); 101 ATF_CHECK(getenv("crap") == NULL);
95 string[1] = 'r'; 102 string[1] = 'r';
96 unsetenv("crap"); 103 unsetenv("crap");
97 ATF_CHECK(getenv("crap") == NULL); 104 ATF_CHECK(getenv("crap") == NULL);
98 105
99 ATF_CHECK_ERRNO(EINVAL, putenv(NULL) == -1); 106 ATF_CHECK_ERRNO(EINVAL, putenv(NULL) == -1);
100 ATF_CHECK_ERRNO(EINVAL, putenv("val") == -1); 107 ATF_CHECK_ERRNO(EINVAL, putenv(__UNCONST("val")) == -1);
101 ATF_CHECK_ERRNO(EINVAL, putenv("=val") == -1); 108 ATF_CHECK_ERRNO(EINVAL, putenv(__UNCONST("=val")) == -1);
 109}
 110
 111extern char **environ;
 112
 113ATF_TC_BODY(t_clearenv, tc)
 114{
 115 char name[1024], value[1024];
 116
 117 for (size_t i = 0; i < 1024; i++) {
 118 snprintf(name, sizeof(name), "crap%zu", i);
 119 snprintf(value, sizeof(value), "%zu", i);
 120 ATF_CHECK(setenv(name, value, 1) != -1);
 121 }
 122
 123 *environ = NULL;
 124
 125 for (size_t i = 0; i < 1; i++) {
 126 snprintf(name, sizeof(name), "crap%zu", i);
 127 snprintf(value, sizeof(value), "%zu", i);
 128 ATF_CHECK(setenv(name, value, 1) != -1);
 129 }
 130
 131 ATF_CHECK_STREQ(getenv("crap0"), "0");
 132 ATF_CHECK(getenv("crap1") == NULL);
 133 ATF_CHECK(getenv("crap2") == NULL);
102} 134}
103 135
104ATF_TP_ADD_TCS(tp) 136ATF_TP_ADD_TCS(tp)
105{ 137{
106 ATF_TP_ADD_TC(tp, t_setenv); 138 ATF_TP_ADD_TC(tp, t_setenv);
107 ATF_TP_ADD_TC(tp, t_putenv); 139 ATF_TP_ADD_TC(tp, t_putenv);
 140 ATF_TP_ADD_TC(tp, t_clearenv);
108 141
109 return atf_no_error(); 142 return atf_no_error();
110} 143}