pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/43672?usp=email )
Change subject: smf: Expect 201 Created response to our Nsmf sm-contexts creation req ......................................................................
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();