test_x500name.c (4772B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 /* 5 * test_x500name.c 6 * 7 * Test X500Name Type 8 * 9 */ 10 11 #include "testutil.h" 12 #include "testutil_nss.h" 13 14 static void *plContext = NULL; 15 16 static PKIX_PL_X500Name * 17 createX500Name(char *asciiName, PKIX_Boolean expectedToPass) 18 { 19 20 PKIX_PL_X500Name *x500Name = NULL; 21 PKIX_PL_String *plString = NULL; 22 23 PKIX_TEST_STD_VARS(); 24 25 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, asciiName, 0, &plString, plContext)); 26 27 if (expectedToPass) { 28 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_X500Name_Create(plString, &x500Name, plContext)); 29 } else { 30 PKIX_TEST_EXPECT_ERROR(PKIX_PL_X500Name_Create(plString, &x500Name, plContext)); 31 } 32 33 cleanup: 34 35 PKIX_TEST_DECREF_AC(plString); 36 37 PKIX_TEST_RETURN(); 38 39 return (x500Name); 40 } 41 42 static void 43 createX500Names(char *goodInput, char *diffInput, char *diffInputMatch, 44 PKIX_PL_X500Name **goodObject, 45 PKIX_PL_X500Name **equalObject, 46 PKIX_PL_X500Name **diffObject, 47 PKIX_PL_X500Name **diffObjectMatch) 48 { 49 char *badAscii = "cn=yas#sir,ou=labs,o=sun,c=us"; 50 PKIX_PL_X500Name *badObject = NULL; 51 52 subTest("PKIX_PL_X500Name_Create <goodObject>"); 53 *goodObject = createX500Name(goodInput, PKIX_TRUE); 54 55 subTest("PKIX_PL_X500Name_Create <equalObject>"); 56 *equalObject = createX500Name(goodInput, PKIX_TRUE); 57 58 subTest("PKIX_PL_X500Name_Create <diffObject>"); 59 *diffObject = createX500Name(diffInput, PKIX_TRUE); 60 61 subTest("PKIX_PL_X500Name_Create <diffObjectMatch>"); 62 *diffObjectMatch = createX500Name(diffInputMatch, PKIX_TRUE); 63 64 subTest("PKIX_PL_X500Name_Create <negative>"); 65 badObject = createX500Name(badAscii, PKIX_FALSE); 66 } 67 68 static void 69 testMatchHelper(PKIX_PL_X500Name *goodName, PKIX_PL_X500Name *otherName, PKIX_Boolean match) 70 { 71 PKIX_Boolean cmpResult; 72 73 PKIX_TEST_STD_VARS(); 74 75 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_X500Name_Match(goodName, 76 otherName, 77 &cmpResult, 78 plContext)); 79 80 if ((match && !cmpResult) || (!match && cmpResult)) { 81 testError("unexpected mismatch"); 82 (void)printf("Actual value:\t%d\n", cmpResult); 83 (void)printf("Expected value:\t%d\n", match); 84 } 85 86 cleanup: 87 88 PKIX_TEST_RETURN(); 89 } 90 91 static void 92 testMatch(void *goodObject, void *diffObject, void *diffObjectMatch) 93 { 94 subTest("PKIX_PL_X500Name_Match <match>"); 95 testMatchHelper((PKIX_PL_X500Name *)diffObject, 96 (PKIX_PL_X500Name *)diffObjectMatch, 97 PKIX_TRUE); 98 99 subTest("PKIX_PL_X500Name_Match <non-match>"); 100 testMatchHelper((PKIX_PL_X500Name *)goodObject, 101 (PKIX_PL_X500Name *)diffObject, 102 PKIX_FALSE); 103 } 104 105 static void 106 testDestroy(void *goodObject, void *equalObject, void *diffObject, void *diffObjectMatch) 107 { 108 PKIX_TEST_STD_VARS(); 109 110 subTest("PKIX_PL_X500Name_Destroy"); 111 112 PKIX_TEST_DECREF_BC(goodObject); 113 PKIX_TEST_DECREF_BC(equalObject); 114 PKIX_TEST_DECREF_BC(diffObject); 115 PKIX_TEST_DECREF_BC(diffObjectMatch); 116 117 cleanup: 118 119 PKIX_TEST_RETURN(); 120 } 121 122 int 123 test_x500name(int argc, char *argv[]) 124 { 125 126 PKIX_PL_X500Name *goodObject = NULL; 127 PKIX_PL_X500Name *equalObject = NULL; 128 PKIX_PL_X500Name *diffObject = NULL; 129 PKIX_PL_X500Name *diffObjectMatch = NULL; 130 PKIX_UInt32 actualMinorVersion; 131 PKIX_UInt32 j = 0; 132 133 /* goodInput is encoded in PKIX_ESCASCII */ 134 char *goodInput = "cn=Strauß,ou=labs,o=sun,c=us"; 135 char *diffInput = "cn=steve,ou=labs,o=sun,c=us"; 136 char *diffInputMatch = "Cn=SteVe,Ou=lABs,o=SUn,c=uS"; 137 char *expectedAscii = "CN=Strauß,OU=labs,O=sun,C=us"; 138 139 PKIX_TEST_STD_VARS(); 140 141 startTests("X500Name"); 142 143 PKIX_TEST_EXPECT_NO_ERROR( 144 PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext)); 145 146 createX500Names(goodInput, diffInput, diffInputMatch, 147 &goodObject, &equalObject, &diffObject, &diffObjectMatch); 148 149 PKIX_TEST_EQ_HASH_TOSTR_DUP(goodObject, 150 equalObject, 151 diffObject, 152 expectedAscii, 153 X500Name, 154 PKIX_TRUE); 155 156 testMatch(goodObject, diffObject, diffObjectMatch); 157 158 testDestroy(goodObject, equalObject, diffObject, diffObjectMatch); 159 160 cleanup: 161 162 PKIX_Shutdown(plContext); 163 164 PKIX_TEST_RETURN(); 165 166 endTests("X500Name"); 167 168 return (0); 169 }