Yann Weber 5 anni fa
parent
commit
4c6e4bfec7
3 ha cambiato i file con 149 aggiunte e 18 eliminazioni
  1. 18
    14
      src/logger.c
  2. 1
    0
      src/main.c
  3. 130
    4
      tests/check_logger.c

+ 18
- 14
src/logger.c Vedi File

66
 {
66
 {
67
 	char *fmt;
67
 	char *fmt;
68
 	size_t i;
68
 	size_t i;
69
-	void *tmp;
69
+	//void *tmp;
70
 	pyfcgi_conf_logger_t *conf;
70
 	pyfcgi_conf_logger_t *conf;
71
 
71
 
72
 	conf = &PyFCGI_conf.logs;
72
 	conf = &PyFCGI_conf.logs;
86
 			   strerror(errno));
86
 			   strerror(errno));
87
 		return PYFCGI_FATAL;
87
 		return PYFCGI_FATAL;
88
 	}
88
 	}
89
+	/*
89
 	conf->format_sz++;
90
 	conf->format_sz++;
90
 	if( !(tmp = realloc(conf->format,
91
 	if( !(tmp = realloc(conf->format,
91
 	                    sizeof(char*) * conf->format_sz)) )
92
 	                    sizeof(char*) * conf->format_sz)) )
96
 		return PYFCGI_FATAL;
97
 		return PYFCGI_FATAL;
97
 	}
98
 	}
98
 	conf->format[i] = fmt;
99
 	conf->format[i] = fmt;
100
+	*/
99
 	return 0;
101
 	return 0;
100
 }
102
 }
101
 
103
 
207
 			continue;
209
 			continue;
208
 		}
210
 		}
209
 		// Name found ?
211
 		// Name found ?
210
-		while(**ptr && **name && **ptr != ':')
212
+		while(**ptr && **name && **ptr != ':' && **ptr != '}')
211
 		{
213
 		{
212
 			if(**ptr != **name)
214
 			if(**ptr != **name)
213
 			{
215
 			{
228
 			return 1;
230
 			return 1;
229
 		}
231
 		}
230
 	}
232
 	}
231
-	(*ptr)++; //on field size or ':' or '}'
232
-	str_start = *ptr;
233
+	if(**ptr == ':') { (*ptr)++; } // next option
233
 	if(pyfcgi_logger_parse_field_sz(ptr, &(cur_field->len)))
234
 	if(pyfcgi_logger_parse_field_sz(ptr, &(cur_field->len)))
234
 	{
235
 	{
235
 		snprintf(fail_reason, PYFCGI_LOGGER_FMT_PARSE_ERRSZ,
236
 		snprintf(fail_reason, PYFCGI_LOGGER_FMT_PARSE_ERRSZ,
237
 			 str_start - start, str_start);
238
 			 str_start - start, str_start);
238
 		return 1;
239
 		return 1;
239
 	}
240
 	}
240
-	if(**ptr != ':' && **ptr != '}')
241
-	{
242
-		snprintf(fail_reason, PYFCGI_LOGGER_FMT_PARSE_ERRSZ,
243
-			 "Unable to parse field '%s' at chr %ld",
244
-			 field_start , *ptr - start);
245
-		return 1;
246
-	}
241
+	if(**ptr == ':') { (*ptr)++; } // next option
242
+	str_start = *ptr;
243
+	cur_field->known_length = 1;
247
 	switch(cur_field->type)
244
 	switch(cur_field->type)
