diff options
author | Martin Willi <martin@strongswan.org> | 2009-07-06 11:16:41 +0200 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2009-07-06 13:15:29 +0200 |
commit | 05fe0a7d25a672a1515de32bbac23a6f69bbb431 (patch) | |
tree | b9214a1057e49a21c73cd42ca33dca5f89d4a8d2 /src/charon/plugins/unit_tester/tests/test_id.c | |
parent | 01da687f78dfd7c57c115e142c68db6ea75da173 (diff) | |
download | strongswan-05fe0a7d25a672a1515de32bbac23a6f69bbb431.tar.bz2 strongswan-05fe0a7d25a672a1515de32bbac23a6f69bbb431.tar.xz |
added unit test for identification_t.equals()
Diffstat (limited to 'src/charon/plugins/unit_tester/tests/test_id.c')
-rw-r--r-- | src/charon/plugins/unit_tester/tests/test_id.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/charon/plugins/unit_tester/tests/test_id.c b/src/charon/plugins/unit_tester/tests/test_id.c index 82bbac773..9dc7e7d84 100644 --- a/src/charon/plugins/unit_tester/tests/test_id.c +++ b/src/charon/plugins/unit_tester/tests/test_id.c @@ -107,3 +107,90 @@ bool test_id_wildcards() return TRUE; } +/******************************************************************************* + * identification equals test + ******************************************************************************/ + +static bool test_id_equals_one(identification_t *a, char *b_str) +{ + identification_t *b; + bool equals; + + b = identification_create_from_string(b_str); + equals = a->equals(a, b); + b->destroy(b); + return equals; +} + +bool test_id_equals() +{ + identification_t *a; + chunk_t encoding, fuzzed; + int i; + + a = identification_create_from_string( + "C=CH, E=martin@strongswan.org, CN=martin"); + + if (!test_id_equals_one(a, "C=CH, E=martin@strongswan.org, CN=martin")) + { + return FALSE; + } + if (!test_id_equals_one(a, "C=ch, E=martin@STRONGSWAN.ORG, CN=Martin")) + { + return FALSE; + } + if (test_id_equals_one(a, "C=CN, E=martin@strongswan.org, CN=martin")) + { + return FALSE; + } + if (test_id_equals_one(a, "E=martin@strongswan.org, C=CH, CN=martin")) + { + return FALSE; + } + if (test_id_equals_one(a, "E=martin@strongswan.org, C=CH, CN=martin")) + { + return FALSE; + } + encoding = chunk_clone(a->get_encoding(a)); + a->destroy(a); + + /* simple fuzzing, increment each byte of encoding */ + for (i = 0; i < encoding.len; i++) + { + if (i == 11 || i == 30 || i == 62) + { /* skip ASN.1 type fields, as equals() handles them graceful */ + continue; + } + fuzzed = chunk_clone(encoding); + fuzzed.ptr[i]++; + a = identification_create_from_encoding(ID_DER_ASN1_DN, fuzzed); + if (test_id_equals_one(a, "C=CH, E=martin@strongswan.org, CN=martin")) + { + return FALSE; + } + a->destroy(a); + free(fuzzed.ptr); + } + + /* and decrement each byte of encoding */ + for (i = 0; i < encoding.len; i++) + { + if (i == 11 || i == 30 || i == 62) + { + continue; + } + fuzzed = chunk_clone(encoding); + fuzzed.ptr[i]--; + a = identification_create_from_encoding(ID_DER_ASN1_DN, fuzzed); + if (test_id_equals_one(a, "C=CH, E=martin@strongswan.org, CN=martin")) + { + return FALSE; + } + a->destroy(a); + free(fuzzed.ptr); + } + free(encoding.ptr); + return TRUE; +} + + |