Add R5 content to master
[ric-plt/e2mgr.git] / E2Manager / converters / x2_setup_failure_response_converter_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 converters
23
24 import (
25         "e2mgr/logger"
26         "fmt"
27         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
28         "regexp"
29         "strings"
30         "testing"
31 )
32
33 /*
34 Test permutations of x2 setup response to protobuf enb
35 */
36
37 func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
38         logger, _ := logger.InitLogger(logger.InfoLevel)
39
40         var testCases = []struct {
41                 response  string
42                 packedPdu string
43                 failure   error
44         }{
45                 {
46                         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}}",
47                         /*
48                                 E2AP-PDU:
49                                  unsuccessfulOutcome_t
50                                   procedureCode_t = 0x6
51                                   criticality_t = 0
52                                   X2SetupFailure
53                                    protocolIEs_t:
54                                     ProtocolIE_Container_elm
55                                      id_t = 0x5
56                                      criticality_t = 0x1
57                                      Cause:
58                                       radioNetwork_t = 0
59                                     ProtocolIE_Container_elm
60                                      id_t = 0x16
61                                      criticality_t = 0x1
62                                      TimeToWait = 0
63                                     ProtocolIE_Container_elm
64                                      id_t = 0x11
65                                      criticality_t = 0x1
66                                      CriticalityDiagnostics
67                                       procedureCode_t = 0x21
68                                       triggeringMessage_t = 0x2
69                                       procedureCriticality_t = 0x2
70                                       iEsCriticalityDiagnostics_t:
71                                        CriticalityDiagnostics_IE_List_elm
72                                         iECriticality_t = 0
73                                         iE_ID_t = 0x80
74                                         typeOfError_t = 0x1
75                         */
76                         packedPdu: "4006001a0000030005400200000016400100001140087821a00000008040"},
77                 {
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                         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                         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}}",
135                         /*
136                                 E2AP-PDU:
137                                  unsuccessfulOutcome_t
138                                   procedureCode_t = 0x6
139                                   criticality_t = 0
140                                   X2SetupFailure
141                                    protocolIEs_t:
142                                     ProtocolIE_Container_elm
143                                      id_t = 0x5
144                                      criticality_t = 0x1
145                                      Cause:
146                                       misc_t = 0x4
147                                     ProtocolIE_Container_elm
148                                      id_t = 0x11
149                                      criticality_t = 0x1
150                                      CriticalityDiagnostics
151                                       procedureCriticality_t = 0x2
152                                       iEsCriticalityDiagnostics_t:
153                                        CriticalityDiagnostics_IE_List_elm
154                                         iECriticality_t = 0
155                                         iE_ID_t = 0x80
156                                         typeOfError_t = 0x1
157                         */
158                         packedPdu: "400600120000020005400168001140061a0000008040"},
159
160                 {
161                         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}}",
162                         /*
163                                 E2AP-PDU:
164                                  unsuccessfulOutcome_t
165                                   procedureCode_t = 0x6
166                                   criticality_t = 0
167                                   X2SetupFailure
168                                    protocolIEs_t:
169                                     ProtocolIE_Container_elm
170                                      id_t = 0x5
171                                      criticality_t = 0x1
172                                      Cause:
173                                       misc_t = 0x4
174                                     ProtocolIE_Container_elm
175                                      id_t = 0x11
176                                      criticality_t = 0x1
177                                      CriticalityDiagnostics
178                                       iEsCriticalityDiagnostics_t:
179                                        CriticalityDiagnostics_IE_List_elm
180                                         iECriticality_t = 0
181                                         iE_ID_t = 0x80
182                                         typeOfError_t = 0x1
183                                        CriticalityDiagnostics_IE_List_elm
184                                         iECriticality_t = 0x2
185                                         iE_ID_t = 0xff
186                                         typeOfError_t = 0
187                         */
188                         packedPdu: "4006001500000200054001680011400908010000804800ff00"},
189
190
191                 {
192                         response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED  criticality_diagnostics:{procedure_code:33}",
193                         /*
194                                 E2AP-PDU:
195                                  unsuccessfulOutcome_t
196                                   procedureCode_t = 0x6
197                                   criticality_t = 0
198                                   X2SetupFailure
199                                    protocolIEs_t:
200                                     ProtocolIE_Container_elm
201                                      id_t = 0x5
202                                      criticality_t = 0x1
203                                      Cause:
204                                       misc_t = 0x4
205                                     ProtocolIE_Container_elm
206                                      id_t = 0x11
207                                      criticality_t = 0x1
208                                      CriticalityDiagnostics
209                                       procedureCode_t = 0x21
210                         */
211                         packedPdu: "4006000e0000020005400168001140024021"},
212
213                 {
214                         response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED",
215                         /*
216                                 E2AP-PDU:
217                                  unsuccessfulOutcome_t
218                                   procedureCode_t = 0x6
219                                   criticality_t = 0
220                                   X2SetupFailure
221                                    protocolIEs_t:
222                                     ProtocolIE_Container_elm
223                                      id_t = 0x5
224                                      criticality_t = 0x1
225                                      Cause:
226                                       misc_t = 0x4
227                         */
228                         packedPdu: "400600080000010005400168"},
229                 {
230                         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}}",
231                         /*
232                                 E2AP-PDU:
233                                  unsuccessfulOutcome_t
234                                   procedureCode_t = 0x6
235                                   criticality_t = 0
236                                   X2SetupFailure
237                                    protocolIEs_t:
238                                     ProtocolIE_Container_elm
239                                      id_t = 0x5
240                                      criticality_t = 0x1
241                                      Cause:
242                                       radioNetwork_t = 0
243                                     ProtocolIE_Container_elm
244                                      id_t = 0x16
245                                      criticality_t = 0x1
246                                      TimeToWait = 0
247                                     ProtocolIE_Container_elm
248                                      id_t = 0x11
249                                      criticality_t = 0x1
250                                      CriticalityDiagnostics
251                                       procedureCode_t = 0x21
252                                       triggeringMessage_t = 0x2
253                                       procedureCriticality_t = 0x2
254                                       iEsCriticalityDiagnostics_t:
255                                        CriticalityDiagnostics_IE_List_elm
256                                         iECriticality_t = 0
257                                         iE_ID_t = 0x80
258                                         typeOfError_t = 0x1
259                         */
260                         packedPdu: "4006001a0000030005400200000016400100001140087821a00000008040",
261                         //failure: fmt.Errorf("getAtom for path [unsuccessfulOutcome_t X2SetupFailure protocolIEs_t ProtocolIE_Container_elm Cause radioNetwork_t] failed, rc = 2" /*NO_SPACE_LEFT*/),
262                 },
263         }
264
265         converter := NewX2SetupFailureResponseConverter(logger)
266
267         for _, tc := range testCases {
268                 t.Run(tc.packedPdu, func(t *testing.T) {
269
270                         var payload []byte
271                         _, err := fmt.Sscanf(tc.packedPdu, "%x", &payload)
272                         if err != nil {
273                                 t.Errorf("convert inputPayloadAsStr to payloadAsByte. Error: %v\n", err)
274                         }
275
276                         response, err := converter.UnpackX2SetupFailureResponseAndExtract(payload)
277
278                         if err != nil {
279                                 if tc.failure == nil {
280                                         t.Errorf("want: success, got: error: %v\n", err)
281                                 } else {
282                                         if strings.Compare(err.Error(), tc.failure.Error()) != 0 {
283                                                 t.Errorf("want: %s, got: %s", tc.failure, err)
284                                         }
285                                 }
286                         }
287
288                         if response == nil {
289                                 if tc.failure == nil {
290                                         t.Errorf("want: response=%s, got: empty response", tc.response)
291                                 }
292                         } else {
293                                 nb := &entities.NodebInfo{}
294                                 nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED_SETUP_FAILED
295                                 nb.SetupFailure = response
296                                 nb.FailureType = entities.Failure_X2_SETUP_FAILURE
297                                 respStr := fmt.Sprintf("%s %s", nb.ConnectionStatus, response)
298
299                                 space := regexp.MustCompile(`\s+`)
300                                 s1 := space.ReplaceAllString(respStr, " ")
301                                 s2 := space.ReplaceAllString(tc.response," ")
302
303                                 if !strings.EqualFold(s1, s2) {
304                                         t.Errorf("want: [%s], got: [%s]", tc.response, respStr)
305                                 }
306
307                         }
308                 })
309         }
310 }