2 ==================================================================================
4 Copyright (c) 2018-2019 AT&T Intellectual Property.
6 Licensed under the Apache License, Version 2.0 (the "License");
7 you may not use this file except in compliance with the License.
8 You may obtain a copy of the License at
10 http://www.apache.org/licenses/LICENSE-2.0
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 See the License for the specific language governing permissions and
16 limitations under the License.
17 ==================================================================================
20 #define CATCH_CONFIG_MAIN
21 #include <catch2/catch.hpp>
26 #include <e2ap_control.hpp>
27 #include <e2ap_control_response.hpp>
32 #define BUFFER_SIZE 512
34 TEST_CASE("E2AP Control Request", "Encoding/Decoding"){
36 ric_control_helper dinput ;
37 ric_control_helper dout;
38 ric_control_request control_request_pdu;
41 mdclog_attr_init(&attr);
42 mdclog_attr_set_ident(attr, "UNIT TEST E2AP INDICATION");
44 mdclog_level_set(MDCLOG_ERR);
45 mdclog_attr_destroy(attr);
47 unsigned char buf_header[BUFFER_SIZE];
48 unsigned char buf_msg[BUFFER_SIZE];
50 SECTION("Verify E2AP Control Encoding/Decoding Successful"){
54 dinput.req_seq_no = 11;
55 dinput.control_ack = 1;
57 strcpy((char *)buf_header, "hello world");
58 strcpy((char *)buf_msg, "something out there");
59 unsigned char buf_proc_id[4] = "25";
61 dinput.control_header = buf_header;
62 dinput.control_header_size = strlen((const char *)buf_header);
64 dinput.control_msg = buf_msg;
65 dinput.control_msg_size = strlen((const char *)buf_msg);
67 dinput.call_process_id = buf_proc_id;
68 dinput.call_process_id_size = strlen((const char *)buf_proc_id);
71 size_t data_size = 4096;
72 unsigned char data[data_size];
74 bool res = control_request_pdu.encode_e2ap_control_request(&data[0], &data_size, dinput);
77 E2N_E2AP_PDU_t * e2ap_recv = 0;
78 asn_dec_rval_t dec_res = asn_decode(0,ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, (void**)&(e2ap_recv), data, data_size);
79 REQUIRE(dec_res.code == RC_OK);
81 res = control_request_pdu.get_fields(e2ap_recv->choice.initiatingMessage, dout);
82 REQUIRE (res == true);
84 REQUIRE(dinput.func_id == dout.func_id);
85 REQUIRE(dinput.req_id == dout.req_id);
86 REQUIRE(dinput.req_seq_no == dout.req_seq_no);
87 REQUIRE(dinput.control_ack == dout.control_ack);
89 std::string din_string;
90 std::string dout_string;
92 din_string.assign((char *)dinput.control_header, dout.control_header_size);
93 dout_string.assign((char *)dout.control_header, dout.control_header_size);
94 REQUIRE(din_string == dout_string);
96 ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_recv);
100 SECTION("Negative Cases"){
101 bool res = control_request_pdu.get_fields(NULL, dout);
102 REQUIRE(res == false);
107 TEST_CASE("E2AP Control Response", "Encoding/Decoding"){
109 ric_control_helper dinput ;
110 ric_control_helper dout;
111 ric_control_response control_response_pdu;
114 mdclog_attr_init(&attr);
115 mdclog_attr_set_ident(attr, "UNIT TEST E2AP INDICATION");
117 mdclog_level_set(MDCLOG_INFO);
118 mdclog_attr_destroy(attr);
120 ric_control_response test_check;
122 SECTION("Verify E2AP Control Response Successful Outcome Encoding/Decoding"){
126 dinput.req_seq_no = 11;
127 dinput.control_status = 1;
129 dinput.sub_cause = 2;
132 ric_control_helper dout;
133 unsigned char buf_proc_id[4] = "25";
135 dinput.call_process_id = buf_proc_id;
136 dinput.call_process_id_size = strlen((const char *)buf_proc_id);
139 size_t data_size = 4096;
140 unsigned char data[data_size];
142 ric_control_response control_response_pdu;
144 bool res = control_response_pdu.encode_e2ap_control_response(&data[0], &data_size, dinput, true);
146 REQUIRE(res == true);
149 E2N_E2AP_PDU_t * e2ap_recv = 0;
150 asn_dec_rval_t dec_res = asn_decode(0,ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, (void**)&(e2ap_recv), data, data_size);
151 REQUIRE(dec_res.code == RC_OK);
152 REQUIRE(e2ap_recv->present == E2N_E2AP_PDU_PR_successfulOutcome);
153 res = control_response_pdu.get_fields(e2ap_recv->choice.successfulOutcome, dout);
154 REQUIRE(res == true);
155 REQUIRE(dout.func_id == dinput.func_id);
156 REQUIRE(dout.req_id == dinput.req_id);
157 REQUIRE(dout.control_status == dinput.control_status);
159 ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_recv);
163 SECTION("Verify E2AP Control Response UnSuccessful Outcome Encoding/Decoding"){
167 dinput.req_seq_no = 11;
168 dinput.control_status = 1;
170 dinput.sub_cause = 2;
173 ric_control_helper dout;
174 unsigned char buf_proc_id[4] = "25";
176 dinput.call_process_id = buf_proc_id;
177 dinput.call_process_id_size = strlen((const char *)buf_proc_id);
180 size_t data_size = 4096;
181 unsigned char data[data_size];
183 ric_control_response control_response_pdu;
184 bool res = control_response_pdu.encode_e2ap_control_response(&data[0], &data_size, dinput, false);
185 REQUIRE(res == true);
188 E2N_E2AP_PDU_t * e2ap_recv = 0;
189 asn_dec_rval_t dec_res = asn_decode(0,ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, (void**)&(e2ap_recv), data, data_size);
190 REQUIRE(dec_res.code == RC_OK);
191 REQUIRE(e2ap_recv->present == E2N_E2AP_PDU_PR_unsuccessfulOutcome);
192 res = control_response_pdu.get_fields(e2ap_recv->choice.unsuccessfulOutcome, dout);
194 REQUIRE(res == true);
195 REQUIRE(dout.func_id == dinput.func_id);
196 REQUIRE(dout.req_id == dinput.req_id);
197 REQUIRE(dout.control_status == dinput.control_status);
198 REQUIRE(dout.cause == dinput.cause);
199 REQUIRE(dout.sub_cause == dinput.sub_cause);
200 ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_recv);