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