From f8cb447dbc14a33edf2df989855f7265d0e1364e Mon Sep 17 00:00:00 2001 From: laranjeiro Date: Wed, 21 Oct 2009 10:56:28 +0000 Subject: cesar/cp/sta/action Add unit test to handle the CCo's Mac address as broadcast. git-svn-id: svn+ssh://pessac/svn/cesar/trunk@6214 017c9cb6-072f-447c-8318-d5b54f68fe89 --- cesar/cp/sta/action/src/assoc.c | 6 ++- cesar/cp/sta/action/test/utest/src/assoc.c | 68 ++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) (limited to 'cesar/cp/sta') diff --git a/cesar/cp/sta/action/src/assoc.c b/cesar/cp/sta/action/src/assoc.c index c0dff3bbf3..6e67a1ca6f 100644 --- a/cesar/cp/sta/action/src/assoc.c +++ b/cesar/cp/sta/action/src/assoc.c @@ -190,8 +190,10 @@ cp_sta_action_assoc__wait_assoc_cnf__cc_assoc_cnf__common (cp_t *ctx, /* Set our net to the CCo net. */ our_net = ctx->sta_action.assoc.cco_net; cp_sta_mgr_set_our_avln (ctx, our_net); - /* Promote UCCo to CCo. */ - if (ctx->sta_action.assoc.peer.tei == 0) + /* Promote UCCo to CCo. + Or the CCo's mac address was not know. */ + if ((ctx->sta_action.assoc.peer.tei == MAC_TEI_UNASSOCIATED) + || (ctx->sta_action.assoc.peer.mac == MAC_BROADCAST)) { cp_sta_t *cco = cp_sta_mgr_sta_add (ctx, our_net, mme->peer.tei, diff --git a/cesar/cp/sta/action/test/utest/src/assoc.c b/cesar/cp/sta/action/test/utest/src/assoc.c index 3a36559d81..42308854b0 100644 --- a/cesar/cp/sta/action/test/utest/src/assoc.c +++ b/cesar/cp/sta/action/test/utest/src/assoc.c @@ -814,11 +814,79 @@ assoc_basic_test_cases (test_t t) test_sta_action_uninit (&ctx); } +void +assoc_basic_test_cases_cco_unknow_mac_addr (test_t t) +{ + test_sta_action_t ctx; + test_sta_action_init (&ctx); + cp_sta_action_init (&ctx.cp); + scenario_globals_t globals = { + .cp = &ctx.cp, + }; + + test_case_begin (t, "assoc"); + /* Create a CCo to associate with. */ + const cp_snid_t snid = 2; + const cp_nid_t nid = 0xf11111111111ull; + const cp_tei_t cco_tei = 1, sta_tei = 2; + const mac_t cco_mac = 0x111111111111ull; + cp_net_t *cco_net; + cp_sta_t *cco = NULL; + cp_mme_peer_t cco_peer = CP_MME_PEER (cco_mac, cco_tei); + /* Association test. */ + scenario_entry_t associate_entries[] = { + SCENARIO_ACTION (assoc_start, .cco_net = cco_net, .cco = cco), + SCENARIO_EVENT (cp_fsm_event_bare_new, + .type = CP_FSM_EVENT_TYPE_to_assoc), + SCENARIO_ACTION (assoc__unassociated__to_assoc), + SCENARIO_EVENT (cp_msg_cc_assoc_req_send, + .peer = CP_MME_PEER (MAC_BROADCAST, cco_tei), + .request_type = CP_MSG_CC_ASSOC_REQ_TYPE_NEW, + .nid = nid, .cco_cap = CP_CCO_LEVEL, + .proxy_cap = CP_PCO_CAP), + SCENARIO_ACTION (assoc__wait_assoc_cnf__cc_assoc_cnf, + .peer = cco_peer), + SCENARIO_EVENT (cp_msg_cc_assoc_cnf_receive, .ok = true, + .result = CP_MSG_CC_ASSOC_CNF_RESULT_SUCCESS, + .nid = nid, .snid = snid, .sta_tei = sta_tei, + .lease_time_min = 15), + SCENARIO_EVENT (cp_sta_core_gen_timed_event, + .delay_min_ms = 10 * 60 * 1000, + .delay_max_ms = 10 * 60 * 1000), + SCENARIO_EVENT (cp_msg_cm_get_key_req_send, + .peer = cco_peer, .peks = CP_MME_PEKS_NMK, + .pid = 0, .pmn = 1, .relayed = false, + .key_type = CP_MSG_KEY_NEK, .nid = nid), + SCENARIO_EVENT (cp_fsm_branch, + .branch = CP_FSM_BRANCH (WAIT_ASSOC_CONF, + CC_ASSOC_CNF, ok)), + SCENARIO_END + }; + test_begin (t, "ok") + { + assoc_create_cco (t, &ctx, snid, nid, cco_tei, MAC_BROADCAST, &cco_net, + &cco, associate_entries); + scenario_run (t, associate_entries, &globals); + test_fail_unless (cp_sta_own_data_get_nid (&ctx.cp) == nid); + test_fail_unless (cp_sta_own_data_get_snid (&ctx.cp) == snid); + test_fail_unless (cp_sta_own_data_get_tei (&ctx.cp) == sta_tei); + cp_net_t *our_net = cp_sta_mgr_get_our_avln (&ctx.cp); + cp_sta_t *our_cco = cp_net_get_cco (&ctx.cp, our_net); + test_fail_unless (our_cco == cco); + test_fail_unless (cp_sta_get_mac_address (our_cco) == cco_mac); + slab_release (our_cco); + } test_end; + /* Cleanup. */ + slab_release (cco); + test_sta_action_uninit (&ctx); +} + void assoc_test_suite (test_t t) { test_suite_begin (t, "assoc"); assoc_basic_test_cases (t); + assoc_basic_test_cases_cco_unknow_mac_addr (t); test_case_begin (t, "memory"); test_begin (t, "memory") { -- cgit v1.2.3