Navigation


Changeset 5:c2d2729e3603 in freeDiameter for freeDiameter/tests/testsess.c


Ignore:
Timestamp:
Sep 3, 2009, 2:33:45 PM (15 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Completed new session module tests; some bugs fixed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • freeDiameter/tests/testsess.c

    r3 r5  
    4747};
    4848
    49 void mycleanup( char * sid, struct mystate * data )
     49static void mycleanup( char * sid, struct mystate * data )
    5050{
    5151        /* sanity */
     
    6161}
    6262
     63static __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
    6377/* Main test routine */
    6478int main(int argc, char *argv[])
     
    7892                CHECK( 0, fd_sess_handler_destroy( &hdl2 ) );
    7993                CHECK( 0, fd_sess_handler_create ( &hdl2, mycleanup ) );
    80                 #if 1
     94                #if 0
    8195                fd_sess_dump_hdl(0, hdl1);
    8296                fd_sess_dump_hdl(0, hdl2);
     
    89103                CHECK( 0, fd_sess_new( &sess1, TEST_DIAM_ID, NULL, 0 ) );
    90104                CHECK( 0, fd_sess_new( &sess2, TEST_DIAM_ID, NULL, 0 ) );
    91                 #if 1
     105                #if 0
    92106                fd_sess_dump(0, sess1);
    93107                fd_sess_dump(0, sess2);
     
    106120                CHECK( 0, fd_sess_new( &sess1, TEST_DIAM_ID, TEST_OPT, 0 ) );
    107121                CHECK( 0, fd_sess_new( &sess2, TEST_DIAM_ID, TEST_OPT, strlen(TEST_OPT) - 1 ) );
    108                 #if 1
     122                #if 0
    109123                fd_sess_dump(0, sess1);
    110124                fd_sess_dump(0, sess2);
     
    130144                CHECK( sess3, sess1 );
    131145                CHECK( 0, fd_sess_new( &sess2, NULL, TEST_SID, strlen(TEST_SID) - 1 ) );
    132                 #if 1
     146                #if 0
    133147                fd_sess_dump(0, sess1);
    134148                fd_sess_dump(0, sess2);
     
    140154               
    141155                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       
    154326        /* That's all for the tests yet */
    155327        PASSTEST();
Note: See TracChangeset for help on using the changeset viewer.