2 ==================================================================================
\r
4 Copyright (c) 2018-2019 AT&T Intellectual Property.
\r
6 Licensed under the Apache License, Version 2.0 (the "License");
\r
7 you may not use this file except in compliance with the License.
\r
8 You may obtain a copy of the License at
\r
10 http://www.apache.org/licenses/LICENSE-2.0
\r
12 Unless required by applicable law or agreed to in writing, software
\r
13 distributed under the License is distributed on an "AS IS" BASIS,
\r
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
15 See the License for the specific language governing permissions and
\r
16 limitations under the License.
\r
17 ==================================================================================
\r
20 * unit_test_sgnb_add_request.cc
\r
22 * Created on: Sep 9, 2019
\r
26 #define CATCH_CONFIG_MAIN
\r
27 #include <sgnb_addition_request.hpp>
\r
28 #include <sgnb_addition_response.hpp>
\r
29 #include <mdclog/mdclog.h>
\r
30 #include <catch2/catch.hpp>
\r
32 #define BUFFER_SIZE 2048
\r
33 TEST_CASE("X2AP PDUs", "[X2AP SgNB Addition Request]"){
\r
35 mdclog_attr_t *attr;
\r
36 mdclog_attr_init(&attr);
\r
37 mdclog_attr_set_ident(attr, "UNIT TEST XAPP FRAMEWORK");
\r
39 mdclog_level_set(MDCLOG_DEBUG);
\r
40 mdclog_attr_destroy(attr);
\r
44 sgnb_addition_helper encode_data;
\r
45 sgnb_addition_helper decode_data;
\r
47 sgnb_addition_request memcheck_req;
\r
48 sgnb_addition_request encode_test;
\r
49 sgnb_addition_request decode_test;
\r
50 unsigned char buf[BUFFER_SIZE];
\r
51 size_t buf_size = BUFFER_SIZE;
\r
53 sgnb_addition_response memcheck_resp;
\r
54 sgnb_addition_response resp_out;
\r
56 unsigned char data_buf[BUFFER_SIZE];
\r
57 size_t data_size = BUFFER_SIZE;
\r
59 // sgnb data creation static parameters
\r
60 unsigned char enc_alg[] = "Bl";
\r
61 unsigned char integrity_alg[] = "md";
\r
62 unsigned char sgnb_security_key[] = "12345678912345678912345678912345";
\r
63 unsigned char mesgnb_container[] = "Information";
\r
64 unsigned char transport_layer_addr[] = "AABBCCDDEE";
\r
65 unsigned char gtp_tei[] = "ZZYX";
\r
66 unsigned char plmn[] = "321";
\r
67 unsigned char eutran[] = "4567";
\r
69 SECTION("Verify encoding/decoding of valid data with variable number of erabs"){
\r
71 encode_data.menb_ue_x2ap_id = 12;
\r
72 encode_data.sgnb_ue_x2ap_id = 10;
\r
74 encode_data.bit_rate_max_up = 1000;
\r
75 encode_data.bit_rate_max_dn = 2000;
\r
77 encode_data.encryption_algs = enc_alg;
\r
78 encode_data.encryption_algs_size = strlen((char *)enc_alg);
\r
79 encode_data.encryption_algs_unused = 0;
\r
81 encode_data.integrity_protection_algs = integrity_alg;
\r
82 encode_data.integrity_protection_algs_size = strlen((char *)integrity_alg);
\r
83 encode_data.integrity_protection_algs_unused = encode_data.integrity_protection_algs_size/8;
\r
84 REQUIRE(encode_data.integrity_protection_algs_size - encode_data.integrity_protection_algs_unused == 2);
\r
87 encode_data.sgnb_security_key = sgnb_security_key;
\r
88 encode_data.sgnb_security_key_size = strlen((char *)sgnb_security_key);
\r
89 encode_data.sgnb_security_key_unused = 0;
\r
90 REQUIRE(encode_data.sgnb_security_key_size - encode_data.sgnb_security_key_unused == 32);
\r
93 encode_data.menb_sgnb_container = mesgnb_container;
\r
94 encode_data.menb_sgnb_container_size = strlen((char *)mesgnb_container);
\r
96 encode_data.plmn_identity = plmn;
\r
97 encode_data.plmn_identity_size = strlen((char *)plmn);
\r
99 encode_data.eutran_identifier = eutran;
\r
100 encode_data.eutran_identifier_size = strlen((char *)eutran);
\r
101 encode_data.eutran_identifier_unused = 4;
\r
103 REQUIRE(encode_data.eutran_identifier_size*8 - encode_data.eutran_identifier_unused == 28);
\r
104 encode_data.subscriber_profile_id = 34;
\r
106 std::vector<erab_item> * ref_array = encode_data.get_list();
\r
107 int max_erabs = 30;
\r
111 for(int num_erabs = 1; num_erabs < max_erabs; num_erabs++){
\r
113 ref_array->clear();
\r
116 for(int i = 0; i < num_erabs; i++){
\r
118 ref_array->emplace_back();
\r
119 (*ref_array)[i].erab_id = rand() %15;
\r
120 (*ref_array)[i].drb_id = i%32 + 1;
\r
121 (*ref_array)[i].pdcp_at_sgnb = 1;
\r
122 (*ref_array)[i].mcg_resources = 1;
\r
123 (*ref_array)[i].scg_resources = 1;
\r
124 (*ref_array)[i].sgnb_pdcp_present = 1;
\r
126 // element sgnb present
\r
127 (*ref_array)[i].sgnb_item.qci = 8;
\r
128 (*ref_array)[i].sgnb_item.priority_level = 8;
\r
129 (*ref_array)[i].sgnb_item.pre_emption_capability = 0;
\r
130 (*ref_array)[i].sgnb_item.pre_emption_vulnerability = 1;
\r
131 (*ref_array)[i].sgnb_item.transport_layer_addr = transport_layer_addr;
\r
132 (*ref_array)[i].sgnb_item.transport_layer_addr_size = strlen((char *)transport_layer_addr);
\r
133 (*ref_array)[i].sgnb_item.gtp_tei = gtp_tei;
\r
134 (*ref_array)[i].sgnb_item.gtp_tei_size = strlen((char *)gtp_tei);
\r
135 (*ref_array)[i].sgnb_item.rlc_mode = 1;
\r
138 buf_size = BUFFER_SIZE;
\r
139 res = encode_test.encode_sgnb_addition_request(buf, &buf_size, encode_data);
\r
140 REQUIRE(res == true);
\r
142 // std::string out_file = std::string("X2AP-PDU-SgNBAdditionRequest-NumErabs-") + std::to_string(num_erabs) + std::string(".per");
\r
143 // FILE *pfile = fopen(out_file.c_str(), "w");
\r
144 // fwrite(buf, sizeof(char), buf_size, pfile);
\r
147 // How many times we test decoding the same data
\r
148 int num_tests = 10;
\r
149 for(int i = 0; i < num_tests; i++){
\r
150 decode_data.clear();
\r
152 X2N_X2AP_PDU_t *x2ap_pdu_obj = 0;
\r
153 asn_dec_rval_t rval = asn_decode(0,ATS_ALIGNED_BASIC_PER, &asn_DEF_X2N_X2AP_PDU, (void**)&x2ap_pdu_obj, buf, buf_size);
\r
154 REQUIRE(rval.code == RC_OK);
\r
156 res = decode_test.get_fields(x2ap_pdu_obj->choice.initiatingMessage, decode_data);
\r
157 REQUIRE(res==true);
\r
159 REQUIRE(decode_data.sgnb_security_key_size - decode_data.sgnb_security_key_unused == 32);
\r
160 REQUIRE(decode_data.eutran_identifier_size*8 - decode_data.eutran_identifier_unused == 28);
\r
161 REQUIRE(encode_data.get_list()->size() == decode_data.get_list()->size());
\r
162 REQUIRE(encode_data.erab_list[0].erab_id == decode_data.erab_list[0].erab_id);
\r
163 REQUIRE(encode_data.erab_list[0].drb_id == decode_data.erab_list[0].drb_id);
\r
164 REQUIRE(encode_data.erab_list[0].pdcp_at_sgnb == decode_data.erab_list[0].pdcp_at_sgnb);
\r
166 REQUIRE(encode_data.menb_ue_x2ap_id == decode_data.menb_ue_x2ap_id);
\r
167 REQUIRE(encode_data.bit_rate_max_up == decode_data.bit_rate_max_up);
\r
168 REQUIRE(encode_data.bit_rate_max_dn == decode_data.bit_rate_max_dn);
\r
169 REQUIRE(encode_data.subscriber_profile_id == decode_data.subscriber_profile_id);
\r
170 ASN_STRUCT_FREE(asn_DEF_X2N_X2AP_PDU, x2ap_pdu_obj);
\r
176 // pdcp not present
\r
177 for(int num_erabs = 1; num_erabs < max_erabs; num_erabs++){
\r
179 ref_array->clear();
\r
181 for(int i = 0; i < num_erabs; i++){
\r
183 ref_array->emplace_back();
\r
184 (*ref_array)[i].erab_id = rand() %15;
\r
185 (*ref_array)[i].drb_id = i%32 + 1;
\r
186 (*ref_array)[i].pdcp_at_sgnb = 1;
\r
187 (*ref_array)[i].mcg_resources = 1;
\r
188 (*ref_array)[i].scg_resources = 1;
\r
189 (*ref_array)[i].sgnb_pdcp_present = 2;
\r
191 // element sgnb present
\r
192 (*ref_array)[i].sgnb_item.qci = 8;
\r
193 (*ref_array)[i].sgnb_item.priority_level = 8;
\r
194 (*ref_array)[i].sgnb_item.pre_emption_capability = 0;
\r
195 (*ref_array)[i].sgnb_item.pre_emption_vulnerability = 1;
\r
196 (*ref_array)[i].sgnb_item.transport_layer_addr = transport_layer_addr;
\r
197 (*ref_array)[i].sgnb_item.transport_layer_addr_size = strlen((char *)transport_layer_addr);
\r
198 (*ref_array)[i].sgnb_item.gtp_tei = gtp_tei;
\r
199 (*ref_array)[i].sgnb_item.gtp_tei_size = strlen((char *)gtp_tei);
\r
200 (*ref_array)[i].sgnb_item.rlc_mode = 1;
\r
204 buf_size = BUFFER_SIZE;
\r
205 res = encode_test.encode_sgnb_addition_request(buf, &buf_size, encode_data);
\r
206 REQUIRE(res == true);
\r
208 // std::string out_file = std::string("X2AP-PDU-SgNBAdditionRequest-NoPDCP-NumErabs-") + std::to_string(num_erabs) + std::string(".per");
\r
209 // FILE *pfile = fopen(out_file.c_str(), "w");
\r
210 // fwrite(buf, sizeof(char), buf_size, pfile);
\r
214 int num_tests = 10;
\r
215 for(int i = 0; i < num_tests; i++){
\r
216 decode_data.clear();
\r
218 X2N_X2AP_PDU_t *x2ap_pdu_obj = 0;
\r
219 asn_dec_rval_t rval = asn_decode(0,ATS_ALIGNED_BASIC_PER, &asn_DEF_X2N_X2AP_PDU, (void**)&x2ap_pdu_obj, buf, buf_size);
\r
220 REQUIRE(rval.code == RC_OK);
\r
222 res = decode_test.get_fields(x2ap_pdu_obj->choice.initiatingMessage, decode_data);
\r
223 REQUIRE(res==true);
\r
225 REQUIRE(decode_data.sgnb_security_key_size - decode_data.sgnb_security_key_unused == 32);
\r
226 REQUIRE(decode_data.eutran_identifier_size*8 - decode_data.eutran_identifier_unused == 28);
\r
227 REQUIRE(encode_data.get_list()->size() == decode_data.get_list()->size());
\r
228 REQUIRE(encode_data.erab_list[0].erab_id == decode_data.erab_list[0].erab_id);
\r
229 REQUIRE(encode_data.erab_list[0].drb_id == decode_data.erab_list[0].drb_id);
\r
230 REQUIRE(encode_data.erab_list[0].pdcp_at_sgnb == decode_data.erab_list[0].pdcp_at_sgnb);
\r
232 REQUIRE(encode_data.menb_ue_x2ap_id == decode_data.menb_ue_x2ap_id);
\r
233 REQUIRE(encode_data.bit_rate_max_up == decode_data.bit_rate_max_up);
\r
234 REQUIRE(encode_data.bit_rate_max_dn == decode_data.bit_rate_max_dn);
\r
235 REQUIRE(encode_data.subscriber_profile_id == decode_data.subscriber_profile_id);
\r
237 ASN_STRUCT_FREE(asn_DEF_X2N_X2AP_PDU, x2ap_pdu_obj);
\r
244 SECTION("Encoding, invalid erab"){
\r
246 encode_data.menb_ue_x2ap_id = 12;
\r
247 encode_data.sgnb_ue_x2ap_id = 120;
\r
249 encode_data.bit_rate_max_up = 1000;
\r
250 encode_data.bit_rate_max_dn = 2000;
\r
252 encode_data.encryption_algs = enc_alg;
\r
253 encode_data.encryption_algs_size = strlen((char *)enc_alg);
\r
254 encode_data.encryption_algs_unused = 0;
\r
256 encode_data.integrity_protection_algs = integrity_alg;
\r
257 encode_data.integrity_protection_algs_size = strlen((char *)integrity_alg);
\r
258 encode_data.integrity_protection_algs_unused = encode_data.integrity_protection_algs_size/8;
\r
259 REQUIRE(encode_data.integrity_protection_algs_size - encode_data.integrity_protection_algs_unused == 2);
\r
262 encode_data.sgnb_security_key = sgnb_security_key;
\r
263 encode_data.sgnb_security_key_size = strlen((char *)sgnb_security_key);
\r
264 encode_data.sgnb_security_key_unused = 0;
\r
265 REQUIRE(encode_data.sgnb_security_key_size - encode_data.sgnb_security_key_unused == 32);
\r
268 encode_data.menb_sgnb_container = mesgnb_container;
\r
269 encode_data.menb_sgnb_container_size = strlen((char *)mesgnb_container);
\r
271 encode_data.plmn_identity = plmn;
\r
272 encode_data.plmn_identity_size = strlen((char *)plmn);
\r
274 encode_data.eutran_identifier = eutran;
\r
275 encode_data.eutran_identifier_size = strlen((char *)eutran);
\r
276 encode_data.eutran_identifier_unused = 4;
\r
278 REQUIRE(encode_data.eutran_identifier_size*8 - encode_data.eutran_identifier_unused == 28);
\r
279 encode_data.subscriber_profile_id = 34;
\r
281 std::vector<erab_item> * ref_array = encode_data.get_list();
\r
282 ref_array->clear();
\r
284 ref_array->emplace_back();
\r
285 (*ref_array)[0].erab_id = rand() %15;
\r
286 (*ref_array)[0].drb_id = 150;
\r
287 (*ref_array)[0].pdcp_at_sgnb = 1;
\r
288 (*ref_array)[0].mcg_resources = 1;
\r
289 (*ref_array)[0].scg_resources = 1;
\r
290 (*ref_array)[0].sgnb_pdcp_present = 1;
\r
292 // element sgnb present
\r
293 (*ref_array)[0].sgnb_item.qci = 8;
\r
294 (*ref_array)[0].sgnb_item.priority_level = 8;
\r
295 (*ref_array)[0].sgnb_item.pre_emption_capability = 0;
\r
296 (*ref_array)[0].sgnb_item.pre_emption_vulnerability = 1;
\r
297 (*ref_array)[0].sgnb_item.transport_layer_addr = transport_layer_addr;
\r
298 (*ref_array)[0].sgnb_item.transport_layer_addr_size = strlen((char *)transport_layer_addr);
\r
299 (*ref_array)[0].sgnb_item.gtp_tei = gtp_tei;
\r
300 (*ref_array)[0].sgnb_item.gtp_tei_size = strlen((char *)gtp_tei);
\r
301 (*ref_array)[0].sgnb_item.rlc_mode = 1;
\r
303 res = encode_test.encode_sgnb_addition_request(buf, &buf_size, encode_data);
\r
304 REQUIRE(res == false);
\r
307 SECTION("Invalid Encoding, low buffer"){
\r
309 encode_data.menb_ue_x2ap_id = 12;
\r
310 encode_data.sgnb_ue_x2ap_id = 120;
\r
312 encode_data.bit_rate_max_up = 1000;
\r
313 encode_data.bit_rate_max_dn = 2000;
\r
315 encode_data.encryption_algs = enc_alg;
\r
316 encode_data.encryption_algs_size = strlen((char *)enc_alg);
\r
317 encode_data.encryption_algs_unused = 0;
\r
319 encode_data.integrity_protection_algs = integrity_alg;
\r
320 encode_data.integrity_protection_algs_size = strlen((char *)integrity_alg);
\r
321 encode_data.integrity_protection_algs_unused = encode_data.integrity_protection_algs_size/8;
\r
322 REQUIRE(encode_data.integrity_protection_algs_size - encode_data.integrity_protection_algs_unused == 2);
\r
325 encode_data.sgnb_security_key = sgnb_security_key;
\r
326 encode_data.sgnb_security_key_size = strlen((char *)sgnb_security_key);
\r
327 encode_data.sgnb_security_key_unused = 0;
\r
328 REQUIRE(encode_data.sgnb_security_key_size - encode_data.sgnb_security_key_unused == 32);
\r
331 encode_data.menb_sgnb_container = mesgnb_container;
\r
332 encode_data.menb_sgnb_container_size = strlen((char *)mesgnb_container);
\r
334 encode_data.plmn_identity = plmn;
\r
335 encode_data.plmn_identity_size = strlen((char *)plmn);
\r
337 encode_data.eutran_identifier = eutran;
\r
338 encode_data.eutran_identifier_size = strlen((char *)eutran);
\r
339 encode_data.eutran_identifier_unused = 4;
\r
341 REQUIRE(encode_data.eutran_identifier_size*8 - encode_data.eutran_identifier_unused == 28);
\r
342 encode_data.subscriber_profile_id = 34;
\r
344 std::vector<erab_item> * ref_array = encode_data.get_list();
\r
345 ref_array->clear();
\r
347 ref_array->emplace_back();
\r
348 (*ref_array)[0].erab_id = rand() %15;
\r
349 (*ref_array)[0].drb_id = 150;
\r
350 (*ref_array)[0].pdcp_at_sgnb = 1;
\r
351 (*ref_array)[0].mcg_resources = 1;
\r
352 (*ref_array)[0].scg_resources = 1;
\r
353 (*ref_array)[0].sgnb_pdcp_present = 1;
\r
355 // element sgnb present
\r
356 (*ref_array)[0].sgnb_item.qci = 8;
\r
357 (*ref_array)[0].sgnb_item.priority_level = 8;
\r
358 (*ref_array)[0].sgnb_item.pre_emption_capability = 0;
\r
359 (*ref_array)[0].sgnb_item.pre_emption_vulnerability = 1;
\r
360 (*ref_array)[0].sgnb_item.transport_layer_addr = transport_layer_addr;
\r
361 (*ref_array)[0].sgnb_item.transport_layer_addr_size = strlen((char *)transport_layer_addr);
\r
362 (*ref_array)[0].sgnb_item.gtp_tei = gtp_tei;
\r
363 (*ref_array)[0].sgnb_item.gtp_tei_size = strlen((char *)gtp_tei);
\r
364 (*ref_array)[0].sgnb_item.rlc_mode = 1;
\r
367 res = encode_test.encode_sgnb_addition_request(buf, &buf_size, encode_data);
\r
368 REQUIRE(res == false);
\r
371 SECTION("Encoding, missing erab"){
\r
373 encode_data.menb_ue_x2ap_id = 12;
\r
374 encode_data.sgnb_ue_x2ap_id = 10;
\r
376 encode_data.bit_rate_max_up = 1000;
\r
377 encode_data.bit_rate_max_dn = 2000;
\r
379 encode_data.encryption_algs = enc_alg;
\r
380 encode_data.encryption_algs_size = strlen((char *)enc_alg);
\r
381 encode_data.encryption_algs_unused = 0;
\r
383 encode_data.integrity_protection_algs = integrity_alg;
\r
384 encode_data.integrity_protection_algs_size = strlen((char *)integrity_alg);
\r
385 encode_data.integrity_protection_algs_unused = encode_data.integrity_protection_algs_size/8;
\r
386 REQUIRE(encode_data.integrity_protection_algs_size - encode_data.integrity_protection_algs_unused == 2);
\r
389 encode_data.sgnb_security_key = sgnb_security_key;
\r
390 encode_data.sgnb_security_key_size = strlen((char *)sgnb_security_key);
\r
391 encode_data.sgnb_security_key_unused = 0;
\r
392 REQUIRE(encode_data.sgnb_security_key_size - encode_data.sgnb_security_key_unused == 32);
\r
395 encode_data.menb_sgnb_container = mesgnb_container;
\r
396 encode_data.menb_sgnb_container_size = strlen((char *)mesgnb_container);
\r
398 encode_data.plmn_identity = plmn;
\r
399 encode_data.plmn_identity_size = strlen((char *)plmn);
\r
401 encode_data.eutran_identifier = eutran;
\r
402 encode_data.eutran_identifier_size = strlen((char *)eutran);
\r
403 encode_data.eutran_identifier_unused = 4;
\r
405 encode_data.subscriber_profile_id = 34;
\r
406 res = encode_test.encode_sgnb_addition_request(buf, &buf_size, encode_data);
\r
407 REQUIRE(res == false);
\r
412 SECTION("SgnB Addition Response ACK Encoding/decoding with valid data"){
\r
414 encode_data.menb_ue_x2ap_id = 12;
\r
415 encode_data.sgnb_ue_x2ap_id = 10;
\r
417 encode_data.bit_rate_max_up = 1000;
\r
418 encode_data.bit_rate_max_dn = 2000;
\r
420 encode_data.encryption_algs = enc_alg;
\r
421 encode_data.encryption_algs_size = strlen((char *)enc_alg);
\r
422 encode_data.encryption_algs_unused = 0;
\r
424 encode_data.integrity_protection_algs = integrity_alg;
\r
425 encode_data.integrity_protection_algs_size = strlen((char *)integrity_alg);
\r
426 encode_data.integrity_protection_algs_unused = encode_data.integrity_protection_algs_size/8;
\r
427 REQUIRE(encode_data.integrity_protection_algs_size - encode_data.integrity_protection_algs_unused == 2);
\r
430 encode_data.sgnb_security_key = sgnb_security_key;
\r
431 encode_data.sgnb_security_key_size = strlen((char *)sgnb_security_key);
\r
432 encode_data.sgnb_security_key_unused = 0;
\r
433 REQUIRE(encode_data.sgnb_security_key_size - encode_data.sgnb_security_key_unused == 32);
\r
436 encode_data.menb_sgnb_container = mesgnb_container;
\r
437 encode_data.menb_sgnb_container_size = strlen((char *)mesgnb_container);
\r
439 encode_data.plmn_identity = plmn;
\r
440 encode_data.plmn_identity_size = strlen((char *)plmn);
\r
442 encode_data.eutran_identifier = eutran;
\r
443 encode_data.eutran_identifier_size = strlen((char *)eutran);
\r
444 encode_data.eutran_identifier_unused = 4;
\r
446 REQUIRE(encode_data.eutran_identifier_size*8 - encode_data.eutran_identifier_unused == 28);
\r
447 encode_data.subscriber_profile_id = 34;
\r
449 std::vector<erab_item> * ref_array = encode_data.get_list();
\r
450 ref_array->clear();
\r
452 int num_erabs = 25;
\r
455 for(int i = 0; i < num_erabs; i++){
\r
457 ref_array->emplace_back();
\r
458 (*ref_array)[i].erab_id = rand() %15;
\r
459 (*ref_array)[i].drb_id = i%32 + 1;
\r
460 (*ref_array)[i].pdcp_at_sgnb = 1;
\r
461 (*ref_array)[i].mcg_resources = 1;
\r
462 (*ref_array)[i].scg_resources = 1;
\r
463 (*ref_array)[i].sgnb_pdcp_present = 1;
\r
465 // element sgnb present
\r
466 (*ref_array)[i].sgnb_item.qci = 8;
\r
467 (*ref_array)[i].sgnb_item.priority_level = 8;
\r
468 (*ref_array)[i].sgnb_item.pre_emption_capability = 0;
\r
469 (*ref_array)[i].sgnb_item.pre_emption_vulnerability = 1;
\r
470 (*ref_array)[i].sgnb_item.transport_layer_addr = transport_layer_addr;
\r
471 (*ref_array)[i].sgnb_item.transport_layer_addr_size = strlen((char *)transport_layer_addr);
\r
472 (*ref_array)[i].sgnb_item.gtp_tei = gtp_tei;
\r
473 (*ref_array)[i].sgnb_item.gtp_tei_size = strlen((char *)gtp_tei);
\r
474 (*ref_array)[i].sgnb_item.rlc_mode = 1;
\r
478 res = resp_out.encode_sgnb_addition_response(buf, &buf_size, encode_data, true);
\r
479 REQUIRE(res == true);
\r
482 // Haven't written get fields for sgnb response yet
\r
483 // int num_tests = 10;
\r
484 // for(int i = 0; i < num_tests; i++){
\r
485 // decode_data.clear();
\r
487 // X2_X2AP_PDU_t *x2ap_pdu_obj = 0;
\r
488 // asn_dec_rval_t rval = asn_decode(0,ATS_ALIGNED_BASIC_PER, &asn_DEF_X2N_X2AP_PDU, (void**)&x2ap_pdu_obj, buf, buf_size);
\r
489 // REQUIRE(rval.code == RC_OK);
\r
491 // res = resp_out.get_fields(x2ap_pdu_obj->choice.successfulOutcome, decode_data);
\r
492 // REQUIRE(res==true);
\r
494 // REQUIRE(decode_data.sgnb_security_key_size - decode_data.sgnb_security_key_unused == 32);
\r
495 // REQUIRE(decode_data.eutran_identifier_size*8 - decode_data.eutran_identifier_unused == 28);
\r
496 // REQUIRE(encode_data.get_list()->size() == decode_data.get_list()->size());
\r
497 // REQUIRE(encode_data.erab_list[0].erab_id == decode_data.erab_list[0].erab_id);
\r
498 // REQUIRE(encode_data.erab_list[0].drb_id == decode_data.erab_list[0].drb_id);
\r
499 // REQUIRE(encode_data.erab_list[0].pdcp_at_sgnb == decode_data.erab_list[0].pdcp_at_sgnb);
\r
501 // REQUIRE(encode_data.menb_ue_x2ap_id == decode_data.menb_ue_x2ap_id);
\r
502 // ASN_STRUCT_FREE(asn_DEF_X2N_X2AP_PDU, x2ap_pdu_obj);
\r
507 SECTION("Encoding response, missing erab"){
\r
509 encode_data.menb_ue_x2ap_id = 12;
\r
510 encode_data.sgnb_ue_x2ap_id = 10;
\r
512 encode_data.bit_rate_max_up = 1000;
\r
513 encode_data.bit_rate_max_dn = 2000;
\r
515 encode_data.encryption_algs = enc_alg;
\r
516 encode_data.encryption_algs_size = strlen((char *)enc_alg);
\r
517 encode_data.encryption_algs_unused = 0;
\r
519 encode_data.integrity_protection_algs = integrity_alg;
\r
520 encode_data.integrity_protection_algs_size = strlen((char *)integrity_alg);
\r
521 encode_data.integrity_protection_algs_unused = encode_data.integrity_protection_algs_size/8;
\r
522 REQUIRE(encode_data.integrity_protection_algs_size - encode_data.integrity_protection_algs_unused == 2);
\r
525 encode_data.sgnb_security_key = sgnb_security_key;
\r
526 encode_data.sgnb_security_key_size = strlen((char *)sgnb_security_key);
\r
527 encode_data.sgnb_security_key_unused = 0;
\r
528 REQUIRE(encode_data.sgnb_security_key_size - encode_data.sgnb_security_key_unused == 32);
\r
531 encode_data.menb_sgnb_container = mesgnb_container;
\r
532 encode_data.menb_sgnb_container_size = strlen((char *)mesgnb_container);
\r
534 encode_data.plmn_identity = plmn;
\r
535 encode_data.plmn_identity_size = strlen((char *)plmn);
\r
537 encode_data.eutran_identifier = eutran;
\r
538 encode_data.eutran_identifier_size = strlen((char *)eutran);
\r
539 encode_data.eutran_identifier_unused = 4;
\r
541 encode_data.subscriber_profile_id = 34;
\r
542 res = resp_out.encode_sgnb_addition_response(buf, &buf_size, encode_data, true);
\r
543 REQUIRE(res == false);
\r
547 // // Checking Sgnb ACK Encoding
\r
548 // REQUIRE(response == true);
\r
549 // res = resp_out.encode_sgnb_addition_response(data_buf, &data_size,decode_data,response);
\r
550 // REQUIRE(res == true);
\r
553 // // pfile = fopen("sgnb_addition_ack.per", "w");
\r
554 // // fwrite(data_buf, sizeof(char), data_size, pfile);
\r
555 // // fclose(pfile);
\r
558 SECTION("Response Reject Encoding, valid"){
\r
559 //checking Sgnb Reject Encoding
\r
560 encode_data.menb_ue_x2ap_id = 12;
\r
561 encode_data.sgnb_ue_x2ap_id = 10;
\r
562 encode_data.cause = 1;
\r
563 encode_data.cause_desc = 1;
\r
564 res = resp_out.encode_sgnb_addition_response(data_buf, &data_size, encode_data, false);
\r
565 std::cout <<"Reason = " << resp_out.get_error() << std::endl;
\r
566 REQUIRE(res==true);
\r
569 SECTION("Response Reject Encoding, invalid data"){
\r
570 //checking Sgnb Reject Encoding
\r
571 encode_data.menb_ue_x2ap_id = 1200;
\r
572 encode_data.sgnb_ue_x2ap_id = 10;
\r
573 encode_data.cause = 1;
\r
574 encode_data.cause_desc = 1;
\r
575 res = resp_out.encode_sgnb_addition_response(data_buf, &data_size,decode_data, false);
\r
576 REQUIRE(res==false);
\r