Navigation


Changeset 995:2016a0c46bda in freeDiameter


Ignore:
Timestamp:
Mar 19, 2013, 12:19:47 AM (11 years ago)
Author:
Sebastien Decugis <sdecugis@freediameter.net>
Branch:
default
Phase:
public
Message:

Fixed Proxy-Info duplication, added a test case for this

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libfdproto/messages.c

    r992 r995  
    389389                        CHECK_FCT( fd_msg_browse(avp, MSG_BRW_NEXT, &avp, NULL) );
    390390                }
     391                CHECK_FCT( fd_msg_parse_dict( ans, dict, NULL ) );
    391392        }
    392393
     
    763764                msg->msg_public.msg_eteid
    764765                ) );
    765         CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "intern: rwb:%p rt:%d cb:%p(%p) qry:%p asso:%d sess:%p src:%s(%zd)|",
     766        CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "intern: rwb:%p rt:%d cb:%p(%p) qry:%p asso:%d sess:%p src:%s(%zd)|\n",
    766767                        INOBJHDRVAL, msg->msg_rawbuffer, msg->msg_routable, msg->msg_cb.fct, msg->msg_cb.data, msg->msg_query, msg->msg_associated, msg->msg_sess, msg->msg_src_id?:"(nil)", msg->msg_src_id_len) );
    767768        return 0;
     
    820821        }
    821822
    822         CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "intern: src:%p mf:%d raw:%p(%d)|", INOBJHDRVAL, avp->avp_source, avp->avp_mustfreeos, avp->avp_rawdata, avp->avp_rawlen) );
     823        CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "intern: src:%p mf:%d raw:%p(%d)|\n", INOBJHDRVAL, avp->avp_source, avp->avp_mustfreeos, avp->avp_rawdata, avp->avp_rawlen) );
    823824        return 0;
    824825}
  • tests/testmesg.c

    r974 r995  
    755755                        }
    756756                       
    757 #if 1
    758757                        {
    759758                                unsigned char * buftmp = NULL;
     
    779778                                free(buftmp);
    780779                        }
    781 #endif                 
    782780                       
    783781                       
     
    920918                                }
    921919                        }
     920                }
     921               
     922                /* Test the fd_msg_new_answer_from_req function */
     923                {
     924                        struct dict_object * cmd_model = NULL;
     925                        struct msg         * msg = NULL;
     926                        struct avp * pi1, *pi2, *avp;
     927                        char * host1="host1", * host2="host2";
     928                        union avp_value      value;
     929                        struct msg_hdr * msgdata = NULL;
     930                       
     931                        CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Test-Command-Request", &cmd_model, ENOENT ) );
     932                       
     933                        /* Test default behavior without flags */
     934                        {
     935                                /* Create a message with some AVPs inside */
     936                                CHECK( 0, fd_msg_new ( cmd_model, 0, &msg ) );
     937                                CHECK( 0, fd_msg_hdr ( msg, &msgdata ) );
     938                               
     939                                /* Add a session id */
     940                                CHECK( 0, fd_msg_new_session( msg, "testmsg", strlen("testmsg") ) );
     941                               
     942                                /* Create two instances of Proxy-Info */
     943                                ADD_AVP( msg, MSG_BRW_LAST_CHILD, pi1, 0, "Proxy-Info");
     944                                ADD_AVP( msg, MSG_BRW_LAST_CHILD, pi2, 0, "Proxy-Info");
     945
     946                                ADD_AVP( pi1, MSG_BRW_LAST_CHILD, avp, 0, "Proxy-State");
     947                                value.os.data = "ps_pi1";
     948                                value.os.len = strlen(value.os.data);
     949                                CHECK( 0, fd_msg_avp_setvalue ( avp, &value ) );
     950                               
     951                                ADD_AVP( pi2, MSG_BRW_LAST_CHILD, avp, 0, "Proxy-State");
     952                                value.os.data = "pi2_state";
     953                                value.os.len = strlen(value.os.data);
     954                                CHECK( 0, fd_msg_avp_setvalue ( avp, &value ) );
     955                               
     956                                ADD_AVP( pi1, MSG_BRW_FIRST_CHILD, avp, 0, "Proxy-Host");
     957                                value.os.data = host1;
     958                                value.os.len = strlen(host1);
     959                                CHECK( 0, fd_msg_avp_setvalue ( avp, &value ) );
     960                               
     961                                ADD_AVP( pi2, MSG_BRW_LAST_CHILD, avp, 0, "Proxy-Host");
     962                                value.os.data = host2;
     963                                value.os.len = strlen(host2);
     964                                CHECK( 0, fd_msg_avp_setvalue ( avp, &value ) );
     965                               
     966                                ADD_AVP( pi2, MSG_BRW_LAST_CHILD, avp, 73565, "AVP Test - i64");
     967                                value.i64 = 0x123456789abcdeLL;
     968                                CHECK( 0, fd_msg_avp_setvalue ( avp, &value ) );
     969                               
     970                               
     971                                /* Now call the fd_msg_new_answer_from_req function */
     972                                CHECK( 0, fd_msg_new_answer_from_req ( fd_g_config->cnf_dict, &msg, 0 ) );
     973                               
     974                                /* Check there is a Session-Id AVP */
     975                                {
     976                                        struct session * sess;
     977                                        int new;
     978                                        CHECK( 0, fd_msg_sess_get(fd_g_config->cnf_dict, msg, &sess, &new) );
     979                                        CHECK( 1, sess == NULL ? 0 : 1 );
     980                                        CHECK( 0, new ? 1 : 0 );
     981                                }
     982                               
     983                                /* Check there are two Proxy-Info with the two hosts */
     984                                {
     985                                        int got_h1 = 0, got_h2=0;
     986                                        struct dict_object * ph_model;
     987                                        CHECK( 0, fd_msg_browse ( msg, MSG_BRW_FIRST_CHILD, &avp, NULL) );
     988                                        while(avp) {
     989                                                struct avp_hdr * avpdata = NULL;
     990                                                CHECK( 0, fd_msg_avp_hdr ( avp, &avpdata ) );
     991                                                if (avpdata->avp_code == AC_PROXY_INFO) {
     992                                                        struct avp * iavp;
     993                                                        CHECK( 0, fd_msg_browse ( avp, MSG_BRW_FIRST_CHILD, &iavp, NULL) );
     994                                                        while(iavp) {
     995                                                                struct avp_hdr * iavpdata = NULL;
     996                                                                CHECK( 0, fd_msg_avp_hdr ( iavp, &iavpdata ) );
     997                                                                if (iavpdata->avp_code == AC_PROXY_HOST) {
     998                                                                        if (!memcmp(host1, iavpdata->avp_value->os.data, strlen(host1)))
     999                                                                                got_h1++;
     1000                                                                        if (!memcmp(host2, iavpdata->avp_value->os.data, strlen(host2)))
     1001                                                                                got_h2++;
     1002                                                                }
     1003                                                                CHECK( 0, fd_msg_browse ( iavp, MSG_BRW_NEXT, &iavp, NULL) );
     1004                                                        }
     1005                                                }
     1006                                               
     1007                                                CHECK( 0, fd_msg_browse ( avp, MSG_BRW_NEXT, &avp, NULL) );
     1008                                        }
     1009                                       
     1010                                        CHECK(1, got_h1);
     1011                                        CHECK(1, got_h2);
     1012                                }
     1013                               
     1014                        }
     1015                       
    9221016                }
    9231017        }
  • tests/tests.h

    r994 r995  
    6969#define FAILTEST( message... ){                         \
    7070        TRACE_ERROR(message);                           \
    71         TRACE_DEBUG(INFO, "Test failed");               \
     71        TRACE_NOTICE("Test %s failed", __FILE__);       \
    7272        exit(FAIL);                                     \
    7373}
     
    7676#define PASSTEST( ){                                    \
    7777        TRACE_NOTICE("Test %s passed", __FILE__);       \
    78         TRACE_DEBUG(INFO, "Test passed");               \
    7978        (void)fd_core_shutdown();                       \
    8079        (void)fd_core_wait_shutdown_complete();         \
     
    9089#define CHECK( _val, _assert ){                         \
    9190        if (test_verbo > 0) {                           \
    92                 TRACE_ERROR(                            \
     91                TRACE_DEBUG(INFO,                       \
    9392                        "%s:%-4d: CHECK( " #_assert " == "\
    9493                                #_val " )",             \
Note: See TracChangeset for help on using the changeset viewer.