Navigation


Changeset 707:e387d5c6b6f5 in freeDiameter for tests/testostr.c


Ignore:
Timestamp:
Feb 9, 2011, 6:08:54 PM (13 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Added support for Internationalized Domain Names (IDNA) using GNU libidn

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/testostr.c

    r706 r707  
    3838#define TEST_STR (os0_t)"This is my test string (with extra unused data)"
    3939
     40/* The following string contains UTF-8 encoded characters (Chinese characters) */
     41#define TEST_IDN_UTF8  "freeDiameter.中国"
     42#define TEST_IDN_CONV  "freeDiameter.xn--fiqs8s"
     43
    4044/* Main test routine */
    4145int main(int argc, char *argv[])
     
    6771                CHECK( hash, fd_os_hash(buf + 1, CONSTSTRLEN(TEST_STR)) );
    6872        }
     73       
     74        /* Check the Diameter Identity functions */
     75        {
     76                char * res;
     77                size_t len;
     78               
     79                /* A valid ASCII domain name */
     80                res = TEST_IDN_CONV;
     81                CHECK( 0, fd_os_validate_DiameterIdentity(&res, &len, 1) );
     82                CHECK( 0, strcasecmp(res, TEST_IDN_CONV) ); /* the function does not change a valid DN */
     83                CHECK( 0, fd_os_validate_DiameterIdentity(&res, &len, 0) );
     84                CHECK( 0, strcasecmp(res, TEST_IDN_CONV) );
     85                CHECK( CONSTSTRLEN(TEST_IDN_CONV), len );
     86                free(res);
     87               
     88                /* Now, an invalid string */
     89                res = TEST_IDN_UTF8;
     90               
     91                #ifdef DIAMID_IDNA_IGNORE
     92               
     93                /* The UTF-8 chars are considered valid */
     94                CHECK( 1, fd_os_is_valid_DiameterIdentity((os0_t)TEST_IDN_UTF8, CONSTSTRLEN(TEST_IDN_UTF8) );
     95               
     96                /* The string should be passed unmodified */
     97                CHECK( 0, fd_os_validate_DiameterIdentity(&res, &len, 1) );
     98                CHECK( 0, strcasecmp(res, TEST_IDN_UTF8) );
     99                CHECK( 0, fd_os_cmp(res, len, TEST_IDN_UTF8, CONSTSTRLEN(TEST_IDN_UTF8)) );
     100                CHECK( 0, fd_os_almostcasecmp(res, len, TEST_IDN_UTF8, CONSTSTRLEN(TEST_IDN_UTF8)) );
     101                CHECK( 0, fd_os_validate_DiameterIdentity(&res, &len, 0) );
     102                CHECK( 0, strcasecmp(res, TEST_IDN_UTF8) );
     103                CHECK( CONSTSTRLEN(TEST_IDN_UTF8), len );
     104                free(res);
     105               
     106                #else /* DIAMID_IDNA_IGNORE */
     107               
     108                /* The UTF-8 chars are recognized as invalid DiameterIdentity */
     109                CHECK( 0, fd_os_is_valid_DiameterIdentity((os0_t)TEST_IDN_UTF8, CONSTSTRLEN(TEST_IDN_UTF8) ));
     110               
     111                # ifdef DIAMID_IDNA_REJECT
     112               
     113                /* The string must be rejected */
     114                CHECK( EINVAL, fd_os_validate_DiameterIdentity(&res, &len, 1) );
     115               
     116                # else /* DIAMID_IDNA_REJECT */
     117               
     118                /* The string should be transformed into TEST_IDN_CONV */
     119                CHECK( 0, fd_os_validate_DiameterIdentity(&res, &len, 1) );
     120                CHECK( 0, strcasecmp(res, TEST_IDN_CONV) );
     121                CHECK( CONSTSTRLEN(TEST_IDN_CONV), len );
     122                free(res);
     123               
     124                # endif /* DIAMID_IDNA_REJECT */
     125                #endif /* DIAMID_IDNA_IGNORE */
    69126
     127        }
     128       
    70129        /* That's all for the tests yet */
    71130        PASSTEST();
Note: See TracChangeset for help on using the changeset viewer.