pespin has uploaded this change for review.

View Change

smf: Expect 201 Created response to our Nsmf sm-contexts creation req

Add the remaining rx paths of HTTP2_Adapter so we can finish
successfully the whole req+resp transaction.

Change-Id: I2cae1b956f9fa6421543e542823e77cf236f0bb4
---
M library/HTTP2_Adapter.ttcn
M library/HTTP2_Templates.ttcn
M smf/SMF_Session_CT_5G.ttcn
3 files changed, 73 insertions(+), 14 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/72/43672/1
diff --git a/library/HTTP2_Adapter.ttcn b/library/HTTP2_Adapter.ttcn
index 7892618..787dff0 100644
--- a/library/HTTP2_Adapter.ttcn
+++ b/library/HTTP2_Adapter.ttcn
@@ -90,6 +90,28 @@

f_set_tcp_segmentation();
HTTP2.send(ts_HTTP2_Send_magic(g_self_conn_id));
+ f_http2_adapter_initial_handshake();
+}
+
+private function f_http2_adapter_initial_handshake()
+runs on HTTP2_CT {
+ var HTTP2_Frame rx_http_frame;
+ var template (value) HTTP2_Setting_list settings := {
+ ts_HTTP2_Setting_ENABLE_PUSH(0),
+ ts_HTTP2_Setting_INITIAL_WINDOW_SIZE(4194304),
+ ts_HTTP2_Setting_MAX_HEADER_LIST_SIZE(10485760)
+ }
+ f_http2_adapter_send(ts_HTTP2_Frame_Settings(settings := settings));
+ as_http2_adapter_receive(rx_http_frame, tr_HTTP2_Frame_Settings(ack_flag := false));
+ as_http2_adapter_receive(rx_http_frame, tr_HTTP2_Frame_Settings(ack_flag := true));
+ f_http2_adapter_send(ts_HTTP2_Frame_Window_Update(0, 1073741824));
+}
+
+function f_http2_adapter_close()
+runs on HTTP2_CT {
+ var IPL4asp_Types.Result res;
+ res := HTTP2_CodecPort_CtrlFunct.f_IPL4_close(HTTP2, g_self_conn_id, {tcp := {}});
+ g_self_conn_id := -1;
}

function f_http2_adapter_send(template (value) HTTP2_Frame http2_frame)
@@ -98,4 +120,14 @@
HTTP2.send(ts_HTTP2_Send(g_self_conn_id, http2_frame));
}

+altstep as_http2_adapter_receive(out HTTP2_Frame rx_http_frame,
+ template (present) HTTP2_Frame exp_http2_frame := ?)
+runs on HTTP2_CT
+{
+ var HTTP2_Recv http2_rx;
+ [] HTTP2.receive(tr_HTTP2_Recv(g_self_conn_id, exp_http2_frame, omit)) -> value http2_rx {
+ rx_http_frame := http2_rx.frame;
+ }
+}
+
}
diff --git a/library/HTTP2_Templates.ttcn b/library/HTTP2_Templates.ttcn
index e4ba42b..929b324 100644
--- a/library/HTTP2_Templates.ttcn
+++ b/library/HTTP2_Templates.ttcn
@@ -85,6 +85,15 @@
}
}

