WIP: ns: Add test for SNS Size procedure

Related: OS#5208

Change-Id: Ica8f6334afadb741180eeb5eb40d8192e61a2e67
diff --git a/ns/NS_Tests.ttcn b/ns/NS_Tests.ttcn
index 722f8ec..710c84d 100644
--- a/ns/NS_Tests.ttcn
+++ b/ns/NS_Tests.ttcn
@@ -558,6 +558,40 @@
 
 /* 48.016 SNS test cases */
 
+/* Send an SNS Size(-ish) PDU, i.e. an SNS Size or an SNS Size with erroneous payload */
+function f_outgoing_sns_size_wrong_ip_family(template (omit) PDU_NS base)
+runs on RAW_NS_CT {
+	const integer IDX := 0;
+	const integer NUM_IP := 1;
+	log("f_outgoing_sns_sizeish_pdu(idx=", IDX, ")");
+	var NSVCConfiguration nsvc_cfg := g_nsconfig.nsvc[IDX];
+	var template (omit) NsCause cause := omit;
+
+	if (nsvc_cfg.provider.ip.address_family == AF_INET) {
+		base.pDU_SNS_Size.numberOfIP6_Endpoints :=
+			{iEI := '09'O, numberOfIP_Endpoints := int2oct(valueof(NUM_IP), 2)};
+		cause := NS_CAUSE_INVALID_NR_OF_IPv4_ENDPOINTS;
+	} else {
+		base.pDU_SNS_Size.numberOfIP4_Endpoints :=
+			{iEI := '08'O, numberOfIP_Endpoints := int2oct(valueof(NUM_IP), 2)};
+		cause := NS_CAUSE_INVALID_NR_OF_IPv6_ENDPOINTS;
+	}
+	log("expected cause: ", cause);
+	NSCP[IDX].send(base);
+	f_ns_exp(tr_SNS_SIZE_ACK(g_nsconfig.nsei, cause), IDX);
+}
+
+testcase TC_sns_sgsn_size_payload() runs on RAW_Test_CT {
+	f_init_ns_codec(mp_nsconfig);
+	/* Template that would be accepted, only missing the number of IP endpoints
+	 * (since there are no ternary operators in TTCN-3...) */
+	template (omit) PDU_NS ts_base_SNS_SIZE_configured := ts_SNS_SIZE(g_nsconfig.nsei, rst_flag := true, max_nsvcs := 1,
+									      num_v4 := omit, num_v6 := omit);
+	f_outgoing_sns_size_wrong_ip_family(ts_base_SNS_SIZE_configured);
+	setverdict(pass);
+	f_clean_ns_codec();
+}
+
 /* do a succesful SNS configuration */
 testcase TC_sns_bss_config_success() runs on RAW_Test_CT {
 	f_init_vty();
@@ -1098,6 +1132,7 @@
 			execute( TC_sns_sgsn_add_change_del() );
 			execute( TC_sns_sgsn_size_correct_port() );
 			execute( TC_sns_sgsn_size_after_success() );
+			execute( TC_sns_sgsn_size_payload() );
 		}
 	}
 }