3bc099b5a6307a5ff13633a23af533d3f4e4b9b1
[ric-plt/e2mgr.git] / E2Manager / converters / x2setupFailureResponseToProtobuf_test.go
1 /*******************************************************************************
2  *
3  *   Copyright (c) 2019 AT&T Intellectual Property.
4  *
5  *   Licensed under the Apache License, Version 2.0 (the "License");
6  *   you may not use this file except in compliance with the License.
7  *   You may obtain a copy of the License at
8  *
9  *       http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *   Unless required by applicable law or agreed to in writing, software
12  *   distributed under the License is distributed on an "AS IS" BASIS,
13  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *   See the License for the specific language governing permissions and
15  *   limitations under the License.
16  *
17  *******************************************************************************/
18 package converters
19
20 import (
21         "e2mgr/e2pdus"
22         "e2mgr/logger"
23         "e2mgr/rNibWriter"
24         "fmt"
25         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
26         "strings"
27         "testing"
28 )
29
30 /*
31 Test permutations of x2 setup response to protobuf enb
32  */
33
34 func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
35         logger, _ := logger.InitLogger(logger.InfoLevel)
36
37         var testCases = []struct {
38                 saveToRNib       bool
39                 response              string
40                 packedPdu        string
41                 failure          error
42         }{
43                 {
44                         saveToRNib: false, //TODO: use MOCK?
45                         response:       "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
46                         /*
47                         E2AP-PDU:
48                          unsuccessfulOutcome_t
49                           procedureCode_t = 0x6
50                           criticality_t = 0
51                           X2SetupFailure
52                            protocolIEs_t:
53                             ProtocolIE_Container_elm
54                              id_t = 0x5
55                              criticality_t = 0x1
56                              Cause:
57                               radioNetwork_t = 0
58                             ProtocolIE_Container_elm
59                              id_t = 0x16
60                              criticality_t = 0x1
61                              TimeToWait = 0
62                             ProtocolIE_Container_elm
63                              id_t = 0x11
64                              criticality_t = 0x1
65                              CriticalityDiagnostics
66                               procedureCode_t = 0x21
67                               triggeringMessage_t = 0x2
68                               procedureCriticality_t = 0x2
69                               iEsCriticalityDiagnostics_t:
70                                CriticalityDiagnostics_IE_List_elm
71                                 iECriticality_t = 0
72                                 iE_ID_t = 0x80
73                                 typeOfError_t = 0x1
74                         */
75                         packedPdu: "4006001a0000030005400200000016400100001140087821a00000008040"},
76                 {
77                         saveToRNib: false,
78                         response:       "CONNECTED_SETUP_FAILED transport_layer_cause:TRANSPORT_RESOURCE_UNAVAILABLE criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
79                         /*
80                         E2AP-PDU:
81                          unsuccessfulOutcome_t
82                           procedureCode_t = 0x6
83                           criticality_t = 0
84                           X2SetupFailure
85                            protocolIEs_t:
86                             ProtocolIE_Container_elm
87                              id_t = 0x5
88                              criticality_t = 0x1
89                              Cause:
90                               transport_t = 0
91                             ProtocolIE_Container_elm
92                              id_t = 0x11
93                              criticality_t = 0x1
94                              CriticalityDiagnostics
95                               procedureCode_t = 0x21
96                               triggeringMessage_t = 0x2
97                               procedureCriticality_t = 0x2
98                               iEsCriticalityDiagnostics_t:
99                                CriticalityDiagnostics_IE_List_elm
100                                 iECriticality_t = 0
101                                 iE_ID_t = 0x80
102                                 typeOfError_t = 0x1
103                         */
104                         packedPdu: "400600140000020005400120001140087821a00000008040"},
105                 {
106                         saveToRNib: false,
107                         response:       "CONNECTED_SETUP_FAILED protocol_cause:ABSTRACT_SYNTAX_ERROR_IGNORE_AND_NOTIFY criticality_diagnostics:<triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
108                         /*
109                         E2AP-PDU:
110                          unsuccessfulOutcome_t
111                           procedureCode_t = 0x6
112                           criticality_t = 0
113                           X2SetupFailure
114                            protocolIEs_t:
115                             ProtocolIE_Container_elm
116                              id_t = 0x5
117                              criticality_t = 0x1
118                              Cause:
119                               protocol_t = 0x2
120                             ProtocolIE_Container_elm
121                              id_t = 0x11
122                              criticality_t = 0x1
123                              CriticalityDiagnostics
124                               triggeringMessage_t = 0x2
125                               procedureCriticality_t = 0x2
126                               iEsCriticalityDiagnostics_t:
127                                CriticalityDiagnostics_IE_List_elm
128                                 iECriticality_t = 0
129                                 iE_ID_t = 0x80
130                                 typeOfError_t = 0x1
131                         */
132                         packedPdu: "400600130000020005400144001140073a800000008040"},
133
134                 {
135                         saveToRNib: false,
136                         response:       "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
137                         /*
138                         E2AP-PDU:
139                          unsuccessfulOutcome_t
140                           procedureCode_t = 0x6
141                           criticality_t = 0
142                           X2SetupFailure
143                            protocolIEs_t:
144                             ProtocolIE_Container_elm
145                              id_t = 0x5
146                              criticality_t = 0x1
147                              Cause:
148                               misc_t = 0x4
149                             ProtocolIE_Container_elm
150                              id_t = 0x11
151                              criticality_t = 0x1
152                              CriticalityDiagnostics
153                               procedureCriticality_t = 0x2
154                               iEsCriticalityDiagnostics_t:
155                                CriticalityDiagnostics_IE_List_elm
156                                 iECriticality_t = 0
157                                 iE_ID_t = 0x80
158                                 typeOfError_t = 0x1
159                         */
160                         packedPdu: "400600120000020005400168001140061a0000008040"},
161
162                 {
163                         saveToRNib: false,
164                         response:       "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > information_element_criticality_diagnostics:<ie_criticality:NOTIFY ie_id:255 type_of_error:NOT_UNDERSTOOD > > ",
165                         /*
166                         E2AP-PDU:
167                          unsuccessfulOutcome_t
168                           procedureCode_t = 0x6
169                           criticality_t = 0
170                           X2SetupFailure
171                            protocolIEs_t:
172                             ProtocolIE_Container_elm
173                              id_t = 0x5
174                              criticality_t = 0x1
175                              Cause:
176                               misc_t = 0x4
177                             ProtocolIE_Container_elm
178                              id_t = 0x11
179                              criticality_t = 0x1
180                              CriticalityDiagnostics
181                               iEsCriticalityDiagnostics_t:
182                                CriticalityDiagnostics_IE_List_elm
183                                 iECriticality_t = 0
184                                 iE_ID_t = 0x80
185                                 typeOfError_t = 0x1
186                                CriticalityDiagnostics_IE_List_elm
187                                 iECriticality_t = 0x2
188                                 iE_ID_t = 0xff
189                                 typeOfError_t = 0
190                         */
191                         packedPdu: "4006001500000200054001680011400908010000804800ff00"},
192
193
194                 {
195                         saveToRNib: false,
196                         response:       "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<procedure_code:33 > ",
197                         /*
198                         E2AP-PDU:
199                          unsuccessfulOutcome_t
200                           procedureCode_t = 0x6
201                           criticality_t = 0
202                           X2SetupFailure
203                            protocolIEs_t:
204                             ProtocolIE_Container_elm
205                              id_t = 0x5
206                              criticality_t = 0x1
207                              Cause:
208                               misc_t = 0x4
209                             ProtocolIE_Container_elm
210                              id_t = 0x11
211                              criticality_t = 0x1
212                              CriticalityDiagnostics
213                               procedureCode_t = 0x21
214                         */
215                         packedPdu: "4006000e0000020005400168001140024021"},
216
217                 {
218                         saveToRNib: false,
219                         response:       "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED ",
220                         /*
221                         E2AP-PDU:
222                          unsuccessfulOutcome_t
223                           procedureCode_t = 0x6
224                           criticality_t = 0
225                           X2SetupFailure
226                            protocolIEs_t:
227                             ProtocolIE_Container_elm
228                              id_t = 0x5
229                              criticality_t = 0x1
230                              Cause:
231                               misc_t = 0x4
232                         */
233                         packedPdu: "400600080000010005400168"},
234                 {
235                         saveToRNib: false,
236                         response: "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
237                         /*
238                                 E2AP-PDU:
239                                  unsuccessfulOutcome_t
240                                   procedureCode_t = 0x6
241                                   criticality_t = 0
242                                   X2SetupFailure
243                                    protocolIEs_t:
244                                     ProtocolIE_Container_elm
245                                      id_t = 0x5
246                                      criticality_t = 0x1
247                                      Cause:
248                                       radioNetwork_t = 0
249                                     ProtocolIE_Container_elm
250                                      id_t = 0x16
251                                      criticality_t = 0x1
252                                      TimeToWait = 0
253                                     ProtocolIE_Container_elm
254                                      id_t = 0x11
255                                      criticality_t = 0x1
256                                      CriticalityDiagnostics
257                                       procedureCode_t = 0x21
258                                       triggeringMessage_t = 0x2
259                                       procedureCriticality_t = 0x2
260                                       iEsCriticalityDiagnostics_t:
261                                        CriticalityDiagnostics_IE_List_elm
262                                         iECriticality_t = 0
263                                         iE_ID_t = 0x80
264                                         typeOfError_t = 0x1
265                         */
266                         packedPdu: "4006001a0000030005400200000016400100001140087821a00000008040",
267                         //failure: fmt.Errorf("getAtom for path [unsuccessfulOutcome_t X2SetupFailure protocolIEs_t ProtocolIE_Container_elm Cause radioNetwork_t] failed, rc = 2" /*NO_SPACE_LEFT*/),
268                 },
269         }
270
271     initDb_f := true
272         for _, tc := range testCases {
273                 t.Run(tc.packedPdu, func(t *testing.T) {
274
275                         var payload []byte
276                         _, err := fmt.Sscanf(tc.packedPdu, "%x", &payload)
277                         if err != nil {
278                                 t.Errorf("convert inputPayloadAsStr to payloadAsByte. Error: %v\n", err)
279                         }
280
281                         response, err := UnpackX2SetupFailureResponseAndExtract(logger, e2pdus.MaxAsn1CodecAllocationBufferSize /*allocation buffer*/, len(payload), payload, e2pdus.MaxAsn1CodecMessageBufferSize /*message buffer*/)
282
283                         if err != nil {
284                                 if tc.failure == nil {
285                                         t.Errorf("want: success, got: error: %v\n", err)
286                                 } else {
287                                         if strings.Compare(err.Error(), tc.failure.Error()) != 0 {
288                                                 t.Errorf("want: %s, got: %s", tc.failure, err)
289                                         }
290                                 }
291                         }
292
293                         if response == nil {
294                                 if tc.failure == nil {
295                                         t.Errorf("want: response=%s, got: empty response", tc.response)
296                                 }
297                         } else {
298                                 nb := &entities.NodebInfo{}
299                                 nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED_SETUP_FAILED
300                                 nb.SetupFailure  = response
301                                 nb.FailureType = entities.Failure_X2_SETUP_FAILURE
302                                 respStr := fmt.Sprintf("%s %s", nb.ConnectionStatus, response)
303                                 if !strings.EqualFold(respStr, tc.response) {
304                                         t.Errorf("want: response=[%s], got: [%s]", tc.response, respStr)
305                                 }
306
307                                 // Save to rNib
308                                 if tc.saveToRNib {
309                                         if initDb_f {
310                                                 rNibWriter.Init("e2Manager", 1)
311                                                 initDb_f = false
312                                         }
313                                         nbIdentity := &entities.NbIdentity{InventoryName:"RanName"}
314                                         if rNibErr := rNibWriter.GetRNibWriter().SaveNodeb(nbIdentity, nb); rNibErr != nil {
315                                                 if tc.failure == nil {
316                                                         t.Errorf("rNibWriter failed to save ENB. Error: %s\n", rNibErr.Error())
317                                                 } else {
318                                                         if strings.Compare(rNibErr.Error(), tc.failure.Error()) != 0 {
319                                                                 t.Errorf("want: %s, got: %s", tc.failure, rNibErr.Error())
320                                                         }
321                                                 }
322                                         }
323                                 }
324                         }
325                 })
326         }
327 }
328