From: David Gibson Date: Thu, 4 Oct 2012 14:35:11 +0000 (+1000) Subject: rfc822: Allow test infrastructure to handle headers with minor errors X-Git-Url: https://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=850364146a1cc66a92943f43dc4012d9c70902eb;ds=sidebyside rfc822: Allow test infrastructure to handle headers with minor errors Currently the test infrastructure for constructing example messages then parsing them assumes that constructed headers never have errors of any kind. That's true so far, but it limits the versatility of this test apparatus. This patch extends the infrastructure to allow minor errors (that is things other than a missing colon) to be handled. The existing test data is also extended to include cases which use this. Signed-off-by: David Gibson --- diff --git a/ccan/rfc822/test/helper.c b/ccan/rfc822/test/helper.c index f16803e2..42894ed0 100644 --- a/ccan/rfc822/test/helper.c +++ b/ccan/rfc822/test/helper.c @@ -57,17 +57,20 @@ void failtest_setup(int argc, char *argv[]) talloc_set_allocator(malloc_wrapper, free_wrapper, realloc_wrapper); } -void check_header(struct rfc822_msg *msg, struct rfc822_header *h, +void check_header(struct rfc822_msg *msg, + struct rfc822_header *h, const char *name, const char *val, - int crlf) + enum rfc822_header_errors experr, int crlf) { + enum rfc822_header_errors errs; struct bytestring hname, hvalue, hfull; size_t namelen = strlen(name); size_t valuelen = strlen(val); size_t nln = crlf ? 2 : 1; size_t fulllen = namelen + valuelen + 1 + nln; - ok(rfc822_header_errors(msg, h) == 0, "Header valid"); + errs = rfc822_header_errors(msg, h); + ok(errs == experr, "Header errors 0x%x != 0x%x", errs, experr); allocation_failure_check(); hname = rfc822_header_raw_name(msg, h); diff --git a/ccan/rfc822/test/helper.h b/ccan/rfc822/test/helper.h index 2bdb9c43..f1bd9279 100644 --- a/ccan/rfc822/test/helper.h +++ b/ccan/rfc822/test/helper.h @@ -6,4 +6,4 @@ void allocation_failure_check(void); #define CHECK_HEADER_NUMTESTS 4 void check_header(struct rfc822_msg *msg, struct rfc822_header *h, const char *name, const char *val, - int crlf); + enum rfc822_header_errors experr, int crlf); diff --git a/ccan/rfc822/test/run-hdr-and-body.c b/ccan/rfc822/test/run-hdr-and-body.c index 956a6bd6..25e66cc2 100644 --- a/ccan/rfc822/test/run-hdr-and-body.c +++ b/ccan/rfc822/test/run-hdr-and-body.c @@ -23,7 +23,8 @@ if (!(_h)) \ break; \ check_header((_msg), (_h), (_e)->hdrs[_i].name, \ - (_e)->hdrs[_i].val, crlf); \ + (_e)->hdrs[_i].val, \ + (_e)->hdrs[_i].errors, crlf); \ } \ } while (0) diff --git a/ccan/rfc822/test/testdata.h b/ccan/rfc822/test/testdata.h index 4ef07095..421b7487 100644 --- a/ccan/rfc822/test/testdata.h +++ b/ccan/rfc822/test/testdata.h @@ -7,6 +7,7 @@ struct testhdr { const char *name, *val; + enum rfc822_header_errors errors; }; struct aexample { @@ -57,11 +58,23 @@ AEXAMPLE(test_msg_nlnl_mixed); const char test_msg_space_body_body[] = " Message with LWS at start of body\n"; AEXAMPLE(test_msg_space_body); +struct testhdr bad_hdrs_hdrs[] = { + {"From", "Mister From "}, + {"To", "Mizz To "}, + {"X-Bad-\bName", "This header field has bad characters in the name", + .errors = RFC822_HDR_BAD_NAME_CHARS}, + {"Subject", "Some subject"}, + {"Message-ID", "<20110221131559.GA28327@example>"}, +}; +#define bad_hdrs_body test_msg_1_body +AEXAMPLE(bad_hdrs) + #define for_each_aexample(_e) \ foreach_ptr((_e), &test_msg_1, &test_msg_empty_body, \ &test_msg_nlnl_lf, &test_msg_nlnl_crlf, \ &test_msg_nlnl_mixed, \ - &test_msg_space_body) + &test_msg_space_body, \ + &bad_hdrs) #define for_each_aexample_buf(_e, _buf, _len) \ for_each_aexample((_e)) \