blob: eaf2772b456e84d7c6ea6f7140b293fe4ee774b3 [file] [log] [blame]
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +02001/* ECBE (REST) interface client of osmo-cbc test suite in TTCN-3
2 * (C) 2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
3 * All rights reserved.
4 *
5 * Released under the terms of GNU General Public License, Version 2 or
6 * (at your option) any later version.
7 *
8 * SPDX-License-Identifier: GPL-2.0-or-later
9 */
10
11module ECBE_Components {
12
13import from Osmocom_Types all;
14
15import from HTTP_Adapter all;
16import from HTTPmsg_Types all;
17import from ECBE_Types all;
18
19import from CBSP_Types all;
20
21import from CBS_Message all;
22
23private function f_cbs2ecbe_category(CBSP_Category cat_in) return EcbeCategory
24{
25 select (cat_in) {
26 case (CBSP_CATEG_HIGH_PRIO) { return high_priority; }
27 case (CBSP_CATEG_BACKGROUND) { return background; }
28 case (CBSP_CATEG_NORMAL) { return normal; }
29 case else { mtc.stop }
30 }
31}
32
33private function f_cbs2ecbe_page(CBS_MessageContent inp) return EcbePage
34{
35 return hex2str(oct2hex(inp.payload));
36}
37
38/* convert from CBS_Message to EcbeCbcMessage */
39function f_cbs2ecbe(CBS_Message inp, charstring cbe_name) return EcbeCbcMessage
40{
41 var EcbeCbcMessage ret := {
42 cbe_name := cbe_name,
43 category := f_cbs2ecbe_category(inp.category),
44 repetition_period := inp.rep_period,
45 num_of_bcast := inp.num_bcast_req,
46 scope := { scope_plmn := {} },
47 smscb_message := {
48 serial_nr := {
49 serial_nr_encoded := inp.ser_nr
50 },
51 message_id := inp.msg_id,
52 payload := {
53 payload_encoded := {
54 dcs := inp.dcs,
55 pages := { } /* appended below */
56 }
57 }
58 }
59 };
60 for (var integer i := 0; i < lengthof(inp.content); i := i+1) {
61 ret.smscb_message.payload.payload_encoded.pages :=
62 ret.smscb_message.payload.payload_encoded.pages & { f_cbs2ecbe_page(inp.content[i]) };
63 }
64 return ret;
65}
66
67/*********************************************************************************
68 * ECBE (REST) interface
69 *********************************************************************************/
70
71function f_ecbe_tx_post_cbs(EcbeCbcMessage cbc)
72runs on http_CT {
73 var charstring body := oct2char(enc_EcbeCbcMessage(cbc));
74 log("TX POST CBS: ", body);
75 var HTTPMessage http_resp;
76 f_http_tx_request(url := "/api/ecbe/v1/message", method := "POST", body := body);
77}
78
79function f_ecbe_rx_resp(template integer exp_sts := (200..299))
80runs on http_CT return HTTPResponse {
81 var HTTPMessage http_resp := f_http_rx_response(tr_HTTP_Resp(exp_sts), tout := 20.0);
82 return http_resp.response;
83}
84
85/* run a HTTP POST to add a new CBC message */
86function f_ecbe_post_cbs(EcbeCbcMessage cbc, template integer exp_sts := 201)
87runs on http_CT return HTTPResponse {
88 f_ecbe_tx_post_cbs(cbc);
89 return f_ecbe_rx_resp(exp_sts)
90}
91
92function f_ecbe_tx_delete_cbs(integer msg_id)
93runs on http_CT {
94 f_http_tx_request("/api/ecbe/v1/message/" & int2str(msg_id), method := "DELETE");
95}
96
97/* run a HTTP GET on specified URL expecting json in RSRES format as response */
98function f_ecbe_delete_cbs(integer msg_id, template integer exp_sts := 200)
99runs on http_CT return HTTPResponse {
100 f_ecbe_tx_delete_cbs(msg_id);
101 return f_ecbe_rx_resp(exp_sts);
102}
103
104}