pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/27420 )
Change subject: ggsn_tests: Wait for retrans queues to drain after each test ......................................................................
ggsn_tests: Wait for retrans queues to drain after each test
Otherwise a new test may reuse the same GTP seqnum, and if it's still in the gtp retransmit resp queue of the GGSN, it may be identified as a duplicate retransmittion of a previous message (previous test) and send back the previous response instead of processing the request.
Related: OS#5485 Change-Id: I1b04691987b883f63c95c0322a477db4a43df2b1 --- M ggsn_tests/GGSN_Tests.ttcn 1 file changed, 50 insertions(+), 3 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/20/27420/1
diff --git a/ggsn_tests/GGSN_Tests.ttcn b/ggsn_tests/GGSN_Tests.ttcn index 05d335a..eb09555 100644 --- a/ggsn_tests/GGSN_Tests.ttcn +++ b/ggsn_tests/GGSN_Tests.ttcn @@ -259,6 +259,17 @@ } }
+ function f_shutdown_helper() runs on GT_CT { + /* Sleep N3_REQUESTS * T3_REQUEST seconds, nowadays 5*3=15s. + * This ensures all retransmit queues are cleared before jumping + * into next tests, hence avoding situation where a test resuses + * a seqnum still in the GGSN's resp queue (dup req detector). + * See OS#5485 avout decreasing time. We could also add a new + * VTY command that calls gtp_clear_queues() */ + f_sleep(15.0); + setverdict(pass); + } + /* Altstep implementing responses to any incoming echo requests */ private altstep pingpong() runs on GT_CT { var Gtp1cUnitdata ud; @@ -1023,6 +1034,7 @@ var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInet6, valueof(t_EuaIPv6Dyn))); f_pdp_ctx_act(ctx); f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test IPv6 context activation for dynamic IPv6 EUA wirh request of IPv6 DNS in PCO */ @@ -1046,6 +1058,7 @@ }
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test PDP context activation for dynamic IPv6 EUA with IPv6 DNS in PCO and router solicitation/advertisement */ @@ -1065,6 +1078,7 @@ f_send_gtpu(ctx, f_gen_icmpv6_neigh_solicit_for_pdp(ctx));
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test PDP context activation for dynamic IPv6 EUA with IPv6 DNS in PCO and router solicitation/advertisement. @@ -1096,6 +1110,7 @@ f_wait_icmp6_echo_reply(ctx);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Check that attempting RA with another ll src addr won't work, packet dropped: */ @@ -1115,6 +1130,7 @@ f_wait_gtpu_fail(ctx);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Assert that packets with wrong global src addr are dropped by GGSN */ @@ -1135,6 +1151,7 @@ f_wait_gtpu_fail(ctx);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Send an IPv4 ICMP ECHO REQUEST to APN6, should fail (packet dropped */ @@ -1154,6 +1171,7 @@ f_wait_gtpu_fail(ctx);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Validate if different clients (pdp ctx) can reach one another through GGSN. */ @@ -1186,6 +1204,7 @@
f_pdp_ctx_del(ctxA, '1'B); f_pdp_ctx_del(ctxB, '1'B); + f_shutdown_helper(); }
/* Test PDP context activation for dynamic IPv4 EUA without DNS request */ @@ -1194,6 +1213,7 @@ var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInternet, valueof(t_EuaIPv4Dyn))); f_pdp_ctx_act(ctx); f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test PDP context activation for dynamic IPv4 EUA with IPv4 DNS in IPCP */ @@ -1219,6 +1239,7 @@ } } f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test PDP context activation for dynamic IPv4 EUA with IPv4 DNS in IPCP + PAP authentication (broken) */ @@ -1252,6 +1273,7 @@ setverdict(fail, "PAP isn't an AuthenticateAck: ", pap); } f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test PDP context activation for dynamic IPv4 EUA with IPv4 DNS in PCO */ @@ -1274,6 +1296,7 @@ }
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test PDP context activation for dynamic IPv4 EUA. @@ -1293,6 +1316,7 @@ f_wait_icmp4_echo_reply(ctx);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Assert that packets with wrong global src addr are dropped by GGSN */ @@ -1310,6 +1334,7 @@ f_wait_gtpu_fail(ctx);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Send an IPv6 RA to APN4, should fail (packet dropped) */ @@ -1325,6 +1350,7 @@ f_wait_gtpu_fail(ctx);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Helper function for tests below. */ @@ -1347,12 +1373,14 @@ testcase TC_pdp4_clients_interact_with_txseq() runs on GT_CT { use_gtpu_txseq := true; f_pdp4_clients_interact(); + f_shutdown_helper(); }
/* Validate if different clients (pdp ctx) can reach one another through GGSN (without Tx sequence number). */ testcase TC_pdp4_clients_interact_without_txseq() runs on GT_CT { use_gtpu_txseq := false; f_pdp4_clients_interact(); + f_shutdown_helper(); }
testcase TC_echo_req_resp() runs on GT_CT { @@ -1365,6 +1393,7 @@ [] T_default.timeout { setverdict(fail); } } T_default.stop; + f_shutdown_helper(); }
testcase TC_echo_req_resp_gtpu() runs on GT_CT { @@ -1377,6 +1406,7 @@ [] T_default.timeout { setverdict(fail); } } T_default.stop; + f_shutdown_helper(); }
/* Test if the parser can cope with PCO that only contain either a @@ -1422,6 +1452,7 @@ setverdict(fail, "Secondary DNS IPv4 PCO option not found"); } f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test if the parser can cope with PCO that contains primary and secondary DNS in a separate IPCP container. @@ -1458,6 +1489,7 @@ setverdict(fail, "Secondary DNS IPv4 PCO option not found"); } f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Validate that SUT updates remote TEIC when requested through UpdatePDPContextRequest */ @@ -1473,6 +1505,7 @@ f_pdp_ctx_update(ctx, new_teic := new_teic);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Validate that SUT updates remote TEID when requested through UpdatePDPContextRequest */ @@ -1500,6 +1533,7 @@ f_wait_icmp4_echo_reply(ctx);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test IPv4v6 context activation for dynamic IPv4v6 EUA without DNS request */ @@ -1508,6 +1542,7 @@ var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInet46, valueof(t_EuaIPv4Dynv6Dyn))); f_pdp_ctx_act(ctx); f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test PDP context activation for dynamic IPv4v6 EUA with IPv4 DNS in IPCP */ @@ -1534,6 +1569,7 @@ } } f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test PDP context activation for dynamic IPv4v6 EUA with IPv6 DNS in PCO and router solicitation/advertisement */ @@ -1548,6 +1584,7 @@ f_send_gtpu(ctx, f_gen_icmpv6_neigh_solicit_for_pdp46(ctx));
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test IPv4v6 context activation for dynamic IPv4v6 EUA with request of IPv4 DNS in PCO */ @@ -1571,6 +1608,7 @@ }
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test IPv4v6 context activation for dynamic IPv4v6 EUA with request of IPv6 DNS in PCO */ @@ -1594,6 +1632,7 @@ }
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Test PDP context activation for dynamic IPv4v6 EUA. @@ -1612,6 +1651,7 @@ f_wait_icmp4_echo_reply(ctx);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Assert that packets with wrong ipv4 src addr are dropped by GGSN on APN IPv4v6 */ @@ -1628,6 +1668,7 @@ f_wait_gtpu_fail(ctx);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Check that attempting RA with another ll src addr won't work, packet dropped: */ @@ -1643,6 +1684,7 @@ f_wait_gtpu_fail(ctx);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Assert that packets with wrong ipv6 global src addr are dropped by GGSN on APN IPv4v6 */ @@ -1663,6 +1705,7 @@ f_wait_gtpu_fail(ctx);
f_pdp_ctx_del(ctx, '1'B); + f_shutdown_helper(); }
/* Validate if different clients (pdp ctx) can reach one another through GGSN. */ @@ -1695,6 +1738,7 @@
f_pdp_ctx_del(ctxA, '1'B); f_pdp_ctx_del(ctxB, '1'B); + f_shutdown_helper(); }
/* Test IPv4v6 context activation for dynamic IPv4v6 EUA on a v4-only APN */ @@ -1733,6 +1777,7 @@
f_pdp_ctx_del(ctx4, '1'B); } + f_shutdown_helper(); }
/* Validate if 2nd CtxCreateReq with increased Recovery IE causes ggsn to drop 1st one (while keeping 2nd one). */ @@ -1795,6 +1840,7 @@ T_default.stop;
f_pdp_ctx_del(ctxB, '1'B); + f_shutdown_helper(); }
@@ -1817,6 +1863,7 @@ /* Now send a new pdp ctx del (increased seqnum). It should fail with cause "non-existent": */ var OCT1 cause_nonexistent := 'C0'O; f_pdp_ctx_del(ctx, '1'B, cause_nonexistent, expect_diameter := false); + f_shutdown_helper(); }
/* Activate PDP context + trigger Recovery procedure through EchoResp */ @@ -1859,7 +1906,7 @@ } T_echo.stop; f_pdp_ctx_exp_del_req(ctx, omit, true); - setverdict(pass); + f_shutdown_helper(); }
/* Test creation, user plane and deletion of big amount (1000) of concurrent PDP context */ @@ -1972,7 +2019,7 @@ T_next.stop;
T_default.stop; - setverdict(pass); + f_shutdown_helper(); }
/* Test callocation of PDP contexts until reaching addr pool exhaustion */ @@ -2073,7 +2120,7 @@ T_next.stop;
T_default.stop; - setverdict(pass); + f_shutdown_helper(); }
control {