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