248
 	{
245
 	{
249
 		case pyfcgi_logger_field_datetime:
246
 		case pyfcgi_logger_field_datetime:
268
 			default_len = 0;
265
 			default_len = 0;
269
 			break;
266
 			break;
270
 		case pyfcgi_logger_field_msg:
267
 		case pyfcgi_logger_field_msg:
268
+			cur_field->known_length = 0;
271
 			default_len = 0;
269
 			default_len = 0;
272
 			break;
270
 			break;
273
 		default:
271
 		default:
290
 
288
 
291
 	fmt_len = 0;
289
 	fmt_len = 0;
292
 	fmt = *ptr;
290
 	fmt = *ptr;
293
-printf("FUCKOFF");
294
 	while(**ptr && **ptr != '}' && *((*ptr)+1) != '}')
291
 	while(**ptr && **ptr != '}' && *((*ptr)+1) != '}')
295
 	{
292
 	{
296
-		ptr++;
293
+		(*ptr)++;
297
 		fmt_len++;
294
 		fmt_len++;
298
 	}
295
 	}
296
+	if(!(**ptr))
297
+	{
298
+		//TODO error
299
+	}
299
 	if(!fmt_len)
300
 	if(!fmt_len)
300
 	{
301
 	{
302
+		(*ptr)++;
301
 		fmt_len = sizeof(PYFCGI_LOGGER_TIME_FMT_DEFAULT);
303
 		fmt_len = sizeof(PYFCGI_LOGGER_TIME_FMT_DEFAULT);
302
 		fmt = PYFCGI_LOGGER_TIME_FMT_DEFAULT;
304
 		fmt = PYFCGI_LOGGER_TIME_FMT_DEFAULT;
303
 	}
305
 	}
304
-	if(!(*format = strndup(fmt, fmt_len)))
306
+	if(!(*format = strndup(fmt, fmt_len+1)))
305
 	{
307
 	{
306
 		pyfcgi_log(LOG_ALERT,
308
 		pyfcgi_log(LOG_ALERT,
307
 		           "Unable to strdup field datetime format : %s",
309
 		           "Unable to strdup field datetime format : %s",
316
 	char *end;
318
 	char *end;
317
 	if(**ptr == '}' || **ptr == ':')
319
 	if(**ptr == '}' || **ptr == ':')
318
 	{
320
 	{
321
+		(*ptr)++;
319
 		return (*size = 0);
322
 		return (*size = 0);
320
 	}
323
 	}
321
 	if(**ptr < '0' && **ptr > 9)
324
 	if(**ptr < '0' && **ptr > 9)
323
 		return 1; // parse error
326
 		return 1; // parse error
324
 	}
327
 	}
325
 	*size = strtoull(*ptr, &end, 10);
328
 	*size = strtoull(*ptr, &end, 10);
329
+	*ptr = end;
326
 	return 0;
330
 	return 0;
327
 }
331
 }
328
 
332
 

+ 1
- 0
src/main.c Vedi File

39
 #include <sys/types.h>
39
 #include <sys/types.h>
40
 #include <sys/wait.h>
40
 #include <sys/wait.h>
41
 
41
 
42
+#include "conf.h"
42
 #include "responder.h"
43
 #include "responder.h"
43
 
44
 
44
 #define IDENT_FMT "pyfcgi[%d]"
45
 #define IDENT_FMT "pyfcgi[%d]"

+ 130
- 4
tests/check_logger.c Vedi File

1
 #include <stdlib.h>
1
 #include <stdlib.h>
2
 #include <check.h>
2
 #include <check.h>
3
+#include <time.h>
4
+#include <stdio.h>
3
 #include "logger.h"
5
 #include "logger.h"
4
 
6
 
5
 pyfcgi_conf_logger_t *conf = &PyFCGI_conf.logs;
7
 pyfcgi_conf_logger_t *conf = &PyFCGI_conf.logs;
19
 }
21
 }
20
 END_TEST
22
 END_TEST
21
 
23
 
24
+/*
22
 START_TEST(test_logger_format_add)
25
 START_TEST(test_logger_format_add)
23
 {
26
 {
24
 	int ret;
27
 	int ret;
30
 	ck_assert_str_eq(conf->format[0], "TEST");
33
 	ck_assert_str_eq(conf->format[0], "TEST");
31
 }
34
 }
32
 END_TEST
35
 END_TEST
36
+*/
33
 
