xref: /lighttpd1.4/src/t/test_buffer.c (revision 91ce3b08)
16ccccaaaSGlenn Strauss #include "first.h"
26ccccaaaSGlenn Strauss 
3c98d89a4SGlenn Strauss #undef NDEBUG
42e385a1aSGlenn Strauss #include <assert.h>
56ccccaaaSGlenn Strauss #include <stdio.h>
66ccccaaaSGlenn Strauss #include <stdlib.h>
76ccccaaaSGlenn Strauss 
8bab0e5d0SGlenn Strauss #include "buffer.c"
96ccccaaaSGlenn Strauss 
run_buffer_path_simplify(buffer * psrc,buffer * pdest,const char * in,size_t in_len,const char * out,size_t out_len)106ccccaaaSGlenn Strauss static void run_buffer_path_simplify(buffer *psrc, buffer *pdest, const char *in, size_t in_len, const char *out, size_t out_len) {
116ccccaaaSGlenn Strauss 	buffer_copy_string_len(psrc, in, in_len);
12980554bcSGlenn Strauss 	pdest = psrc; /*(buffer_path_simplify() now takes only one arg)*/
136ccccaaaSGlenn Strauss 
14980554bcSGlenn Strauss 	buffer_path_simplify(pdest);
156ccccaaaSGlenn Strauss 
1617e0b6feSGlenn Strauss 	if (!buffer_eq_slen(pdest, out, out_len)) {
176ccccaaaSGlenn Strauss 		fprintf(stderr,
186ccccaaaSGlenn Strauss 			"%s.%d: buffer_path_simplify('%s') failed: expected '%s', got '%s'\n",
196ccccaaaSGlenn Strauss 			__FILE__,
206ccccaaaSGlenn Strauss 			__LINE__,
216ccccaaaSGlenn Strauss 			in,
226ccccaaaSGlenn Strauss 			out,
2322e8f600SGlenn Strauss 			pdest->ptr);
246ccccaaaSGlenn Strauss 		fflush(stderr);
256ccccaaaSGlenn Strauss 		abort();
266ccccaaaSGlenn Strauss 	} else {
27980554bcSGlenn Strauss 		buffer_path_simplify(pdest);
286ccccaaaSGlenn Strauss 
2917e0b6feSGlenn Strauss 		if (!buffer_eq_slen(pdest, out, out_len)) {
306ccccaaaSGlenn Strauss 			fprintf(stderr,
316ccccaaaSGlenn Strauss 				"%s.%d: buffer_path_simplify('%s') failed - not idempotent: expected '%s', got '%s'\n",
326ccccaaaSGlenn Strauss 				__FILE__,
336ccccaaaSGlenn Strauss 				__LINE__,
34e8e59396SGlenn Strauss 				in,
356ccccaaaSGlenn Strauss 				out,
3622e8f600SGlenn Strauss 				pdest->ptr);
376ccccaaaSGlenn Strauss 			fflush(stderr);
386ccccaaaSGlenn Strauss 			abort();
396ccccaaaSGlenn Strauss 		}
406ccccaaaSGlenn Strauss 	}
416ccccaaaSGlenn Strauss }
426ccccaaaSGlenn Strauss 
test_buffer_path_simplify_with(buffer * psrc,buffer * pdest)436ccccaaaSGlenn Strauss static void test_buffer_path_simplify_with(buffer *psrc, buffer *pdest) {
446ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN(""), CONST_STR_LEN(""));
456ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/"), CONST_STR_LEN("/"));
466ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("//"), CONST_STR_LEN("/"));
47e8e59396SGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc"), CONST_STR_LEN("abc"));
48e8e59396SGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc//"), CONST_STR_LEN("abc/"));
49e8e59396SGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc/./xyz"), CONST_STR_LEN("abc/xyz"));
50e8e59396SGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc/.//xyz"), CONST_STR_LEN("abc/xyz"));
516ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc/../xyz"), CONST_STR_LEN("/xyz"));
526ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/abc/./xyz"), CONST_STR_LEN("/abc/xyz"));
536ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/abc//./xyz"), CONST_STR_LEN("/abc/xyz"));
546ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/abc/../xyz"), CONST_STR_LEN("/xyz"));
556ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc/../xyz/."), CONST_STR_LEN("/xyz/"));
566ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/abc/../xyz/."), CONST_STR_LEN("/xyz/"));
57e8e59396SGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc/./xyz/.."), CONST_STR_LEN("abc/"));
586ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/abc/./xyz/.."), CONST_STR_LEN("/abc/"));
59e8e59396SGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("."), CONST_STR_LEN(""));
60e8e59396SGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN(".."), CONST_STR_LEN(""));
61e8e59396SGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("..."), CONST_STR_LEN("..."));
62e8e59396SGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("...."), CONST_STR_LEN("...."));
63e8e59396SGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN(".../"), CONST_STR_LEN(".../"));
646ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("./xyz/.."), CONST_STR_LEN("/"));
656ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN(".//xyz/.."), CONST_STR_LEN("/"));
666ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/./xyz/.."), CONST_STR_LEN("/"));
676ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN(".././xyz/.."), CONST_STR_LEN("/"));
686ccccaaaSGlenn Strauss 	run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/.././xyz/.."), CONST_STR_LEN("/"));
696ccccaaaSGlenn Strauss }
706ccccaaaSGlenn Strauss 
test_buffer_path_simplify(void)716ccccaaaSGlenn Strauss static void test_buffer_path_simplify(void) {
726ccccaaaSGlenn Strauss 	buffer *psrc = buffer_init();
736ccccaaaSGlenn Strauss 
746ccccaaaSGlenn Strauss 	/* test with using the same buffer and with using different buffers */
756ccccaaaSGlenn Strauss 	test_buffer_path_simplify_with(psrc, psrc);
766ccccaaaSGlenn Strauss 
776ccccaaaSGlenn Strauss 	buffer_free(psrc);
786ccccaaaSGlenn Strauss }
796ccccaaaSGlenn Strauss 
test_buffer_to_lower_upper(void)802e385a1aSGlenn Strauss static void test_buffer_to_lower_upper(void) {
812e385a1aSGlenn Strauss 	buffer *psrc = buffer_init();
822e385a1aSGlenn Strauss 
832e385a1aSGlenn Strauss 	buffer_copy_string_len(psrc, CONST_STR_LEN("0123456789abcdefghijklmnopqrstuvwxyz"));
842e385a1aSGlenn Strauss 	buffer_to_lower(psrc);
8517e0b6feSGlenn Strauss 	assert(buffer_eq_slen(psrc, CONST_STR_LEN("0123456789abcdefghijklmnopqrstuvwxyz")));
862e385a1aSGlenn Strauss 	buffer_to_upper(psrc);
8717e0b6feSGlenn Strauss 	assert(buffer_eq_slen(psrc, CONST_STR_LEN("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")));
882e385a1aSGlenn Strauss 	buffer_to_upper(psrc);
8917e0b6feSGlenn Strauss 	assert(buffer_eq_slen(psrc, CONST_STR_LEN("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")));
902e385a1aSGlenn Strauss 	buffer_to_lower(psrc);
9117e0b6feSGlenn Strauss 	assert(buffer_eq_slen(psrc, CONST_STR_LEN("0123456789abcdefghijklmnopqrstuvwxyz")));
922e385a1aSGlenn Strauss 
932e385a1aSGlenn Strauss 	buffer_free(psrc);
942e385a1aSGlenn Strauss }
952e385a1aSGlenn Strauss 
test_buffer_string_space(void)96aba45f68SGlenn Strauss static void test_buffer_string_space(void) {
97aba45f68SGlenn Strauss 	buffer *b = buffer_init();
98aba45f68SGlenn Strauss 	size_t space;
99aba45f68SGlenn Strauss 
100aba45f68SGlenn Strauss 	space = buffer_string_space(b);
101aba45f68SGlenn Strauss 	assert(0 == space);
102aba45f68SGlenn Strauss 	buffer_copy_string_len(b, CONST_STR_LEN(""));
103aba45f68SGlenn Strauss 	space = buffer_string_space(b);
104aba45f68SGlenn Strauss 	assert(space > 0);
105aba45f68SGlenn Strauss 	assert(space + buffer_string_length(b) == b->size - 1);
106aba45f68SGlenn Strauss 	buffer_commit(b, b->size - 1);
107aba45f68SGlenn Strauss 	assert(b->used == b->size);
108aba45f68SGlenn Strauss 	space = buffer_string_space(b);
109aba45f68SGlenn Strauss 	assert(0 == space);
110aba45f68SGlenn Strauss 
111aba45f68SGlenn Strauss 	buffer_free(b);
112aba45f68SGlenn Strauss }
113aba45f68SGlenn Strauss 
test_buffer_append_path_len(void)11477c01f98SGlenn Strauss static void test_buffer_append_path_len(void) {
11577c01f98SGlenn Strauss 	buffer *b = buffer_init();
11677c01f98SGlenn Strauss 
11777c01f98SGlenn Strauss 	buffer_append_path_len(b, CONST_STR_LEN("a"));
11817e0b6feSGlenn Strauss 	assert(buffer_eq_slen(b, CONST_STR_LEN("/a")));
11977c01f98SGlenn Strauss 	buffer_clear(b);
12077c01f98SGlenn Strauss 	buffer_append_path_len(b, CONST_STR_LEN("a"));
12117e0b6feSGlenn Strauss 	assert(buffer_eq_slen(b, CONST_STR_LEN("/a")));
12277c01f98SGlenn Strauss 	buffer_clear(b);
12377c01f98SGlenn Strauss 	buffer_append_path_len(b, CONST_STR_LEN("/a"));
12417e0b6feSGlenn Strauss 	assert(buffer_eq_slen(b, CONST_STR_LEN("/a")));
12577c01f98SGlenn Strauss 	buffer_copy_string_len(b, CONST_STR_LEN("/"));
12677c01f98SGlenn Strauss 	buffer_append_path_len(b, CONST_STR_LEN("a"));
12717e0b6feSGlenn Strauss 	assert(buffer_eq_slen(b, CONST_STR_LEN("/a")));
12877c01f98SGlenn Strauss 	buffer_copy_string_len(b, CONST_STR_LEN("/"));
12977c01f98SGlenn Strauss 	buffer_append_path_len(b, CONST_STR_LEN("/a"));
13017e0b6feSGlenn Strauss 	assert(buffer_eq_slen(b, CONST_STR_LEN("/a")));
13177c01f98SGlenn Strauss 	buffer_copy_string_len(b, CONST_STR_LEN("a"));
13277c01f98SGlenn Strauss 	buffer_append_path_len(b, CONST_STR_LEN("a"));
13317e0b6feSGlenn Strauss 	assert(buffer_eq_slen(b, CONST_STR_LEN("a/a")));
13477c01f98SGlenn Strauss 	buffer_copy_string_len(b, CONST_STR_LEN("a/"));
13577c01f98SGlenn Strauss 	buffer_append_path_len(b, CONST_STR_LEN("a"));
13617e0b6feSGlenn Strauss 	assert(buffer_eq_slen(b, CONST_STR_LEN("a/a")));
13777c01f98SGlenn Strauss 	buffer_copy_string_len(b, CONST_STR_LEN("a/"));
13877c01f98SGlenn Strauss 	buffer_append_path_len(b, CONST_STR_LEN("/a"));
13917e0b6feSGlenn Strauss 	assert(buffer_eq_slen(b, CONST_STR_LEN("a/a")));
14077c01f98SGlenn Strauss 	buffer_copy_string_len(b, CONST_STR_LEN("/a/"));
14177c01f98SGlenn Strauss 	buffer_append_path_len(b, CONST_STR_LEN("/a"));
14217e0b6feSGlenn Strauss 	assert(buffer_eq_slen(b, CONST_STR_LEN("/a/a")));
14377c01f98SGlenn Strauss 
14477c01f98SGlenn Strauss 	buffer_free(b);
14577c01f98SGlenn Strauss }
14677c01f98SGlenn Strauss 
test_buffer_append_bs_escaped(void)147*91ce3b08SGlenn Strauss static void test_buffer_append_bs_escaped(void) {
148*91ce3b08SGlenn Strauss     buffer *b = buffer_init();
149*91ce3b08SGlenn Strauss 
150*91ce3b08SGlenn Strauss     buffer_append_bs_escaped_json(b, CONST_STR_LEN(" "));
151*91ce3b08SGlenn Strauss     assert(buffer_eq_slen(b, CONST_STR_LEN(" ")));
152*91ce3b08SGlenn Strauss     buffer_clear(b);
153*91ce3b08SGlenn Strauss     buffer_append_bs_escaped_json(b, CONST_STR_LEN("\0"));
154*91ce3b08SGlenn Strauss     assert(buffer_eq_slen(b, CONST_STR_LEN("\\u0000")));
155*91ce3b08SGlenn Strauss     buffer_clear(b);
156*91ce3b08SGlenn Strauss     buffer_append_bs_escaped_json(b, CONST_STR_LEN("\1"));
157*91ce3b08SGlenn Strauss     assert(buffer_eq_slen(b, CONST_STR_LEN("\\u0001")));
158*91ce3b08SGlenn Strauss     buffer_clear(b);
159*91ce3b08SGlenn Strauss     buffer_append_bs_escaped_json(b, CONST_STR_LEN("\n"));
160*91ce3b08SGlenn Strauss     assert(buffer_eq_slen(b, CONST_STR_LEN("\\n")));
161*91ce3b08SGlenn Strauss     buffer_clear(b);
162*91ce3b08SGlenn Strauss     buffer_append_bs_escaped_json(b, CONST_STR_LEN("é"));
163*91ce3b08SGlenn Strauss     assert(buffer_eq_slen(b, CONST_STR_LEN("é")));
164*91ce3b08SGlenn Strauss     buffer_clear(b);
165*91ce3b08SGlenn Strauss     buffer_append_bs_escaped_json(b, CONST_STR_LEN("ö"));
166*91ce3b08SGlenn Strauss     assert(buffer_eq_slen(b, CONST_STR_LEN("ö")));
167*91ce3b08SGlenn Strauss 
168*91ce3b08SGlenn Strauss   #if 0
169*91ce3b08SGlenn Strauss     buffer_clear(b);
170*91ce3b08SGlenn Strauss     magnet_buffer_append_bsdec(b, CONST_STR_LEN("\\u00E9"));
171*91ce3b08SGlenn Strauss     assert(buffer_eq_slen(b, CONST_STR_LEN("é")));
172*91ce3b08SGlenn Strauss     buffer_clear(b);
173*91ce3b08SGlenn Strauss     magnet_buffer_append_bsdec(b, CONST_STR_LEN("\\u00F6"));
174*91ce3b08SGlenn Strauss     assert(buffer_eq_slen(b, CONST_STR_LEN("ö")));
175*91ce3b08SGlenn Strauss   #endif
176*91ce3b08SGlenn Strauss 
177*91ce3b08SGlenn Strauss     /* TODO: more */
178*91ce3b08SGlenn Strauss 
179*91ce3b08SGlenn Strauss     buffer_free(b);
180*91ce3b08SGlenn Strauss }
181*91ce3b08SGlenn Strauss 
182bab0e5d0SGlenn Strauss void test_buffer (void);
test_buffer(void)183bab0e5d0SGlenn Strauss void test_buffer (void)
184bab0e5d0SGlenn Strauss {
1856ccccaaaSGlenn Strauss 	test_buffer_path_simplify();
1862e385a1aSGlenn Strauss 	test_buffer_to_lower_upper();
187aba45f68SGlenn Strauss 	test_buffer_string_space();
18877c01f98SGlenn Strauss 	test_buffer_append_path_len();
189*91ce3b08SGlenn Strauss 	test_buffer_append_bs_escaped();
1906ccccaaaSGlenn Strauss }
191