"Fossies" - the Fresh Open Source Software Archive 
Member "nss-pam-ldapd-0.9.12/tests/test_expr.c" (15 Nov 2021, 7496 Bytes) of package /linux/privat/nss-pam-ldapd-0.9.12.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
1 /*
2 test_expr.c - simple tests for the expr module
3 This file is part of the nss-pam-ldapd library.
4
5 Copyright (C) 2009-2021 Arthur de Jong
6 Copyright (c) 2016 Giovanni Mascellani
7
8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301 USA
22 */
23
24 #include "config.h"
25
26 #include <stdio.h>
27 #include <string.h>
28 #include <assert.h>
29
30 #include "common.h"
31
32 /* we include expr.c because we want to test the static methods */
33 #include "common/expr.c"
34
35 static void test_parse_name(void)
36 {
37 char buffer[20];
38 int i;
39 i = 0;
40 assert(parse_name("fooBar", &i, buffer, sizeof(buffer), 0) != NULL);
41 assert(i == 6);
42 i = 0;
43 assert(parse_name("nameThatWillNotFitInBuffer", &i, buffer, sizeof(buffer), 0) == NULL);
44 i = 0;
45 assert(parse_name("foo Bar", &i, buffer, sizeof(buffer), 0) != NULL);
46 assert(i == 3);
47 assertstreq(buffer, "foo");
48 i = 0;
49 assert(parse_name("foo-Bar", &i, buffer, sizeof(buffer), 0) != NULL);
50 assert(i == 3);
51 assertstreq(buffer, "foo");
52 i = 0;
53 assert(parse_name("foo-Bar", &i, buffer, sizeof(buffer), 1) != NULL);
54 assert(i == 7);
55 assertstreq(buffer, "foo-Bar");
56 }
57
58 static const char *expanderfn(const char *name, void UNUSED(*expander_attr))
59 {
60 if (strcmp(name, "empty") == 0)
61 return "";
62 if (strcmp(name, "null") == 0)
63 return NULL;
64 if (strcmp(name, "userPassword") == 0)
65 return "{crypt}HASH";
66 else
67 return "foobar";
68 }
69
70 static void test_expr_parse(void)
71 {
72 char buffer[1024];
73 assert(expr_parse("$test1", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
74 assertstreq(buffer, "foobar");
75 assert(expr_parse("\\$test1", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
76 assertstreq(buffer, "$test1");
77 assert(expr_parse("$empty", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
78 assertstreq(buffer, "");
79 assert(expr_parse("$foo1$empty-$foo2", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
80 assertstreq(buffer, "foobar-foobar");
81 assert(expr_parse("$test-var", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
82 assertstreq(buffer, "foobar-var");
83 assert(expr_parse("${test-var}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
84 assertstreq(buffer, "foobar");
85 assert(expr_parse("$foo1+$null+$foo2", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
86 assertstreq(buffer, "foobar++foobar");
87 assert(expr_parse("${test1}\\$", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
88 assertstreq(buffer, "foobar$");
89 assert(expr_parse("${test1:-default}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
90 assertstreq(buffer, "foobar");
91 assert(expr_parse("${empty:-default}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
92 assertstreq(buffer, "default");
93 assert(expr_parse("${test1:+setset}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
94 assertstreq(buffer, "setset");
95 assert(expr_parse("${empty:+setset}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
96 assertstreq(buffer, "");
97 assert(expr_parse("${empty:-$test1}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
98 assertstreq(buffer, "foobar");
99 assert(expr_parse("a/$test1/b", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
100 assertstreq(buffer, "a/foobar/b");
101 assert(expr_parse("a/$empty/b", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
102 assertstreq(buffer, "a//b");
103 assert(expr_parse("a${test1}b", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
104 assertstreq(buffer, "afoobarb");
105 assert(expr_parse("a${test1}b${test2:+${test3:-d$test4}e}c", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
106 assertstreq(buffer, "afoobarbfoobarec");
107 assert(expr_parse("a${test1}b${test2:+${empty:-d$test4}e}c", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
108 assertstreq(buffer, "afoobarbdfoobarec");
109 /* test ${var#trim} functions */
110 assert(expr_parse("${test1#foo}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
111 assertstreq(buffer, "bar");
112 assert(expr_parse("${test1#zoo}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
113 assertstreq(buffer, "foobar");
114 assert(expr_parse("${test1#?oo}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
115 assertstreq(buffer, "bar");
116 assert(expr_parse("${test1#f\\?o}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
117 assertstreq(buffer, "foobar");
118 assert(expr_parse("${userPassword#{crypt\\}}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
119 assertstreq(buffer, "HASH");
120 /* test ${var:offset:length} */
121 assert(expr_parse("${test1:0:6}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
122 assertstreq(buffer, "foobar");
123 assert(expr_parse("${test1:0:10}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
124 assertstreq(buffer, "foobar");
125 assert(expr_parse("${test1:0:3}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
126 assertstreq(buffer, "foo");
127 assert(expr_parse("${test1:3:0}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
128 assertstreq(buffer, "");
129 assert(expr_parse("${test1:3:6}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
130 assertstreq(buffer, "bar");
131 assert(expr_parse("${test1:7:0}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
132 assertstreq(buffer, "");
133 assert(expr_parse("${test1:7:3}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
134 assertstreq(buffer, "");
135 /* these are errors */
136 assert(expr_parse("$&", buffer, sizeof(buffer), expanderfn, NULL) == NULL);
137 assert(expr_parse("${a", buffer, sizeof(buffer), expanderfn, NULL) == NULL);
138 }
139
140 static void test_buffer_overflow(void)
141 {
142 char buffer[10];
143 assert(expr_parse("$test1$empty$test1", buffer, sizeof(buffer), expanderfn, NULL) == NULL);
144 assert(expr_parse("long test value", buffer, sizeof(buffer), expanderfn, NULL) == NULL);
145 assert(expr_parse("${test1:-long test value}", buffer, sizeof(buffer), expanderfn, NULL) == NULL);
146 }
147
148 static void test_expr_vars(void)
149 {
150 SET *set;
151 /* simple test */
152 set = set_new();
153 assert(expr_vars("$a", set) != NULL);
154 assert(set_contains(set, "a"));
155 assert(!set_contains(set, "$a"));
156 set_free(set);
157 /* more elaborate test */
158 set = set_new();
159 assert(expr_vars("\"${gecos:-$cn}\"", set) != NULL);
160 assert(set_contains(set, "gecos"));
161 assert(set_contains(set, "cn"));
162 set_free(set);
163 /* more elaborate test */
164 set = set_new();
165 assert(expr_vars("\"${homeDirectory:-/home/$uidNumber/$uid}\"", set) != NULL);
166 assert(set_contains(set, "homeDirectory"));
167 assert(set_contains(set, "uidNumber"));
168 assert(set_contains(set, "uid"));
169 set_free(set);
170 /* a test with attribute options */
171 set = set_new();
172 assert(expr_vars("\"${homeDirectory;foo:-/home/something}\"", set) != NULL);
173 assert(set_contains(set, "homeDirectory;foo"));
174 set_free(set);
175 }
176
177 /* the main program... */
178 int main(int UNUSED(argc), char UNUSED(*argv[]))
179 {
180 test_parse_name();
181 test_expr_parse();
182 test_buffer_overflow();
183 test_expr_vars();
184 return EXIT_SUCCESS;
185 }