37
 
34
 START_TEST(test_logger_parse_field_dtfmt_default)
38
 START_TEST(test_logger_parse_field_dtfmt_default)
35
 {
39
 {
40
 	ptr = orig;
44
 	ptr = orig;
41
 	fmt = NULL;
45
 	fmt = NULL;
42
 
46
 
43
-printf("FUCKOFF");
44
 	ret = pyfcgi_logger_parse_field_dtfmt((const char**)&ptr, &fmt);
47
 	ret = pyfcgi_logger_parse_field_dtfmt((const char**)&ptr, &fmt);
45
 	ck_assert_int_eq(ret, 0);
48
 	ck_assert_int_eq(ret, 0);
46
 	ck_assert_str_eq(fmt, PYFCGI_LOGGER_TIME_FMT_DEFAULT);
49
 	ck_assert_str_eq(fmt, PYFCGI_LOGGER_TIME_FMT_DEFAULT);
50
+	ck_assert_ptr_eq(ptr, orig+1);
51
+}
52
+END_TEST
53
+
54
+START_TEST(test_logger_parse_field_sz_default)
55
+{
56
+	int ret;
57
+	size_t val;
58
+	char *ptr, **orig;
59
+	char *vals[] = {":%F}", ":}", "}", NULL};
60
+
61
+	orig = vals;
62
+	while(*orig)
63
+	{
64
+		ptr = *orig;
65
+
66
+		ret = pyfcgi_logger_parse_field_sz((const char**)&ptr, &val);
67
+		ck_assert_int_eq(val, 0);
68
+		ck_assert_ptr_eq(ptr, (*orig)+1);
69
+		orig++;
70
+	}
71
+}
72
+END_TEST
73
+
74
+START_TEST(test_logger_parse_field_datetime_default)
75
+{
76
+	int ret;
77
+	char *ptr, **orig, err[PYFCGI_LOGGER_FMT_PARSE_ERRSZ];
78
+	pyfcgi_logger_fmt_field_t field;
79
+	char *vals[] = {"datetime}", "datetime::}", "datetime:}", NULL};
80
+
81
+	memset(&field, 0, sizeof(pyfcgi_logger_fmt_field_t));
82
+
83
+	orig = vals;
84
+	while(*orig)
85
+	{
86
+		ptr = *orig;
87
+
88
+		ret = pyfcgi_logger_parse_field((const char**)&ptr,
89
+		                                (const char*)ptr, &field,
90
+						err);
91
+		if(ret)
92
+		{
93
+			dprintf(2, "ERROR : '%s'\n", err);
94
+		}
95
+		ck_assert_int_eq(ret, 0);
96
+		ck_assert_int_eq(field.type, pyfcgi_logger_field_datetime);
97
+		ck_assert_int_ne(field.known_length, 0);
98
+		ck_assert_int_eq(field.len, 10);
99
+		ck_assert_ptr_eq(field.val, strftime);
100
+		ck_assert_str_eq(field.args.datetime.format,
101
+		                 PYFCGI_LOGGER_TIME_FMT_DEFAULT);
102
+		ck_assert_ptr_eq(field.buf_ptr, NULL);
103
+		orig++;
104
+	}
105
+}
106
+END_TEST
107
+
108
+START_TEST(test_logger_parse_field_sz)
109
+{
110
+	int ret, *res;
111
+	size_t val;
112
+	char *ptr, **orig;
113
+	char *vals[] = {"42:%F}", "1337:}", "0}", NULL};
114
+	int _res[] = {42,1337,0};
115
+
116
+	orig = vals;
117
+	res = _res;
118
+	while(*orig)
119
+	{
120
+		ptr = *orig;
121
+
122
+		ret = pyfcgi_logger_parse_field_sz((const char**)&ptr, &val);
123
+		ck_assert_int_eq(val, *res);
124
+		ck_assert_ptr_eq(ptr, (*orig)+snprintf(NULL, 0, "%d", *res));
125
+		orig++;
126
+		res++;
127
+	}
128
+}
129
+END_TEST
130
+
131
+START_TEST(test_logger_parse_field_Tdatetime)
132
+{
133
+	int ret, *len;
134
+	char *ptr, **orig, **fmt, err[PYFCGI_LOGGER_FMT_PARSE_ERRSZ];
135
+	pyfcgi_logger_fmt_field_t field;
136
+	char *vals[] = {"datetime:42}", "datetime::%s%F}",
137
+	                "datetime:42:COUCOU}", NULL};
138
+	int _len[] = {42, 10, 42};
139
+	char *_fmt[] = {PYFCGI_LOGGER_TIME_FMT_DEFAULT, "%s%F", "COUCOU"};
140
+
141
+	memset(&field, 0, sizeof(pyfcgi_logger_fmt_field_t));
142
+	
143
+	len = _len;
144
+	fmt = _fmt;
145
+	orig = vals;
146
+	while(*orig)
147
+	{
148
+		ptr = *orig;
149
+
150
+dprintf(2, "ORIG='%s'\n", *orig);
151
+		ret = pyfcgi_logger_parse_field((const char**)&ptr,
152
+		                                (const char*)ptr, &field,
153
+						err);
154
+		if(ret)
155
+		{
156
+			dprintf(2, "ERROR : '%s'\n", err);
157
+		}
158
+		ck_assert_int_eq(ret, 0);
159
+		ck_assert_int_eq(field.type, pyfcgi_logger_field_datetime);
160
+		ck_assert_int_ne(field.known_length, 0);
161
+		ck_assert_int_eq(field.len, *len);
162
+		ck_assert_ptr_eq(field.val, strftime);
163
+		ck_assert_str_eq(field.args.datetime.format, *fmt);
164
+		ck_assert_ptr_eq(field.buf_ptr, NULL);
165
+		orig++;
166
+		len++;
167
+		fmt++;
168
+	}
47
 }
169
 }
