stp: Make sure all AS are shutdown when test finishes
This way traffic modes set dynamically by peers are cleared and can be
reset by next tests easily.
Change-Id: I177441b2d43298b3836ccf78fe11267333e80665
diff --git a/stp/STP_Tests_M3UA.ttcn b/stp/STP_Tests_M3UA.ttcn
index 5c15c6f..c550d40 100644
--- a/stp/STP_Tests_M3UA.ttcn
+++ b/stp/STP_Tests_M3UA.ttcn
@@ -38,6 +38,7 @@
integer mp_stp_m3ua_port := 2905;
integer mp_stp_m3ua_clnt_port := 2906;
integer mp_local_m3ua_port := 9999;
+ integer mp_recovery_timeout_msec := 2000;
}
private const integer NR_M3UA := 3; /* number of M3UA clients in ATS */
@@ -103,6 +104,12 @@
g_m3ua_conn_id[i] := res.connId;
}
+friend function f_M3UA_close(integer i) runs on RAW_M3UA_CT {
+ var Result res;
+ res := M3UA_CodecPort_CtrlFunct.f_IPL4_close(M3UA[i], g_m3ua_conn_id[i], {sctp:=valueof(ts_SCTP)});
+ g_m3ua_conn_id[i] := 0;
+}
+
friend function f_M3UA_listen(integer i) runs on RAW_M3UA_CT {
var Result res;
res := M3UA_CodecPort_CtrlFunct.f_IPL4_listen(M3UA[i], mp_local_ip, mp_local_m3ua_port+i,
@@ -126,6 +133,19 @@
}
}
+friend function f_clear_m3ua() runs on RAW_M3UA_CT {
+ var integer i;
+
+ log("Clearing M3UA...");
+
+ for (i := 0; i < NR_M3UA; i:=i+1) {
+ f_M3UA_close(i);
+ }
+ /* Wait for recovery timer to trigger and shutdown all AS: */
+ f_sleep(int2float(mp_recovery_timeout_msec)/1000.0 + 0.5);
+ setverdict(pass, "M3UA cleared");
+}
+
friend function f_init_m3ua_srv() runs on RAW_M3UA_CT {
var integer i;
var PortEvent sctp_evt;
@@ -192,6 +212,7 @@
f_init_m3ua();
f_M3UA_asp_up(0);
f_M3UA_exp(0, tr_M3UA_NOTIFY(c_M3UA_ST_T_STATE_CHG, c_M3UA_ST_I_AS_INACTIVE, *));
+ f_clear_m3ua();
}
/* Test the heartbeat procedure without optional heartbeat data payload */
@@ -200,6 +221,7 @@
f_M3UA_asp_up(0);
f_M3UA_exp(0, tr_M3UA_NOTIFY(c_M3UA_ST_T_STATE_CHG, c_M3UA_ST_I_AS_INACTIVE, *));
f_M3UA_beat(0, omit);
+ f_clear_m3ua();
}
/* Test the heartbeat procedure with optional heartbeat data payload */
@@ -208,30 +230,35 @@
f_M3UA_asp_up(0);
f_M3UA_exp(0, tr_M3UA_NOTIFY(c_M3UA_ST_T_STATE_CHG, c_M3UA_ST_I_AS_INACTIVE, *));
f_M3UA_beat(0, 'a1a2a3a4a5'O);
+ f_clear_m3ua();
}
/* Test the ASP-ACTIVATE procedure (without traffic-mode or routing ctx) */
testcase TC_asp_act() runs on RAW_M3UA_CT {
f_init_m3ua();
f_M3UA_asp_up_act(0);
+ f_clear_m3ua();
}
/* Test the ASP-ACTIVATE procedure with traffic-mode override */
testcase TC_asp_act_override() runs on RAW_M3UA_CT {
f_init_m3ua();
f_M3UA_asp_up_act(0, c_M3UA_TMT_override, omit);
+ f_clear_m3ua();
}
/* Test the ASP-ACTIVATE procedure with traffic-mode override */
testcase TC_asp_act_loadshare() runs on RAW_M3UA_CT {
f_init_m3ua();
f_M3UA_asp_up_act(0, c_M3UA_TMT_loadshare, omit);
+ f_clear_m3ua();
}
/* Test the ASP-ACTIVATE procedure with traffic-mode broadcast */
testcase TC_asp_act_broadcast() runs on RAW_M3UA_CT {
f_init_m3ua();
f_M3UA_asp_up_act(0, c_M3UA_TMT_broadcast, omit);
+ f_clear_m3ua();
}
/* Test if traffic is routed from idx_tx/pc_tx to idx_rx/pc_rx */
@@ -274,6 +301,7 @@
/* verify traffic is routed from sender to new receiver */
f_test_traffic(0, rctx_sender, pc_sender, 2, rctx_receiver, pc_receiver);
+ f_clear_m3ua();
}
private altstep as_count_rx(integer idx, template (present) PDU_M3UA exp, inout integer counter)
@@ -332,6 +360,8 @@
}
}
setverdict(pass);
+
+ f_clear_m3ua();
}
/* test "traffic-mode broadcast" behavior */
@@ -373,6 +403,8 @@
f_M3UA_exp(2, tr_M3UA_DATA(rctx_receiver, rx_pd));
}
setverdict(pass);
+
+ f_clear_m3ua();
}
private function f_M3UA_rkm_register(OCT4 id, OCT3 dpc, OCT4 rctx,
@@ -390,6 +422,8 @@
f_M3UA_send(0, ts_M3UA_REG_REQ({ts_M3UA_rkey(id:='00000099'O, dpc:='aabbcc'O)}));
f_M3UA_exp(0, tr_M3UA_REG_RSP({tr_M3UA_reg_res(id:='00000099'O, status:=c_M3UA_REGSTS_ERR_EPERM,
rctx:=?)}));
+
+ f_clear_m3ua();
}
/* Send RKM registration; expect OK as RCTX does match config */
@@ -402,6 +436,8 @@
f_M3UA_send(0, ts_M3UA_REG_REQ({ts_M3UA_rkey(id:='10000099'O, dpc:=dpc, rctx:=rctx)}));
f_M3UA_exp(0, tr_M3UA_REG_RSP({tr_M3UA_reg_res(id:='10000099'O, status:=c_M3UA_REGSTS_SUCCESS,
rctx:=rctx)}));
+
+ f_clear_m3ua();
}
/* Send RKM registration; expect OK as dynamic not permitted */
@@ -415,6 +451,8 @@
rctx:=?)}));
f_vty_config2(VTY, {"cs7 instance 0"}, "xua rkm routing-key-allocation static-only");
+
+ f_clear_m3ua();
}
/* try to de-register a routing key that was never registered -> error */
@@ -422,6 +460,7 @@
f_init_m3ua();
f_M3UA_send(0, ts_M3UA_DEREG_REQ(ts_M3UA_routing_ctx(int2oct(1023,4))));
f_M3UA_exp(0, tr_M3UA_DEREG_RSP({tr_M3UA_dereg_res(?,c_m3UA_DEREGSTS_ERR_NOT_REG)}));
+ f_clear_m3ua();
}
/* try to de-register a routing key that is invalid (non-existant) -> error */
@@ -429,6 +468,7 @@
f_init_m3ua();
f_M3UA_send(0, ts_M3UA_DEREG_REQ(ts_M3UA_routing_ctx(int2oct(1234,4))));
f_M3UA_exp(0, tr_M3UA_DEREG_RSP({tr_M3UA_dereg_res(?,c_m3UA_DEREGSTS_ERR_INVAL_RCTX)}));
+ f_clear_m3ua();
}
/* try to de-register a routing key that was registered -> OK*/
@@ -436,6 +476,7 @@
f_init_m3ua();
f_M3UA_send(0, ts_M3UA_DEREG_REQ(ts_M3UA_routing_ctx(int2oct(1023,4))));
f_M3UA_exp(0, tr_M3UA_DEREG_RSP({tr_M3UA_dereg_res(?,c_m3UA_DEREGSTS_SUCCESS)}));
+ f_clear_m3ua();
}
/* try to de-register a routing key for an active ASP -> ERROR */
@@ -455,6 +496,8 @@
f_M3UA_send(0, ts_M3UA_DEREG_REQ(ts_M3UA_routing_ctx(rctx)));
f_M3UA_exp(0, tr_M3UA_DEREG_RSP({tr_M3UA_dereg_res(?,c_m3UA_DEREGSTS_ERR_ASP_ACTIVE)}));
/* FIXME: we now may have changed the state on the STP side! */
+
+ f_clear_m3ua();
}
/***********************************************************************
@@ -497,6 +540,8 @@
f_init_m3ua_srv();
f_M3UA_CLNT_asp_up(M3UA_SRV(0));
+
+ f_clear_m3ua();
}
/* Expect inbound connection from ASP/SCTP-client, followed by ASP-UP + ASP-ACT */
@@ -505,6 +550,8 @@
f_init_m3ua_srv();
f_M3UA_CLNT_asp_up_act(M3UA_SRV(0));
+
+ f_clear_m3ua();
}
/* Test traffic being routed through "server" side STP (M3UA SG), coming back in "client"
@@ -525,6 +572,8 @@
/* verify traffic is routed from sender to [sole] receiver */
f_test_traffic(0, rctx_sender, pc_sender, M3UA_SRV(0), rctx_receiver, pc_receiver);
+
+ f_clear_m3ua();
}
/* Test traffic being routed through "client" side STP (M3UA ASP), coming back in "server"
@@ -545,6 +594,7 @@
/* verify traffic is routed from sender to [sole] receiver */
f_test_traffic(M3UA_SRV(0), rctx_sender, pc_sender, 0, rctx_receiver, pc_receiver);
+ f_clear_m3ua();
}