1. Transitioned to using latest asn1c compiler
[ric-app/admin.git] / test / unit_test_e2ap_control.cc
diff --git a/test/unit_test_e2ap_control.cc b/test/unit_test_e2ap_control.cc
new file mode 100644 (file)
index 0000000..7164074
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+==================================================================================
+
+        Copyright (c) 2018-2019 AT&T Intellectual Property.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================================
+*/
+
+#define CATCH_CONFIG_MAIN
+#include <catch2/catch.hpp>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <e2ap_control.hpp>
+#include <e2ap_control_response.hpp>
+#include <unistd.h>
+#include <inttypes.h>
+
+
+#define BUFFER_SIZE 512
+
+TEST_CASE("E2AP Control Request", "Encoding/Decoding"){
+
+  ric_control_helper dinput ;
+  ric_control_helper  dout;
+  ric_control_request control_request_pdu;
+  
+  mdclog_attr_t *attr;
+  mdclog_attr_init(&attr);
+  mdclog_attr_set_ident(attr, "UNIT TEST E2AP INDICATION");
+  mdclog_init(attr);
+  mdclog_level_set(MDCLOG_ERR);
+  mdclog_attr_destroy(attr);
+
+  unsigned char buf_header[BUFFER_SIZE];
+  unsigned char buf_msg[BUFFER_SIZE];
+  
+  SECTION("Verify E2AP Control Encoding/Decoding Successful"){
+    
+    dinput.func_id = 10;
+    dinput.req_id = 6;
+    dinput.req_seq_no = 11;
+    dinput.control_ack = 1;
+  
+    strcpy((char *)buf_header, "hello world");
+    strcpy((char *)buf_msg, "something out there");
+    unsigned char buf_proc_id[4] = "25";
+  
+    dinput.control_header = buf_header;
+    dinput.control_header_size = strlen((const char *)buf_header);
+    
+    dinput.control_msg = buf_msg;
+    dinput.control_msg_size = strlen((const char *)buf_msg);
+    
+    dinput.call_process_id = buf_proc_id;
+    dinput.call_process_id_size = strlen((const char *)buf_proc_id);
+    
+    /* encoding */
+    size_t data_size = 4096;
+    unsigned char      data[data_size];
+  
+    bool res = control_request_pdu.encode_e2ap_control_request(&data[0], &data_size, dinput);
+    REQUIRE(res == true);
+
+    E2N_E2AP_PDU_t * e2ap_recv = 0;
+    asn_dec_rval_t dec_res  = asn_decode(0,ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, (void**)&(e2ap_recv), data, data_size);
+    REQUIRE(dec_res.code == RC_OK);
+    
+    res = control_request_pdu.get_fields(e2ap_recv->choice.initiatingMessage, dout);
+    REQUIRE (res == true);
+
+    REQUIRE(dinput.func_id == dout.func_id);
+    REQUIRE(dinput.req_id == dout.req_id);
+    REQUIRE(dinput.req_seq_no == dout.req_seq_no);
+    REQUIRE(dinput.control_ack == dout.control_ack);
+
+    std::string din_string;
+    std::string dout_string;
+
+    din_string.assign((char *)dinput.control_header, dout.control_header_size);
+    dout_string.assign((char *)dout.control_header, dout.control_header_size);
+    REQUIRE(din_string == dout_string);
+   
+    ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_recv); 
+    
+  }
+
+  SECTION("Negative Cases"){
+    bool res = control_request_pdu.get_fields(NULL, dout);
+    REQUIRE(res == false);
+  }
+}
+
+
+TEST_CASE("E2AP Control Response", "Encoding/Decoding"){
+
+  ric_control_helper dinput ;
+  ric_control_helper  dout;
+  ric_control_response control_response_pdu;
+  
+  mdclog_attr_t *attr;
+  mdclog_attr_init(&attr);
+  mdclog_attr_set_ident(attr, "UNIT TEST E2AP INDICATION");
+  mdclog_init(attr);
+  mdclog_level_set(MDCLOG_INFO);
+  mdclog_attr_destroy(attr);
+
+  ric_control_response test_check;
+
+  SECTION("Verify E2AP Control Response Successful Outcome Encoding/Decoding"){
+    
+    dinput.func_id = 10;
+    dinput.req_id = 6;
+    dinput.req_seq_no = 11;
+    dinput.control_status = 1;
+    dinput.cause = 1;
+    dinput.sub_cause = 2;
+
+
+    ric_control_helper dout;
+    unsigned char buf_proc_id[4] = "25";
+
+    dinput.call_process_id = buf_proc_id;
+    dinput.call_process_id_size = strlen((const char *)buf_proc_id);
+    
+    /* encoding */
+    size_t data_size = 4096;
+    unsigned char data[data_size];
+    
+    ric_control_response control_response_pdu;
+
+    bool res = control_response_pdu.encode_e2ap_control_response(&data[0], &data_size, dinput, true);
+
+    REQUIRE(res == true);
+    
+    /* decoding */
+    E2N_E2AP_PDU_t * e2ap_recv = 0;
+    asn_dec_rval_t dec_res  = asn_decode(0,ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, (void**)&(e2ap_recv), data, data_size);
+    REQUIRE(dec_res.code == RC_OK);
+    REQUIRE(e2ap_recv->present ==  E2N_E2AP_PDU_PR_successfulOutcome);
+    res =   control_response_pdu.get_fields(e2ap_recv->choice.successfulOutcome, dout);
+    REQUIRE(res == true);
+    REQUIRE(dout.func_id == dinput.func_id);
+    REQUIRE(dout.req_id == dinput.req_id);
+    REQUIRE(dout.control_status == dinput.control_status);
+    
+    ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_recv);
+  }
+
+  
+  SECTION("Verify E2AP Control Response UnSuccessful Outcome Encoding/Decoding"){
+    
+    dinput.func_id = 10;
+    dinput.req_id = 6;
+    dinput.req_seq_no = 11;
+    dinput.control_status = 1;
+    dinput.cause = 1;
+    dinput.sub_cause = 2;
+
+
+    ric_control_helper dout;
+    unsigned char buf_proc_id[4] = "25";
+
+    dinput.call_process_id = buf_proc_id;
+    dinput.call_process_id_size = strlen((const char *)buf_proc_id);
+    
+    /* encoding */
+    size_t data_size = 4096;
+    unsigned char data[data_size];
+    
+    ric_control_response control_response_pdu;
+    bool res = control_response_pdu.encode_e2ap_control_response(&data[0], &data_size, dinput, false);
+    REQUIRE(res == true);
+    
+    /* decoding */
+    E2N_E2AP_PDU_t * e2ap_recv = 0;
+    asn_dec_rval_t dec_res  = asn_decode(0,ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, (void**)&(e2ap_recv), data, data_size);
+    REQUIRE(dec_res.code == RC_OK);
+    REQUIRE(e2ap_recv->present ==  E2N_E2AP_PDU_PR_unsuccessfulOutcome);
+    res =   control_response_pdu.get_fields(e2ap_recv->choice.unsuccessfulOutcome, dout);
+
+    REQUIRE(res == true);
+    REQUIRE(dout.func_id == dinput.func_id);
+    REQUIRE(dout.req_id == dinput.req_id);
+    REQUIRE(dout.control_status == dinput.control_status);
+    REQUIRE(dout.cause == dinput.cause);
+    REQUIRE(dout.sub_cause == dinput.sub_cause);
+    ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_recv);
+  }
+
+}