Changeset 5:c2d2729e3603 in freeDiameter for freeDiameter/tests/testsess.c
- Timestamp:
- Sep 3, 2009, 2:33:45 PM (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
freeDiameter/tests/testsess.c
r3 r5 47 47 }; 48 48 49 void mycleanup( char * sid, struct mystate * data )49 static void mycleanup( char * sid, struct mystate * data ) 50 50 { 51 51 /* sanity */ … … 61 61 } 62 62 63 static __inline__ struct mystate * new_state(char * sid, int *freed) 64 { 65 struct mystate *new; 66 new = malloc(sizeof(struct mystate)); 67 CHECK( 1, new ? 1 : 0 ); 68 memset(new, 0, sizeof(struct mystate)); 69 new->eyec = TEST_EYEC; 70 new->sid = strdup(sid); 71 CHECK( 1, new->sid ? 1 : 0 ); 72 new->freed = freed; 73 return new; 74 } 75 76 63 77 /* Main test routine */ 64 78 int main(int argc, char *argv[]) … … 78 92 CHECK( 0, fd_sess_handler_destroy( &hdl2 ) ); 79 93 CHECK( 0, fd_sess_handler_create ( &hdl2, mycleanup ) ); 80 #if 194 #if 0 81 95 fd_sess_dump_hdl(0, hdl1); 82 96 fd_sess_dump_hdl(0, hdl2); … … 89 103 CHECK( 0, fd_sess_new( &sess1, TEST_DIAM_ID, NULL, 0 ) ); 90 104 CHECK( 0, fd_sess_new( &sess2, TEST_DIAM_ID, NULL, 0 ) ); 91 #if 1105 #if 0 92 106 fd_sess_dump(0, sess1); 93 107 fd_sess_dump(0, sess2); … … 106 120 CHECK( 0, fd_sess_new( &sess1, TEST_DIAM_ID, TEST_OPT, 0 ) ); 107 121 CHECK( 0, fd_sess_new( &sess2, TEST_DIAM_ID, TEST_OPT, strlen(TEST_OPT) - 1 ) ); 108 #if 1122 #if 0 109 123 fd_sess_dump(0, sess1); 110 124 fd_sess_dump(0, sess2); … … 130 144 CHECK( sess3, sess1 ); 131 145 CHECK( 0, fd_sess_new( &sess2, NULL, TEST_SID, strlen(TEST_SID) - 1 ) ); 132 #if 1146 #if 0 133 147 fd_sess_dump(0, sess1); 134 148 fd_sess_dump(0, sess2); … … 140 154 141 155 CHECK( 0, fd_sess_destroy( &sess2 ) ); 142 } 143 144 145 146 /* 147 int fd_sess_new ( struct session ** session, char * diamId, char * opt, size_t optlen ); 148 int fd_sess_fromsid ( char * sid, size_t len, struct session ** session, int * new); 149 int fd_sess_getsid ( struct session * session, char ** sid ); 150 int fd_sess_settimeout( struct session * session, const struct timespec * timeout ); 151 int fd_sess_destroy ( struct session ** session ); 152 */ 153 156 CHECK( 0, fd_sess_destroy( &sess1 ) ); 157 } 158 159 /* Test fd_sess_fromsid */ 160 { 161 CHECK( 0, fd_sess_fromsid( TEST_SID, strlen(TEST_SID), &sess1, &new ) ); 162 CHECK( 1, new ? 1 : 0 ); 163 164 CHECK( 0, fd_sess_fromsid( TEST_SID, strlen(TEST_SID), &sess2, &new ) ); 165 CHECK( 0, new ); 166 CHECK( sess1, sess2 ); 167 168 CHECK( 0, fd_sess_fromsid( TEST_SID, strlen(TEST_SID), &sess3, NULL ) ); 169 CHECK( sess1, sess3 ); 170 171 CHECK( 0, fd_sess_destroy( &sess1 ) ); 172 } 173 174 /* Test timeout function */ 175 { 176 struct timespec timeout; 177 178 CHECK( 0, fd_sess_fromsid( TEST_SID, strlen(TEST_SID), &sess1, &new ) ); 179 CHECK( 1, new ? 1 : 0 ); 180 181 CHECK( 0, clock_gettime(CLOCK_REALTIME, &timeout) ); 182 CHECK( 0, fd_sess_settimeout( sess1, &timeout) ); 183 timeout.tv_sec = 0; 184 timeout.tv_nsec= 50000000; /* 50 ms */ 185 CHECK( 0, clock_nanosleep(CLOCK_REALTIME, 0, &timeout, NULL) ); 186 187 CHECK( 0, fd_sess_fromsid( TEST_SID, strlen(TEST_SID), &sess1, &new ) ); 188 CHECK( 1, new ? 1 : 0 ); 189 190 CHECK( 0, clock_gettime(CLOCK_REALTIME, &timeout) ); 191 timeout.tv_sec += 2678500; /* longer that SESS_DEFAULT_LIFETIME */ 192 CHECK( 0, fd_sess_settimeout( sess1, &timeout) ); 193 194 /* Create a second session */ 195 CHECK( 0, fd_sess_new( &sess2, TEST_DIAM_ID, NULL, 0 ) ); 196 197 /* We don't really have away to verify the expiry list is in proper order automatically here... */ 198 199 CHECK( 0, fd_sess_destroy( &sess2 ) ); 200 CHECK( 0, fd_sess_destroy( &sess1 ) ); 201 } 202 203 204 /* Test states operations */ 205 { 206 struct mystate * ms[6], *tms; 207 int freed[6]; 208 int i; 209 struct timespec timeout; 210 211 /* Create three sessions */ 212 CHECK( 0, fd_sess_new( &sess1, TEST_DIAM_ID, NULL, 0 ) ); 213 CHECK( 0, fd_sess_new( &sess2, TEST_DIAM_ID, NULL, 0 ) ); 214 CHECK( 0, fd_sess_new( &sess3, TEST_DIAM_ID, NULL, 0 ) ); 215 216 /* Create 2 states */ 217 CHECK( 0, fd_sess_getsid(sess1, &str1) ); 218 freed[0] = 0; 219 ms[0] = new_state(str1, &freed[0]); 220 ms[1] = new_state(str1, NULL); 221 222 tms = ms[0]; /* save a copy */ 223 CHECK( 0, fd_sess_state_store ( hdl1, sess1, &ms[0] ) ); 224 CHECK( NULL, ms[0] ); 225 CHECK( EINVAL, fd_sess_state_store ( hdl1, sess1, NULL ) ); 226 CHECK( EALREADY, fd_sess_state_store ( hdl1, sess1, &ms[1] ) ); 227 CHECK( 1, ms[1] ? 1 : 0 ); 228 229 #if 0 230 fd_sess_dump(0, sess1); 231 #endif 232 233 CHECK( 0, fd_sess_state_retrieve( hdl1, sess1, &ms[0] ) ); 234 CHECK( tms, ms[0] ); 235 CHECK( 0, freed[0] ); 236 237 CHECK( 0, fd_sess_state_retrieve( hdl1, sess2, &tms ) ); 238 CHECK( NULL, tms ); 239 240 mycleanup(str1, ms[0]); 241 mycleanup(str1, ms[1]); 242 243 /* Now create 6 states */ 244 memset(&freed[0], 0, sizeof(freed)); 245 CHECK( 0, fd_sess_getsid(sess1, &str1) ); 246 ms[0] = new_state(str1, &freed[0]); 247 ms[1] = new_state(str1, &freed[1]); 248 CHECK( 0, fd_sess_getsid(sess2, &str1) ); 249 ms[2] = new_state(str1, &freed[2]); 250 ms[3] = new_state(str1, &freed[3]); 251 CHECK( 0, fd_sess_getsid(sess3, &str1) ); 252 ms[4] = new_state(str1, &freed[4]); 253 ms[5] = new_state(str1, &freed[5]); 254 str2 = strdup(str1); 255 CHECK( 1, str2 ? 1 : 0 ); 256 257 /* Store the six states */ 258 CHECK( 0, fd_sess_state_store ( hdl1, sess1, &ms[0] ) ); 259 CHECK( 0, fd_sess_state_store ( hdl2, sess1, &ms[1] ) ); 260 CHECK( 0, fd_sess_state_store ( hdl1, sess2, &ms[2] ) ); 261 CHECK( 0, fd_sess_state_store ( hdl2, sess2, &ms[3] ) ); 262 CHECK( 0, fd_sess_state_store ( hdl1, sess3, &ms[4] ) ); 263 CHECK( 0, fd_sess_state_store ( hdl2, sess3, &ms[5] ) ); 264 265 #if 0 266 fd_sess_dump(0, sess1); 267 fd_sess_dump(0, sess2); 268 fd_sess_dump(0, sess3); 269 #endif 270 271 /* Destroy session 3 */ 272 CHECK( 0, fd_sess_destroy( &sess3 ) ); 273 CHECK( 0, freed[0] ); 274 CHECK( 0, freed[1] ); 275 CHECK( 0, freed[2] ); 276 CHECK( 0, freed[3] ); 277 CHECK( 1, freed[4] ); 278 CHECK( 1, freed[5] ); 279 280 /* Destroy handler 2 */ 281 CHECK( 0, fd_sess_handler_destroy( &hdl2 ) ); 282 CHECK( 0, freed[0] ); 283 CHECK( 1, freed[1] ); 284 CHECK( 0, freed[2] ); 285 CHECK( 1, freed[3] ); 286 CHECK( 1, freed[4] ); 287 CHECK( 1, freed[5] ); 288 289 #if 1 290 fd_sess_dump(0, sess1); 291 fd_sess_dump(0, sess2); 292 #endif 293 294 /* Create again session 3, check that no data is associated to it */ 295 CHECK( 0, fd_sess_fromsid( str2, strlen(str2), &sess3, &new ) ); 296 CHECK( 1, new ? 1 : 0 ); 297 CHECK( 0, fd_sess_state_retrieve( hdl1, sess3, &tms ) ); 298 CHECK( NULL, tms ); 299 CHECK( 0, fd_sess_destroy( &sess3 ) ); 300 free(str2); 301 302 /* Timeout does call cleanups */ 303 CHECK( 0, clock_gettime(CLOCK_REALTIME, &timeout) ); 304 CHECK( 0, fd_sess_settimeout( sess2, &timeout) ); 305 #if 1 306 fd_sess_dump(0, sess1); 307 fd_sess_dump(0, sess2); 308 #endif 309 timeout.tv_sec = 0; 310 timeout.tv_nsec= 50000000; /* 50 ms */ 311 CHECK( 0, clock_nanosleep(CLOCK_REALTIME, 0, &timeout, NULL) ); 312 CHECK( 0, freed[0] ); 313 CHECK( 1, freed[1] ); 314 CHECK( 1, freed[2] ); 315 CHECK( 1, freed[3] ); 316 CHECK( 1, freed[4] ); 317 CHECK( 1, freed[5] ); 318 319 /* Check the last data can still be retrieved */ 320 CHECK( 0, fd_sess_state_retrieve( hdl1, sess1, &tms ) ); 321 CHECK( 0, fd_sess_getsid(sess1, &str1) ); 322 mycleanup(str1, tms); 323 } 324 325 154 326 /* That's all for the tests yet */ 155 327 PASSTEST();
Note: See TracChangeset
for help on using the changeset viewer.