3a878cc9d736211416fd55ea5f54b017a821aeb0
[ric-plt/resource-status-manager.git] / RSM / e2pdus / resource_status_request_test.go
1 /*
2  *   Copyright (c) 2019 AT&T Intellectual Property.
3  *
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
7  *
8  *       http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 /*
18  * This source code is part of the near-RT RIC (RAN Intelligent Controller)
19  * platform project (RICP).
20  */
21
22 package e2pdus
23
24 import (
25         "fmt"
26         "rsm/enums"
27         "strings"
28         "testing"
29 )
30
31 /*
32 * Create and pack an x2ap setup request.
33 * Verify the packed representation matches the want value.
34  */
35 func TestBuildPackedResourceStatusRequest(t *testing.T) {
36         var testCases = []struct {
37                 request   ResourceStatusRequestData
38                 packedPdu string
39         }{
40                 {
41                         request: ResourceStatusRequestData{
42                                 CellIdList:                   []string{"0a0b0c:abcd8000"},
43                                 MeasurementID:                15,
44                                 MeasurementID2:               0,
45                                 PartialSuccessAllowed:        true,
46                                 PrbPeriodic:                  true,
47                                 TnlLoadIndPeriodic:           true,
48                                 HwLoadIndPeriodic:            true,
49                                 AbsStatusPeriodic:            true,
50                                 RsrpMeasurementPeriodic:      true,
51                                 CsiPeriodic:                  true,
52                                 PeriodicityMS:                enums.ReportingPeriodicity_one_thousand_ms,
53                                 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
54                                 PeriodicityCsiMS:             enums.ReportingPeriodicityCSIR_ms5,
55                         },
56                         packedPdu: "0009003c0000080027000300000e001c00010000260004fe000000001d400d00001f4008000a0b0cabcd8000001e4001000040400100006d4001000091400100",
57                 },
58                 {
59                         request: ResourceStatusRequestData{
60                                 CellIdList:                   []string{"0a0b0c:abcd8000"},
61                                 MeasurementID:                15,
62                                 MeasurementID2:               0,
63                                 PartialSuccessAllowed:        true,
64                                 PrbPeriodic:                  true,
65                                 TnlLoadIndPeriodic:           true,
66                                 HwLoadIndPeriodic:            true,
67                                 AbsStatusPeriodic:            true,
68                                 RsrpMeasurementPeriodic:      true,
69                                 CsiPeriodic:                  true,
70                                 PeriodicityMS:                0,
71                                 PeriodicityRsrpMeasurementMS: 0,
72                                 PeriodicityCsiMS:             0,
73                         },
74                         packedPdu: "0009002d0000050027000300000e001c00010000260004fe000000001d400d00001f4008000a0b0cabcd80000040400100",
75                 },
76                 {
77                         request: ResourceStatusRequestData{
78                                 CellIdList:                   []string{"0a0b0c:abcd8000"},
79                                 MeasurementID:                15,
80                                 MeasurementID2:               0,
81                                 PartialSuccessAllowed:        true,
82                                 PrbPeriodic:                  false,
83                                 TnlLoadIndPeriodic:           false,
84                                 HwLoadIndPeriodic:            false,
85                                 AbsStatusPeriodic:            true,
86                                 RsrpMeasurementPeriodic:      true,
87                                 CsiPeriodic:                  true,
88                                 PeriodicityMS:                0,
89                                 PeriodicityRsrpMeasurementMS: 0,
90                                 PeriodicityCsiMS:             0,
91                         },
92                         packedPdu: "0009002d0000050027000300000e001c000100002600040e000000001d400d00001f4008000a0b0cabcd80000040400100",
93                 },
94                 {
95                         request: ResourceStatusRequestData{
96                                 CellIdList:                   []string{"0a0b0c:abcd8000"},
97                                 MeasurementID:                15,
98                                 MeasurementID2:               0,
99                                 PartialSuccessAllowed:        false,
100                                 PrbPeriodic:                  false,
101                                 TnlLoadIndPeriodic:           false,
102                                 HwLoadIndPeriodic:            false,
103                                 AbsStatusPeriodic:            true,
104                                 RsrpMeasurementPeriodic:      true,
105                                 CsiPeriodic:                  true,
106                                 PeriodicityMS:                enums.ReportingPeriodicity_ten_thousand_ms,
107                                 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_six_hundred_40_ms,
108                                 PeriodicityCsiMS:             enums.ReportingPeriodicityCSIR_ms80,
109                         },
110                         packedPdu: "000900370000070027000300000e001c000100002600040e000000001d400d00001f4008000a0b0cabcd8000001e400160006d4001600091400140",
111                 },
112                 {
113                         request: ResourceStatusRequestData{
114                                 CellIdList:                   []string{"0a0b0c:abcd8000", "0b0c0d:acde8000"},
115                                 MeasurementID:                15,
116                                 MeasurementID2:               0,
117                                 PartialSuccessAllowed:        true,
118                                 PrbPeriodic:                  true,
119                                 TnlLoadIndPeriodic:           true,
120                                 HwLoadIndPeriodic:            true,
121                                 AbsStatusPeriodic:            true,
122                                 RsrpMeasurementPeriodic:      true,
123                                 CsiPeriodic:                  true,
124                                 PeriodicityMS:                enums.ReportingPeriodicity_one_thousand_ms,
125                                 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
126                                 PeriodicityCsiMS:             enums.ReportingPeriodicityCSIR_ms5,
127                         },
128                         packedPdu: "000900480000080027000300000e001c00010000260004fe000000001d401901001f4008000a0b0cabcd8000001f4008000b0c0dacde8000001e4001000040400100006d4001000091400100",
129                 },
130         }
131
132         for _, tc := range testCases {
133                 t.Run(tc.packedPdu, func(t *testing.T) {
134
135                         payload, asString, err := BuildPackedResourceStatusRequest(enums.Registration_Request_start, &tc.request, MaxAsn1PackedBufferSize /*max packed buffer*/, MaxAsn1CodecMessageBufferSize /*max message buffer*/, true /*withDebug*/)
136                         if err != nil {
137                                 t.Errorf("want: success, got: pack failed. Error: %v\n", err)
138                         } else {
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)
143                                 }
144
145                                 if strings.Compare(tmp, tc.packedPdu) != 0 {
146                                         t.Errorf("\nwant :\t[%s]\n got: \t\t[%s]\n", tc.packedPdu, tmp)
147                                 }
148                         }
149                 })
150         }
151 }
152
153 /*Packing error*/
154
155 func TestBuildPackedResourceStatusRequestError(t *testing.T) {
156         request := ResourceStatusRequestData{
157                 CellIdList:                   []string{"0a0b0c:abcd8000"},
158                 MeasurementID:                15,
159                 MeasurementID2:               0,
160                 PrbPeriodic:                  true,
161                 TnlLoadIndPeriodic:           true,
162                 HwLoadIndPeriodic:            true,
163                 AbsStatusPeriodic:            true,
164                 RsrpMeasurementPeriodic:      true,
165                 CsiPeriodic:                  true,
166                 PeriodicityMS:                enums.ReportingPeriodicity_one_thousand_ms,
167                 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
168                 PeriodicityCsiMS:             enums.ReportingPeriodicityCSIR_ms5,
169         }
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*/)
172         if err != nil {
173                 if !strings.Contains(err.Error(), expected) {
174                         t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
175                 }
176         } else {
177                 t.Errorf("want failure: ...%s..., got: success", expected)
178
179         }
180 }
181
182 func TestBuildPackedResourceStatusInvalidCellID(t *testing.T) {
183         request := ResourceStatusRequestData{
184                 CellIdList:                   []string{"0a0b0cabcd8000"},
185                 MeasurementID:                15,
186                 MeasurementID2:               0,
187                 PrbPeriodic:                  true,
188                 TnlLoadIndPeriodic:           true,
189                 HwLoadIndPeriodic:            true,
190                 AbsStatusPeriodic:            true,
191                 RsrpMeasurementPeriodic:      true,
192                 CsiPeriodic:                  true,
193                 PeriodicityMS:                enums.ReportingPeriodicity_one_thousand_ms,
194                 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
195                 PeriodicityCsiMS:             enums.ReportingPeriodicityCSIR_ms5,
196         }
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*/)
199         if err != nil {
200                 if !strings.Contains(err.Error(), expected) {
201                         t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
202                 }
203         } else {
204                 t.Errorf("want failure: ...%s..., got: success", expected)
205
206         }
207 }
208
209 func TestBuildPackedResourceStatusInvalidPeriodicity(t *testing.T) {
210         request := ResourceStatusRequestData{
211                 CellIdList:                   []string{"0a0b0c:abcd8000"},
212                 MeasurementID:                15,
213                 MeasurementID2:               0,
214                 PrbPeriodic:                  true,
215                 TnlLoadIndPeriodic:           true,
216                 HwLoadIndPeriodic:            true,
217                 AbsStatusPeriodic:            true,
218                 RsrpMeasurementPeriodic:      true,
219                 CsiPeriodic:                  true,
220                 PeriodicityMS:                22,
221                 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
222                 PeriodicityCsiMS:             enums.ReportingPeriodicityCSIR_ms5,
223         }
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*/)
226         if err != nil {
227                 if !strings.Contains(err.Error(), expected) {
228                         t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
229                 }
230         } else {
231                 t.Errorf("want failure: ...%s..., got: success", expected)
232
233         }
234 }
235
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",
255                         "0a0b0c:abcd8000",
256                 },
257                 MeasurementID:                15,
258                 MeasurementID2:               0,
259                 PartialSuccessAllowed:        true,
260                 PrbPeriodic:                  true,
261                 TnlLoadIndPeriodic:           true,
262                 HwLoadIndPeriodic:            true,
263                 AbsStatusPeriodic:            true,
264                 RsrpMeasurementPeriodic:      true,
265                 CsiPeriodic:                  true,
266                 PeriodicityMS:                enums.ReportingPeriodicity_one_thousand_ms,
267                 PeriodicityRsrpMeasurementMS: enums.ReportingPeriodicityRSRPMR_one_hundred_20_ms,
268                 PeriodicityCsiMS:             enums.ReportingPeriodicityCSIR_ms5,
269         }
270
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*/)
273         if err != nil {
274                 if !strings.Contains(err.Error(), expected) {
275                         t.Errorf("want failure:[%s], got: [%s]\n", expected, err)
276                 }
277         } else {
278                 t.Errorf("want failure: ...%s..., got: success", expected)
279
280         }
281 }