summaryrefslogtreecommitdiffstats
path: root/ggsn_tests/GGSN_Tests.ttcn
diff options
context:
space:
mode:
Diffstat (limited to 'ggsn_tests/GGSN_Tests.ttcn')
-rw-r--r--ggsn_tests/GGSN_Tests.ttcn82
1 files changed, 82 insertions, 0 deletions
diff --git a/ggsn_tests/GGSN_Tests.ttcn b/ggsn_tests/GGSN_Tests.ttcn
index d099681..97abc4d 100644
--- a/ggsn_tests/GGSN_Tests.ttcn
+++ b/ggsn_tests/GGSN_Tests.ttcn
@@ -932,6 +932,86 @@ module GGSN_Tests {
T_default.stop;
}
+ /* Test if the parser can cope with PCO that only contain either a
+ * single primary DNS or a secondary DNS. */
+ testcase TC_pdp4_act_deact_with_single_dns() runs on GT_CT {
+
+ /* Note: an unpatched osmo-ggsn version will enter an endless-loop when
+ * the test is executed.
+ * see also: Change-Id Icffde89f9bc5d8fcadf6e2dd6c0b4de03440edd5 and OS#3288 */
+
+ f_init();
+ var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInternet, valueof(t_EuaIPv4Dyn)));
+ var OCT4 ggsn_ip4_dns1 := f_inet_addr(m_ggsn_ip4_dns1);
+ var OCT4 ggsn_ip4_dns2 := f_inet_addr(m_ggsn_ip4_dns2);
+ var octetstring pco_neg_dns;
+ var octetstring pco_neg_dns_expected;
+
+ /* PCO with primary DNS only */
+ ctx.pco_req := valueof(ts_PCO_IPv4_PRI_DNS_IPCP);
+ f_pdp_ctx_act(ctx);
+ pco_neg_dns := f_PCO_extract_proto(ctx.pco_neg, '8021'O, 1);
+ pco_neg_dns_expected := '0200000A8106'O & ggsn_ip4_dns1
+ /* Note: The prepended hex bytes encode the following information:
+ * 0x02 = Configuration ACK
+ * 0x00 = Identifier
+ * 0x000a = Length
+ * 0x81 = Type (Primary DNS Server Address)
+ * 0x06 = Length
+ * (4 byte IP-Address appended) */
+ if (not match(pco_neg_dns, pco_neg_dns_expected)) {
+ setverdict(fail, "Primary DNS IPv4 PCO option not found");
+ }
+ f_pdp_ctx_del(ctx, '1'B);
+
+ /* PCO with secondary DNS only */
+ ctx.pco_req := valueof(ts_PCO_IPv4_SEC_DNS_IPCP);
+ f_pdp_ctx_act(ctx);
+ pco_neg_dns := f_PCO_extract_proto(ctx.pco_neg, '8021'O, 1);
+ pco_neg_dns_expected := '0200000A8306'O & ggsn_ip4_dns2
+ if (not match(pco_neg_dns, pco_neg_dns_expected)) {
+ setverdict(fail, "Secondary DNS IPv4 PCO option not found");
+ }
+ f_pdp_ctx_del(ctx, '1'B);
+ }
+
+ /* Test if the parser can cope with PCO that contains primary and secondary DNS in a separate IPCP container.
+ * Note: an unpatched osmo-ggsn version will enter an endless-loop when the test is run
+ * see Change-Id Icffde89f9bc5d8fcadf6e2dd6c0b4de03440edd5 and OS#3288. */
+ testcase TC_pdp4_act_deact_with_separate_dns() runs on GT_CT {
+
+ /* Note: an unpatched osmo-ggsn version will enter an endless-loop when
+ * the test is executed.
+ * see also: Change-Id Icffde89f9bc5d8fcadf6e2dd6c0b4de03440edd5 and OS#3288 */
+
+ f_init();
+ var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInternet, valueof(t_EuaIPv4Dyn)));
+ var OCT4 ggsn_ip4_dns1 := f_inet_addr(m_ggsn_ip4_dns1);
+ var OCT4 ggsn_ip4_dns2 := f_inet_addr(m_ggsn_ip4_dns2);
+ var octetstring pco_neg_dns;
+ var octetstring pco_neg_dns_expected;
+
+ ctx.pco_req := valueof(ts_PCO_IPv4_SEPARATE_DNS_IPCP);
+ f_pdp_ctx_act(ctx);
+
+ /* Check if primary DNS is contained */
+ pco_neg_dns := f_PCO_extract_proto(ctx.pco_neg, '8021'O, 1);
+ pco_neg_dns_expected := '0200000A8106'O & ggsn_ip4_dns1
+ if (not match(pco_neg_dns, pco_neg_dns_expected)) {
+ setverdict(fail, "Primary DNS IPv4 PCO option not found");
+ }
+ f_pdp_ctx_del(ctx, '1'B);
+
+ /* Check if secondary DNS is contained */
+ /* Note: this check fill fail due to a bug in osmo-ggsn, see also OS#3381 */
+ pco_neg_dns := f_PCO_extract_proto(ctx.pco_neg, '8021'O, 1);
+ pco_neg_dns_expected := '0200000A8306'O & ggsn_ip4_dns2
+ if (not match(pco_neg_dns, pco_neg_dns_expected)) {
+ setverdict(fail, "Secondary DNS IPv4 PCO option not found");
+ }
+ f_pdp_ctx_del(ctx, '1'B);
+ }
+
control {
execute(TC_pdp4_act_deact());
execute(TC_pdp4_act_deact_ipcp());
@@ -939,6 +1019,8 @@ module GGSN_Tests {
execute(TC_pdp4_act_deact_gtpu_access());
execute(TC_pdp4_clients_interact_with_txseq());
execute(TC_pdp4_clients_interact_without_txseq());
+ execute(TC_pdp4_act_deact_with_single_dns());
+ execute(TC_pdp4_act_deact_with_separate_dns());
execute(TC_pdp6_act_deact());
execute(TC_pdp6_act_deact_pcodns());