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 CellIdList: []string{"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 CellIdList: []string{"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 CellIdList: []string{"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 CellIdList: []string{"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",
113 request: ResourceStatusRequestData{
114 CellIdList: []string{"0a0b0c:abcd8000", "0b0c0d:acde8000"},
117 PartialSuccessAllowed: true,
119 TnlLoadIndPeriodic: true,
120 HwLoadIndPeriodic: true,
121 AbsStatusPeriodic: true,
122 RsrpMeasurementPeriodic: true,
124 PeriodicityMS: enums.ReportingPeriodicity_one_thousand_ms,
125 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
126 PeriodicityCsiMS: enums.ReportingPeriodicityCSIR_ms5,
128 packedPdu: "000900480000080027000300000e001c00010000260004fe000000001d401901001f4008000a0b0cabcd8000001f4008000b0c0dacde8000001e4001000040400100006d4001000091400100",
132 for _, tc := range testCases {
133 t.Run(tc.packedPdu, func(t *testing.T) {
135 payload, asString, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &tc.request, MaxAsn1PackedBufferSize /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
137 t.Errorf("want: success, got: pack failed. Error: %v\n", err)
139 t.Logf("packed resource status request (size=%d): %x\n\n%s", len(payload), payload, asString)
140 tmp := fmt.Sprintf("%x", payload)
141 if len(tmp) != len(tc.packedPdu) {
142 t.Errorf("want packed len:%d, got: %d\n", len(tc.packedPdu)/2, len(payload)/2)
145 if strings.Compare(tmp, tc.packedPdu) != 0 {
146 t.Errorf("\nwant :\t[%s]\n got: \t\t[%s]\n", tc.packedPdu, tmp)
155 func TestBuildPackedResourceStatusRequestError(t *testing.T) {
156 request := ResourceStatusRequestData{
157 CellIdList: []string{"0a0b0c:abcd8000"},
161 TnlLoadIndPeriodic: true,
162 HwLoadIndPeriodic: true,
163 AbsStatusPeriodic: true,
164 RsrpMeasurementPeriodic: true,
166 PeriodicityMS: enums.ReportingPeriodicity_one_thousand_ms,
167 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
168 PeriodicityCsiMS: enums.ReportingPeriodicityCSIR_ms5,
170 expected := "packing error: #src/asn1codec_utils.c.pack_pdu_aux - Encoded output of E2AP-PDU, is too big"
171 _, _, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &request, 40 /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
173 if !strings.Contains(err.Error(), expected) {
174 t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
177 t.Errorf("want failure: ...%s..., got: success", expected)
182 func TestBuildPackedResourceStatusInvalidCellID(t *testing.T) {
183 request := ResourceStatusRequestData{
184 CellIdList: []string{"0a0b0cabcd8000"},
188 TnlLoadIndPeriodic: true,
189 HwLoadIndPeriodic: true,
190 AbsStatusPeriodic: true,
191 RsrpMeasurementPeriodic: true,
193 PeriodicityMS: enums.ReportingPeriodicity_one_thousand_ms,
194 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
195 PeriodicityCsiMS: enums.ReportingPeriodicityCSIR_ms5,
197 expected := "BuildPackedResourceStatusRequest() - unexpected CellID value [0a0b0cabcd8000]@0 (want: \"<PLMNIdentifier>:<eUTRANCellIdentifier>\"), err: unexpected EOF"
198 _, _, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &request, MaxAsn1PackedBufferSize /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
200 if !strings.Contains(err.Error(), expected) {
201 t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
204 t.Errorf("want failure: ...%s..., got: success", expected)
209 func TestBuildPackedResourceStatusInvalidPeriodicity(t *testing.T) {
210 request := ResourceStatusRequestData{
211 CellIdList: []string{"0a0b0c:abcd8000"},
215 TnlLoadIndPeriodic: true,
216 HwLoadIndPeriodic: true,
217 AbsStatusPeriodic: true,
218 RsrpMeasurementPeriodic: true,
221 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
222 PeriodicityCsiMS: enums.ReportingPeriodicityCSIR_ms5,
224 expected := "BuildPackedResourceStatusRequest - packing error: #src/asn1codec_utils.c.pack_pdu_aux - Failed to encode E2AP-PDU, error = 9 Bad file descriptor"
225 _, _, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &request, MaxAsn1PackedBufferSize /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
227 if !strings.Contains(err.Error(), expected) {
228 t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
231 t.Errorf("want failure: ...%s..., got: success", expected)
236 func TestBuildPackedResourceStatusTooManyCells(t *testing.T) {
237 request := ResourceStatusRequestData{
238 CellIdList: []string{
239 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
240 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
241 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
242 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
243 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
244 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
245 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
246 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
247 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
248 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
249 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
250 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
251 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
252 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
253 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
254 "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000", "0a0b0c:abcd8000", "0b0c0d:acde8000",
259 PartialSuccessAllowed: true,
261 TnlLoadIndPeriodic: true,
262 HwLoadIndPeriodic: true,
263 AbsStatusPeriodic: true,
264 RsrpMeasurementPeriodic: true,
266 PeriodicityMS: enums.ReportingPeriodicity_one_thousand_ms,
267 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
268 PeriodicityCsiMS: enums.ReportingPeriodicityCSIR_ms5,
271 expected := "BuildPackedResourceStatusRequest - packing error: #src/asn1codec_utils.c.pack_pdu_aux - Failed to encode E2AP-PDU, error = 9 Bad file descriptor"
272 _, _, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &request, MaxAsn1PackedBufferSize /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
274 if !strings.Contains(err.Error(), expected) {
275 t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
278 t.Errorf("want failure: ...%s..., got: success", expected)