2 * Copyright (c) 2019 AT&T Intellectual Property.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * This source code is part of the near-RT RIC (RAN Intelligent Controller)
19 * platform project (RICP).
32 * Create and pack an x2ap setup request.
33 * Verify the packed representation matches the want value.
35 func TestBuildPackedResourceStatusRequest(t *testing.T) {
36 var testCases = []struct {
37 request ResourceStatusRequestData
41 request: ResourceStatusRequestData{
42 CellID: "0a0b0c:abcd8000",
45 PartialSuccessAllowed: true,
47 TnlLoadIndPeriodic: true,
48 HwLoadIndPeriodic: true,
49 AbsStatusPeriodic: true,
50 RsrpMeasurementPeriodic: true,
52 PeriodicityMS: enums.ReportingPeriodicity_one_thousand_ms,
53 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
54 PeriodicityCsiMS: enums.ReportingPeriodicityCSIR_ms5,
56 packedPdu: "0009003c0000080027000300000e001c00010000260004fe000000001d400d00001f4008000a0b0cabcd8000001e4001000040400100006d4001000091400100",
59 request: ResourceStatusRequestData{
60 CellID: "0a0b0c:abcd8000",
63 PartialSuccessAllowed: true,
65 TnlLoadIndPeriodic: true,
66 HwLoadIndPeriodic: true,
67 AbsStatusPeriodic: true,
68 RsrpMeasurementPeriodic: true,
71 PeriodicityRsrpMeasurementMS: 0,
74 packedPdu: "0009002d0000050027000300000e001c00010000260004fe000000001d400d00001f4008000a0b0cabcd80000040400100",
77 request: ResourceStatusRequestData{
78 CellID: "0a0b0c:abcd8000",
81 PartialSuccessAllowed: true,
83 TnlLoadIndPeriodic: false,
84 HwLoadIndPeriodic: false,
85 AbsStatusPeriodic: true,
86 RsrpMeasurementPeriodic: true,
89 PeriodicityRsrpMeasurementMS: 0,
92 packedPdu: "0009002d0000050027000300000e001c000100002600040e000000001d400d00001f4008000a0b0cabcd80000040400100",
95 request: ResourceStatusRequestData{
96 CellID: "0a0b0c:abcd8000",
99 PartialSuccessAllowed: false,
101 TnlLoadIndPeriodic: false,
102 HwLoadIndPeriodic: false,
103 AbsStatusPeriodic: true,
104 RsrpMeasurementPeriodic: true,
106 PeriodicityMS: enums.ReportingPeriodicity_ten_thousand_ms,
107 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_six_hundred_40_ms,
108 PeriodicityCsiMS: enums.ReportingPeriodicityCSIR_ms80,
110 packedPdu: "000900370000070027000300000e001c000100002600040e000000001d400d00001f4008000a0b0cabcd8000001e400160006d4001600091400140",
114 for _, tc := range testCases {
115 t.Run(tc.packedPdu, func(t *testing.T) {
117 payload, asString, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &tc.request, MaxAsn1PackedBufferSize /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
119 t.Errorf("want: success, got: pack failed. Error: %v\n", err)
121 t.Logf("packed resource status request (size=%d): %x\n\n%s", len(payload), payload,asString)
122 tmp := fmt.Sprintf("%x", payload)
123 if len(tmp) != len(tc.packedPdu) {
124 t.Errorf("want packed len:%d, got: %d\n", len(tc.packedPdu)/2, len(payload)/2)
127 if strings.Compare(tmp, tc.packedPdu) != 0 {
128 t.Errorf("\nwant :\t[%s]\n got: \t\t[%s]\n", tc.packedPdu, tmp)
137 func TestBuildPackedResourceStatusRequestError(t *testing.T) {
138 request := ResourceStatusRequestData{
139 CellID: "0a0b0c:abcd8000",
143 TnlLoadIndPeriodic: true,
144 HwLoadIndPeriodic: true,
145 AbsStatusPeriodic: true,
146 RsrpMeasurementPeriodic: true,
148 PeriodicityMS: enums.ReportingPeriodicity_one_thousand_ms,
149 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
150 PeriodicityCsiMS: enums.ReportingPeriodicityCSIR_ms5,
152 expected:= "packing error: #src/asn1codec_utils.c.pack_pdu_aux - Encoded output of E2AP-PDU, is too big"
153 _, _, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &request, 40 /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
155 if !strings.Contains(err.Error(), expected) {
156 t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
159 t.Errorf("want failure: ...%s..., got: success", expected)
164 func TestBuildPackedResourceStatusInvalidCellID(t *testing.T) {
165 request := ResourceStatusRequestData{
166 CellID: "0a0b0cabcd8000",
170 TnlLoadIndPeriodic: true,
171 HwLoadIndPeriodic: true,
172 AbsStatusPeriodic: true,
173 RsrpMeasurementPeriodic: true,
175 PeriodicityMS: enums.ReportingPeriodicity_one_thousand_ms,
176 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
177 PeriodicityCsiMS: enums.ReportingPeriodicityCSIR_ms5,
179 expected:= "BuildPackedResourceStatusRequest() - unexpected CellID value [0a0b0cabcd8000] (want: \"<PLMNIdentifier>:<eUTRANCellIdentifier>\"), err: unexpected EOF"
180 _, _, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &request, MaxAsn1PackedBufferSize /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
182 if !strings.Contains(err.Error(), expected) {
183 t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
186 t.Errorf("want failure: ...%s..., got: success", expected)
191 func TestBuildPackedResourceStatusInvalidPeriodicity(t *testing.T) {
192 request := ResourceStatusRequestData{
193 CellID: "0a0b0c:abcd8000",
197 TnlLoadIndPeriodic: true,
198 HwLoadIndPeriodic: true,
199 AbsStatusPeriodic: true,
200 RsrpMeasurementPeriodic: true,
203 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
204 PeriodicityCsiMS: enums.ReportingPeriodicityCSIR_ms5,
206 expected:= "BuildPackedResourceStatusRequest - packing error: #src/asn1codec_utils.c.pack_pdu_aux - Failed to encode E2AP-PDU, error = 9 Bad file descriptor"
207 _, _, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &request, MaxAsn1PackedBufferSize /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
209 if !strings.Contains(err.Error(), expected) {
210 t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
213 t.Errorf("want failure: ...%s..., got: success", expected)