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 ASN_STRUCT_FREE(asn_DEF_X2N_X2AP_PDU, x2ap_pdu_obj);
\r
175 // pdcp not present
\r
176 for(int num_erabs = 1; num_erabs < max_erabs; num_erabs++){
\r
178 ref_array->clear();
\r
180 for(int i = 0; i < num_erabs; i++){
\r
182 ref_array->emplace_back();
\r
183 (*ref_array)[i].erab_id = rand() %15;
\r
184 (*ref_array)[i].drb_id = i%32 + 1;
\r
185 (*ref_array)[i].pdcp_at_sgnb = 1;
\r
186 (*ref_array)[i].mcg_resources = 1;
\r
187 (*ref_array)[i].scg_resources = 1;
\r
188 (*ref_array)[i].sgnb_pdcp_present = 2;
\r
190 // element sgnb present
\r
191 (*ref_array)[i].sgnb_item.qci = 8;
\r
192 (*ref_array)[i].sgnb_item.priority_level = 8;
\r
193 (*ref_array)[i].sgnb_item.pre_emption_capability = 0;
\r
194 (*ref_array)[i].sgnb_item.pre_emption_vulnerability = 1;
\r
195 (*ref_array)[i].sgnb_item.transport_layer_addr = transport_layer_addr;
\r
196 (*ref_array)[i].sgnb_item.transport_layer_addr_size = strlen((char *)transport_layer_addr);
\r
197 (*ref_array)[i].sgnb_item.gtp_tei = gtp_tei;
\r
198 (*ref_array)[i].sgnb_item.gtp_tei_size = strlen((char *)gtp_tei);
\r
199 (*ref_array)[i].sgnb_item.rlc_mode = 1;
\r
203 buf_size = BUFFER_SIZE;
\r
204 res = encode_test.encode_sgnb_addition_request(buf, &buf_size, encode_data);
\r
205 REQUIRE(res == true);
\r
207 // std::string out_file = std::string("X2AP-PDU-SgNBAdditionRequest-NoPDCP-NumErabs-") + std::to_string(num_erabs) + std::string(".per");
\r
208 // FILE *pfile = fopen(out_file.c_str(), "w");
\r
209 // fwrite(buf, sizeof(char), buf_size, pfile);
\r
213 int num_tests = 10;
\r
214 for(int i = 0; i < num_tests; i++){
\r
215 decode_data.clear();
\r
217 X2N_X2AP_PDU_t *x2ap_pdu_obj = 0;
\r
218 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
219 REQUIRE(rval.code == RC_OK);
\r
221 res = decode_test.get_fields(x2ap_pdu_obj->choice.initiatingMessage, decode_data);
\r
222 REQUIRE(res==true);
\r
224 REQUIRE(decode_data.sgnb_security_key_size - decode_data.sgnb_security_key_unused == 32);
\r
225 REQUIRE(decode_data.eutran_identifier_size*8 - decode_data.eutran_identifier_unused == 28);
\r
226 REQUIRE(encode_data.get_list()->size() == decode_data.get_list()->size());
\r
227 REQUIRE(encode_data.erab_list[0].erab_id == decode_data.erab_list[0].erab_id);
\r
228 REQUIRE(encode_data.erab_list[0].drb_id == decode_data.erab_list[0].drb_id);
\r
229 REQUIRE(encode_data.erab_list[0].pdcp_at_sgnb == decode_data.erab_list[0].pdcp_at_sgnb);
\r
231 REQUIRE(encode_data.menb_ue_x2ap_id == decode_data.menb_ue_x2ap_id);
\r
232 REQUIRE(encode_data.bit_rate_max_up == decode_data.bit_rate_max_up);
\r
233 REQUIRE(encode_data.bit_rate_max_dn == decode_data.bit_rate_max_dn);
\r
234 ASN_STRUCT_FREE(asn_DEF_X2N_X2AP_PDU, x2ap_pdu_obj);
\r
241 SECTION("Encoding, invalid erab"){
\r
243 encode_data.menb_ue_x2ap_id = 12;
\r
244 encode_data.sgnb_ue_x2ap_id = 120;
\r
246 encode_data.bit_rate_max_up = 1000;
\r
247 encode_data.bit_rate_max_dn = 2000;
\r
249 encode_data.encryption_algs = enc_alg;
\r
250 encode_data.encryption_algs_size = strlen((char *)enc_alg);
\r
251 encode_data.encryption_algs_unused = 0;
\r
253 encode_data.integrity_protection_algs = integrity_alg;
\r
254 encode_data.integrity_protection_algs_size = strlen((char *)integrity_alg);
\r
255 encode_data.integrity_protection_algs_unused = encode_data.integrity_protection_algs_size/8;
\r
256 REQUIRE(encode_data.integrity_protection_algs_size - encode_data.integrity_protection_algs_unused == 2);
\r
259 encode_data.sgnb_security_key = sgnb_security_key;
\r
260 encode_data.sgnb_security_key_size = strlen((char *)sgnb_security_key);
\r
261 encode_data.sgnb_security_key_unused = 0;
\r
262 REQUIRE(encode_data.sgnb_security_key_size - encode_data.sgnb_security_key_unused == 32);
\r
265 encode_data.menb_sgnb_container = mesgnb_container;
\r
266 encode_data.menb_sgnb_container_size = strlen((char *)mesgnb_container);
\r
268 encode_data.plmn_identity = plmn;
\r
269 encode_data.plmn_identity_size = strlen((char *)plmn);
\r
271 encode_data.eutran_identifier = eutran;
\r
272 encode_data.eutran_identifier_size = strlen((char *)eutran);
\r
273 encode_data.eutran_identifier_unused = 4;
\r
275 REQUIRE(encode_data.eutran_identifier_size*8 - encode_data.eutran_identifier_unused == 28);
\r
276 encode_data.subscriber_profile_id = 34;
\r
278 std::vector<erab_item> * ref_array = encode_data.get_list();
\r
279 ref_array->clear();
\r
281 ref_array->emplace_back();
\r
282 (*ref_array)[0].erab_id = rand() %15;
\r
283 (*ref_array)[0].drb_id = 150;
\r
284 (*ref_array)[0].pdcp_at_sgnb = 1;
\r
285 (*ref_array)[0].mcg_resources = 1;
\r
286 (*ref_array)[0].scg_resources = 1;
\r
287 (*ref_array)[0].sgnb_pdcp_present = 1;
\r
289 // element sgnb present
\r
290 (*ref_array)[0].sgnb_item.qci = 8;
\r
291 (*ref_array)[0].sgnb_item.priority_level = 8;
\r
292 (*ref_array)[0].sgnb_item.pre_emption_capability = 0;
\r
293 (*ref_array)[0].sgnb_item.pre_emption_vulnerability = 1;
\r
294 (*ref_array)[0].sgnb_item.transport_layer_addr = transport_layer_addr;
\r
295 (*ref_array)[0].sgnb_item.transport_layer_addr_size = strlen((char *)transport_layer_addr);
\r
296 (*ref_array)[0].sgnb_item.gtp_tei = gtp_tei;
\r
297 (*ref_array)[0].sgnb_item.gtp_tei_size = strlen((char *)gtp_tei);
\r
298 (*ref_array)[0].sgnb_item.rlc_mode = 1;
\r
300 res = encode_test.encode_sgnb_addition_request(buf, &buf_size, encode_data);
\r
301 REQUIRE(res == false);
\r
304 SECTION("Invalid Encoding, low buffer"){
\r
306 encode_data.menb_ue_x2ap_id = 12;
\r
307 encode_data.sgnb_ue_x2ap_id = 120;
\r
309 encode_data.bit_rate_max_up = 1000;
\r
310 encode_data.bit_rate_max_dn = 2000;
\r
312 encode_data.encryption_algs = enc_alg;
\r
313 encode_data.encryption_algs_size = strlen((char *)enc_alg);
\r
314 encode_data.encryption_algs_unused = 0;
\r
316 encode_data.integrity_protection_algs = integrity_alg;
\r
317 encode_data.integrity_protection_algs_size = strlen((char *)integrity_alg);
\r
318 encode_data.integrity_protection_algs_unused = encode_data.integrity_protection_algs_size/8;
\r
319 REQUIRE(encode_data.integrity_protection_algs_size - encode_data.integrity_protection_algs_unused == 2);
\r
322 encode_data.sgnb_security_key = sgnb_security_key;
\r
323 encode_data.sgnb_security_key_size = strlen((char *)sgnb_security_key);
\r
324 encode_data.sgnb_security_key_unused = 0;
\r
325 REQUIRE(encode_data.sgnb_security_key_size - encode_data.sgnb_security_key_unused == 32);
\r
328 encode_data.menb_sgnb_container = mesgnb_container;
\r
329 encode_data.menb_sgnb_container_size = strlen((char *)mesgnb_container);
\r
331 encode_data.plmn_identity = plmn;
\r
332 encode_data.plmn_identity_size = strlen((char *)plmn);
\r
334 encode_data.eutran_identifier = eutran;
\r
335 encode_data.eutran_identifier_size = strlen((char *)eutran);
\r
336 encode_data.eutran_identifier_unused = 4;
\r
338 REQUIRE(encode_data.eutran_identifier_size*8 - encode_data.eutran_identifier_unused == 28);
\r
339 encode_data.subscriber_profile_id = 34;
\r
341 std::vector<erab_item> * ref_array = encode_data.get_list();
\r
342 ref_array->clear();
\r
344 ref_array->emplace_back();
\r
345 (*ref_array)[0].erab_id = rand() %15;
\r
346 (*ref_array)[0].drb_id = 150;
\r
347 (*ref_array)[0].pdcp_at_sgnb = 1;
\r
348 (*ref_array)[0].mcg_resources = 1;
\r
349 (*ref_array)[0].scg_resources = 1;
\r
350 (*ref_array)[0].sgnb_pdcp_present = 1;
\r
352 // element sgnb present
\r
353 (*ref_array)[0].sgnb_item.qci = 8;
\r
354 (*ref_array)[0].sgnb_item.priority_level = 8;
\r
355 (*ref_array)[0].sgnb_item.pre_emption_capability = 0;
\r
356 (*ref_array)[0].sgnb_item.pre_emption_vulnerability = 1;
\r
357 (*ref_array)[0].sgnb_item.transport_layer_addr = transport_layer_addr;
\r
358 (*ref_array)[0].sgnb_item.transport_layer_addr_size = strlen((char *)transport_layer_addr);
\r
359 (*ref_array)[0].sgnb_item.gtp_tei = gtp_tei;
\r
360 (*ref_array)[0].sgnb_item.gtp_tei_size = strlen((char *)gtp_tei);
\r
361 (*ref_array)[0].sgnb_item.rlc_mode = 1;
\r
364 res = encode_test.encode_sgnb_addition_request(buf, &buf_size, encode_data);
\r
365 REQUIRE(res == false);
\r
368 SECTION("Encoding, missing erab"){
\r
370 encode_data.menb_ue_x2ap_id = 12;
\r
371 encode_data.sgnb_ue_x2ap_id = 10;
\r
373 encode_data.bit_rate_max_up = 1000;
\r
374 encode_data.bit_rate_max_dn = 2000;
\r
376 encode_data.encryption_algs = enc_alg;
\r
377 encode_data.encryption_algs_size = strlen((char *)enc_alg);
\r
378 encode_data.encryption_algs_unused = 0;
\r
380 encode_data.integrity_protection_algs = integrity_alg;
\r
381 encode_data.integrity_protection_algs_size = strlen((char *)integrity_alg);
\r
382 encode_data.integrity_protection_algs_unused = encode_data.integrity_protection_algs_size/8;
\r
383 REQUIRE(encode_data.integrity_protection_algs_size - encode_data.integrity_protection_algs_unused == 2);
\r
386 encode_data.sgnb_security_key = sgnb_security_key;
\r
387 encode_data.sgnb_security_key_size = strlen((char *)sgnb_security_key);
\r
388 encode_data.sgnb_security_key_unused = 0;
\r
389 REQUIRE(encode_data.sgnb_security_key_size - encode_data.sgnb_security_key_unused == 32);
\r
392 encode_data.menb_sgnb_container = mesgnb_container;
\r
393 encode_data.menb_sgnb_container_size = strlen((char *)mesgnb_container);
\r
395 encode_data.plmn_identity = plmn;
\r
396 encode_data.plmn_identity_size = strlen((char *)plmn);
\r
398 encode_data.eutran_identifier = eutran;
\r
399 encode_data.eutran_identifier_size = strlen((char *)eutran);
\r
400 encode_data.eutran_identifier_unused = 4;
\r
402 encode_data.subscriber_profile_id = 34;
\r
403 res = encode_test.encode_sgnb_addition_request(buf, &buf_size, encode_data);
\r
404 REQUIRE(res == false);
\r
409 SECTION("SgnB Addition Response ACK Encoding/decoding with valid data"){
\r
411 encode_data.menb_ue_x2ap_id = 12;
\r
412 encode_data.sgnb_ue_x2ap_id = 10;
\r
414 encode_data.bit_rate_max_up = 1000;
\r
415 encode_data.bit_rate_max_dn = 2000;
\r
417 encode_data.encryption_algs = enc_alg;
\r
418 encode_data.encryption_algs_size = strlen((char *)enc_alg);
\r
419 encode_data.encryption_algs_unused = 0;
\r
421 encode_data.integrity_protection_algs = integrity_alg;
\r
422 encode_data.integrity_protection_algs_size = strlen((char *)integrity_alg);
\r
423 encode_data.integrity_protection_algs_unused = encode_data.integrity_protection_algs_size/8;
\r
424 REQUIRE(encode_data.integrity_protection_algs_size - encode_data.integrity_protection_algs_unused == 2);
\r
427 encode_data.sgnb_security_key = sgnb_security_key;
\r
428 encode_data.sgnb_security_key_size = strlen((char *)sgnb_security_key);
\r
429 encode_data.sgnb_security_key_unused = 0;
\r
430 REQUIRE(encode_data.sgnb_security_key_size - encode_data.sgnb_security_key_unused == 32);
\r
433 encode_data.menb_sgnb_container = mesgnb_container;
\r
434 encode_data.menb_sgnb_container_size = strlen((char *)mesgnb_container);
\r
436 encode_data.plmn_identity = plmn;
\r
437 encode_data.plmn_identity_size = strlen((char *)plmn);
\r
439 encode_data.eutran_identifier = eutran;
\r
440 encode_data.eutran_identifier_size = strlen((char *)eutran);
\r
441 encode_data.eutran_identifier_unused = 4;
\r
443 REQUIRE(encode_data.eutran_identifier_size*8 - encode_data.eutran_identifier_unused == 28);
\r
444 encode_data.subscriber_profile_id = 34;
\r
446 std::vector<erab_item> * ref_array = encode_data.get_list();
\r
447 ref_array->clear();
\r
449 int num_erabs = 25;
\r
452 for(int i = 0; i < num_erabs; i++){
\r
454 ref_array->emplace_back();
\r
455 (*ref_array)[i].erab_id = rand() %15;
\r
456 (*ref_array)[i].drb_id = i%32 + 1;
\r
457 (*ref_array)[i].pdcp_at_sgnb = 1;
\r
458 (*ref_array)[i].mcg_resources = 1;
\r
459 (*ref_array)[i].scg_resources = 1;
\r
460 (*ref_array)[i].sgnb_pdcp_present = 1;
\r
462 // element sgnb present
\r
463 (*ref_array)[i].sgnb_item.qci = 8;
\r
464 (*ref_array)[i].sgnb_item.priority_level = 8;
\r
465 (*ref_array)[i].sgnb_item.pre_emption_capability = 0;
\r
466 (*ref_array)[i].sgnb_item.pre_emption_vulnerability = 1;
\r
467 (*ref_array)[i].sgnb_item.transport_layer_addr = transport_layer_addr;
\r
468 (*ref_array)[i].sgnb_item.transport_layer_addr_size = strlen((char *)transport_layer_addr);
\r
469 (*ref_array)[i].sgnb_item.gtp_tei = gtp_tei;
\r
470 (*ref_array)[i].sgnb_item.gtp_tei_size = strlen((char *)gtp_tei);
\r
471 (*ref_array)[i].sgnb_item.rlc_mode = 1;
\r
475 res = resp_out.encode_sgnb_addition_response(buf, &buf_size, encode_data, true);
\r
476 REQUIRE(res == true);
\r
479 // Haven't written get fields for sgnb response yet
\r
480 // int num_tests = 10;
\r
481 // for(int i = 0; i < num_tests; i++){
\r
482 // decode_data.clear();
\r
484 // X2_X2AP_PDU_t *x2ap_pdu_obj = 0;
\r
485 // 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
486 // REQUIRE(rval.code == RC_OK);
\r
488 // res = resp_out.get_fields(x2ap_pdu_obj->choice.successfulOutcome, decode_data);
\r
489 // REQUIRE(res==true);
\r
491 // REQUIRE(decode_data.sgnb_security_key_size - decode_data.sgnb_security_key_unused == 32);
\r
492 // REQUIRE(decode_data.eutran_identifier_size*8 - decode_data.eutran_identifier_unused == 28);
\r
493 // REQUIRE(encode_data.get_list()->size() == decode_data.get_list()->size());
\r
494 // REQUIRE(encode_data.erab_list[0].erab_id == decode_data.erab_list[0].erab_id);
\r
495 // REQUIRE(encode_data.erab_list[0].drb_id == decode_data.erab_list[0].drb_id);
\r
496 // REQUIRE(encode_data.erab_list[0].pdcp_at_sgnb == decode_data.erab_list[0].pdcp_at_sgnb);
\r
498 // REQUIRE(encode_data.menb_ue_x2ap_id == decode_data.menb_ue_x2ap_id);
\r
499 // ASN_STRUCT_FREE(asn_DEF_X2N_X2AP_PDU, x2ap_pdu_obj);
\r
504 SECTION("Encoding response, missing erab"){
\r
506 encode_data.menb_ue_x2ap_id = 12;
\r
507 encode_data.sgnb_ue_x2ap_id = 10;
\r
509 encode_data.bit_rate_max_up = 1000;
\r
510 encode_data.bit_rate_max_dn = 2000;
\r
512 encode_data.encryption_algs = enc_alg;
\r
513 encode_data.encryption_algs_size = strlen((char *)enc_alg);
\r
514 encode_data.encryption_algs_unused = 0;
\r
516 encode_data.integrity_protection_algs = integrity_alg;
\r
517 encode_data.integrity_protection_algs_size = strlen((char *)integrity_alg);
\r
518 encode_data.integrity_protection_algs_unused = encode_data.integrity_protection_algs_size/8;
\r
519 REQUIRE(encode_data.integrity_protection_algs_size - encode_data.integrity_protection_algs_unused == 2);
\r
522 encode_data.sgnb_security_key = sgnb_security_key;
\r
523 encode_data.sgnb_security_key_size = strlen((char *)sgnb_security_key);
\r
524 encode_data.sgnb_security_key_unused = 0;
\r
525 REQUIRE(encode_data.sgnb_security_key_size - encode_data.sgnb_security_key_unused == 32);
\r
528 encode_data.menb_sgnb_container = mesgnb_container;
\r
529 encode_data.menb_sgnb_container_size = strlen((char *)mesgnb_container);
\r
531 encode_data.plmn_identity = plmn;
\r
532 encode_data.plmn_identity_size = strlen((char *)plmn);
\r
534 encode_data.eutran_identifier = eutran;
\r
535 encode_data.eutran_identifier_size = strlen((char *)eutran);
\r
536 encode_data.eutran_identifier_unused = 4;
\r
538 encode_data.subscriber_profile_id = 34;
\r
539 res = resp_out.encode_sgnb_addition_response(buf, &buf_size, encode_data, true);
\r
540 REQUIRE(res == false);
\r
544 // // Checking Sgnb ACK Encoding
\r
545 // REQUIRE(response == true);
\r
546 // res = resp_out.encode_sgnb_addition_response(data_buf, &data_size,decode_data,response);
\r
547 // REQUIRE(res == true);
\r
550 // // pfile = fopen("sgnb_addition_ack.per", "w");
\r
551 // // fwrite(data_buf, sizeof(char), data_size, pfile);
\r
552 // // fclose(pfile);
\r
555 SECTION("Response Reject Encoding, valid"){
\r
556 //checking Sgnb Reject Encoding
\r
557 encode_data.menb_ue_x2ap_id = 12;
\r
558 encode_data.sgnb_ue_x2ap_id = 10;
\r
559 encode_data.cause = 1;
\r
560 encode_data.cause_desc = 1;
\r
561 res = resp_out.encode_sgnb_addition_response(data_buf, &data_size, encode_data, false);
\r
562 std::cout <<"Reason = " << resp_out.get_error() << std::endl;
\r
563 REQUIRE(res==true);
\r
566 SECTION("Response Reject Encoding, invalid data"){
\r
567 //checking Sgnb Reject Encoding
\r
568 encode_data.menb_ue_x2ap_id = 1200;
\r
569 encode_data.sgnb_ue_x2ap_id = 10;
\r
570 encode_data.cause = 1;
\r
571 encode_data.cause_desc = 1;
\r
572 res = resp_out.encode_sgnb_addition_response(data_buf, &data_size,decode_data, false);
\r
573 REQUIRE(res==false);
\r