48
 END_TEST
170
 END_TEST
49
 
171
 
56
 
178
 
57
 	tc_init = tcase_create("Initialisation");
179
 	tc_init = tcase_create("Initialisation");
58
 	tcase_add_test(tc_init, test_logger_init);
180
 	tcase_add_test(tc_init, test_logger_init);
59
-	tcase_add_test(tc_init, test_logger_format_add);
181
+	//tcase_add_test(tc_init, test_logger_format_add);
60
 	suite_add_tcase(s, tc_init);
182
 	suite_add_tcase(s, tc_init);
61
 
183
 
62
 	tc_fmt_default = tcase_create("Logger format default values");
184
 	tc_fmt_default = tcase_create("Logger format default values");
63
 	tcase_add_test(tc_fmt_default, test_logger_parse_field_dtfmt_default);
185
 	tcase_add_test(tc_fmt_default, test_logger_parse_field_dtfmt_default);
186
+	tcase_add_test(tc_fmt_default, test_logger_parse_field_sz_default);
187
+	tcase_add_test(tc_fmt_default, test_logger_parse_field_datetime_default);
64
 	suite_add_tcase(s, tc_fmt_default);
188
 	suite_add_tcase(s, tc_fmt_default);
65
 
189
 
66
-	//tc_fmt = tcase_create("Logger format");
67
-	//suite_add_tcase(s, tc_fmt);
190
+	tc_fmt = tcase_create("Logger format");
191
+	tcase_add_test(tc_fmt_default, test_logger_parse_field_sz);
192
+	tcase_add_test(tc_fmt_default, test_logger_parse_field_Tdatetime);
193
+	suite_add_tcase(s, tc_fmt);
68
 
194
 
69
 	return s;
195
 	return s;
70
 }
196
 }

Loading…
Annulla
Salva