colosseum-near-rt-ric/setup/e2mgr/E2Manager/converters/x2apPdu_asn1_unpacker_test.go

132 lines
4.7 KiB
Go
Raw Normal View History

2021-12-08 21:17:46 +01:00
/*
* Copyright (c) 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.
*/
/*
* This source code is part of the near-RT RIC (RAN Intelligent Controller)
* platform project (RICP).
*/
package converters
import (
"e2mgr/e2pdus"
"e2mgr/logger"
"fmt"
"strings"
"testing"
)
/*
* Unpack an x2setup response returned from RAN.
* Verify it matches the want pdu.
*/
func TestUnpackX2apSetupResponse(t *testing.T) {
logger, _ := logger.InitLogger(logger.DebugLevel)
wantPduAsStr := `SuccessfulOutcome ::= {
procedureCode: 6
criticality: 0 (reject)
value: X2SetupResponse ::= {
protocolIEs: ProtocolIE-Container ::= {
X2SetupResponse-IEs ::= {
id: 21
criticality: 0 (reject)
value: GlobalENB-ID ::= {
pLMN-Identity: 02 F8 29
eNB-ID: 00 7A 80 (4 bits unused)
}
}
X2SetupResponse-IEs ::= {
id: 20
criticality: 0 (reject)
value: ServedCells ::= {
SEQUENCE ::= {
servedCellInfo: ServedCell-Information ::= {
pCI: 99
cellId: ECGI ::= {
pLMN-Identity: 02 F8 29
eUTRANcellIdentifier: 00 07 AB 50 (4 bits unused)
}
tAC: 01 02
broadcastPLMNs: BroadcastPLMNs-Item ::= {
02 F8 29
}
eUTRA-Mode-Info: FDD-Info ::= {
uL-EARFCN: 1
dL-EARFCN: 1
uL-Transmission-Bandwidth: 3 (bw50)
dL-Transmission-Bandwidth: 3 (bw50)
}
}
}
}
}
}
}
}`
inputPayloadAsStr := "2006002a000002001500080002f82900007a8000140017000000630002f8290007ab50102002f829000001000133"
var payload []byte
_, err := fmt.Sscanf(inputPayloadAsStr, "%x", &payload)
if err != nil {
t.Errorf("convert inputPayloadAsStr to payloadAsByte. Error: %v\n", err)
}
response, err := UnpackX2apPduAndRefine(logger, e2pdus.MaxAsn1CodecAllocationBufferSize , len(payload), payload, e2pdus.MaxAsn1CodecMessageBufferSize /*message buffer*/)
if err != nil {
t.Errorf("want: success, got: unpack failed. Error: %v\n", err)
}
want := strings.Fields(wantPduAsStr)
got := strings.Fields(response.PduPrint)
if len(want) != len(got) {
t.Errorf("\nwant :\t[%s]\n got: \t\t[%s]\n", wantPduAsStr, response.PduPrint)
}
for i := 0; i < len(want); i++ {
if strings.Compare(want[i], got[i]) != 0 {
t.Errorf("\nwant :\t[%s]\n got: \t\t[%s]\n", wantPduAsStr, strings.TrimSpace(response.PduPrint))
}
}
}
/*unpacking error*/
func TestUnpackX2apSetupResponseUnpackError(t *testing.T) {
logger, _ := logger.InitLogger(logger.InfoLevel)
wantError := "unpacking error: #src/asn1codec_utils.c.unpack_pdu_aux - Failed to decode E2AP-PDU (consumed 0), error = 0 Success"
//--------------------2006002a
inputPayloadAsStr := "2006002b000002001500080002f82900007a8000140017000000630002f8290007ab50102002f829000001000133"
var payload []byte
_, err := fmt.Sscanf(inputPayloadAsStr, "%x", &payload)
if err != nil {
t.Errorf("convert inputPayloadAsStr to payloadAsByte. Error: %v\n", err)
}
_, err = UnpackX2apPduAndRefine(logger, e2pdus.MaxAsn1CodecAllocationBufferSize , len(payload), payload, e2pdus.MaxAsn1CodecMessageBufferSize /*message buffer*/)
if err != nil {
if 0 != strings.Compare(fmt.Sprintf("%s", err), wantError) {
t.Errorf("want failure: %s, got: %s", wantError, err)
}
} else {
t.Errorf("want failure: %s, got: success", wantError)
}
}