Navigation


Changeset 1425:b09f1b4c9fad in freeDiameter for tests


Ignore:
Timestamp:
Feb 19, 2020, 8:26:29 AM (4 years ago)
Author:
Luke Mewburn <luke@mewburn.net>
Branch:
default
Phase:
public
committer:
Luke Mewburn <luke@mewburn.net> 1582068430 -39600
Message:

fd_msg_add_result: add function

Add fd_msg_add_result() as a superset of fd_msg_rescode_set()
to allow setting of either Result-Code or Experimental-Result (Grouped),
depending upon whether the supplied vendor is 0 or not.

Reimplement fd_msg_rescode_set() in terms of fd_msg_add_result().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/testmesg.c

    r1423 r1425  
    283283                        CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_APPLICATION, APPLICATION_BY_NAME, "Application test", &application, ENOENT ) );
    284284                        CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_COMMAND, &cmd_data , application, &command ) );
     285                        ADD_RULE(command, 0, "Session-Id",                      RULE_FIXED_HEAD, 1, 1, 1);
     286                        ADD_RULE(command, 0, "Result-Code",                     RULE_OPTIONAL,   0, 1, 0);
     287                        ADD_RULE(command, 0, "Experimental-Result",             RULE_OPTIONAL,   0, 1, 0);
     288                        ADD_RULE(command, 0, "Origin-Host",                     RULE_REQUIRED,   1, 1, 0);
     289                        ADD_RULE(command, 0, "Origin-Realm",                    RULE_REQUIRED,   1, 1, 0);
    285290                }
    286291               
     
    317322                        CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_AVP, &avp_data , type, NULL ) );
    318323                }
    319                
     324
     325                {
     326                        struct dict_object     * type = NULL;
     327                        struct dict_type_data    type_data = { AVP_TYPE_UNSIGNED32, "Enumerated(73565/Experimental-Result-Code)" };
     328                        struct dict_avp_data     avp_data = { 73576, 73565, "Experimental-Result-Code", AVP_FLAG_VENDOR, AVP_FLAG_VENDOR, AVP_TYPE_UNSIGNED32 };
     329                        struct dict_enumval_data val1 = { "DIAMETER_TEST_RESULT_1000", { .u32 = 1000 } };
     330                        struct dict_enumval_data val2 = { "DIAMETER_TEST_RESULT_5000", { .u32 = 5000 } };
     331                        CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_TYPE, &type_data , NULL, &type ) );
     332                        CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_AVP, &avp_data , type, NULL ) );
     333                        CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_ENUMVAL, &val1 , type, NULL ) );
     334                        CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_ENUMVAL, &val2 , type, NULL ) );
     335                }
     336
    320337                #if 0
    321338                {
     
    14781495        }
    14791496
     1497        /* Test the fd_msg_add_result function for Result-Code */
     1498        {
     1499                struct msg              * msg = NULL;
     1500                struct dict_object      * avp_model = NULL;
     1501                struct avp              * rc = NULL;
     1502                struct avp_hdr          * avpdata = NULL;
     1503
     1504                {
     1505                        struct dict_object * cmd_model = NULL;
     1506                        CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Test-Command-Answer", &cmd_model, ENOENT ) );
     1507
     1508                        /* Create a message */
     1509                        CHECK( 0, fd_msg_new ( cmd_model, 0, &msg ) );
     1510
     1511                        /* Add a session id */
     1512                        CHECK( 0, fd_msg_new_session( msg, (os0_t)"tm2", strlen("tm2") ) );
     1513
     1514                        /* Find the DICT_TYPE Enumerated(Result-Code) */
     1515                        struct dict_object * restype = NULL;
     1516                        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_TYPE, TYPE_BY_NAME, "Enumerated(Result-Code)", &restype, ENOENT ) );
     1517
     1518                        /* Now test the behavior of fd_msg_add_result for Result-Code AVP */
     1519                        CHECK( 0, fd_msg_add_result(msg, 0, restype, "DIAMETER_SUCCESS", NULL, NULL, 1) );
     1520
     1521                        LOG_D("%s", fd_msg_dump_treeview(FD_DUMP_TEST_PARAMS, msg, fd_g_config->cnf_dict, 0, 1));
     1522                }
     1523
     1524                /* Ensure Result-Code is present */
     1525                CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Result-Code", &avp_model, ENOENT ) );
     1526                CHECK( 0, fd_msg_search_avp( msg, avp_model, &rc ) );
     1527
     1528                /* Check the Result-Code AVP value is DIAMETER_SUCCESS */
     1529                CHECK( 0, fd_msg_avp_hdr ( rc, &avpdata ) );
     1530                CHECK( ER_DIAMETER_SUCCESS, avpdata->avp_value->u32 );
     1531
     1532                /* Ensure Experimental-Result is missing */
     1533                CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Experimental-Result", &avp_model, ENOENT ) );
     1534                CHECK( ENOENT, fd_msg_search_avp( msg, avp_model, NULL ) );
     1535
     1536                /* Free msg */
     1537                CHECK( 0, fd_msg_free( msg ) );
     1538        }
     1539
     1540        /* Test the fd_msg_add_result function for Experimental-Result */
     1541        {
     1542                struct msg              * msg = NULL;
     1543                struct dict_object      * avp_model = NULL;
     1544                struct avp              * er = NULL;
     1545                struct avp              * erc = NULL;
     1546                struct avp_hdr          * avpdata = NULL;
     1547
     1548                {
     1549                        struct dict_object * cmd_model = NULL;
     1550                        CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Test-Command-Answer", &cmd_model, ENOENT ) );
     1551
     1552                        /* Create a message */
     1553                        CHECK( 0, fd_msg_new ( cmd_model, 0, &msg ) );
     1554
     1555                        /* Add a session id */
     1556                        CHECK( 0, fd_msg_new_session( msg, (os0_t)"tm2", strlen("tm2") ) );
     1557
     1558                        /* Find the DICT_TYPE Enumerated(73565/Experimental-Result-Code) */
     1559                        struct dict_object * restype = NULL;
     1560                        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_TYPE, TYPE_BY_NAME, "Enumerated(73565/Experimental-Result-Code)", &restype, ENOENT ) );
     1561
     1562                        /* Now test the behavior of fd_msg_add_result for Experimental-Result AVP */
     1563                        CHECK( 0, fd_msg_add_result(msg, 73565, restype, "DIAMETER_TEST_RESULT_5000", NULL, NULL, 1) );
     1564
     1565                        LOG_D("%s", fd_msg_dump_treeview(FD_DUMP_TEST_PARAMS, msg, fd_g_config->cnf_dict, 0, 1));
     1566                }
     1567
     1568                /* Ensure Result-Code is missing */
     1569                CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Result-Code", &avp_model, ENOENT ) );
     1570                CHECK( ENOENT, fd_msg_search_avp( msg, avp_model, NULL ) );
     1571
     1572                /* Ensure Experimental-Result is present */
     1573                CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Experimental-Result", &avp_model, ENOENT ) );
     1574                CHECK( 0, fd_msg_search_avp( msg, avp_model, &er ) );
     1575
     1576                /* Ensure Experimental-Result-Code is present */
     1577                CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Experimental-Result-Code", &avp_model, ENOENT ) );
     1578                CHECK( 0, fd_msg_search_avp( er, avp_model, &erc ) );
     1579
     1580                /* Check the Experimental-Result-Code AVP value is 5000 */
     1581                CHECK( 0, fd_msg_avp_hdr ( erc, &avpdata ) );
     1582                CHECK( 5000, avpdata->avp_value->u32 );
     1583
     1584                /* Free msg */
     1585                CHECK( 0, fd_msg_free( msg ) );
     1586        }
     1587
    14801588        /* Check IPv4 -> IPv6 and IPv6->IPv4 mapping */
    14811589        {
Note: See TracChangeset for help on using the changeset viewer.