stp: Add tests for setups with multiple "routing context 0" ASPs

These two test cases verify that
* libosmo-sigtran doesn't include a routing context IE even in ASP
  role when using a ASP with a single routing context 0 configured
* osmo-stp can route between a single SG-role ASP with routing context
  to two ASP-role ASPs which both have routing context 0 (i.e. no
  routing context IE in use)

The tests do not pass with current libosmo-sigtran until OS#6003 is
fixed, presumably by Change-Id I5ce89b393a3b950ab7fd1eace9038718c9efcc51

Change-Id: I81052ece7d1cc8b43da6155356ed1c4d9620acdc
Related: OS#6003
diff --git a/stp/STP_Tests_M3UA.ttcn b/stp/STP_Tests_M3UA.ttcn
index 41b2e2c..5af894a 100644
--- a/stp/STP_Tests_M3UA.ttcn
+++ b/stp/STP_Tests_M3UA.ttcn
@@ -35,7 +35,7 @@
 import from STP_Tests_Common all;
 
 private const integer NR_M3UA := 3;	/* number of M3UA clients in ATS */
-private const integer NR_M3UA_SRV := 1;	/* number of M3UA servres in ATS */
+private const integer NR_M3UA_SRV := 3;	/* number of M3UA servres in ATS */
 
 modulepar {
 	/* STP-side IP addresses */
@@ -68,6 +68,20 @@
 			local_sctp_port := 10002,
 			point_code := 55,
 			routing_ctx := 1055
+		},
+		/* as-client60-norctx */
+		{
+			remote_sctp_port := 2907,
+			local_sctp_port := 11060,
+			point_code := 60,
+			routing_ctx := -
+		},
+		/* as-client61-norctx */
+		{
+			remote_sctp_port := 2907,
+			local_sctp_port := 11061,
+			point_code := 61,
+			routing_ctx := -
 		}
 	};
 	integer mp_recovery_timeout_msec := 2000;
@@ -793,6 +807,60 @@
 	f_clear_m3ua();
 }
 
+/* Test traffic being routed through "server" side STP (M3UA SG), coming back in "client"
+ * side STP (M3UA ASP) which has no routing context set */
+testcase TC_clnt_sg_to_asp_norctx() runs on RAW_M3UA_CT {
+	var OCT4 rctx_sender := int2oct(mp_m3ua_configs[0].routing_ctx, 4);
+	var OCT4 pc_sender := int2oct(mp_m3ua_configs[0].point_code, 4);
+	var OCT4 pc_receiver := int2oct(mp_m3ua_configs[M3UA_SRV(1)].point_code, 4);
+	var OCT4 pc_receiver2 := int2oct(mp_m3ua_configs[M3UA_SRV(2)].point_code, 4);
+
+	/* activate the sender side (ATS is client to STP in SG role) */
+	f_init_m3ua();
+	f_M3UA_asp_up_act(0);
+
+	/* activate the receiver side (ATS is server to STP in ASP role) */
+	f_init_m3ua_srv();
+	f_M3UA_CLNT_asp_up_act(M3UA_SRV(1), rctx := omit);
+	/* activate another instance of STP in ASP role with no routing context */
+	f_M3UA_CLNT_asp_up_act(M3UA_SRV(2), rctx := omit);
+
+	f_sleep(1.0);
+
+	/* verify traffic is routed from sender to [sole] receiver for each PC */
+	f_test_traffic(0, rctx_sender, pc_sender, M3UA_SRV(1), omit, pc_receiver);
+	f_test_traffic(0, rctx_sender, pc_sender, M3UA_SRV(2), omit, pc_receiver2);
+
+	f_clear_m3ua();
+}
+
+/* Test traffic being routed through "server" side STP (M3UA SG), coming back in "client"
+ * side STP (M3UA ASP) which has no routing context set */
+testcase TC_clnt_asp_to_sg_norctx() runs on RAW_M3UA_CT {
+	var OCT4 rctx_receiver := int2oct(mp_m3ua_configs[0].routing_ctx, 4);
+	var OCT4 pc_receiver := int2oct(mp_m3ua_configs[0].point_code, 4);
+	var OCT4 pc_sender := int2oct(mp_m3ua_configs[M3UA_SRV(1)].point_code, 4);
+	var OCT4 pc_sender2 := int2oct(mp_m3ua_configs[M3UA_SRV(2)].point_code, 4);
+
+	/* activate the sender side (ATS is client to STP in SG role) */
+	f_init_m3ua();
+	f_M3UA_asp_up_act(0);
+
+	/* activate the receiver side (ATS is server to STP in ASP role) */
+	f_init_m3ua_srv();
+	f_M3UA_CLNT_asp_up_act(M3UA_SRV(1), rctx := omit);
+	/* activate another instance of STP in ASP role with no routing context */
+	f_M3UA_CLNT_asp_up_act(M3UA_SRV(2), rctx := omit);
+
+	f_sleep(1.0);
+
+	/* verify traffic is routed from sender to [sole] receiver for each PC */
+	f_test_traffic(M3UA_SRV(1), omit, pc_sender, 0, rctx_receiver, pc_receiver);
+	f_test_traffic(M3UA_SRV(2), omit, pc_sender2, 0, rctx_receiver, pc_receiver);
+
+	f_clear_m3ua();
+}
+
 /* Test if ASPAC / ASPIA of one ASP generates DAVA / DUNA on other ASP */
 testcase TC_ssnm_aspac_dava_aspia_duna() runs on RAW_M3UA_CT {
 	var OCT4 rctx0 := int2oct(mp_m3ua_configs[0].routing_ctx, 4);
@@ -1050,6 +1118,9 @@
 	execute( TC_clnt_sg_to_asp() );
 	execute( TC_clnt_asp_to_sg() );
 
+	execute( TC_clnt_sg_to_asp_norctx() );
+	execute( TC_clnt_asp_to_sg_norctx() );
+
 	execute( TC_clnt_quirk_no_notify_asp_act() );
 	execute( TC_clnt_no_daud_in_asp() );
 	execute( TC_clnt_quirk_daud_in_asp() );