diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2022-02-25 11:56:17 +0100 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2022-02-28 11:43:38 +0100 |
commit | 68c2af54e7fe3d2a790aac30394b30632583326b (patch) | |
tree | 97165d3561786e9a6d2d6711757cf70405772581 /ggsn_tests | |
parent | 97c7197bb08bde3c8cd7cc7fc88c04d0c2fd297d (diff) |
ggsn: Introduce test TC_lots_of_concurrent_pdp_ctx
Change-Id: Iab19963f8e869af8fe0c385abd0fd7bbd9221790
Diffstat (limited to 'ggsn_tests')
-rw-r--r-- | ggsn_tests/GGSN_Tests.ttcn | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/ggsn_tests/GGSN_Tests.ttcn b/ggsn_tests/GGSN_Tests.ttcn index b66d7ba8..58a12a6a 100644 --- a/ggsn_tests/GGSN_Tests.ttcn +++ b/ggsn_tests/GGSN_Tests.ttcn @@ -1862,6 +1862,119 @@ module GGSN_Tests { setverdict(pass); } + /* Test creation, user plane and deletion of big amount (1000) of concurrent PDP context */ + testcase TC_lots_of_concurrent_pdp_ctx() runs on GT_CT { + var Gtp1cUnitdata udc; + var Gtp1uUnitdata udu; + const integer num_ctx := 1000; + var PdpContext ctx[num_ctx]; + timer T_next := 0.01; + var integer next_req_ctx := 0; + var integer rx_resp_ctx := 0; + var integer rx_pong := 0; + var OCT4 dns1_addr; + var OCT4 saddr; + var integer teic; + var integer idx; + + f_init(); + + for (var integer i := 0; i < num_ctx; i := i + 1) { + ctx[i] := valueof(t_DefinePDP(f_rnd_imsi('26242'H), f_rnd_msisdn('1234'O), c_ApnInternet, valueof(t_EuaIPv4Dyn))); + ctx[i].teic := int2oct(i+1, 4); /* +1: skip TEIC=0 */ + ctx[i].teid := int2oct(i+1, 4); /* +1: skip TEID=0 */ + ctx[i].pco_req := valueof(ts_PCO_IPv4_DNS_CONT); + } + + T_default.start(60.0); + + T_next.start; + alt { + [DIAMETER_PROC.checkstate("Connected")] as_DIA_CCR(INITIAL_REQUEST) { repeat; } + [] pingpong(); + [] T_next.timeout { + f_send_gtpc(ts_GTPC_CreatePDP(g_peer_c, g_c_seq_nr, ctx[next_req_ctx].imsi, g_restart_ctr, + ctx[next_req_ctx].teid, ctx[next_req_ctx].teic, ctx[next_req_ctx].nsapi, + ctx[next_req_ctx].eua, ctx[next_req_ctx].apn, g_sgsn_ip_c, g_sgsn_ip_u, + ctx[next_req_ctx].msisdn, ctx[next_req_ctx].pco_req, ctx[next_req_ctx].ratType, + ctx[next_req_ctx].uli)); + next_req_ctx := next_req_ctx + 1; + if (next_req_ctx < num_ctx) { + T_next.start; + } + repeat; + } + [] GTPC.receive(tr_GTPC_MsgType(g_peer_c, createPDPContextResponse, ?)) -> value udc { + teic := oct2int(udc.gtpc.teid); + if (not match(teic, (1 .. num_ctx))) { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + "Rx Unexpected TEIC"); + } + idx := teic - 1; + f_handle_create_req(ctx[idx], udc); + rx_resp_ctx := rx_resp_ctx + 1; + + dns1_addr := f_PCO_extract_proto(ctx[idx].pco_neg, '000d'O); + saddr := ctx[idx].eua.endUserAddress.endUserAddressIPv4.ipv4_address; + f_send_gtpu(ctx[idx], f_gen_icmpv4_echo(saddr, dns1_addr)); + repeat; + } + [] GTPU.receive(tr_GTPU_GPDU(g_peer_u, ?)) -> value udu { + var octetstring gpdu := udu.gtpu.gtpu_IEs.g_PDU_IEs.data; + var IPv4_packet ip4 := f_IPv4_dec(gpdu); + if (ip4.header.ver != 4) { + repeat; + } + var PDU_ICMP icmp4 := f_dec_PDU_ICMP(ip4.payload); + if (not match(icmp4, (tr_ICMPv4_ERP, tr_ICMPv4_DU))) { + repeat; + } + rx_pong := rx_pong + 1; + if (rx_pong < num_ctx) { + repeat; + } + setverdict(pass); + } + [] GTPC.receive { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Rx Unexpected GTPC"); } + [] GTPU.receive { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Rx Unexpected GTPU"); } + } + + /* Let's close them now: */ + next_req_ctx := 0; + rx_resp_ctx := 0; + T_next.start; + alt { + [DIAMETER_PROC.checkstate("Connected")] as_DIA_CCR(TERMINATION_REQUEST) { repeat; } + [] pingpong(); + [] T_next.timeout { + f_send_gtpc(ts_GTPC_DeletePDP(g_peer_c, g_c_seq_nr, ctx[next_req_ctx].teic_remote, ctx[next_req_ctx].nsapi, '1'B)); + next_req_ctx := next_req_ctx + 1; + if (next_req_ctx < num_ctx) { + T_next.start; + } + repeat; + } + [] GTPC.receive(tr_GTPC_MsgType(g_peer_c, deletePDPContextResponse, ?)) -> value udc { + teic := oct2int(udc.gtpc.teid); + if (not match(teic, (1 .. num_ctx))) { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + "Rx Unexpected TEIC"); + } + rx_resp_ctx := rx_resp_ctx + 1; + if (rx_resp_ctx < num_ctx) { + repeat; + } + setverdict(pass); + } + [] GTPC.receive { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Rx Unexpected GTPC"); } + [] GTPU.receive { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Rx Unexpected GTPU"); } + } + T_next.stop; + + T_default.stop; + setverdict(pass); + } + control { execute(TC_pdp4_act_deact()); execute(TC_pdp4_act_deact_ipcp()); @@ -1904,5 +2017,7 @@ module GGSN_Tests { execute(TC_act_deact_retrans_duplicate()); execute(TC_pdp_act_restart_ctr_echo()); + + execute(TC_lots_of_concurrent_pdp_ctx()); } } |