+template (present) HTTP2_Frame
+tr_HTTP2_Frame_Window_Update(template (present) integer stream_id := 0,
+ template (present) integer window_size_increment := ?) := {
+ window_update_frame := {
+ stream_id := stream_id,
+ window_size_increment := window_size_increment
+ }
+}
+
template (value) HTTP2_Frame
ts_HTTP2_Frame_Window_Update(template (value) integer stream_id := 0,
template (value) integer window_size_increment) := {
@@ -219,7 +228,6 @@
ts_HTTP2_Hdr_content_id(template (omit) charstring header_value := omit)
:= ts_HTTP2_header_field(c_HTTP2_HDR_content_id, header_value);

-
template (value) HTTP2_header_field
ts_HTTP2_Hdr_content_type(template (omit) charstring header_value := omit)
:= ts_HTTP2_header_field(c_HTTP2_HDR_content_type, header_value);
@@ -244,6 +252,9 @@
ts_HTTP2_Hdr_status(template (omit) charstring header_value := omit)
:= ts_HTTP2_header_field(c_HTTP2_HDR_status, header_value);

+template (present) HTTP2_header_field
+tr_HTTP2_Hdr_location(template charstring header_value := *)
+:= tr_HTTP2_header_field(c_HTTP2_HDR_location, header_value);
template (value) HTTP2_header_field
ts_HTTP2_Hdr_location(template (omit) charstring header_value := omit)
:= ts_HTTP2_header_field(c_HTTP2_HDR_location, header_value);
diff --git a/smf/SMF_Session_CT_5G.ttcn b/smf/SMF_Session_CT_5G.ttcn
index 86e196e..8821260 100644
--- a/smf/SMF_Session_CT_5G.ttcn
+++ b/smf/SMF_Session_CT_5G.ttcn
@@ -69,15 +69,6 @@
function f_n11_init() runs on SMF_Session_CT {
f_http2_adapter_init();
f_http2_adapter_connect(mp_smf_hostname, mp_smf_sbi_port, mp_amf_local_ip, -1);
-
- var template (value) HTTP2_Setting_list settings := {
- ts_HTTP2_Setting_ENABLE_PUSH(0),
- ts_HTTP2_Setting_INITIAL_WINDOW_SIZE(4194304),
- ts_HTTP2_Setting_MAX_HEADER_LIST_SIZE(10485760)
- }
- f_http2_adapter_send(ts_HTTP2_Frame_Settings(settings := settings));
-
- f_http2_adapter_send(ts_HTTP2_Frame_Window_Update(0, 1073741824));
}

function f_http2_encode_body_multipart_json_5gnas(octetstring json_encoded,
@@ -103,13 +94,17 @@
var octetstring hdr_enc;
var template (value) HTTP2_pseudo_headers pseudo_hdr;
var template (value) HTTP2_header_list hdr_li;
- var template (value) HTTP2_header_block hb;
+ var template (value) HTTP2_header_block tx_hb;
+ var template (present) HTTP2_header_block exp_rx_hb;
+ var HTTP2_header_block rx_hb;
var template (value) NG_NAS_UL_Message_Type nas_ul_msg;
var ProcedureTransactionIdentifier pti := f_next_pti();
var template (value) octetstring body;
+ var HTTP2_Frame rx_http_frame;
var template (value) TS29502_Nsmf_PDUSession.PlmnId plmn_id := TS29502_Nsmf_PDUSession_Templates.ts_PlmnId("001", "001");
var template (value) TS29502_Nsmf_PDUSession.PlmnIdNid plmn_id_nid := TS29502_Nsmf_PDUSession_Templates.ts_PlmnIdNid(plmn_id.mcc, plmn_id.mnc);
var integer pdu_sess_id := 1;
+ var integer http2_stream_id := 3;

var template (value) SmContextCreateData sm_contexts;
var octetstring sm_contexts_enc;
@@ -151,9 +146,9 @@
ts_HTTP2_Hdr_content_length(int2str(lengthof(body))),
ts_HTTP2_Hdr_accept_encoding("gzip")
};
- hb := ts_HTTP2_header_block(pseudo_hdr, hdr_li);
- hdr_enc := f_HTTP2_header_block_encode(valueof(hb));
- f_http2_adapter_send(ts_HTTP2_Frame_Header(3,
+ tx_hb := ts_HTTP2_header_block(pseudo_hdr, hdr_li);
+ hdr_enc := f_HTTP2_header_block_encode(valueof(tx_hb));
+ f_http2_adapter_send(ts_HTTP2_Frame_Header(http2_stream_id,
end_stream_flag := false,
end_header_flag := true,
header_block_fragment := hdr_enc
@@ -181,6 +176,27 @@
as_nudm_sdm_get_sm_data();
/* Expect UDM to receive POST sdm-subscriptions: */
as_nudm_sdm_post_sdm_subscriptions();
+
+ /* Expect to receive "201 Created body={}" answer to our Nsmf sm-contexts request: */
+ as_http2_adapter_receive(rx_http_frame,
+ tr_HTTP2_Frame_Header(stream_id := http2_stream_id,
+ end_stream_flag := false,
+ end_header_flag := true,
+ header_block_fragment := ?));
+ rx_hb := f_HTTP2_header_block_decode(rx_http_frame.header_frame.header_block_fragment);
+ exp_rx_hb := tr_HTTP2_header_block(pseudo_headers := tr_HTTP2_pseudo_headers_Resp(201),
+ headers := {*, tr_HTTP2_Hdr_location(tr_Nsmf_PDUSession_uri_sm_contexts), *});
+ if (not match(rx_hb, exp_rx_hb)) {
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+ log2str("Rx unexpected HTTP2 response hdr: ", rx_hb, " vs exp ", exp_rx_hb));
+
+ }
+ as_http2_adapter_receive(rx_http_frame,
+ tr_HTTP2_Frame_Data(stream_id := http2_stream_id,
+ end_stream_flag := true,
+ data := char2oct("{}")));
+ f_http2_adapter_close();
+
/* Expect PCF to receive POST sm-policies: */
as_npcf_smpolicycontrol_post_sm_policies();


To view, visit change 43672. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I2cae1b956f9fa6421543e542823e77cf236f0bb4
Gerrit-Change-Number: 43672
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin@sysmocom.de>