aboutsummaryrefslogtreecommitdiffstats
path: root/tests/check_set.c
blob: 6f8b39b5f3d1a1fe4e06be1208541f382aa39f67 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <stdlib.h>
#include <glib.h>
#include <gmodule.h>
#include <check.h>
#include <string.h>
#include "set.h"
#include "testsuite.h"

START_TEST(test_set_add)
void *data = "data";
set_t *s = NULL, *t;
t = set_add(&s, "name", "default", NULL, data);
fail_unless(s == t);
fail_unless(t->data == data);
fail_unless(strcmp(t->def, "default") == 0);
END_TEST

START_TEST(test_set_add_existing)
void *data = "data";
set_t *s = NULL, *t;
t = set_add(&s, "name", "default", NULL, data);
t = set_add(&s, "name", "newdefault", NULL, data);
fail_unless(s == t);
fail_unless(strcmp(t->def, "newdefault") == 0);
END_TEST

START_TEST(test_set_find_unknown)
set_t * s = NULL;
fail_unless(set_find(&s, "foo") == NULL);
END_TEST

START_TEST(test_set_find)
void *data = "data";
set_t *s = NULL, *t;
t = set_add(&s, "name", "default", NULL, data);
fail_unless(s == t);
fail_unless(set_find(&s, "name") == t);
END_TEST

START_TEST(test_set_get_str_default)
void *data = "data";
set_t *s = NULL, *t;
t = set_add(&s, "name", "default", NULL, data);
fail_unless(s == t);
fail_unless(strcmp(set_getstr(&s, "name"), "default") == 0);
END_TEST

START_TEST(test_set_get_bool_default)
void *data = "data";
set_t *s = NULL, *t;
t = set_add(&s, "name", "true", NULL, data);
fail_unless(s == t);
fail_unless(set_getbool(&s, "name"));
END_TEST

START_TEST(test_set_get_bool_integer)
void *data = "data";
set_t *s = NULL, *t;
t = set_add(&s, "name", "3", NULL, data);
fail_unless(s == t);
fail_unless(set_getbool(&s, "name") == 3);
END_TEST

START_TEST(test_set_get_bool_unknown)
set_t * s = NULL;
fail_unless(set_getbool(&s, "name") == 0);
END_TEST

START_TEST(test_set_get_str_value)
void *data = "data";
set_t *s = NULL;
set_add(&s, "name", "default", NULL, data);
set_setstr(&s, "name", "foo");
fail_unless(strcmp(set_getstr(&s, "name"), "foo") == 0);
END_TEST

START_TEST(test_set_get_str_unknown)
set_t * s = NULL;
fail_unless(set_getstr(&s, "name") == NULL);
END_TEST

START_TEST(test_setint)
void *data = "data";
set_t *s = NULL;
set_add(&s, "name", "10", NULL, data);
set_setint(&s, "name", 3);
fail_unless(set_getint(&s, "name") == 3);
END_TEST

START_TEST(test_setstr)
void *data = "data";
set_t *s = NULL;
set_add(&s, "name", "foo", NULL, data);
set_setstr(&s, "name", "bloe");
fail_unless(strcmp(set_getstr(&s, "name"), "bloe") == 0);
END_TEST

START_TEST(test_set_get_int_unknown)
set_t * s = NULL;
fail_unless(set_getint(&s, "foo") == 0);
END_TEST

Suite *set_suite(void)
{
	Suite *s = suite_create("Set");
	TCase *tc_core = tcase_create("Core");

	suite_add_tcase(s, tc_core);
	tcase_add_test(tc_core, test_set_add);
	tcase_add_test(tc_core, test_set_add_existing);
	tcase_add_test(tc_core, test_set_find_unknown);
	tcase_add_test(tc_core, test_set_find);
	tcase_add_test(tc_core, test_set_get_str_default);
	tcase_add_test(tc_core, test_set_get_str_value);
	tcase_add_test(tc_core, test_set_get_str_unknown);
	tcase_add_test(tc_core, test_set_get_bool_default);
	tcase_add_test(tc_core, test_set_get_bool_integer);
	tcase_add_test(tc_core, test_set_get_bool_unknown);
	tcase_add_test(tc_core, test_set_get_int_unknown);
	tcase_add_test(tc_core, test_setint);
	tcase_add_test(tc_core, test_setstr);
	return s;
}
class="w"> = MailHandler.get_header_string("X-Failed-Recipients", message) if !failed_recipients.nil? # The X-Failed-Recipients header contains the email address that failed # Check for the words "This is a permanent error." in the body, to indicate # a permanent failure if MailHandler.get_part_body(message) =~ /This is a permanent error./ return failed_recipients.split(/,\s*/) end end # Next, look for multipart/report if MailHandler.get_content_type(message) == "multipart/report" permanently_failed_recipients = [] message.parts.each do |part| if MailHandler.get_content_type(part) == "message/delivery-status" sections = MailHandler.get_part_body(part).split(/\r?\n\r?\n/) # The first section is a generic header; subsequent sections # represent a particular recipient. Since we sections[1..-1].each do |section| if section !~ /^Status: (\d)/ || $1 != '5' # Either we couldn’t find the Status field, or it was a transient failure break end if section =~ /^Final-Recipient: rfc822;(.+)/ permanently_failed_recipients.push($1) end end end end if !permanently_failed_recipients.empty? return permanently_failed_recipients end end end subject = MailHandler.get_header_string("Subject", message) # Then look for the style we’ve seen in WebShield bounces # (These do not have a return path of <> in the cases I have seen.) if subject == "Returned Mail: Error During Delivery" if MailHandler.get_part_body(message) =~ /^\s*---- Failed Recipients ----\s*((?:<[^>]+>\n)+)/ return $1.scan(/<([^>]+)>/).flatten end end return [] end def is_oof?(message) # Check for out-of-office if MailHandler.get_header_string("X-POST-MessageClass", message) == "9; Autoresponder" return true end subject = MailHandler.get_header_string("Subject", message).downcase if MailHandler.empty_return_path?(message) if subject.start_with? "out of office: " return true end if subject.start_with? "automatic reply: " return true end end if MailHandler.get_header_string("Auto-Submitted", message) == "auto-generated" if subject =~ /out of( the)? office/ return true end end if subject.start_with? "out of office autoreply:" return true end if subject == "out of office" return true end if subject == "out of office reply" return true end if subject.end_with? "is out of the office" return true end return false end def forward_on(raw_message) IO.popen("/usr/sbin/sendmail -i #{AlaveteliConfiguration::forward_nonbounce_responses_to}", "w") do |f| f.write(raw_message); f.close; end end def load_rails require File.join($alaveteli_dir, 'config', 'boot') require File.join($alaveteli_dir, 'config', 'environment') end def record_bounce(email_address, bounce_message) load_rails User.record_bounce_for_email(email_address, bounce_message) end in_test_mode = (ARGV[0] == "--test") status = main(in_test_mode) exit(status) if in_test_mode