#include "file.h"
#include <dirent.h>
-#define DAEMON_NAME "tst-filters"
-
-DECLARE_MAIN
-
static char *read_query(const char *basepath, const char *filename,
char *buff, char **end, query_t *q)
{
return NULL;
}
if (map.end - map.map >= BUFSIZ) {
- syslog(LOG_ERR, "File too large for a testcase: %s", path);
+ err("File too large for a testcase: %s", path);
file_map_close(&map);
return NULL;
}
if (end != NULL) {
*end = buff + (map.end - map.map);
**end = '\0';
+ } else {
+ buff[map.end - map.map] = '\0';
}
file_map_close(&map);
}
return NULL;
}
if (!query_parse(q, buff)) {
- syslog(LOG_ERR, "Cannot parse query from file %s", filename);
+ err("Cannot parse query from file %s", filename);
return NULL;
}
return eoq + 2;
}
bool ok = true;
+ filter_context_t context;
+ filter_context_prepare(&context, NULL);
+
while (eol < end) {
char *neol = memchr(eol, '\n', end - eol);
if (neol == NULL) {
char *sep = memchr(eol, '=', neol - eol);
if (sep == NULL) {
eol = neol + 1;
- syslog(LOG_ERR, "missing separator");
+ err("missing separator");
continue;
}
*sep = '\0';
int pos = filter_find_with_name(&config->filters, eol);
if (pos == -1) {
- syslog(LOG_ERR, "Unknown filter %s", eol);
+ err("Unknown filter %s", eol);
eol = neol + 1;
continue;
}
++sep;
filter_result_t result = hook_tokenize(sep, neol - sep);
if (result == HTK_UNKNOWN) {
- syslog(LOG_ERR, "Unknown filter result %.*s", neol - sep, sep);
+ err("Unknown filter result %.*s", neol - sep, sep);
eol = neol + 1;
continue;
}
printf(" test %s: %s\n", Name, __test ? "SUCCESS" : "FAILED"); \
ok = ok && __test; \
} while (0)
- TEST(filter->name, filter_test(filter, &query, result));
+ TEST(filter->name, filter_test(filter, &query, &context, result));
eol = neol + 1;
+
}
+ filter_context_wipe(&context);
return ok;
}
// filter_t *greylist2;
#define QUERY(Q) \
- printf("Reading greylist_" STR(Q) "\n"); \
if (read_query(basepath, "greylist_" STR(Q), buff_##Q, NULL, &Q) == NULL) { \
return false; \
}
// FILTER(greylist2);
#undef FILTER
+ filter_context_t context;
+ filter_context_prepare(&context, NULL);
+
/* Test greylist */
- TEST("greylisted", filter_test(greylist1, &q1, HTK_GREYLIST));
- TEST("greylisted", filter_test(greylist1, &q1, HTK_GREYLIST));
+ TEST("greylisted", filter_test(greylist1, &q1, &context, HTK_GREYLIST));
+ TEST("too_fast", filter_test(greylist1, &q1, &context, HTK_GREYLIST));
+ sleep(5);
+ TEST("too_slow", filter_test(greylist1, &q1, &context, HTK_GREYLIST));
sleep(2);
- TEST("whitelisted", filter_test(greylist1, &q1, HTK_WHITELIST));
- TEST("other_greylisted", filter_test(greylist1, &q2, HTK_GREYLIST));
- TEST("auto_whitelisted", filter_test(greylist1, &q1, HTK_WHITELIST));
- TEST("other_auto_whitelisted", filter_test(greylist1, &q2, HTK_WHITELIST));
- TEST("greylisted", filter_test(greylist1, &q3, HTK_GREYLIST));
-
+ TEST("whitelisted", filter_test(greylist1, &q1, &context, HTK_WHITELIST));
+ TEST("other_greylisted", filter_test(greylist1, &q2, &context, HTK_GREYLIST));
+ TEST("auto_whitelisted", filter_test(greylist1, &q1, &context, HTK_WHITELIST));
+ TEST("other_auto_whitelisted", filter_test(greylist1, &q2, &context, HTK_WHITELIST));
+ TEST("greylisted", filter_test(greylist1, &q3, &context, HTK_GREYLIST));
+ sleep(10);
+ TEST("cleanup", filter_test(greylist1, &q1, &context, HTK_GREYLIST));
+
+ filter_context_wipe(&context);
return ok;
}
char path[FILENAME_MAX];
char *p;
+ common_startup();
p = strrchr(argv[0], '/');
if (p == NULL) {
p = argv[0];
#define RM(File) \
snprintf(path, FILENAME_MAX, "%s/%s", basepath, File); \
unlink(path);
- RM("test1_greylist.db");
- RM("test1_whitelist.db");
+// RM("test1_greylist.db");
+// RM("test1_whitelist.db");
RM("test2_greylist.db");
RM("test2_whitelist.db");
#undef RM
#undef RUN
- config_delete(&config);
return 0;
}