unit-tests: Additionally do reverse match checking with empty identities
authorMartin Willi <martin@revosec.ch>
Tue, 8 Oct 2013 13:43:50 +0000 (15:43 +0200)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Thu, 31 Oct 2013 20:57:07 +0000 (21:57 +0100)
src/libstrongswan/tests/test_identification.c

index aca3c05..1dc6776 100644 (file)
@@ -662,6 +662,60 @@ START_TEST(test_matches_empty)
 }
 END_TEST
 
+static bool id_matches_rev(identification_t *a, char *b_str, id_match_t expected)
+{
+       identification_t *b;
+       id_match_t match;
+
+       b = identification_create_from_string(b_str);
+       match = b->matches(b, a);
+       b->destroy(b);
+       return match == expected;
+}
+
+START_TEST(test_matches_empty_reverse)
+{
+       identification_t *a;
+
+       a = identification_create_from_encoding(_i, chunk_empty);
+
+       switch (_i)
+       {
+               case ID_ANY:
+                       ck_assert(id_matches_rev(a, "%any", ID_MATCH_ANY));
+                       break;
+               case ID_IPV4_ADDR:
+                       ck_assert(id_matches_rev(a, "192.168.1.1", ID_MATCH_NONE));
+                       break;
+               case ID_FQDN:
+                       ck_assert(id_matches_rev(a, "moon.strongswan.org", ID_MATCH_NONE));
+                       break;
+               case ID_USER_FQDN:
+                       ck_assert(id_matches_rev(a, "moon@strongswan.org", ID_MATCH_NONE));
+                       break;
+               case ID_IPV6_ADDR:
+                       ck_assert(id_matches_rev(a, "fec0::1", ID_MATCH_NONE));
+                       break;
+               case ID_DER_ASN1_DN:
+                       ck_assert(id_matches_rev(a, "C=CH, E=moon@strongswan.org, CN=moon",
+                                                                        ID_MATCH_NONE));
+                       break;
+               case ID_KEY_ID:
+                       ck_assert(id_matches_rev(a, "@#12345678", ID_MATCH_NONE));
+                       break;
+               case ID_DER_ASN1_GN:
+               case ID_IPV4_ADDR_SUBNET:
+               case ID_IPV6_ADDR_SUBNET:
+               case ID_IPV4_ADDR_RANGE:
+               case ID_IPV6_ADDR_RANGE:
+                       /* currently not tested */
+                       break;
+       }
+
+       a->destroy(a);
+}
+END_TEST
+
 /*******************************************************************************
  * identification part enumeration
  */
@@ -784,6 +838,7 @@ Suite *identification_suite_create()
        tcase_add_test(tc, test_matches_binary);
        tcase_add_test(tc, test_matches_string);
        tcase_add_loop_test(tc, test_matches_empty, ID_ANY, ID_KEY_ID + 1);
+       tcase_add_loop_test(tc, test_matches_empty_reverse, ID_ANY, ID_KEY_ID + 1);
        suite_add_tcase(s, tc);
 
        tc = tcase_create("part enumeration");