132 lines
4.7 KiB
Go
132 lines
4.7 KiB
Go
/*
|
|
* 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)
|
|
|
|
}
|
|
}
|